diff options
Diffstat (limited to 'sysdeps/alpha/_mcount.S')
-rw-r--r-- | sysdeps/alpha/_mcount.S | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/sysdeps/alpha/_mcount.S b/sysdeps/alpha/_mcount.S deleted file mode 100644 index c4c921b4f7..0000000000 --- a/sysdeps/alpha/_mcount.S +++ /dev/null @@ -1,107 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. alpha - Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Assembly stub to invoke _mcount(). Compiler generated code calls - this stub after executing a function's prologue and without saving any - registers. It is therefore necessary to preserve a0..a5 as they may - contain function arguments. To work correctly with frame- less - functions, it is also necessary to preserve ra. Finally, division - routines are invoked with a special calling convention and the - compiler treats those calls as if they were instructions. In - particular, it doesn't save any of the temporary registers (caller - saved registers). It is therefore necessary to preserve all - caller-saved registers as well. - - Upon entering _mcount, register $at holds the return address and ra - holds the return address of the function's caller (selfpc and frompc, - respectively in gmon.c language...). */ - -#include <sysdep.h> - - .set noat - .set noreorder - -LEAF(_mcount, 0xb0) - .prologue 0 - - subq sp, 0xb0, sp - stq a0, 0x00(sp) - mov ra, a0 # a0 = caller-pc - stq a1, 0x08(sp) - mov $at, a1 # a1 = self-pc - stq $at, 0x10(sp) - - stq a2, 0x18(sp) - stq a3, 0x20(sp) - stq a4, 0x28(sp) - stq a5, 0x30(sp) - stq ra, 0x38(sp) - stq gp, 0x40(sp) - - br gp, 1f -1: ldgp gp, 0(gp) - - stq t0, 0x48(sp) - stq t1, 0x50(sp) - stq t2, 0x58(sp) - stq t3, 0x60(sp) - stq t4, 0x68(sp) - stq t5, 0x70(sp) - stq t6, 0x78(sp) - - stq t7, 0x80(sp) - stq t8, 0x88(sp) - stq t9, 0x90(sp) - stq t10, 0x98(sp) - stq t11, 0xa0(sp) - stq v0, 0xa8(sp) - - jsr ra, __mcount - - ldq a0, 0x00(sp) - ldq a1, 0x08(sp) - ldq $at, 0x10(sp) # restore self-pc - ldq a2, 0x18(sp) - ldq a3, 0x20(sp) - ldq a4, 0x28(sp) - ldq a5, 0x30(sp) - ldq ra, 0x38(sp) - ldq gp, 0x40(sp) - mov $at, pv # make pv point to return address - ldq t0, 0x48(sp) # this is important under OSF/1 to - ldq t1, 0x50(sp) # ensure that the code that we return - ldq t2, 0x58(sp) # can correctly compute its gp - ldq t3, 0x60(sp) - ldq t4, 0x68(sp) - ldq t5, 0x70(sp) - ldq t6, 0x78(sp) - ldq t7, 0x80(sp) - ldq t8, 0x88(sp) - ldq t9, 0x90(sp) - ldq t10, 0x98(sp) - ldq t11, 0xa0(sp) - ldq v0, 0xa8(sp) - - addq sp, 0xb0, sp - ret zero,($at),1 - - END(_mcount) - -weak_alias (_mcount, mcount) |