diff options
author | Fangrui Song <i@maskray.me> | 2021-04-16 12:18:45 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2021-04-16 12:18:46 -0700 |
commit | 6d2d3bd0a61f5fc7fd9f61f48bc30e9ca77cc619 (patch) | |
tree | aff9aacda8d5c87d954a9d44b8b068177c3b4b9d /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | 5c729750a6d75df4eeb3eaad72e0b4e93ea27c0e (diff) | |
download | llvm-6d2d3bd0a61f5fc7fd9f61f48bc30e9ca77cc619.zip llvm-6d2d3bd0a61f5fc7fd9f61f48bc30e9ca77cc619.tar.gz llvm-6d2d3bd0a61f5fc7fd9f61f48bc30e9ca77cc619.tar.bz2 |
[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
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
0 files changed, 0 insertions, 0 deletions