[Bug go/82131] FAIL: TestCgoCallbackGC in gotools testsuite; segfaults in morestack.S:529
ubizjak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Oct 1 19:03:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82131
--- Comment #3 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Ian Lance Taylor from comment #2)
> I have not been able to create this.
>
> Are you using GNU ld or the gold linker? I've tried both and for me it
> works either way, but it might help to know.
It is standard Fedora Workstation 26 toolchain:
$ ld --version
GNU ld version 2.27-24.fc26
I don't know which linker is used by default, also installed is:
$ ld.gold --version
GNU gold (version 2.27-24.fc26) 1.12
> Can you find out why it is getting a segmentation violation on the call
> instruction? Is the problem that the stack pointer has become invalid?
I'm getting new backtrace with current mainline:
...
[Thread 0x2aab1c521700 (LWP 12761) exited]
[Thread 0x2aaafcea5700 (LWP 12758) exited]
[Thread 0x2aaca7752700 (LWP 12895) exited]
[Thread 0x2aab909c3700 (LWP 12800) exited]
Thread 23 "testprogcgo" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x2aaafc9c3700 (LWP 12756)]
0x00002aaaacf68fb6 in free () from /lib64/libc.so.6
(gdb) bt
#0 0x00002aaaacf68fb6 in free () from /lib64/libc.so.6
#1 0x000000000040d99c in free_dynamic_blocks (p=0x2aaaabd34e00 <line_compare>)
at /home/uros/gcc-svn/trunk/libgcc/generic-morestack.c:417
#2 0x000000000040db5e in __morestack_release_segments (pp=0x2aaafc9c36f8,
free_dynamic=1) at /home/uros/gcc-svn/trunk/libgcc/generic-morestack.c:465
#3 0x00002aaaaccc30b8 in __nptl_deallocate_tsd.part.4 () from
/lib64/libpthread.so.0
#4 0x00002aaaaccc442d in start_thread () from /lib64/libpthread.so.0
#5 0x00002aaaacfecbbf in clone () from /lib64/libc.so.6
(gdb) disass
Dump of assembler code for function free:
...
0x00002aaaacf68fa4 <+36>: test %rax,%rax
0x00002aaaacf68fa7 <+39>: jne 0x2aaaacf69170 <free+496>
0x00002aaaacf68fad <+45>: test %rdi,%rdi
0x00002aaaacf68fb0 <+48>: je 0x2aaaacf690b0 <free+304>
=> 0x00002aaaacf68fb6 <+54>: mov -0x8(%rdi),%rax
0x00002aaaacf68fba <+58>: lea -0x10(%rdi),%rsi
...
(gdb) i r rdi
rdi 0xf097c1447391446 1083533611895428166
Another backtrace:
=================
...
[New Thread 0x2aacc26f8700 (LWP 14495)]
[New Thread 0x2aacc30fb700 (LWP 14496)]
[Thread 0x2aaaebc72700 (LWP 14304) exited]
Thread 136 "testprogcgo" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x2aac1a06d700 (LWP 14418)]
0x00002aaaabd4146c in __generic_morestack (pframe_size=0x2aac6ff7a1f0,
old_stack=0x2aac6ff7a210, param_size=0) at
/home/uros/gcc-svn/trunk/libgcc/generic-morestack.c:560
560 if (*pp != NULL && (*pp)->size < frame_size)
gdb) bt
#0 0x00002aaaabd4146c in __generic_morestack (pframe_size=0x2aac6ff7a1f0,
old_stack=0x2aac6ff7a210, param_size=0) at
/home/uros/gcc-svn/trunk/libgcc/generic-morestack.c:560
#1 0x00002aaaabd423d1 in __morestack () at
/home/uros/gcc-svn/trunk/libgcc/config/i386/morestack.S:510
#2 0x00002aaaabd36bf5 in dwarf_lookup_pc (state=state@entry=0x2aaaaab14000,
ddata=ddata@entry=0x2aaaaab5ee00, pc=pc@entry=4249764,
callback=callback@entry=0x2aaaab7a2b40 <callback>,
error_callback=error_callback@entry=0x2aaaab7a2dc0 <error_callback>,
data=data@entry=0x2aac6ff7a720, found=<optimized out>)
at /home/uros/gcc-svn/trunk/libbacktrace/dwarf.c:2836
#3 0x00002aaaabd3800f in dwarf_fileline (state=0x2aaaaab14000, pc=4249764,
callback=0x2aaaab7a2b40 <callback>, error_callback=0x2aaaab7a2dc0
<error_callback>, data=0x2aac6ff7a720)
at /home/uros/gcc-svn/trunk/libbacktrace/dwarf.c:2896
#4 0x00002aaaabd39126 in unwind (context=<optimized out>,
vdata=0x2aac6ff7a6e0) at /home/uros/gcc-svn/trunk/libbacktrace/backtrace.c:91
#5 0x00002aaaacab64b9 in _Unwind_Backtrace (trace=trace@entry=0x2aaaabd390a0
<unwind>, trace_argument=trace_argument@entry=0x2aac6ff7a6e0)
at /home/uros/gcc-svn/trunk/libgcc/unwind.inc:295
#6 0x00002aaaabd39199 in backtrace_full (state=0x2aaaaab14000,
skip=skip@entry=0, callback=callback@entry=0x2aaaab7a2b40 <callback>,
(gdb) disass
Dump of assembler code for function __generic_morestack:
...
0x00002aaaabd41463 <+67>: test %rdi,%rdi
0x00002aaaabd41466 <+70>: je 0x2aaaabd41508 <__generic_morestack+232>
=> 0x00002aaaabd4146c <+76>: mov 0x10(%rdi),%r8
0x00002aaaabd41470 <+80>: cmp 0x8(%rsp),%r8
...
(gdb) i r rdi
rdi 0x2 2
(gdb) list
555 size_t aligned;
556
557 current = __morestack_current_segment;
558
559 pp = current != NULL ? ¤t->next : &__morestack_segments;
560 if (*pp != NULL && (*pp)->size < frame_size)
561 dynamic = __morestack_release_segments (pp, 0);
562 else
563 dynamic = NULL;
564 current = *pp;
(gdb) p pp
$1 = (struct stack_segment **) 0x2aac6ff7a008
(gdb) p (*pp)->size
Cannot access memory at address 0x12
Yet another backtrace:
=====================
...
[New Thread 0x2aacbe542700 (LWP 16731)]
[New Thread 0x2aacbe944700 (LWP 16733)]
Thread 56 "testprogcgo" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x2aab706e2700 (LWP 16578)]
__generic_morestack (pframe_size=0x2aac97f841c0, old_stack=0x2aac97f841e0,
param_size=0) at /home/uros/gcc-svn/trunk/libgcc/generic-morestack.c:573
573 current->old_stack = old_stack;
(gdb) disass
Dump of assembler code for function __generic_morestack:
...
0x00002aaaabd4150c <+236>: test %rcx,%rcx
0x00002aaaabd4150f <+239>: je 0x2aaaabd41926
<__generic_morestack+1286>
=> 0x00002aaaabd41515 <+245>: mov %rbp,0x18(%rcx)
0x00002aaaabd41519 <+249>: mov %rcx,0x8(%rsp)
0x00002aaaabd4151e <+254>: data16 lea 0x801072(%rip),%rdi #
0x2aaaac542598
...
(gdb) list
568 current = allocate_segment (frame_size + param_size);
569 current->prev = __morestack_current_segment;
570 *pp = current;
571 }
572
573 current->old_stack = old_stack;
574
575 __morestack_current_segment = current;
576
577 if (dynamic != NULL)
(gdb) p current
$4 = (struct stack_segment *) 0x2aaaacab92d8
(gdb) i r rsp
rsp 0x2aac97f840d0 0x2aac97f840d0
More information about the Gcc-bugs
mailing list