Defined weak symbols should have non-zero value.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 28 Oct 2010 19:39:57 +0000 (19:39 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 28 Oct 2010 19:39:57 +0000 (19:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117585 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/ELFObjectWriter.cpp
test/MC/ELF/weak.s

index 813e4ac259ceaa97727494c7f3ea528b93ce66fa..dbe0dd870f69da0ad0f0f1802ffb5edceb22fd31 100644 (file)
@@ -438,10 +438,9 @@ static uint64_t SymbolValue(MCSymbolData &Data, const MCAsmLayout &Layout) {
   if (!Symbol.isInSection())
     return 0;
 
-  if (!Data.isCommon() && !(Data.getFlags() & ELF_STB_Weak))
-    if (MCFragment *FF = Data.getFragment())
-      return Layout.getSymbolAddress(&Data) -
-             Layout.getSectionAddress(FF->getParent());
+  if (MCFragment *FF = Data.getFragment())
+    return Layout.getSymbolAddress(&Data) -
+      Layout.getSectionAddress(FF->getParent());
 
   return 0;
 }
index 332b91bf76fed4dd2f8e1d407a220252b0540ee4..f1a66b5e03c172b79248a7664b792804b0172bf1 100644 (file)
@@ -5,7 +5,7 @@
        .weak   foo
         .long   foo
 
-// And that bar is after all local symbols
+// And that bar is after all local symbols and has non zero value.
         .weak bar
 bar:
 
@@ -15,7 +15,7 @@ bar:
 //CHECK-NEXT:    ('st_type', 0x00000000)
 //CHECK-NEXT:    ('st_other', 0x00000000)
 //CHECK-NEXT:    ('st_shndx', 0x00000001)
-//CHECK-NEXT:    ('st_value', 0x00000000)
+//CHECK-NEXT:    ('st_value', 0x00000004)
 //CHECK-NEXT:    ('st_size', 0x00000000)
 //CHECK-NEXT:   ),
 //CHECK-NEXT:   # Symbol 0x00000005