[all-commits] [llvm/llvm-project] 6d2d3b: [ELF] Default to -z start-stop-gc with a glibc "__...
Fangrui Song via All-commits
all-commits at lists.llvm.org
Fri Apr 16 12:19:02 PDT 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 6d2d3bd0a61f5fc7fd9f61f48bc30e9ca77cc619
https://github.com/llvm/llvm-project/commit/6d2d3bd0a61f5fc7fd9f61f48bc30e9ca77cc619
Author: Fangrui Song <i at maskray.me>
Date: 2021-04-16 (Fri, 16 Apr 2021)
Changed paths:
M lld/ELF/Driver.cpp
M lld/ELF/MarkLive.cpp
M lld/test/ELF/gc-sections-metadata-startstop.s
M lld/test/ELF/gc-sections-startstop.s
M lld/test/ELF/linkerscript/sections-gc2.s
M lld/test/ELF/lto/section-name.ll
M lld/test/ELF/relocatable-gc.s
Log Message:
-----------
[ELF] Default to -z start-stop-gc with a glibc "__libc_" special case
Change the default to facilitate GC for metadata section usage, so that they
don't need SHF_LINK_ORDER or SHF_GROUP just to drop the unhelpful rule (if they
want to be unconditionally retained, use SHF_GNU_RETAIN
(`__attribute__((retain))`) or linker script `KEEP`).
The dropped SHF_GROUP special case makes the behavior of -z start-stop-gc and -z
nostart-stop-gc closer to GNU ld>=2.37 (https://sourceware.org/PR27451).
However, we default to -z start-stop-gc (which actually matches more closely to
GNU ld before 2015-10 https://sourceware.org/PR19167), which is different from
modern GNU ld (which has the unhelpful rule to work around glibc). As a
compensation, we special case `__libc_` sections as a workaround for glibc<2.34
(https://sourceware.org/PR27492).
Since -z start-stop-gc as the default actually matches the traditional GNU ld
behavior, there isn't much to be aware of. There was a systemd usage which has
been fixed by https://github.com/systemd/systemd/pull/19144
More information about the All-commits
mailing list