When attempting to use profiling under mips-linux the produced gmon.out file was reported as "missing call -raph data". The problem lay in the fact that the following from machine-gmon.h: "move $5,$31;" \ "jal __mcount;" \ "move $4,$1;" \ was assembled as: 0x432458 <_mcount+40>: move $a1,$ra 0x43245c <_mcount+44>: lw $t9,-32724($gp) 0x432460 <_mcount+48>: nop 0x432464 <_mcount+52>: addiu $t9,$t9,8816 0x432468 <_mcount+56>: jalr $t9 0x43246c <_mcount+60>: nop 0x432470 <_mcount+64>: lw $gp,0($s8) 0x432474 <_mcount+68>: move $a0,$at by gas. Basically, the fact that "jal __mcount" was being expanded forced "move $4,$1;" out of the delay slot which resulted in the first argument to __mcount to be incorrect. The following patch against glibc corrects this problem. *** sysdeps/mips/machine-gmon.h.orig Mon Aug 13 12:17:39 2001 --- sysdeps/mips/machine-gmon.h Mon Aug 13 12:18:00 2001 *************** *** 43,50 **** "sw $1,16($29);" \ "sw $31,20($29);" \ "move $5,$31;" \ - "jal __mcount;" \ "move $4,$1;" \ "lw $4,24($29);" \ "lw $5,28($29);" \ "lw $6,32($29);" \ --- 43,51 ---- "sw $1,16($29);" \ "sw $31,20($29);" \ "move $5,$31;" \ "move $4,$1;" \ + "jal __mcount;" \ + "nop;" \ "lw $4,24($29);" \ "lw $5,28($29);" \ "lw $6,32($29);" \ Simon