[llvm] 12e5b02 - [llvm-objcopy] Reorder --dump-section for MachO
Shoaib Meenai via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 5 10:49:42 PDT 2020
Author: Sameer Arora
Date: 2020-06-05T10:49:22-07:00
New Revision: 12e5b02687af0ddc21abfdd17afbc2176fdaa3f9
URL: https://github.com/llvm/llvm-project/commit/12e5b02687af0ddc21abfdd17afbc2176fdaa3f9
DIFF: https://github.com/llvm/llvm-project/commit/12e5b02687af0ddc21abfdd17afbc2176fdaa3f9.diff
LOG: [llvm-objcopy] Reorder --dump-section for MachO
Reorder `DumpSection` under `handleArgs` in file `MachOObjcopy.cpp`. The
operation to dump a section is now performed before both add and remove
section operations for MachO file format.
Change for the ELF format at D81097. Together fixes
https://bugs.llvm.org/show_bug.cgi?id=44283
Reviewed By: jhenderson
Differential Revision: https://reviews.llvm.org/D81123
Added:
llvm/test/tools/llvm-objcopy/MachO/dump-section-before-add-remove.test
Modified:
llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
Removed:
################################################################################
diff --git a/llvm/test/tools/llvm-objcopy/MachO/dump-section-before-add-remove.test b/llvm/test/tools/llvm-objcopy/MachO/dump-section-before-add-remove.test
new file mode 100644
index 000000000000..2c6b90d6fa05
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/MachO/dump-section-before-add-remove.test
@@ -0,0 +1,62 @@
+# RUN: yaml2obj %s -o %t
+
+## Verify that section is dumped before it is removed.
+# RUN: llvm-objcopy --dump-section __TEXT,__text=%t1.dump --remove-section __TEXT,__text %t %t1
+# RUN: FileCheck %s --input-file=%t1.dump --check-prefix=CONTENTS --implicit-check-not={{.}}
+
+# CONTENTS: abcd
+
+## Verify that the newly added section is not dumped.
+# RUN: echo CAFE > %t2.txt
+# RUN: not llvm-objcopy --dump-section __TEXT,__const=%t2.dump --add-section __TEXT,__const=%t2.txt %t %t2 2>&1 | \
+# RUN: FileCheck %s --check-prefix=NODUMP -DINPUT=%t
+
+# NODUMP: error: '[[INPUT]]': section '__TEXT,__const' not found
+
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x01000007
+ cpusubtype: 0x00000003
+ filetype: 0x00000001
+ ncmds: 1
+ sizeofcmds: 312
+ flags: 0x00002000
+ reserved: 0x00000000
+LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 312
+ segname: ''
+ vmaddr: 0
+ vmsize: 12
+ fileoff: 344
+ filesize: 12
+ maxprot: 7
+ initprot: 7
+ nsects: 3
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x0000000000000000
+ content: '61626364'
+ size: 4
+ offset: 344
+ align: 0
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ - sectname: __data
+ segname: __DATA
+ addr: 0x0000000000000004
+ content: 'EEFFEEFF'
+ size: 4
+ offset: 348
+ align: 0
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000000
+ reserved1: 0x00000000
+ reserved2: 0x00000000
diff --git a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
index ae8889af8c42..d6889c1ac6e0 100644
--- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
+++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
@@ -187,6 +187,15 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj) {
"option not supported by llvm-objcopy for MachO");
}
+ // Dump sections before add/remove for compatibility with GNU objcopy.
+ for (StringRef Flag : Config.DumpSection) {
+ StringRef SectionName;
+ StringRef FileName;
+ std::tie(SectionName, FileName) = Flag.split('=');
+ if (Error E = dumpSectionToFile(SectionName, FileName, Obj))
+ return E;
+ }
+
if (Error E = removeSections(Config, Obj))
return E;
@@ -201,14 +210,6 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj) {
for (std::unique_ptr<Section> &Sec : LC.Sections)
Sec->Relocations.clear();
- for (const StringRef &Flag : Config.DumpSection) {
- std::pair<StringRef, StringRef> SecPair = Flag.split("=");
- StringRef SecName = SecPair.first;
- StringRef File = SecPair.second;
- if (Error E = dumpSectionToFile(SecName, File, Obj))
- return E;
- }
-
for (const auto &Flag : Config.AddSection) {
std::pair<StringRef, StringRef> SecPair = Flag.split("=");
StringRef SecName = SecPair.first;
More information about the llvm-commits
mailing list