[Bug bootstrap/60830] [4.9 Regression] ICE on bootstrapping on cygwin
bernd.edlinger at hotmail dot de
gcc-bugzilla@gcc.gnu.org
Mon Apr 21 14:02:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60830
--- Comment #30 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
It looks like a bug in the assembler!
with objdump -d -r crtbegin.o we have wrong code:
f3: 83 ec 04 sub $0x4,%esp
f6: 85 c0 test %eax,%eax
f8: ba f0 ff ff ff mov $0xfffffff0,%edx
f9: dir32 ___deregister_frame_info
fd: 74 16 je 115 <___gcc_deregister_frame+0x35>
but the cygming-crtbegin.s looks correct:
LVL17:
.loc 1 158 0
testl %eax, %eax
.loc 1 162 0
movl $___deregister_frame_info, %edx
.loc 1 158 0
je L27
whenever there is a weak definition the reference is actually minus
the offset of the previous weak definition. Everything is OK if that was
at offset zero.
test case:
$ cat test.c
#include <stdio.h>
extern void test() __attribute__((weak));
int main()
{
printf("hello\n");
test();
return 0;
}
__attribute__((weak))
void test()
{
printf("weak\n");
}
$ cat test1.c
#include <stdio.h>
void test()
{
printf("strong\n");
}
$ gcc -o test test.c test1.c
$ ./test
hello
Segmentation fault (core dumped)
More information about the Gcc-bugs
mailing list