yann@1: From http://www.ltc.com/~brad/mips/glibc-2.2.5-mips-build-gmon.diff yann@1: See http://www.ltc.com/~brad/mips/mips-cross-toolchain.html yann@1: yann@1: --- glibc-2.2.5/sysdeps/mips/machine-gmon.h 2001-08-13 04:42:44.000000000 -0400 yann@1: +++ glibc-2.2.5/sysdeps/mips/machine-gmon.h 2002-09-25 17:10:59.000000000 -0400 yann@1: @@ -17,42 +17,52 @@ yann@1: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: 02111-1307 USA. */ yann@1: yann@1: -#define _MCOUNT_DECL static void __mcount yann@1: +#define _MCOUNT_DECL(frompc,selfpc) \ yann@1: +static void __attribute_used__ __mcount (u_long frompc, u_long selfpc) yann@1: yann@1: /* Call __mcount with our the return PC for our caller, yann@1: and the return PC our caller will return to. */ yann@1: #ifdef __PIC__ yann@1: #define CPLOAD ".cpload $25;" yann@1: +#define CPRESTORE ".cprestore 44\n\t" yann@1: #else yann@1: #define CPLOAD yann@1: +#define CPRESTORE yann@1: #endif yann@1: yann@1: #define MCOUNT asm(\ yann@1: - ".globl _mcount;" \ yann@1: - ".align 2;" \ yann@1: - ".type _mcount,@function;" \ yann@1: - "_mcount:;" \ yann@1: - ".set noreorder;" \ yann@1: - ".set noat;" \ yann@1: + ".globl _mcount;\n\t" \ yann@1: + ".align 2;\n\t" \ yann@1: + ".type _mcount,@function;\n\t" \ yann@1: + ".ent _mcount\n\t" \ yann@1: + "_mcount:\n\t" \ yann@1: + ".frame $sp,44,$31\n\t" \ yann@1: + ".set noreorder;\n\t" \ yann@1: + ".set noat;\n\t" \ yann@1: CPLOAD \ yann@1: - "sw $4,8($29);" \ yann@1: - "sw $5,12($29);" \ yann@1: - "sw $6,16($29);" \ yann@1: - "sw $7,20($29);" \ yann@1: - "sw $1,0($29);" \ yann@1: - "sw $31,4($29);" \ yann@1: - "move $5,$31;" \ yann@1: - "move $4,$1;" \ yann@1: - "jal __mcount;" \ yann@1: - "nop;" \ yann@1: - "lw $4,8($29);" \ yann@1: - "lw $5,12($29);" \ yann@1: - "lw $6,16($29);" \ yann@1: - "lw $7,20($29);" \ yann@1: - "lw $31,4($29);" \ yann@1: - "lw $1,0($29);" \ yann@1: - "addu $29,$29,8;" \ yann@1: - "j $31;" \ yann@1: - "move $31,$1;" \ yann@1: - ".set reorder;" \ yann@1: - ".set at"); yann@1: + "subu $29,$29,48;\n\t" \ yann@1: + CPRESTORE \ yann@1: + "sw $4,24($29);\n\t" \ yann@1: + "sw $5,28($29);\n\t" \ yann@1: + "sw $6,32($29);\n\t" \ yann@1: + "sw $7,36($29);\n\t" \ yann@1: + "sw $2,40($29);\n\t" \ yann@1: + "sw $1,16($29);\n\t" \ yann@1: + "sw $31,20($29);\n\t" \ yann@1: + "move $5,$31;\n\t" \ yann@1: + "move $4,$1;\n\t" \ yann@1: + "jal __mcount;\n\t" \ yann@1: + "nop;\n\t" \ yann@1: + "lw $4,24($29);\n\t" \ yann@1: + "lw $5,28($29);\n\t" \ yann@1: + "lw $6,32($29);\n\t" \ yann@1: + "lw $7,36($29);\n\t" \ yann@1: + "lw $2,40($29);\n\t" \ yann@1: + "lw $31,20($29);\n\t" \ yann@1: + "lw $1,16($29);\n\t" \ yann@1: + "addu $29,$29,56;\n\t" \ yann@1: + "j $31;\n\t" \ yann@1: + "move $31,$1;\n\t" \ yann@1: + ".set reorder;\n\t" \ yann@1: + ".set at\n\t" \ yann@1: + ".end _mcount");