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
32 lines
869 B
ArmAsm
32 lines
869 B
ArmAsm
# REQUIRES: x86
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
|
|
# RUN: echo "SECTIONS { \
|
|
# RUN: used_in_reloc : { *(used_in_reloc) } \
|
|
# RUN: used_in_script : { *(used_in_script) } \
|
|
# RUN: .text : { *(.text) } \
|
|
# RUN: }" > %t.script
|
|
# RUN: ld.lld -T %t.script -o %t.so %t.o --gc-sections -z nostart-stop-gc
|
|
# RUN: llvm-objdump -h %t.so | FileCheck %s
|
|
|
|
# CHECK: Idx Name Size VMA Type
|
|
# CHECK-NEXT: 0
|
|
# CHECK-NEXT: used_in_reloc
|
|
# CHECK-NEXT: .text
|
|
# CHECK-NEXT: .comment
|
|
# CHECK-NEXT: .symtab
|
|
# CHECK-NEXT: .shstrtab
|
|
# CHECK-NEXT: .strtab
|
|
|
|
.global _start
|
|
_start:
|
|
.quad __start_used_in_reloc
|
|
|
|
.section unused,"a"
|
|
.quad 0
|
|
|
|
.section used_in_script,"a"
|
|
.quad __start_used_in_script
|
|
|
|
.section used_in_reloc,"a"
|
|
.quad 0
|