[lld] a6298fb - [lld-macho] Add support for -add_empty_section
Keith Smiley via llvm-commits
llvm-commits at lists.llvm.org
Sun Jan 30 10:04:08 PST 2022
Author: Keith Smiley
Date: 2022-01-30T10:03:41-08:00
New Revision: a6298fb160633578f5c4c1e739044274ba8fe520
URL: https://github.com/llvm/llvm-project/commit/a6298fb160633578f5c4c1e739044274ba8fe520
DIFF: https://github.com/llvm/llvm-project/commit/a6298fb160633578f5c4c1e739044274ba8fe520.diff
LOG: [lld-macho] Add support for -add_empty_section
This is a ld64 option equivalent to `-sectcreate seg sect /dev/null`
that's useful for creating sections like the RESTRICT section.
Differential Revision: https://reviews.llvm.org/D117749
Added:
Modified:
lld/MachO/Driver.cpp
lld/MachO/Options.td
lld/test/MachO/sectcreate.s
Removed:
################################################################################
diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index e4c9f4dd6024a..f0cddab94f557 100644
--- a/lld/MachO/Driver.cpp
+++ b/lld/MachO/Driver.cpp
@@ -1484,6 +1484,12 @@ bool macho::link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
inputFiles.insert(make<OpaqueFile>(*buffer, segName, sectName));
}
+ for (const Arg *arg : args.filtered(OPT_add_empty_section)) {
+ StringRef segName = arg->getValue(0);
+ StringRef sectName = arg->getValue(1);
+ inputFiles.insert(make<OpaqueFile>(MemoryBufferRef(), segName, sectName));
+ }
+
gatherInputSections();
if (config->callGraphProfileSort)
extractCallGraphProfile();
diff --git a/lld/MachO/Options.td b/lld/MachO/Options.td
index 3d1d97641d719..ab79aa7d86701 100644
--- a/lld/MachO/Options.td
+++ b/lld/MachO/Options.td
@@ -252,6 +252,10 @@ def segcreate : MultiArg<["-"], "segcreate", 3>,
Alias<sectcreate>,
HelpText<"Alias for -sectcreate">,
Group<grp_content>;
+def add_empty_section : MultiArg<["-"], "add_empty_section", 2>,
+ MetaVarName<"<segment> <section>">,
+ HelpText<"Create an empty <section> in <segment>">,
+ Group<grp_content>;
def filelist : Separate<["-"], "filelist">,
MetaVarName<"<file>">,
HelpText<"Read names of files to link from <file>">,
diff --git a/lld/test/MachO/sectcreate.s b/lld/test/MachO/sectcreate.s
index 03847e1395b79..919c553dd7628 100644
--- a/lld/test/MachO/sectcreate.s
+++ b/lld/test/MachO/sectcreate.s
@@ -7,6 +7,7 @@
# RUN: -sectcreate SEG SEC1 %t1 \
# RUN: -segcreate SEG SEC2 %t3 \
# RUN: -sectcreate SEG SEC1 %t2 \
+# RUN: -add_empty_section __DATA __data \
# RUN: -o %t %t.o
# RUN: llvm-objdump -s %t | FileCheck %s
@@ -16,10 +17,17 @@
# RUN: -sectcreate SEG SEC1 %t1 \
# RUN: -segcreate SEG SEC2 %t3 \
# RUN: -sectcreate SEG SEC1 %t2 \
+# RUN: -add_empty_section SEG SEC1 \
# RUN: -o %t %t.o
# RUN: llvm-objdump -s %t | FileCheck --check-prefix=STRIPPED %s
# RUN: llvm-readobj --sections %t | FileCheck --check-prefix=STRIPPEDSEC %s
+# RUN: %lld -add_empty_section foo bar -o %t %t.o
+# RUN: llvm-readobj --sections %t | FileCheck --check-prefix=EMPTYSECTION %s
+
+# RUN: %lld -sectcreate SEG SEC1 %t1 -add_empty_section SEG SEC1 -o %t %t.o
+# RUN: llvm-readobj --sections %t | FileCheck --check-prefix=CREATEDANDEMPTY %s
+
# CHECK: Contents of section __TEXT,__text:
# CHECK: Contents of section __DATA,__data:
# CHECK: my string!.
@@ -40,6 +48,16 @@
# STRIPPEDSEC-NOT: NoDeadStrip
+# EMPTYSECTION: Name: bar
+# EMPTYSECTION: Segment: foo
+# EMPTYSECTION: Size: 0x0
+# EMPTYSECTION-NOT: Name:
+
+# CREATEDANDEMPTY: Name: SEC1
+# CREATEDANDEMPTY: Segment: SEG
+# CREATEDANDEMPTY: Size: 0x10
+# CREATEDANDEMPTY-NOT: Name:
+
.text
.global _main
_main:
More information about the llvm-commits
mailing list