* sysdeps/mips/machine-gmon.h (MCOUNT): Define for N32 and N64 as well.

* sysdeps/mips/machine-gmon.h (MCOUNT): Define for N32 and N64 as
	well.
This commit is contained in:
Alexandre Oliva 2003-03-17 15:53:37 +00:00
parent c27d68482c
commit c3b519b7eb
2 changed files with 80 additions and 8 deletions

View File

@ -1,5 +1,8 @@
2003-03-17 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/mips/machine-gmon.h (MCOUNT): Define for N32 and N64 as
well.
* sysdeps/unix/sysv/linux/mips/configure.in: New. Pre-process
asm/unistd.h into asm-unistd.h.
* sysdeps/unix/sysv/linux/mips/configure: Generated.
@ -9,8 +12,6 @@
* sysdeps/unix/sysv/linux/mips/clone.S: Don't include
asm/unistd.h.
2003-03-17 Alexandre Oliva <aoliva@redhat.com>
* sysdeps/unix/sysv/linux/mips/sys/ptrace.h: New file.
* sysdeps/unix/sysv/linux/mips/ptrace.c: New file. Use long
long type for registers on n32.

View File

@ -1,5 +1,6 @@
/* Machine-specific calling sequence for `mcount' profiling function. MIPS
Copyright (C) 1996, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -20,14 +21,17 @@
#define _MCOUNT_DECL(frompc,selfpc) \
static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
/* Call __mcount with our the return PC for our caller,
/* Call __mcount with the return PC for our caller,
and the return PC our caller will return to. */
#if _MIPS_SIM == _MIPS_SIM_ABI32
#ifdef __PIC__
#define CPLOAD ".cpload $25;"
#define CPRESTORE ".cprestore 44\n\t"
# define CPLOAD ".cpload $25;"
# define CPRESTORE ".cprestore 44\n\t"
#else
#define CPLOAD
#define CPRESTORE
# define CPLOAD
# define CPRESTORE
#endif
#define MCOUNT asm(\
@ -66,3 +70,70 @@ static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
".set reorder;\n\t" \
".set at\n\t" \
".end _mcount");
#else
#ifdef __PIC__
# define CPSETUP ".cpsetup $25, 88, _mcount;"
# define CPRETURN ".cpreturn;"
#else
# define CPSETUP
# define CPRETURN
#endif
#if defined _ABIN32 && _MIPS_SIM == _ABIN32
# define PTR_ADDU_STRING "add" /* no u */
# define PTR_SUBU_STRING "sub" /* no u */
#elif defined _ABI64 && _MIPS_SIM == _ABI64
# define PTR_ADDU_STRING "daddu"
# define PTR_SUBU_STRING "dsubu"
#else
# error "Unknown ABI"
#endif
#define MCOUNT asm(\
".globl _mcount;\n\t" \
".align 3;\n\t" \
".type _mcount,@function;\n\t" \
".ent _mcount\n\t" \
"_mcount:\n\t" \
".frame $sp,88,$31\n\t" \
".set noreorder;\n\t" \
".set noat;\n\t" \
PTR_SUBU_STRING " $29,$29,96;\n\t" \
CPSETUP \
"sd $4,24($29);\n\t" \
"sd $5,32($29);\n\t" \
"sd $6,40($29);\n\t" \
"sd $7,48($29);\n\t" \
"sd $8,56($29);\n\t" \
"sd $9,64($29);\n\t" \
"sd $10,72($29);\n\t" \
"sd $11,80($29);\n\t" \
"sd $2,16($29);\n\t" \
"sd $1,0($29);\n\t" \
"sd $31,8($29);\n\t" \
"move $5,$31;\n\t" \
"move $4,$1;\n\t" \
"jal __mcount;\n\t" \
"nop;\n\t" \
"ld $4,24($29);\n\t" \
"ld $5,32($29);\n\t" \
"ld $6,40($29);\n\t" \
"ld $7,48($29);\n\t" \
"ld $8,56($29);\n\t" \
"ld $9,64($29);\n\t" \
"ld $10,72($29);\n\t" \
"ld $11,80($29);\n\t" \
"ld $2,16($29);\n\t" \
"ld $31,8($29);\n\t" \
"ld $1,0($29);\n\t" \
CPRETURN \
PTR_ADDU_STRING " $29,$29,96;\n\t" \
"j $31;\n\t" \
"move $31,$1;\n\t" \
".set reorder;\n\t" \
".set at\n\t" \
".end _mcount");
#endif