[PATCH] D78920: [llvm-readobj] [COFF] Cope with debug directory payloads in unmapped areas

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 27 05:52:23 PDT 2020


mstorsjo created this revision.
mstorsjo added reviewers: rnk, ruiu.
Herald added subscribers: rupprecht, MaskRay.
Herald added a reviewer: jhenderson.
Herald added a project: LLVM.

According to the spec, the payload for debug directories can be in parts of the binary that aren't mapped at runtime - in these cases, AddressOfRawData is just set to zero.

Just skip trying to print the payload in these cases, for now. If we'd really want to print that, we'd need a binary test input file as yaml2obj can't easily be tricked into placing data in padding areas of the file.)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D78920

Files:
  llvm/test/tools/llvm-readobj/COFF/debug-directory-unmapped.test
  llvm/tools/llvm-readobj/COFFDumper.cpp


Index: llvm/tools/llvm-readobj/COFFDumper.cpp
===================================================================
--- llvm/tools/llvm-readobj/COFFDumper.cpp
+++ llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -730,6 +730,10 @@
     W.printHex("SizeOfData", D.SizeOfData);
     W.printHex("AddressOfRawData", D.AddressOfRawData);
     W.printHex("PointerToRawData", D.PointerToRawData);
+    // Ideally, if D.AddressOfRawData == 0, we should try to load the payload
+    // using D.PointerToRawData instead.
+    if (D.AddressOfRawData == 0)
+      continue;
     if (D.Type == COFF::IMAGE_DEBUG_TYPE_CODEVIEW) {
       const codeview::DebugInfo *DebugInfo;
       StringRef PDBFileName;
Index: llvm/test/tools/llvm-readobj/COFF/debug-directory-unmapped.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-readobj/COFF/debug-directory-unmapped.test
@@ -0,0 +1,64 @@
+# RUN: yaml2obj %s -o %t.exe
+
+# RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck %s
+
+# CHECK:      DebugDirectory [
+# CHECK-NEXT:   DebugEntry {
+# CHECK-NEXT:     Characteristics: 0x0
+# CHECK-NEXT:     TimeDateStamp: 2019-01-17 21:06:10 (0x5C40EE42)
+# CHECK-NEXT:     MajorVersion: 0x0
+# CHECK-NEXT:     MinorVersion: 0x0
+# CHECK-NEXT:     Type: CodeView (0x2)
+# CHECK-NEXT:     SizeOfData: 0x19
+# CHECK-NEXT:     AddressOfRawData: 0x0
+# CHECK-NEXT:     PointerToRawData: 0x3E4
+# CHECK-NEXT:   }
+# CHECK-NEXT:   DebugEntry {
+# CHECK-NEXT:     Characteristics: 0x0
+# CHECK-NEXT:     TimeDateStamp: 2019-01-17 21:06:10 (0x5C40EE42)
+# CHECK-NEXT:     MajorVersion: 0x0
+# CHECK-NEXT:     MinorVersion: 0x0
+# CHECK-NEXT:     Type: ExtendedDLLCharacteristics (0x14)
+# CHECK-NEXT:     SizeOfData: 0x4
+# CHECK-NEXT:     AddressOfRawData: 0x0
+# CHECK-NEXT:     PointerToRawData: 0x3E0
+# CHECK-NEXT:   }
+# CHECK-NEXT: ]
+
+--- !COFF
+OptionalHeader:
+  AddressOfEntryPoint: 4096
+  ImageBase:       1073741824
+  SectionAlignment: 4096
+  FileAlignment:   512
+  MajorOperatingSystemVersion: 6
+  MinorOperatingSystemVersion: 0
+  MajorImageVersion: 0
+  MinorImageVersion: 0
+  MajorSubsystemVersion: 6
+  MinorSubsystemVersion: 0
+  Subsystem:       IMAGE_SUBSYSTEM_WINDOWS_CUI
+  DLLCharacteristics: [  ]
+  SizeOfStackReserve: 1048576
+  SizeOfStackCommit: 4096
+  SizeOfHeapReserve: 1048576
+  SizeOfHeapCommit: 4096
+  Debug:
+    RelativeVirtualAddress: 8192
+    Size:            56
+header:
+  Machine:         IMAGE_FILE_MACHINE_AMD64
+  Characteristics: [  ]
+sections:
+  - Name:            .text
+    Characteristics: [  ]
+    VirtualAddress:  4096
+    VirtualSize:     16
+    SectionData:     C3909090909090909090909090909090
+  - Name:            .buildid
+    Characteristics: [  ]
+    VirtualAddress:  8192
+    VirtualSize:     56
+    SectionData:     0000000042EE405C00000000020000001900000000000000E40300000000000042EE405C00000000140000000400000000000000E0030000
+symbols:
+...


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78920.260292.patch
Type: text/x-patch
Size: 2949 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200427/3acb92ad/attachment.bin>


More information about the llvm-commits mailing list