[PATCH] D89661: [llvm-objcopy][MachO] Fix the calculation of the output size
Alexander Shaposhnikov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Oct 18 17:11:54 PDT 2020
alexshap created this revision.
alexshap added reviewers: MaskRay, smeenai, jhenderson.
alexshap created this object with visibility "All Users".
Herald added a reviewer: rupprecht.
Herald added a subscriber: abrachet.
Herald added a project: LLVM.
alexshap requested review of this revision.
Virtual sections do not contribute the final output size.
This diff fixes the corresponding calculations in the method MachOWriter::totalSize.
Test plan: make check-all
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D89661
Files:
llvm/test/tools/llvm-objcopy/MachO/virtual-section.test
llvm/tools/llvm-objcopy/MachO/MachOWriter.cpp
Index: llvm/tools/llvm-objcopy/MachO/MachOWriter.cpp
===================================================================
--- llvm/tools/llvm-objcopy/MachO/MachOWriter.cpp
+++ llvm/tools/llvm-objcopy/MachO/MachOWriter.cpp
@@ -121,6 +121,11 @@
// Otherwise, use the last section / reloction.
for (const LoadCommand &LC : O.LoadCommands)
for (const std::unique_ptr<Section> &S : LC.Sections) {
+ if (S->isVirtualSection()) {
+ assert((S->Offset == 0) && "Virtual section's offset must be zero");
+ continue;
+ }
+ assert((S->Offset != 0) && "Non-virtual section's cannot be zero");
Ends.push_back(S->Offset + S->Size);
if (S->RelOff)
Ends.push_back(S->RelOff +
Index: llvm/test/tools/llvm-objcopy/MachO/virtual-section.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objcopy/MachO/virtual-section.test
@@ -0,0 +1,42 @@
+## This test verifies that a virtual section does not contribute to the final
+## output size.
+
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-objcopy %t %t.copy
+# RUN: cmp %t %t.copy
+
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACE
+ cputype: 0x00000007
+ cpusubtype: 0x00000003
+ filetype: 0x00000001
+ ncmds: 1
+ sizeofcmds: 124
+ flags: 0x00002000
+LoadCommands:
+ - cmd: LC_SEGMENT
+ cmdsize: 124
+ segname: __DATA
+ vmaddr: 4096
+ vmsize: 4096
+ fileoff: 152
+ filesize: 0
+ maxprot: 7
+ initprot: 7
+ nsects: 1
+ flags: 0
+ Sections:
+ - sectname: __bss
+ segname: __DATA
+ addr: 0x0000000000001000
+ size: 4096
+ offset: 0x00000000
+ align: 2
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000001
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D89661.298910.patch
Type: text/x-patch
Size: 2093 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201019/76d14fbb/attachment.bin>
More information about the llvm-commits
mailing list