Skip to content

test: nlist: make resilient against -Wl,--gc-sections

Sam James requested to merge thesamesam/libbsd:gc-sections into main

With linker sections GC enabled, we get a test failure in nlist.c:

nlist: nlist.c:72: main: Assertion `rc == 0' failed.

This turns out to be because several sections used by the test can be discarded:

ld: removing unused section '.text.func_pub' in file 'nlist.o'
ld: removing unused section '.bss.data_pub_uninit' in file 'nlist.o'
ld: removing unused section '.data.data_pub_init' in file 'nlist.o'

Reproduced with CFLAGS="-Og -fdata-sections -ffunction-sections" and LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--gc-sections -Wl,-z,start-stop-gc".

Additionally, LDFLAGS="... -Wl,--print-gc-sections" can help with diagnosing which sections get removed.

We already mark these symbols as used, but we need retain [0] for them to survive linker GC too.

[0] https://releases.llvm.org/18.1.0/tools/lld/docs/ELF/start-stop-gc.html#annotate-c-identifier-name-sections

Signed-off-by: Sam James sam@gentoo.org

Edited by Sam James

Merge request reports