[PATCH] D106783: [AIX][XCOFF][llvm-readobj] Replace unwrapOrError with reportUniqueWarning

Maryam via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 3 06:25:30 PDT 2021


MaryamBen updated this revision to Diff 363720.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D106783/new/

https://reviews.llvm.org/D106783

Files:
  llvm/test/tools/llvm-readobj/XCOFF/relocation-invalid.test
  llvm/test/tools/llvm-readobj/XCOFF/relocation-symbol-invalid.test
  llvm/tools/llvm-readobj/XCOFFDumper.cpp


Index: llvm/tools/llvm-readobj/XCOFFDumper.cpp
===================================================================
--- llvm/tools/llvm-readobj/XCOFFDumper.cpp
+++ llvm/tools/llvm-readobj/XCOFFDumper.cpp
@@ -134,16 +134,27 @@
     if (Sec.Flags != XCOFF::STYP_TEXT && Sec.Flags != XCOFF::STYP_DATA &&
         Sec.Flags != XCOFF::STYP_TDATA && Sec.Flags != XCOFF::STYP_DWARF)
       continue;
-    auto Relocations = unwrapOrError(Obj.getFileName(), Obj.relocations(Sec));
+    auto ErrOrRelocations = Obj.relocations(Sec);
+    if (Error E = ErrOrRelocations.takeError()) {
+      reportUniqueWarning(std::move(E));
+      continue;
+    }
+
+    auto Relocations = *ErrOrRelocations;
     if (Relocations.empty())
       continue;
 
     W.startLine() << "Section (index: " << Index << ") " << Sec.getName()
                   << " {\n";
     for (auto Reloc : Relocations) {
-      StringRef SymbolName = unwrapOrError(
-          Obj.getFileName(), Obj.getSymbolNameByIndex(Reloc.SymbolIndex));
+      Expected<StringRef> ErrOrSymbolName =
+          Obj.getSymbolNameByIndex(Reloc.SymbolIndex);
+      if (Error E = ErrOrSymbolName.takeError()) {
+        reportUniqueWarning(std::move(E));
+        continue;
+      }
 
+      StringRef SymbolName = *ErrOrSymbolName;
       DictScope RelocScope(W, "Relocation");
       W.printHex("Virtual Address", Reloc.VirtualAddress);
       W.printNumber("Symbol", SymbolName, Reloc.SymbolIndex);
Index: llvm/test/tools/llvm-readobj/XCOFF/relocation-symbol-invalid.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-readobj/XCOFF/relocation-symbol-invalid.test
@@ -0,0 +1,20 @@
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-readobj --relocs --expand-relocs %t 2>&1 | FileCheck %s -DFILE=%t
+
+# CHECK:      Relocations [
+# CHECK-NEXT:   Section (index: 1) .text {
+# CHECK-NEXT:     warning: '[[FILE]]': Invalid symbol index
+# CHECK-NEXT:   }
+# CHECK-NEXT: ]
+
+--- !XCOFF
+FileHeader:
+  MagicNumber:   0x1DF
+Sections:
+  - Name:        .text
+    Flags:       [ STYP_TEXT ]
+    Relocations:
+      - Address: 0x80
+        Symbol:  0x21
+
+
Index: llvm/test/tools/llvm-readobj/XCOFF/relocation-invalid.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-readobj/XCOFF/relocation-invalid.test
@@ -0,0 +1,16 @@
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-readobj --relocs --expand-relocs %t 2>&1 | FileCheck %s -DFILE=%t
+
+# CHECK:      Relocations [
+# CHECK-NEXT:   warning: '[[FILE]]': The end of the file was unexpectedly encountered 
+# CHECK-NEXT: ]
+
+--- !XCOFF
+FileHeader:
+  MagicNumber:   0x1DF
+Sections:
+  - Name:        .text
+    Flags:       [ STYP_TEXT ]
+    FileOffsetToRelocations: 0x222
+
+


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106783.363720.patch
Type: text/x-patch
Size: 2774 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210803/b7f153df/attachment.bin>


More information about the llvm-commits mailing list