diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-10-08 17:37:19 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-10-08 17:37:19 +0000 |
| commit | 8280fbbf9f11c93c5ea90ef6df48099308d327fd (patch) | |
| tree | 20f5f2963a4a223a8d36daab46967d9f3bb7b50b | |
| parent | a5a06ad6fcc5a730febe51d2c15f608a3173c0d6 (diff) | |
| download | bcm5719-llvm-8280fbbf9f11c93c5ea90ef6df48099308d327fd.tar.gz bcm5719-llvm-8280fbbf9f11c93c5ea90ef6df48099308d327fd.zip | |
Correctly compute the size of common symbols in COFF.
llvm-svn: 219324
| -rw-r--r-- | llvm/lib/Object/COFFObjectFile.cpp | 13 | ||||
| -rw-r--r-- | llvm/test/Object/nm-trivial-object.test | 2 |
2 files changed, 10 insertions, 5 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp index 3e668552d9c..ebf24a931ce 100644 --- a/llvm/lib/Object/COFFObjectFile.cpp +++ b/llvm/lib/Object/COFFObjectFile.cpp @@ -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; } diff --git a/llvm/test/Object/nm-trivial-object.test b/llvm/test/Object/nm-trivial-object.test index 52b207abc4a..fffb1bf1259 100644 --- a/llvm/test/Object/nm-trivial-object.test +++ b/llvm/test/Object/nm-trivial-object.test @@ -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 |

