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.