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 ? &current->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

Reply via email to