What | Removed | Added |
---|---|---|
CC | martin.liska@suse.com |
So the problem is following: include/schily/schily.h defines: /*PRINTFLIKE1*/ extern int error __PR((const char *, ...)) __printflike__(1, 2); /*PRINTFLIKE1*/ extern int gterror __PR((const char *, ...)) __printflike__(1, 2); #ifdef GT_ERROR #undef error #define error gterror #endif So it's a different declaration of function error that has a different signature in glibc: void error(int status, int errnum, const char *format, ...); And I bet GT_ERROR is not defined for all source files that are then linked with LTO. In LTO linking, we end up with duplicate and different function signatures and the from glibc is taken: Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7f67331 in __strlen_avx2 () from /lib64/libc.so.6 (gdb) bt #0 0x00007ffff7f67331 in __strlen_avx2 () from /lib64/libc.so.6 #1 0x00007ffff7e731ae in __vfprintf_internal () from /lib64/libc.so.6 #2 0x00007ffff7e7418e in buffered_vfprintf () from /lib64/libc.so.6 #3 0x00007ffff7e71384 in __vfprintf_internal () from /lib64/libc.so.6 #4 0x00007ffff7e7b16a in locked_vfxprintf () from /lib64/libc.so.6 #5 0x00007ffff7e7b26d in __vfxprintf () from /lib64/libc.so.6 #6 0x00007ffff7f0173e in error_tail () from /lib64/libc.so.6 #7 0x00007ffff7f018bc in error () from /lib64/libc.so.6 #8 0x0000555555560b20 in main (argc=4, argv=0x7fffffffe8b8) at mkisofs.c:2801 while without LTO the libschily/gterror.c is taken: (gdb) bt #0 0x00007ffff7fa9a10 in error () from ../libs/x86_64-linux-gcc/pic/libschily.so.2.0 #1 0x00005555555602b9 in main (argc=4, argv=0x7fffffffe8b8) at mkisofs.c:2801