diff options
author | Fangrui Song <i@maskray.me> | 2022-01-11 05:27:45 +0000 |
---|---|---|
committer | Tom Stellard <tstellar@redhat.com> | 2022-01-11 22:01:00 -0800 |
commit | 9d9efb1f67ff70e996b1cb7fa00e24b9121be226 (patch) | |
tree | a0a5c3daf8f4cc503ca1eb7dfe0e8a817137392c | |
parent | 52a400d8e4c46876fae5d732c92df254a9ceae8f (diff) | |
download | llvm-9d9efb1f67ff70e996b1cb7fa00e24b9121be226.tar.gz |
[lld][CMake] Add LLD_DEFAULT_NOSTART_STOP_GC
This option is for groups who need time to accomodate the ld.lld -z
start-stop-gc default.
This is a modified version of https://reviews.llvm.org/D114186 that
enables this option by default.
-rw-r--r-- | lld/CMakeLists.txt | 9 | ||||
-rw-r--r-- | lld/ELF/Driver.cpp | 9 | ||||
-rw-r--r-- | lld/test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | lld/test/ELF/gc-sections-metadata-startstop.s | 1 | ||||
-rw-r--r-- | lld/test/ELF/gc-sections-startstop-hint.s | 1 | ||||
-rw-r--r-- | lld/test/ELF/gc-sections-startstop.s | 1 | ||||
-rw-r--r-- | lld/test/lit.cfg.py | 3 | ||||
-rw-r--r-- | lld/test/lit.site.cfg.py.in | 1 |
8 files changed, 26 insertions, 0 deletions
diff --git a/lld/CMakeLists.txt b/lld/CMakeLists.txt index 2e99564f4e3e..2e8b502a2855 100644 --- a/lld/CMakeLists.txt +++ b/lld/CMakeLists.txt @@ -176,6 +176,15 @@ if (LLD_DEFAULT_LD_LLD_IS_MINGW) add_definitions("-DLLD_DEFAULT_LD_LLD_IS_MINGW=1") endif() +option(LLD_DEFAULT_NOSTART_STOP_GC + "Default ld.lld to -z nostart-stop-gc. If ON, C identifier name sections are + forced retained by __start_/__stop_ references. This may increase output size + for many instrumentations, but is compatible with GNU ld newer than 2015-10" + ON) +if (LLD_DEFAULT_NOSTART_STOP_GC) + add_definitions("-DLLD_DEFAULT_NOSTART_STOP_GC=1") +endif() + if (MSVC) add_definitions(-wd4530) # Suppress 'warning C4530: C++ exception handler used, but unwind semantics are not enabled.' add_definitions(-wd4062) # Suppress 'warning C4062: enumerator X in switch of enum Y is not handled' from system header. diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 594c20016827..a4187eeda15c 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -1193,8 +1193,17 @@ static void readConfigs(opt::InputArgList &args) { config->zSeparate = getZSeparate(args); config->zShstk = hasZOption(args, "shstk"); config->zStackSize = args::getZOptionValue(args, OPT_z, "stack-size", 0); +#ifdef LLD_DEFAULT_NOSTART_STOP_GC + // -z start-stop-gc default matches GNU ld<2015-10 and ld64 section$start + // symbols and can decrease file size for many instrumentations. However, + // some users need time to accommodate the -z nostart-stop-gc default, so this + // is added as a temporary workaround. + config->zStartStopGC = + getZFlag(args, "start-stop-gc", "nostart-stop-gc", false); +#else config->zStartStopGC = getZFlag(args, "start-stop-gc", "nostart-stop-gc", true); +#endif config->zStartStopVisibility = getZStartStopVisibility(args); config->zText = getZFlag(args, "text", "notext", true); config->zWxneeded = hasZOption(args, "wxneeded"); diff --git a/lld/test/CMakeLists.txt b/lld/test/CMakeLists.txt index 0c42427e006b..f0a5493c4c3f 100644 --- a/lld/test/CMakeLists.txt +++ b/lld/test/CMakeLists.txt @@ -11,6 +11,7 @@ llvm_canonicalize_cmake_booleans( LLVM_ENABLE_ZLIB LLVM_ENABLE_LIBXML2 LLD_DEFAULT_LD_LLD_IS_MINGW + LLD_DEFAULT_NOSTART_STOP_GC LLVM_HAVE_LIBXAR ) diff --git a/lld/test/ELF/gc-sections-metadata-startstop.s b/lld/test/ELF/gc-sections-metadata-startstop.s index 76134525b4ce..d77de240957c 100644 --- a/lld/test/ELF/gc-sections-metadata-startstop.s +++ b/lld/test/ELF/gc-sections-metadata-startstop.s @@ -1,4 +1,5 @@ # REQUIRES: x86 +# UNSUPPORTED: default-nostart-stop-gc # LINK_ORDER cnamed sections are not kept alive by the __start_* reference. # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o diff --git a/lld/test/ELF/gc-sections-startstop-hint.s b/lld/test/ELF/gc-sections-startstop-hint.s index 33d088fa3af7..4069d1cb4bcb 100644 --- a/lld/test/ELF/gc-sections-startstop-hint.s +++ b/lld/test/ELF/gc-sections-startstop-hint.s @@ -1,4 +1,5 @@ # REQUIRES: x86 +# UNSUPPORTED: default-nostart-stop-gc ## Some projects may not work with GNU ld<2015-10 (ld.lld 13.0.0) --gc-sections behavior. ## Give a hint. diff --git a/lld/test/ELF/gc-sections-startstop.s b/lld/test/ELF/gc-sections-startstop.s index 569cd3cdd10f..6f327a8c37dd 100644 --- a/lld/test/ELF/gc-sections-startstop.s +++ b/lld/test/ELF/gc-sections-startstop.s @@ -1,6 +1,7 @@ ## Check that group members are retained or discarded as a unit. # REQUIRES: x86 +# UNSUPPORTED: default-nostart-stop-gc # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o # RUN: ld.lld %t.o --gc-sections -o %t diff --git a/lld/test/lit.cfg.py b/lld/test/lit.cfg.py index 225104243bf2..c23a6467fc42 100644 --- a/lld/test/lit.cfg.py +++ b/lld/test/lit.cfg.py @@ -118,3 +118,6 @@ if tar_executable: # ELF tests expect the default target for ld.lld to be ELF. if config.ld_lld_default_mingw: config.excludes.append('ELF') + +if config.ld_lld_default_nostart_stop_gc: + config.available_features.add('default-nostart-stop-gc') diff --git a/lld/test/lit.site.cfg.py.in b/lld/test/lit.site.cfg.py.in index f9f695b62434..19be1a395fc8 100644 --- a/lld/test/lit.site.cfg.py.in +++ b/lld/test/lit.site.cfg.py.in @@ -19,6 +19,7 @@ config.have_libxar = @LLVM_HAVE_LIBXAR@ config.have_libxml2 = @LLVM_ENABLE_LIBXML2@ config.sizeof_void_p = @CMAKE_SIZEOF_VOID_P@ config.ld_lld_default_mingw = @LLD_DEFAULT_LD_LLD_IS_MINGW@ +config.ld_lld_default_nostart_stop_gc = @LLD_DEFAULT_NOSTART_STOP_GC@ # Support substitution of the tools and libs dirs with user parameters. This is # used when we can't determine the tool dir at configuration time. |