I'm having some interesting problems with getting _mcount() to work on mips*-*-linux. Most of them are easily correctable within _mcount itself, but one deals with how it's called. The sequence looks like this: .set noreorder .set noat move $1,$31 # save current return address jal _mcount subu $sp,$sp,8 # _mcount pops 2 words from stack .set reorder .set at Suppose we have a function with no frame pointer, though - one which would otherwise be a leaf. We have a small problem based on the fact that GCC considers it to be a leaf despite calling _mcount. If it uses $sp for its frame register, then when the jal expands: 0x404550 <__libc_start_main+16>: sw $gp,16($sp) ... 0x404574 <__libc_start_main+52>: move $at,$ra 0x404578 <__libc_start_main+56>: lw $t9,-32584($gp) 0x40457c <__libc_start_main+60>: nop 0x404580 <__libc_start_main+64>: jalr $t9 0x404584 <__libc_start_main+68>: nop 0x404588 <__libc_start_main+72>: lw $gp,16($sp) 0x40458c <__libc_start_main+76>: addiu $sp,$sp,-8 Note that we saved $gp at 16($sp), then tried to restore it before we fixed $sp up again. Does anyone have a good idea? The best I can think of is to emit the jalr from GCC directly, so that we can restore the GP after restoring the stack pointer properly. -- Daniel Jacobowitz Carnegie Mellon University MontaVista Software Debian GNU/Linux Developer