diff --git a/llvm/include/llvm/Object/XCOFFObjectFile.h b/llvm/include/llvm/Object/XCOFFObjectFile.h --- a/llvm/include/llvm/Object/XCOFFObjectFile.h +++ b/llvm/include/llvm/Object/XCOFFObjectFile.h @@ -370,7 +370,7 @@ const void *getPointerToSymbolTable() const { return SymbolTblPtr; } Expected getSymbolSectionName(XCOFFSymbolRef Ref) const; - + unsigned getSymbolSectionID(SymbolRef Sym) const; XCOFFSymbolRef toSymbolRef(DataRefImpl Ref) const; // File header related interfaces. diff --git a/llvm/lib/Object/SymbolSize.cpp b/llvm/lib/Object/SymbolSize.cpp --- a/llvm/lib/Object/SymbolSize.cpp +++ b/llvm/lib/Object/SymbolSize.cpp @@ -12,6 +12,7 @@ #include "llvm/Object/ELFObjectFile.h" #include "llvm/Object/MachO.h" #include "llvm/Object/Wasm.h" +#include "llvm/Object/XCOFFObjectFile.h" using namespace llvm; using namespace object; @@ -30,7 +31,8 @@ return M->getSectionID(Sec); if (isa(&O)) return Sec.getIndex(); - + if (isa(&O)) + return Sec.getIndex(); return cast(O).getSectionID(Sec); } @@ -39,6 +41,8 @@ return M->getSymbolSectionID(Sym); if (const auto *M = dyn_cast(&O)) return M->getSymbolSectionId(Sym); + if (const auto *M = dyn_cast(&O)) + return M->getSymbolSectionID(Sym); return cast(O).getSymbolSectionID(Sym); } diff --git a/llvm/lib/Object/XCOFFObjectFile.cpp b/llvm/lib/Object/XCOFFObjectFile.cpp --- a/llvm/lib/Object/XCOFFObjectFile.cpp +++ b/llvm/lib/Object/XCOFFObjectFile.cpp @@ -214,7 +214,7 @@ Expected XCOFFObjectFile::getSymbolType(DataRefImpl Symb) const { - llvm_unreachable("Not yet implemented!"); + // TODO: Return the correct symbol type. return SymbolRef::ST_Other; } @@ -394,7 +394,7 @@ Expected XCOFFObjectFile::getSymbolFlags(DataRefImpl Symb) const { uint32_t Result = 0; - llvm_unreachable("Not yet implemented!"); + // TODO: Return correct symbol flags. return Result; } @@ -513,6 +513,11 @@ } } +unsigned XCOFFObjectFile::getSymbolSectionID(SymbolRef Sym) const { + XCOFFSymbolRef XCOFFSymRef(Sym.getRawDataRefImpl(), this); + return XCOFFSymRef.getSectionNumber(); +} + bool XCOFFObjectFile::isReservedSectionNumber(int16_t SectionNumber) { return (SectionNumber <= 0 && SectionNumber >= -2); } diff --git a/llvm/test/tools/llvm-objdump/XCOFF/Inputs/basic32.o b/llvm/test/tools/llvm-objdump/XCOFF/Inputs/basic32.o new file mode 100644 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@: +# LINES32: ; main(): +# LINES32-NEXT: ; /basic.c:1 +# LINES32-NEXT: 0: 38 60 00 00 li 3, 0 +# LINES32-NEXT: ; /basic.c:3 +# LINES32-NEXT: 4: 48 00 00 04 b 0x8 +# LINES32-NEXT: ; /basic.c:4 +# LINES32-NEXT: 8: 4e 80 00 20 blr +# LINES32-NEXT: c: 00 00 00 00 +# LINES32-NEXT: 10: 00 00 20 40 +# LINES32-NEXT: 14: 00 00 00 01 +# LINES32-NEXT: 18: 00 00 00 0c +# LINES32-NEXT: 1c: 00 04 6d 61 +# LINES32-NEXT: 20: 69 6e 00 00 xori 14, 11, 0 + +# LINES64: Inputs/basic64.o: file format aix5coff64-rs6000 +# LINES64: Disassembly of section .text: +# LINES64: 0000000000000000 <.main>: +# LINES64: ; main(): +# LINES64-NEXT: ; /basic.c:1 +# LINES64-NEXT: 0: 38 60 00 00 li 3, 0 +# LINES64-NEXT: ; /basic.c:3 +# LINES64-NEXT: 4: 48 00 00 04 b 0x8 +# LINES64-NEXT: ; /basic.c:4 +# LINES64-NEXT: 8: 4e 80 00 20 blr +# LINES64-NEXT: c: 00 00 00 00 +# LINES64-NEXT: 10: 00 00 20 40 +# LINES64-NEXT: 14: 00 00 00 01 +# LINES64-NEXT: 18: 00 00 00 0c +# LINES64-NEXT: 1c: 00 04 6d 61 +# LINES64-NEXT: 20: 69 6e 00 00 xori 14, 11, 0 diff --git a/llvm/test/tools/llvm-objdump/XCOFF/print-reloc.test b/llvm/test/tools/llvm-objdump/XCOFF/print-reloc.test --- a/llvm/test/tools/llvm-objdump/XCOFF/print-reloc.test +++ b/llvm/test/tools/llvm-objdump/XCOFF/print-reloc.test @@ -1,5 +1,3 @@ -# REQUIRES: powerpc-registered-target - # RUN: llvm-objdump -r %p/Inputs/xcoff-section-headers.o | \ # RUN: FileCheck --match-full-lines --strict-whitespace %s