]> granicus.if.org Git - llvm/commitdiff
Correctly compute the size of common symbols in COFF.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 8 Oct 2014 17:37:19 +0000 (17:37 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 8 Oct 2014 17:37:19 +0000 (17:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219324 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/COFFObjectFile.cpp
test/Object/nm-trivial-object.test

index 3e668552d9c65d6680bd8f9af539c0561a550ef7..ebf24a931cee59a8b322fcda45fca11783e54ce6 100644 (file)
@@ -222,12 +222,17 @@ std::error_code COFFObjectFile::getSymbolSize(DataRefImpl Ref,
   if (std::error_code EC = getSection(Symb.getSectionNumber(), Section))
     return EC;
 
-  if (Symb.getSectionNumber() == COFF::IMAGE_SYM_UNDEFINED)
-    Result = UnknownAddressOrSize;
-  else if (Section)
+  if (Symb.getSectionNumber() == COFF::IMAGE_SYM_UNDEFINED) {
+    if (Symb.getValue() == 0)
+      Result = UnknownAddressOrSize;
+    else
+      Result = Symb.getValue();
+  } else if (Section) {
     Result = Section->SizeOfRawData - Symb.getValue();
-  else
+  } else {
     Result = 0;
+  }
+
   return object_error::success;
 }
 
index 52b207abc4a7186c0a55eac0105b2cc294d42223..fffb1bf12598dbb120c3f22f722c8fbc83df69a9 100644 (file)
@@ -62,7 +62,7 @@ COFF-COMMON-NEXT: 00000000 00000014 d .drectve
 COFF-COMMON-NEXT: 00000000 00000000 n .file
 COFF-COMMON-NEXT: 00000000 00000014 r .rdata$zzz
 COFF-COMMON-NEXT: 00000000 00000000 t .text
-COFF-COMMON-NEXT:          C _a
+COFF-COMMON-NEXT:          00000004 C _a
 
 
 ELF-NOT:      U