https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71161

--- Comment #8 from Uroš Bizjak <ubizjak at gmail dot com> ---
Old glibc misaligns the stack on 32bit targets.

In my case (Centos 5.11, glibc 2.5), looking into:

FAIL: go.go-torture/execute/array-1.go execution,  -O0 

Starting program: /home/uros/test/a.out 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0xf7997b9b in find_address_ranges (state=state@entry=0xf702d000,
base_address=base_address@entry=4144750592, 
    unit_buf=unit_buf@entry=0xffffab48, dwarf_str=0xf6708ef8 "pause_total_ns",
dwarf_str_size=676857, dwarf_ranges=0xf6a51baf "R", 
    dwarf_ranges_size=277408, is_bigendian=0, error_callback=0xf75d59d0
<error_callback>, data=0xffffb0ec, u=0xf6bfce38, addrs=0xffffab18)
    at ../../../../git/gcc/libbacktrace/dwarf.c:1285
1285          for (i = 0; i < abbrev->num_attrs; ++i)
(gdb) disass
Dump of assembler code for function find_address_ranges:
   ...
   0xf7997b64 <+148>:   movl   $0x0,0x44(%esp)
   0xf7997b6c <+156>:   movl   $0x0,0x4c(%esp)
   0xf7997b74 <+164>:   lea    0x90(%esp),%edi
   0xf7997b7b <+171>:   movl   $0x0,0x50(%esp)
   0xf7997b83 <+179>:   movl   $0x0,0x58(%esp)
   0xf7997b8b <+187>:   movl   $0x0,0x30(%esp)
   0xf7997b93 <+195>:   movl   $0x0,0x48(%esp)
=> 0xf7997b9b <+203>:   movaps %xmm0,0x20(%esp)
   0xf7997ba0 <+208>:   mov    %ebx,(%esp)
   0xf7997ba3 <+211>:   movaps %xmm0,0x10(%esp)
   0xf7997ba8 <+216>:   jmp    0xf7997bdf <find_address_ranges+271>

(gdb) p $esp
$1 = (void *) 0xffffa9c8

#0  0xf7997b9b in find_address_ranges (state=state@entry=0xf702d000,
base_address=base_address@entry=4144750592, 
    unit_buf=unit_buf@entry=0xffffab48, dwarf_str=0xf6708ef8 "pause_total_ns",
dwarf_str_size=676857, dwarf_ranges=0xf6a51baf "R", 
    dwarf_ranges_size=277408, is_bigendian=0, error_callback=0xf75d59d0
<error_callback>, data=0xffffb0ec, u=0xf6bfce38, addrs=0xffffab18)
    at ../../../../git/gcc/libbacktrace/dwarf.c:1285
#1  0xf799a416 in build_address_map (addrs=0xffffab18, data=<optimized out>,
error_callback=0xf75d59d0 <error_callback>, is_bigendian=0, 
    dwarf_str_size=676857, dwarf_str=0xf6708ef8 "pause_total_ns",
dwarf_ranges_size=277408, dwarf_ranges=0xf6a51baf "R", 
    dwarf_abbrev_size=247375, dwarf_abbrev=0xf638cf47
"\001\021\001%\016\023\v\003\016\033\016\021\001\022\006\020\027", 
    dwarf_info_size=3526911, dwarf_info=0xf602fe48 "3\034",
base_address=4144750592, state=0xf702d000)
    at ../../../../git/gcc/libbacktrace/dwarf.c:1498
#2  build_dwarf_data (data=<optimized out>, error_callback=0xf75d59d0
<error_callback>, is_bigendian=0, dwarf_str_size=676857, 
    dwarf_str=0xf6708ef8 "pause_total_ns", dwarf_ranges_size=277408,
dwarf_ranges=0xf6a51baf "R", dwarf_abbrev_size=247375, 
    dwarf_abbrev=0xf638cf47
"\001\021\001%\016\023\v\003\016\033\016\021\001\022\006\020\027",
dwarf_line_size=468966, 
    dwarf_line=0xf63c9596 "\350\001", dwarf_info_size=3526911,
dwarf_info=0xf602fe48 "3\034", base_address=4144750592, state=0xf702d000)
    at ../../../../git/gcc/libbacktrace/dwarf.c:2932
#3  backtrace_dwarf_add (state=0xf702d000, base_address=4144750592,
dwarf_info=0xf602fe48 "3\034", dwarf_info_size=3526911, 
    dwarf_line=0xf63c9596 "\350\001", dwarf_line_size=468966, 
    dwarf_abbrev=0xf638cf47
"\001\021\001%\016\023\v\003\016\033\016\021\001\022\006\020\027",
dwarf_abbrev_size=247375, 
    dwarf_ranges=0xf6a51baf "R", dwarf_ranges_size=277408, dwarf_str=0xf6708ef8
"pause_total_ns", dwarf_str_size=676857, is_bigendian=0, 
    error_callback=0xf75d59d0 <error_callback>, data=<optimized out>,
fileline_fn=0xffffad50)
    at ../../../../git/gcc/libbacktrace/dwarf.c:2992
#4  0xf799bdb3 in elf_add (state=<optimized out>, descriptor=5,
base_address=4144750592, error_callback=0xf75d59d0 <error_callback>, 
    data=0xffffb0ec, fileline_fn=0xffffad50, found_sym=0xffffadf8,
found_dwarf=0xffffad54, exe=0)
    at ../../../../git/gcc/libbacktrace/elf.c:817
#5  0xf799be80 in phdr_callback (info=0xffffad94, size=40, pdata=0xffffae04) at
../../../../git/gcc/libbacktrace/elf.c:902
#6  0x0035c2ea in dl_iterate_phdr () from /lib/libc.so.6
#7  0xf799bf59 in backtrace_initialize (state=0xf702d000, descriptor=<optimized
out>, error_callback=0xf75d59d0 <error_callback>, 
    data=0xffffb0ec, fileline_fn=0xffffae78) at
../../../../git/gcc/libbacktrace/elf.c:943
#8  0xf799a9b7 in fileline_initialize (state=state@entry=0xf702d000,
error_callback=error_callback@entry=0xf75d59d0 <error_callback>, 
    data=data@entry=0xffffb0ec) at
../../../../git/gcc/libbacktrace/fileline.c:136
#9  0xf799aa7a in backtrace_pcinfo (state=0xf702d000, pc=4150090376,
callback=0xf75d5760 <callback>, 
    error_callback=0xf75d59d0 <error_callback>, data=0xffffb0ec) at
../../../../git/gcc/libbacktrace/fileline.c:170
#10 0xf799aff4 in unwind (context=0xffffaf20, vdata=0xffffb094) at
../../../../git/gcc/libbacktrace/backtrace.c:91
#11 0xf70933da in _Unwind_Backtrace (trace=0xf799af90 <unwind>,
trace_argument=0xffffb094) at ../../../../git/gcc/libgcc/unwind.inc:295
#12 0xf799b0bb in backtrace_full (state=0xf702d000, skip=0, callback=0xf75d5760
<callback>, error_callback=0xf75d59d0 <error_callback>, 
    data=0xffffb0ec) at ../../../../git/gcc/libbacktrace/backtrace.c:127
#13 0xf75d5a89 in runtime_callers (skip=1, locbuf=0xffffb120, m=32,
keep_thunks=0 '\000')
    at ../../../../git/gcc/libgo/runtime/go-callers.c:170

Frame #6 is suspected.

Reply via email to