diff --git a/lib/Object/COFFObjectFile.cpp b/lib/Object/COFFObjectFile.cpp index 3e668552d9c..ebf24a931ce 100644 --- a/lib/Object/COFFObjectFile.cpp +++ b/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/test/Object/nm-trivial-object.test b/test/Object/nm-trivial-object.test index 52b207abc4a..fffb1bf1259 100644 --- a/test/Object/nm-trivial-object.test +++ b/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