reproduce steps:
[foo.c]
int _umh(int i) { return i+1; }
int weaks(int i) __attribute__((weak, alias("_umh")));
int main() { return weaks(10); }
[bar.c]
int weaks(int i) { return i+1; }
now compile:
gcc -c bar.c
gcc -flto -c foo.c
gcc -flto -o elf bar.o foo.o
note:
bar compiled without flt but rest with flt
now at linking stage booms at line
gcc_assert (c != SYMBOL_EXTERNAL && (c == SYMBOL_DUPLICATE || !symbol_partitioned_p (node)));
in lto/lto-partition.c
===============================================================
same code compiled without lto ok
gcc 4.9.3 not affected but 5.3.0 affected and latest (gcc-6-20160214) affected
reproduce steps:
[foo.c]
int _umh(int i)
{
return i+1;
}
int weaks(int i) __attribute_ _((weak, alias("_umh")));
int main()
{
return weaks(10);
}
[bar.c]
int weaks(int i)
{
return i+1;
}
now compile:
gcc -c bar.c
gcc -flto -c foo.c
gcc -flto -o elf bar.o foo.o
note:
bar compiled without flt
but rest with flt
now at linking stage booms
at line
gcc_assert (c != SYMBOL_EXTERNAL partitioned_ p (node)));
&& (c == SYMBOL_DUPLICATE || !symbol_
in lto/lto-partition.c
======= ======= ======= ======= ======= ======= ======= ======= =======
same code compiled without lto ok
gcc 4.9.3 not affected
but 5.3.0 affected and latest (gcc-6-20160214) affected