On Tue, Sep 02, 2008 at 01:20:43PM -0600, Eric Blake wrote: > I wonder if switching to libsigsegv's version will solve it. In the > meantime, I would be curious to see the disassembly of recurse, to see if > anything obvious appears as to why p==0 rather than a valid stack address > before the final stack frame. In gdb, you can get this with 'disas recurse'. > (gdb) run Starting program: /usr/people/tgc/buildpkg/m4/src/m4-1.4.11.42-864d/tests/test-c-stack
Program received signal SIGSEGV, Segmentation fault. 0x400d70 in recurse (p=0x0) at test-c-stack.c:46 46 { (gdb) disas recurse Dump of assembler code for function recurse: 0x400d60 <recurse>: lui $gp,0xfc0 0x400d64 <recurse+4>: addiu $gp,$gp,29504 0x400d68 <recurse+8>: addu $gp,$gp,$t9 0x400d6c <recurse+12>: addiu $sp,$sp,-536 0x400d70 <recurse+16>: sw $ra,28($sp) 0x400d74 <recurse+20>: sw $gp,24($sp) 0x400d78 <recurse+24>: sw $a0,536($sp) 0x400d7c <recurse+28>: li $t6,1 0x400d80 <recurse+32>: addiu $t7,$sp,36 0x400d84 <recurse+36>: sb $t6,0($t7) 0x400d88 <recurse+40>: lw $t9,-32748($gp) 0x400d8c <recurse+44>: addiu $a0,$sp,36 0x400d90 <recurse+48>: addiu $t9,$t9,3424 0x400d94 <recurse+52>: jalr $t9 0x400d98 <recurse+56>: nop 0x400d9c <recurse+60>: lw $t8,536($sp) 0x400da0 <recurse+64>: lw $gp,24($sp) 0x400da4 <recurse+68>: lbu $t9,0($t8) 0x400da8 <recurse+72>: b 0x400db8 <recurse+88> 0x400dac <recurse+76>: addu $v0,$v0,$t9 0x400db0 <recurse+80>: b 0x400db8 <recurse+88> 0x400db4 <recurse+84>: nop 0x400db8 <recurse+88>: lw $ra,28($sp) 0x400dbc <recurse+92>: addiu $sp,$sp,536 0x400dc0 <recurse+96>: jr $ra 0x400dc4 <recurse+100>: nop End of assembler dump. (gdb) quit -tgc