[lld] e36223c - [ELF] Enforce two dashes for Flag options not supported by GNU ld (i.e. no compatibility burden)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri May 15 11:07:34 PDT 2020
Author: Fangrui Song
Date: 2020-05-15T11:07:25-07:00
New Revision: e36223c85cd49858a808a2420144b64cad37839f
URL: https://github.com/llvm/llvm-project/commit/e36223c85cd49858a808a2420144b64cad37839f
DIFF: https://github.com/llvm/llvm-project/commit/e36223c85cd49858a808a2420144b64cad37839f.diff
LOG: [ELF] Enforce two dashes for Flag options not supported by GNU ld (i.e. no compatibility burden)
Announced on https://lists.llvm.org/pipermail/llvm-dev/2020-May/141416.html
Similar to D79371, but for `multiclass B` (convenience helper for defining --foo and --no-foo)
Some changed options are also used by gold, but I haven't seen their
one-dash use cases outside of lld's testsuite.
Added:
Modified:
lld/ELF/Options.td
lld/test/ELF/debug-gnu-pubnames.s
lld/test/ELF/dynstr-no-rosegment.s
lld/test/ELF/eh-frame-padding-no-rosegment.s
lld/test/ELF/elf-header.s
lld/test/ELF/execute-only-mixed-data.s
lld/test/ELF/execute-only.s
lld/test/ELF/gdb-index-no-debug.s
lld/test/ELF/invalid/invalid-debug-relocations.test
lld/test/ELF/segments.s
lld/test/ELF/sort-norosegment.s
Removed:
################################################################################
diff --git a/lld/ELF/Options.td b/lld/ELF/Options.td
index ecef2289b9cd..a6ca64242b4e 100644
--- a/lld/ELF/Options.td
+++ b/lld/ELF/Options.td
@@ -13,6 +13,11 @@ multiclass EEq<string name, string help> {
HelpText<help>;
}
+multiclass BB<string name, string help1, string help2> {
+ def NAME: Flag<["--"], name>, HelpText<help1>;
+ def no_ # NAME: Flag<["--"], "no-" # name>, HelpText<help2>;
+}
+
// For options whose names are multiple letters, either one dash or
// two can precede the option name except those that start with 'o'.
class F<string name>: Flag<["--", "-"], name>;
@@ -55,7 +60,7 @@ defm compress_debug_sections:
defm defsym: Eq<"defsym", "Define a symbol alias">, MetaVarName<"<symbol>=<value>">;
-defm optimize_bb_jumps: B<"optimize-bb-jumps",
+defm optimize_bb_jumps: BB<"optimize-bb-jumps",
"Remove direct jumps at the end to the next basic block",
"Do not remove any direct jumps at the end to the next basic block (default)">;
@@ -86,11 +91,11 @@ defm allow_shlib_undefined: B<"allow-shlib-undefined",
"Allow unresolved references in shared libraries (default when linking a shared library)",
"Do not allow unresolved references in shared libraries (default when linking an executable)">;
-defm apply_dynamic_relocs: B<"apply-dynamic-relocs",
+defm apply_dynamic_relocs: BB<"apply-dynamic-relocs",
"Apply link-time values for dynamic relocations",
"Do not apply link-time values for dynamic relocations (default)">;
-defm dependent_libraries: B<"dependent-libraries",
+defm dependent_libraries: BB<"dependent-libraries",
"Process dependent library specifiers from input files (default)",
"Ignore dependent library specifiers from input files">;
@@ -101,7 +106,7 @@ defm as_needed: B<"as-needed",
defm call_graph_ordering_file:
Eq<"call-graph-ordering-file", "Layout sections to optimize the given callgraph">;
-defm call_graph_profile_sort: B<"call-graph-profile-sort",
+defm call_graph_profile_sort: BB<"call-graph-profile-sort",
"Reorder sections with call graph profile (default)",
"Do not reorder sections with call graph profile">;
@@ -168,7 +173,7 @@ def error_unresolved_symbols: F<"error-unresolved-symbols">,
defm exclude_libs: Eq<"exclude-libs", "Exclude static libraries from automatic export">;
-defm execute_only: B<"execute-only",
+defm execute_only: BB<"execute-only",
"Mark executable sections unreadable",
"Mark executable sections readable (default)">;
@@ -200,11 +205,11 @@ defm gc_sections: B<"gc-sections",
"Enable garbage collection of unused sections",
"Disable garbage collection of unused sections (default)">;
-defm gdb_index: B<"gdb-index",
+defm gdb_index: BB<"gdb-index",
"Generate .gdb_index section",
"Do not generate .gdb_index section (default)">;
-defm gnu_unique: B<"gnu-unique",
+defm gnu_unique: BB<"gnu-unique",
"Enable STB_GNU_UNIQUE symbol binding (default)",
"Disable STB_GNU_UNIQUE symbol binding">;
@@ -244,7 +249,7 @@ defm merge_exidx_entries: B<"merge-exidx-entries",
"Enable merging .ARM.exidx entries (default)",
"Disable merging .ARM.exidx entries">;
-defm mmap_output_file: B<"mmap-output-file",
+defm mmap_output_file: BB<"mmap-output-file",
"Mmap the output file for writing (default)",
"Do not mmap the output file for writing">;
@@ -288,7 +293,7 @@ defm pack_dyn_relocs:
Eq<"pack-dyn-relocs", "Pack dynamic relocations in the given format">,
MetaVarName<"[none,android,relr,android+relr]">;
-defm use_android_relr_tags: B<"use-android-relr-tags",
+defm use_android_relr_tags: BB<"use-android-relr-tags",
"Use SHT_ANDROID_RELR / DT_ANDROID_RELR* tags instead of SHT_RELR / DT_RELR*",
"Use SHT_RELR / DT_RELR* tags (default)">;
@@ -325,7 +330,7 @@ def print_map: F<"print-map">,
defm reproduce: Eq<"reproduce", "Write a tar file containing input files and command line options to reproduce link">;
-defm rosegment: B<"rosegment",
+defm rosegment: BB<"rosegment",
"Put read-only non-executable sections in their own segment (default)",
"Do not put read-only non-executable sections in their own segment">;
@@ -417,7 +422,7 @@ def version: F<"version">, HelpText<"Display the version number and exit">;
defm version_script: Eq<"version-script", "Read a version script">;
-defm warn_backrefs: B<"warn-backrefs",
+defm warn_backrefs: BB<"warn-backrefs",
"Warn about backward symbol references to fetch archive members",
"Do not warn about backward symbol references to fetch archive members (default)">;
@@ -431,11 +436,11 @@ defm warn_common: B<"warn-common",
"Warn about duplicate common symbols",
"Do not warn about duplicate common symbols (default)">;
-defm warn_ifunc_textrel: B<"warn-ifunc-textrel",
+defm warn_ifunc_textrel: BB<"warn-ifunc-textrel",
"Warn about using ifunc symbols with text relocations",
"Do not warn about using ifunc symbols with text relocations (default)">;
-defm warn_symbol_ordering: B<"warn-symbol-ordering",
+defm warn_symbol_ordering: BB<"warn-symbol-ordering",
"Warn about problems with the symbol ordering file (default)",
"Do not warn about problems with the symbol ordering file">;
@@ -533,7 +538,7 @@ def opt_remarks_format: Separate<["--"], "opt-remarks-format">,
def save_temps: F<"save-temps">;
def lto_basicblock_sections: JJ<"lto-basicblock-sections=">,
HelpText<"Enable basic block sections for LTO">;
-defm lto_unique_bb_section_names: B<"lto-unique-bb-section-names",
+defm lto_unique_bb_section_names: BB<"lto-unique-bb-section-names",
"Give unique names to every basic block section for LTO",
"Do not give unique names to every basic block section for LTO (default)">;
def shuffle_sections: JJ<"shuffle-sections=">, MetaVarName<"<seed>">,
diff --git a/lld/test/ELF/debug-gnu-pubnames.s b/lld/test/ELF/debug-gnu-pubnames.s
index 11244e7643dc..51a289e52558 100644
--- a/lld/test/ELF/debug-gnu-pubnames.s
+++ b/lld/test/ELF/debug-gnu-pubnames.s
@@ -6,7 +6,7 @@
# CHECK: .debug_gnu_pubnames
# CHECK: .debug_gnu_pubtypes
-# RUN: ld.lld -gdb-index %t.o -o %t2.exe
+# RUN: ld.lld --gdb-index %t.o -o %t2.exe
# RUN: llvm-readobj --sections %t2.exe | FileCheck %s --check-prefix=GDB
# GDB-NOT: .debug_gnu_pubnames
# GDB-NOT: .debug_gnu_pubtypes
diff --git a/lld/test/ELF/dynstr-no-rosegment.s b/lld/test/ELF/dynstr-no-rosegment.s
index bad6300801e2..b0ea88161f0a 100644
--- a/lld/test/ELF/dynstr-no-rosegment.s
+++ b/lld/test/ELF/dynstr-no-rosegment.s
@@ -2,7 +2,7 @@
# Verify that a .dynstr in the .text segment has null byte terminators
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
-# RUN: ld.lld %t.o -no-rosegment -o %t.so -shared
+# RUN: ld.lld %t.o --no-rosegment -o %t.so -shared
# RUN: llvm-objdump %t.so -s -j .dynstr | FileCheck %s
# CHECK: 00666f6f 00 .foo.
diff --git a/lld/test/ELF/eh-frame-padding-no-rosegment.s b/lld/test/ELF/eh-frame-padding-no-rosegment.s
index 754903e40d92..fe4c312613a5 100644
--- a/lld/test/ELF/eh-frame-padding-no-rosegment.s
+++ b/lld/test/ELF/eh-frame-padding-no-rosegment.s
@@ -32,7 +32,7 @@ bar:
// OBJ-NEXT: 0020: 20000000 00000000 00000000 00000000
// OBJ-NEXT: )
-// RUN: ld.lld --hash-style=sysv %t.o -no-rosegment -o %t -shared
+// RUN: ld.lld --hash-style=sysv %t.o --no-rosegment -o %t -shared
// Check that .eh_frame is in the same segment as .text
// RUN: llvm-readelf -l %t | FileCheck --check-prefix=PHDR %s
diff --git a/lld/test/ELF/elf-header.s b/lld/test/ELF/elf-header.s
index da8fe349e728..aedbe43199fc 100644
--- a/lld/test/ELF/elf-header.s
+++ b/lld/test/ELF/elf-header.s
@@ -3,7 +3,7 @@
# RUN: ld.lld %t.o -o %t1
# RUN: llvm-readobj --file-headers %t1 | FileCheck %s
-# RUN: ld.lld %t.o -no-rosegment -o %t2
+# RUN: ld.lld %t.o --no-rosegment -o %t2
# RUN: llvm-readobj --file-headers %t2 | FileCheck %s
# CHECK: ElfHeader {
diff --git a/lld/test/ELF/execute-only-mixed-data.s b/lld/test/ELF/execute-only-mixed-data.s
index 32248bdf2815..5a03d730893e 100644
--- a/lld/test/ELF/execute-only-mixed-data.s
+++ b/lld/test/ELF/execute-only-mixed-data.s
@@ -7,7 +7,7 @@
// RUN: .text : { *(.text) *(.rodata.foo) } \
// RUN: .rodata : { *(.rodata.bar) } \
// RUN: }" > %t.lds
-// RUN: not ld.lld -T%t.lds %t.o -o /dev/null -execute-only 2>&1 | FileCheck %s
+// RUN: not ld.lld -T%t.lds %t.o -o /dev/null --execute-only 2>&1 | FileCheck %s
// RUN: echo "SECTIONS \
// RUN: { \
diff --git a/lld/test/ELF/execute-only.s b/lld/test/ELF/execute-only.s
index 7a825cb7a188..24cea11d7a3f 100644
--- a/lld/test/ELF/execute-only.s
+++ b/lld/test/ELF/execute-only.s
@@ -1,7 +1,7 @@
// REQUIRES: aarch64
// RUN: llvm-mc -filetype=obj -triple=aarch64-linux-none %s -o %t.o
-// RUN: ld.lld -Ttext=0xcafe0000 %t.o -o %t.so -shared -execute-only
+// RUN: ld.lld -Ttext=0xcafe0000 %t.o -o %t.so -shared --execute-only
// RUN: llvm-readelf -l %t.so | FileCheck %s
// CHECK: LOAD {{.*}} 0x00000000cafe0000 0x000004 0x000004 E 0x{{.*}}
diff --git a/lld/test/ELF/gdb-index-no-debug.s b/lld/test/ELF/gdb-index-no-debug.s
index dba5fcf26385..fce4f54c21de 100644
--- a/lld/test/ELF/gdb-index-no-debug.s
+++ b/lld/test/ELF/gdb-index-no-debug.s
@@ -1,6 +1,6 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
-# RUN: ld.lld -o %t.exe -gdb-index %t.o
+# RUN: ld.lld -o %t.exe --gdb-index %t.o
# RUN: llvm-objdump --section-headers %t.exe | FileCheck %s
# CHECK-NOT: .gdb_index
diff --git a/lld/test/ELF/invalid/invalid-debug-relocations.test b/lld/test/ELF/invalid/invalid-debug-relocations.test
index c53a879e516f..25a6b9e3b704 100644
--- a/lld/test/ELF/invalid/invalid-debug-relocations.test
+++ b/lld/test/ELF/invalid/invalid-debug-relocations.test
@@ -1,6 +1,6 @@
# REQUIRES: x86
# RUN: yaml2obj %s -o %t.o
-# RUN: not ld.lld -gdb-index %t.o -o /dev/null 2>&1 | FileCheck %s
+# RUN: not ld.lld --gdb-index %t.o -o /dev/null 2>&1 | FileCheck %s
# CHECK: error: {{.*}}invalid-debug-relocations.test.tmp.o:(.debug_info+0x0): unknown relocation (255) against symbol _start
diff --git a/lld/test/ELF/segments.s b/lld/test/ELF/segments.s
index 9b88f48ac090..d9af9a3ae5e7 100644
--- a/lld/test/ELF/segments.s
+++ b/lld/test/ELF/segments.s
@@ -45,7 +45,7 @@
# ROSEGMENT-NEXT: Alignment: 4096
# ROSEGMENT-NEXT: }
-# RUN: ld.lld -no-rosegment %t -o %t2
+# RUN: ld.lld --no-rosegment %t -o %t2
# RUN: llvm-readobj --program-headers %t2 | FileCheck --check-prefix=NOROSEGMENT %s
# NOROSEGMENT: ProgramHeader {
diff --git a/lld/test/ELF/sort-norosegment.s b/lld/test/ELF/sort-norosegment.s
index 37393cefc86a..9bf38eaac236 100644
--- a/lld/test/ELF/sort-norosegment.s
+++ b/lld/test/ELF/sort-norosegment.s
@@ -1,7 +1,7 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
-# RUN: ld.lld --hash-style=sysv -no-rosegment -o %t %t.o -shared
+# RUN: ld.lld --hash-style=sysv --no-rosegment -o %t %t.o -shared
# RUN: llvm-readelf -S %t | FileCheck %s
# CHECK: .dynsym {{.*}} A
More information about the llvm-commits
mailing list