* sysdeps/mips/dl-machine.h (elf_machine_matches_host): Use
[kopensolaris-gnu/glibc.git] / sysdeps / mips / machine-gmon.h
1 /* Machine-specific calling sequence for `mcount' profiling function.  MIPS
2    Copyright (C) 1996, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #define _MCOUNT_DECL(frompc,selfpc) \
21 static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
22
23 /* Call __mcount with our the return PC for our caller,
24    and the return PC our caller will return to.  */
25 #ifdef __PIC__
26 #define CPLOAD ".cpload $25;"
27 #else
28 #define CPLOAD
29 #endif
30
31 #define MCOUNT asm(\
32         ".globl _mcount;" \
33         ".align 2;" \
34         ".type _mcount,@function;" \
35         "_mcount:;" \
36         ".set noreorder;" \
37         ".set noat;" \
38         CPLOAD \
39         "sw $4,8($29);" \
40         "sw $5,12($29);" \
41         "sw $6,16($29);" \
42         "sw $7,20($29);" \
43         "sw $1,0($29);" \
44         "sw $31,4($29);" \
45         "move $5,$31;" \
46         "move $4,$1;" \
47         "jal __mcount;" \
48         "nop;" \
49         "lw $4,8($29);" \
50         "lw $5,12($29);" \
51         "lw $6,16($29);" \
52         "lw $7,20($29);" \
53         "lw $31,4($29);" \
54         "lw $1,0($29);" \
55         "addu $29,$29,8;" \
56         "j $31;" \
57         "move $31,$1;" \
58         ".set reorder;" \
59         ".set at");