https://sourceware.org/bugzilla/show_bug.cgi?id=31956
Bug ID: 31956 Summary: -Wl,--wrap broken with LTO? Product: binutils Version: unspecified Status: NEW Severity: normal Priority: P2 Component: ld Assignee: unassigned at sourceware dot org Reporter: sam at gentoo dot org Target Milestone: --- I'm not sure if this is a good reduction, we'll see. We keep getting reports of LTO causing undefined references with gcc+bfd when testsuites use -Wl,--wrap. I picked OpenVPN to reduce after a comment from one of its upstream developers: https://bugs.gentoo.org/877741#c4. argv.i: ``` void _cmocka_run_group_tests() {} void parse_line(); void argv_parse_cmd() { parse_line(); } ``` argv_testdriver-test_argv.i: ``` struct CMUnitTest { void *test_func; } _cmocka_run_group_tests(); void argv_parse_cmd(); void __wrap_parse_line() {}; void argv_parse_cmd__command_and_extra_options__argc_correct() { argv_parse_cmd(); } struct CMUnitTest main_tests = { argv_parse_cmd__command_and_extra_options__argc_correct }; int main() { _cmocka_run_group_tests(main_tests); } ``` ``` $ gcc argv_testdriver-test_argv.i argv.i -Wl,-wrap=parse_line -O3 -flto -fuse-ld=bld # broken /usr/lib/gcc/x86_64-pc-linux-gnu/15/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /tmp/ccjmsCeq.ltrans0.ltrans.o: in function `argv_parse_cmd__command_and_extra_options__argc_correct': <artificial>:(.text+0x13): undefined reference to `__wrap_parse_line' $ gcc argv_testdriver-test_argv.i argv.i -Wl,-wrap=parse_line -O3 -flto -fuse-ld=mold # fine $ clang argv_testdriver-test_argv.i argv.i -Wl,-wrap=parse_line -O3 -flto -fuse-ld=mold # fine argv_testdriver-test_argv.i:16:37: warning: passing arguments to '_cmocka_run_group_tests' without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype] 16 | int main() { _cmocka_run_group_tests(main_tests); } | ^ 1 warning generated. $ clang argv_testdriver-test_argv.i argv.i -Wl,-wrap=parse_line -O3 -flto -fuse-ld=lld # fine argv_testdriver-test_argv.i:16:37: warning: passing arguments to '_cmocka_run_group_tests' without a prototype is deprecated in all versions of C and is not supported in C23 [-Wdeprecated-non-prototype] 16 | int main() { _cmocka_run_group_tests(main_tests); } | ^ 1 warning generated. ``` -- You are receiving this mail because: You are on the CC list for the bug.