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 @@ -346,6 +346,7 @@ Expected> relocations(const XCOFFSectionHeader32 &) const; + static bool classof(const Binary *v) { return v->isXCOFF(); } }; // XCOFFObjectFile class XCOFFSymbolRef { diff --git a/llvm/test/tools/llvm-objdump/xcoff-disassemble-all.test b/llvm/test/tools/llvm-objdump/xcoff-disassemble-all.test --- a/llvm/test/tools/llvm-objdump/xcoff-disassemble-all.test +++ b/llvm/test/tools/llvm-objdump/xcoff-disassemble-all.test @@ -1,5 +1,7 @@ -# RUN: llvm-objdump -D %p/Inputs/xcoff-section-headers.o | \ -# RUN: FileCheck %s +# RUN: llvm-objdump -D %p/Inputs/xcoff-section-headers.o 2>&1 | \ +# RUN: FileCheck %s --check-prefixes=CHECK,NO-RELOC-OPTION +# RUN: llvm-objdump -D -r %p/Inputs/xcoff-section-headers.o 2>&1 | \ +# RUN: FileCheck %s --check-prefixes=CHECK,RELOC-OPTION # xcoff-section-headers.o Compiled with IBM XL C/C++ for AIX, V16.1.0 # compiler command: xlc -qtls -o xcoff-section-headers.o -c test.c @@ -14,6 +16,8 @@ # } ; REQUIRES: powerpc-registered-target CHECK: Inputs/xcoff-section-headers.o: file format aixcoff-rs6000 +NO-RELOC-OPTION-NOT: -r/--relocs option not supported for XCOFF object files, ignoring option +RELOC-OPTION: -r/--relocs option not supported for XCOFF object files, ignoring option CHECK: Disassembly of section .text: CHECK: 00000000 .text: CHECK-NEXT: 0: 80 62 00 04 lwz 3, 4(2) diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -45,6 +45,7 @@ #include "llvm/Object/MachO.h" #include "llvm/Object/MachOUniversal.h" #include "llvm/Object/ObjectFile.h" +#include "llvm/Object/XCOFFObjectFile.h" #include "llvm/Object/Wasm.h" #include "llvm/Support/Casting.h" #include "llvm/Support/CommandLine.h" @@ -2193,6 +2194,14 @@ DumpOpts.DumpType = DwarfDumpType; DICtx->dump(outs(), DumpOpts); } + + // Relocation processing is not yet implemented for XCOFF binaries + if(Relocations && isa(O)) { + reportWarning("-r/--relocs option not supported for XCOFF object files, " + "ignoring option", O->getFileName()); + Relocations = false; + } + if (Relocations && !Disassemble) printRelocations(O); if (DynamicRelocations)