[PATCH] D107324: [llvm-objcopy] [COFF] Do not patch debug entries with Repro type
Pirama Arumuga Nainar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 4 10:11:18 PDT 2021
pirama updated this revision to Diff 364171.
pirama added a comment.
Rename test, expand comments and remove '-S -x' from RUN line.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D107324/new/
https://reviews.llvm.org/D107324
Files:
llvm/test/tools/llvm-objcopy/COFF/debug-dir-unmapped.test
llvm/test/tools/llvm-objcopy/COFF/debug-entry-no-payload.test
llvm/tools/llvm-objcopy/COFF/Writer.cpp
Index: llvm/tools/llvm-objcopy/COFF/Writer.cpp
===================================================================
--- llvm/tools/llvm-objcopy/COFF/Writer.cpp
+++ llvm/tools/llvm-objcopy/COFF/Writer.cpp
@@ -426,15 +426,13 @@
uint8_t *End = Ptr + Dir->Size;
while (Ptr < End) {
debug_directory *Debug = reinterpret_cast<debug_directory *>(Ptr);
- if (!Debug->AddressOfRawData)
- return createStringError(object_error::parse_failed,
- "debug directory payload outside of "
- "mapped sections not supported");
- if (Expected<uint32_t> FilePosOrErr =
- virtualAddressToFileAddress(Debug->AddressOfRawData))
- Debug->PointerToRawData = *FilePosOrErr;
- else
- return FilePosOrErr.takeError();
+ if (Debug->PointerToRawData) {
+ if (Expected<uint32_t> FilePosOrErr =
+ virtualAddressToFileAddress(Debug->AddressOfRawData))
+ Debug->PointerToRawData = *FilePosOrErr;
+ else
+ return FilePosOrErr.takeError();
+ }
Ptr += sizeof(debug_directory);
Offset += sizeof(debug_directory);
}
Index: llvm/test/tools/llvm-objcopy/COFF/debug-entry-no-payload.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objcopy/COFF/debug-entry-no-payload.test
@@ -0,0 +1,50 @@
+## Check that debug directory entries without a payload (e.g.
+## IMAGE_DEBUG_TYPE_REPRO, IMAGE_DEBUG_TYPE_UNKNOWN) are handled correctly
+## when llvm-objcopy patches entries that may have moved during a requested
+## operation.
+##
+## The code to patch debug entries is executed even when no operation is
+## requested. Hence the RUN line below invokes llvm-objcopy without any
+## arguments.
+
+# RUN: yaml2obj %s -o %t.in.exe
+# RUN: llvm-objcopy %t.in.exe %t.out.exe
+
+--- !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: 3
+ SectionData: 31C0C3
+ - Name: .rdata
+ Characteristics: [ ]
+ VirtualAddress: 8192
+ VirtualSize: 56
+ ## '10' in SectionData below indicates the Repro debug entry type.
+ SectionData: 0000000047F96B2000000000100000000000000000000000000000000000000047F96B200000000000000000000000000000000000000000
+symbols: []
+...
Index: llvm/test/tools/llvm-objcopy/COFF/debug-dir-unmapped.test
===================================================================
--- llvm/test/tools/llvm-objcopy/COFF/debug-dir-unmapped.test
+++ llvm/test/tools/llvm-objcopy/COFF/debug-dir-unmapped.test
@@ -6,7 +6,7 @@
# RUN: not llvm-objcopy --remove-section .rdata %t.in.exe %t.out.exe 2>&1 | FileCheck %s
-# CHECK: error: '{{.*}}{{/|\\}}debug-dir-unmapped.test.tmp.out.exe': debug directory payload outside of mapped sections not supported
+# CHECK: error: '{{.*}}{{/|\\}}debug-dir-unmapped.test.tmp.out.exe': debug directory payload not found
--- !COFF
OptionalHeader:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107324.364171.patch
Type: text/x-patch
Size: 3707 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210804/4a5ef798/attachment.bin>
More information about the llvm-commits
mailing list