diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2010-08-30 17:20:17 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2010-08-30 17:20:17 +0000 |
commit | 6cc53be24c894532b33a92069b092112ced7ad99 (patch) | |
tree | 2c5eb318862a7b53f6901c23e572ad23be9ffa8a /lib/MC/ELFObjectWriter.cpp | |
parent | 392953262ee9ce3e3ff714867d01e1e1edbe391d (diff) |
MCELF: The value of all common symbols is the offset from the start of the section. Patch by Roman Divacky.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112492 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | lib/MC/ELFObjectWriter.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index dd2419fa05..7f1ba81764 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -367,6 +367,11 @@ void ELFObjectWriterImpl::WriteSymbol(MCDataFragment *F, ELFSymbolData &MSD, if (Data.isCommon() && Data.isExternal()) Value = Data.getCommonAlignment(); + if (!Data.isCommon()) + if (MCFragment *FF = Data.getFragment()) + Value = Layout.getSymbolAddress(&Data) - + Layout.getSectionAddress(FF->getParent()); + ESize = Data.getSize(); if (Data.getSize()) { MCValue Res; @@ -380,12 +385,9 @@ void ELFObjectWriterImpl::WriteSymbol(MCDataFragment *F, ELFSymbolData &MSD, Layout.getAssembler().getSymbolData(Res.getSymB()->getSymbol()); Size = Layout.getSymbolAddress(&A) - Layout.getSymbolAddress(&B); - Value = Layout.getSymbolAddress(&Data); } } else if (ESize->getKind() == MCExpr::Constant) { Size = static_cast<const MCConstantExpr *>(ESize)->getValue(); - MCFragment *F = Data.getFragment(); - Value = Layout.getSymbolAddress(&Data) - Layout.getSectionAddress(F->getParent()); } else { assert(0 && "Unsupported size expression"); } |