[PATCH] D138783: [llvm-objcopy] [COFF] Always set PointerToRawData when writing a COFF file
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 28 12:40:53 PST 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG30d5b755ea4f: [llvm-objcopy] [COFF] Always set PointerToRawData when writing a COFF file (authored by mstorsjo).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D138783/new/
https://reviews.llvm.org/D138783
Files:
llvm/lib/ObjCopy/COFF/COFFWriter.cpp
llvm/test/tools/llvm-objcopy/COFF/empty-sections.s
Index: llvm/test/tools/llvm-objcopy/COFF/empty-sections.s
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objcopy/COFF/empty-sections.s
@@ -0,0 +1,40 @@
+## Check how the PointerToRawData field is set for empty sections.
+##
+## Some tools may leave it set to a nonzero value, while others
+## set it to zero. Currently, the LLVM MC layer produces a .data
+## section with a nonzero PointerToRawData value, even if no
+## .data section needs to be emitted. Other tools, such as yaml2obj
+## writes a zero field if there's no data.
+##
+## When llvm-objcopy copies object files, it either needs to
+## update the value to a valid value (within the bounds of the
+## file, even if the section is empty) or zero. Some tools
+## (such as obj2yaml or llvm-objcopy) can error out if the value
+## is out of bounds.
+##
+## Check that our input file has got a nonzero field, and that
+## it is set to zero after a run with llvm-objcopy.
+
+# REQUIRES: x86-registered-target
+
+# RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s -o %t.in.obj
+# RUN: llvm-readobj --sections %t.in.obj | FileCheck %s --check-prefix=INPUT
+# RUN: llvm-objcopy --remove-section=.bss %t.in.obj %t.out.obj
+# RUN: llvm-readobj --sections %t.out.obj | FileCheck %s --check-prefix=OUTPUT
+
+# INPUT: Name: .data
+# INPUT-NEXT: VirtualSize: 0x0
+# INPUT-NEXT: VirtualAddress: 0x0
+# INPUT-NEXT: RawDataSize: 0
+# INPUT-NEXT: PointerToRawData: 0x8D
+
+# OUTPUT: Name: .data
+# OUTPUT-NEXT: VirtualSize: 0x0
+# OUTPUT-NEXT: VirtualAddress: 0x0
+# OUTPUT-NEXT: RawDataSize: 0
+# OUTPUT-NEXT: PointerToRawData: 0x0{{$}}
+
+ .text
+ .globl func
+func:
+ ret
Index: llvm/lib/ObjCopy/COFF/COFFWriter.cpp
===================================================================
--- llvm/lib/ObjCopy/COFF/COFFWriter.cpp
+++ llvm/lib/ObjCopy/COFF/COFFWriter.cpp
@@ -96,6 +96,8 @@
for (auto &S : Obj.getMutableSections()) {
if (S.Header.SizeOfRawData > 0)
S.Header.PointerToRawData = FileSize;
+ else
+ S.Header.PointerToRawData = 0;
FileSize += S.Header.SizeOfRawData; // For executables, this is already
// aligned to FileAlignment.
if (S.Relocs.size() >= 0xffff) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D138783.478334.patch
Type: text/x-patch
Size: 2311 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221128/9f5f0612/attachment.bin>
More information about the llvm-commits
mailing list