https://sourceware.org/bugzilla/show_bug.cgi?id=28124
Bug ID: 28124 Summary: ld: Make special sections in a section group GCable Product: binutils Version: unspecified Status: UNCONFIRMED Severity: normal Priority: P2 Component: ld Assignee: unassigned at sourceware dot org Reporter: i at maskray dot me Target Milestone: --- % cat a.s .globl _start, bbb _start: .section .mytext.bbb,"axG",@progbits,bbb,comdat bbb: .byte 0 .section .init_array.bbb,"awG",@init_array,bbb,comdat .byte 0 % cc -c a.s && ld.bfd --gc-sections --print-gc-sections a.o (no output) If I rename .init_array.bbb to .myinit_array.bbb, the group can be GCed % cc -c a.s && ld.bfd --gc-sections --print-gc-sections a.o ld.bfd: removing unused section '.group' in file 'a.o' ld.bfd: removing unused section '.mytext.bbb[bbb]' in file 'a.o' ld.bfd: removing unused section '.myinit_array.bbb[bbb]' in file 'a.o' It seems favorable to make all special sections GCable if in a section group. This makes the rule more consistent. An SHF_ALLOC SHT_NOTE appears to be a GC root outside of a group. --- Before 13.0, clang -fsanitize-coverage=... abuses .init_array.2 (SHT_INIT_ARRAY) in a section group to make the group a GC root, e.g. % clang -fsanitize-coverage=trace-pc-guard -c -xc++ =(printf 'int main(){}') -ffunction-sections -fdata-sections -c -o a.o % readelf -Wg a.o group section [ 3] `.group' [main] contains 3 sections: [Index] Name [ 4] .text.main [ 5] .rela.text.main [ 9] __sancov_guards COMDAT group section [ 6] `.group' [sancov.module_ctor_trace_pc_guard] contains 4 sections: [Index] Name [ 7] .text.sancov.module_ctor_trace_pc_guard [ 8] .rela.text.sancov.module_ctor_trace_pc_guard [ 10] .init_array.2 [ 11] .rela.init_array.2 The intention is that .text.sancov.module_ctor_trace_pc_guard will be retained. I changed 13.0.0 to use SHF_GNU_RETAIN to express the GC root intention explicitly. You may consider work around it, but I think not working around it is also fine. -- You are receiving this mail because: You are on the CC list for the bug.