MCELF: The value of all common symbols is the offset from the start of the section...
authorBenjamin Kramer <benny.kra@googlemail.com>
Mon, 30 Aug 2010 17:20:17 +0000 (17:20 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Mon, 30 Aug 2010 17:20:17 +0000 (17:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112492 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/ELFObjectWriter.cpp

index dd2419fa051c90394d5c7acc8c1dae7a79576b68..7f1ba81764dc03bbab7ac7cbf806a724ae8fa631 100644 (file)
@@ -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");
     }