[PATCH] D74823: [XCOFF/objdump] Fix crash in objdump when trying to use -r with XCOFF binaries

Dave Bozier via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 19 02:44:37 PST 2020


davidb created this revision.
Herald added subscribers: llvm-commits, rupprecht.
Herald added a reviewer: jhenderson.
Herald added a project: LLVM.

Add a warning and disable -r if specified by the user for now.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D74823

Files:
  llvm/include/llvm/Object/XCOFFObjectFile.h
  llvm/test/tools/llvm-objdump/xcoff-disassemble-all.test
  llvm/tools/llvm-objdump/llvm-objdump.cpp


Index: llvm/tools/llvm-objdump/llvm-objdump.cpp
===================================================================
--- llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ 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"
@@ -2159,7 +2160,7 @@
                   Obj->getFileName());
 }
 
-static void dumpObject(ObjectFile *O, const Archive *A = nullptr,
+static void dumpObject(ObjectFile * O, const Archive *A = nullptr,
                        const Archive::Child *C = nullptr) {
   // Avoid other output when using a raw option.
   if (!RawClangAST) {
@@ -2193,6 +2194,14 @@
     DumpOpts.DumpType = DwarfDumpType;
     DICtx->dump(outs(), DumpOpts);
   }
+
+  // Relocation processing is not yet implemented for XCOFF binaries
+  if(Relocations && isa<XCOFFObjectFile>(O)) {
+    reportWarning("-r/--relocs option not supported for XCOFF object files, "
+                  "ignoring option", O->getFileName());
+    Relocations = false;
+  }
+ 
   if (Relocations && !Disassemble)
     printRelocations(O);
   if (DynamicRelocations)
Index: llvm/test/tools/llvm-objdump/xcoff-disassemble-all.test
===================================================================
--- llvm/test/tools/llvm-objdump/xcoff-disassemble-all.test
+++ 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)
Index: llvm/include/llvm/Object/XCOFFObjectFile.h
===================================================================
--- llvm/include/llvm/Object/XCOFFObjectFile.h
+++ llvm/include/llvm/Object/XCOFFObjectFile.h
@@ -346,6 +346,7 @@
 
   Expected<ArrayRef<XCOFFRelocation32>>
   relocations(const XCOFFSectionHeader32 &) const;
+  static bool classof(const Binary *v) { return v->isXCOFF(); }
 }; // XCOFFObjectFile
 
 class XCOFFSymbolRef {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74823.245360.patch
Type: text/x-patch
Size: 2925 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200219/0fbe0a30/attachment.bin>


More information about the llvm-commits mailing list