[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