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