-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Andreas Jaeger
committed
Aug 21, 2002
1 parent
c761cdf
commit 0bbade1
Showing
2 changed files
with
106 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
/* Machine-specific calling sequence for `mcount' profiling function. x86-64 version. | ||
Copyright (C) 2002 Free Software Foundation, Inc. | ||
Contributed by Andreas Jaeger <aj@suse.de>. | ||
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 %rcx, %rdx, %rsi, %rdi, | ||
%r8, %r9 as they may contain function arguments. */ | ||
|
||
#include <sysdep.h> | ||
|
||
ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(_mcount) | ||
ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(_mcount), @function) | ||
.align ALIGNARG(4) | ||
C_LABEL(_mcount) | ||
/* Allocate space for 7 registers. */ | ||
subq $56,$rsp | ||
movq $rax,($rsp) | ||
movq %rcx,8($rsp) | ||
movq %rdx,16($rsp) | ||
movq %rsi,24($rsp) | ||
movq %rdi,32($rsp) | ||
movq %r8,40($rsp) | ||
movq %r9,48($rsp) | ||
|
||
/* Setup parameter for __mcount_internal. */ | ||
/* selfpc is the return address on the stack. */ | ||
movq 48(%rsp),%rsi | ||
/* Get frompc via the frame pointer. */ | ||
movq 8(%rbp),%rdi | ||
#ifdef PIC | ||
call C_SYMBOL_NAME(__mcount_internal)@PLT | ||
#else | ||
call C_SYMBOL_NAME(__mcount_internal) | ||
#endif | ||
/* Pop the saved registers. Please note that `mcount' has no | ||
return value. */ | ||
movq ($rsp),%r9 | ||
movq 8($rsp),%r8 | ||
movq 16($rsp),%rdi | ||
movq 24($rsp),%rsi | ||
movq 32($rsp),%rdx | ||
movq 40($rsp),%rcx | ||
movq 48($rsp),%rax | ||
addq $56,$rsp | ||
ret | ||
|
||
ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) | ||
|
||
#undef mcount | ||
weak_alias(_mcount, mcount) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/* x86-64-specific implementation of profiling support. | ||
Copyright (C) 2002 Free Software Foundation, Inc. | ||
This file is part of the GNU C Library. | ||
Contributed by Andreas Jaeger <aj@suse.de>, 2002. | ||
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. */ | ||
|
||
#include <sysdep.h> | ||
|
||
/* We need a special version of the `mcount' function since for x86-64 | ||
so that we do not use __builtin_return_address (N) and avoid | ||
clobbering of register. */ | ||
|
||
|
||
/* We must not pollute the global namespace. */ | ||
#define mcount_internal __mcount_internal | ||
|
||
void mcount_internal (u_long frompc, u_long selfpc); | ||
|
||
#define _MCOUNT_DECL(frompc, selfpc) \ | ||
void mcount_internal (u_long frompc, u_long selfpc) | ||
|
||
|
||
/* Define MCOUNT as empty since we have the implementation in another | ||
file. */ | ||
#define MCOUNT |