http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47619

--- Comment #10 from H.J. Lu <hjl.tools at gmail dot com> 2011-02-08 21:07:09 
UTC ---
[hjl@gnu-6 pr47619]$ cat x.c 
#include <stdio.h>
#include <string.h>

void foo( long i )
{
    register void* rsp asm( "rsp" );
    printf( "i = %ld, rsp = %p\n", i, rsp );
    char buf[ 256 ];
    memset( buf, 0, sizeof( buf ) );
    if ( i > 0 )
        foo( i - 1 );
}

int main()
{
    foo( 32*1024 );
    return 0;
}
[hjl@gnu-6 pr47619]$ make x
/usr/gcc-4.6/bin/gcc -O -g -fsplit-stack -B./   -c -o x.o x.c
/usr/gcc-4.6/bin/gcc -O -g -fsplit-stack -B./ -o x x.o
[hjl@gnu-6 pr47619]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63592
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63592
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[hjl@gnu-6 pr47619]$ free
             total       used       free     shared    buffers     cached
Mem:       8158716    7916268     242448          0    2117116    3197192
-/+ buffers/cache:    2601960    5556756
Swap:     16777212          0   16777212
i = 1952, rsp = 0x7fffff7ff830

Program received signal SIGSEGV, Segmentation fault.
0x0000003f7d244d8a in vfprintf () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.13-1.0.f14.x86_64
libgcc-4.5.1-4.fc14.x86_64
(gdb) bt
#0  0x0000003f7d244d8a in vfprintf () from /lib64/libc.so.6
#1  0x0000003f7d24faea in printf () from /lib64/libc.so.6
#2  0x0000000000400be9 in foo (i=<value optimized out>) at x.c:7
#3  0x0000000000400c07 in foo (i=<value optimized out>) at x.c:11
#4  0x0000000000400c07 in foo (i=<value optimized out>) at x.c:11
#5  0x0000000000400c07 in foo (i=<value optimized out>) at x.c:11
#6  0x0000000000400c07 in foo (i=<value optimized out>) at x.c:11
...
(gdb) disass
Dump of assembler code for function vfprintf:
   0x0000003f7d244cf0 <+0>:    push   %rbp
   0x0000003f7d244cf1 <+1>:    mov    %rsp,%rbp
   0x0000003f7d244cf4 <+4>:    mov    %rbx,-0x28(%rbp)
   0x0000003f7d244cf8 <+8>:    mov    %r13,-0x18(%rbp)
   0x0000003f7d244cfc <+12>:    mov    %rdi,%rbx
   0x0000003f7d244cff <+15>:    mov    %r14,-0x10(%rbp)
   0x0000003f7d244d03 <+19>:    mov    %r15,-0x8(%rbp)
   0x0000003f7d244d07 <+23>:    mov    %rsi,%r14
   0x0000003f7d244d0a <+26>:    mov    %r12,-0x20(%rbp)
   0x0000003f7d244d0e <+30>:    sub    $0x650,%rsp
   0x0000003f7d244d15 <+37>:    mov    0x350284(%rip),%r15        #
0x3f7d594fa0
   0x0000003f7d244d1c <+44>:    mov    %rdx,%r13
   0x0000003f7d244d1f <+47>:    mov    %fs:(%r15),%eax
   0x0000003f7d244d23 <+51>:    mov    %eax,-0x504(%rbp)
   0x0000003f7d244d29 <+57>:    mov    0xc0(%rdi),%eax
   0x0000003f7d244d2f <+63>:    test   %eax,%eax
   0x0000003f7d244d31 <+65>:    jne    0x3f7d244ec0 <vfprintf+464>
   0x0000003f7d244d37 <+71>:    movl   $0xffffffff,0xc0(%rdi)
   0x0000003f7d244d41 <+81>:    mov    (%rbx),%r12d
   0x0000003f7d244d44 <+84>:    test   $0x8,%r12b
   0x0000003f7d244d48 <+88>:    jne    0x3f7d244f18 <vfprintf+552>
---Type <return> to continue, or q <return> to quit---
   0x0000003f7d244d4e <+94>:    test   %r14,%r14
   0x0000003f7d244d51 <+97>:    je     0x3f7d244ef0 <vfprintf+512>
   0x0000003f7d244d57 <+103>:    test   $0x2,%r12b
   0x0000003f7d244d5b <+107>:    jne    0x3f7d244f00 <vfprintf+528>
   0x0000003f7d244d61 <+113>:    mov    0x0(%r13),%rax
   0x0000003f7d244d65 <+117>:    mov    $0x25,%esi
   0x0000003f7d244d6a <+122>:    mov    %r14,%rdi
   0x0000003f7d244d6d <+125>:    mov    %rax,-0xf0(%rbp)
   0x0000003f7d244d74 <+132>:    mov    0x8(%r13),%rax
   0x0000003f7d244d78 <+136>:    mov    %rax,-0xe8(%rbp)
   0x0000003f7d244d7f <+143>:    mov    0x10(%r13),%rax
   0x0000003f7d244d83 <+147>:    mov    %rax,-0xe0(%rbp)
=> 0x0000003f7d244d8a <+154>:    callq  0x3f7d289750 <strchrnul>
   0x0000003f7d244d8f <+159>:    and    $0x8000,%r12d
   0x0000003f7d244d96 <+166>:    mov    %rax,-0x510(%rbp)
   0x0000003f7d244d9d <+173>:    movl   $0x0,-0x508(%rbp)
   0x0000003f7d244da7 <+183>:    jne    0x3f7d244e1c <vfprintf+300>

Reply via email to