aboutsummaryrefslogtreecommitdiff
path: root/gmon/mcount.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1996-02-13 05:46:59 +0000
committerRoland McGrath <roland@gnu.org>1996-02-13 05:46:59 +0000
commitdbdb6189d5d66b165b4b502498572cbe7e78874e (patch)
treed59372fc7b4722490f8fffea719081e8cc704ab1 /gmon/mcount.c
parentafced61c8f6efc37c3ebeb2f9032f516982b8f21 (diff)
downloadglibc-dbdb6189d5d66b165b4b502498572cbe7e78874e.tar
glibc-dbdb6189d5d66b165b4b502498572cbe7e78874e.tar.gz
glibc-dbdb6189d5d66b165b4b502498572cbe7e78874e.tar.bz2
glibc-dbdb6189d5d66b165b4b502498572cbe7e78874e.zip
Tue Feb 13 00:12:12 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* gmon/Makefile (headers): Remove machine-gmon.h. * sysdeps/stub/machine-gmon.h, sysdeps/i386/machine-gmon.h: Removed. * gmon/mcount.c [! NO_UNDERSCORES] (_mcount): Specify "mcount" as the asm name. (_mcount): Define normally, taking no args. Use __builtin_return_address to fetch PC values of caller and caller's caller. Tue Feb 13 00:12:12 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu> * gmon/Makefile (headers): Remove machine-gmon.h. * sysdeps/stub/machine-gmon.h, sysdeps/i386/machine-gmon.h: Removed. * gmon/mcount.c [! NO_UNDERSCORES] (_mcount): Specify "mcount" as the asm name. (_mcount): Define normally, taking no args. Use __builtin_return_address to fetch PC values of caller and caller's caller. * Makerules: Rewrote rules to update libc archives of all flavors. Define separate specific rules for each flavor using o-iterator. * sysdeps/unix/Makefile: Include s-proto.d only ifdef subdir. Sat Feb 10 11:35:16 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makerules (ar-symtab-name): New macro. Replace all occurences of __.SYMDEF by $(ar-symtab-name). * sysdeps/unix/sysv/Makefile (ar-symtab-name): Define as empty. * Makefile (configure, %/configure): Depend on aclocal.m4. * Make-dist (configure, %/configure): Likewise. * sysdeps/unix/Makefile: Include s-proto.d for its deps. * gmon/sys/gmon.h: Don't include machine-gmon.h; those defns are only needed in the implementation, not for any users. * time/northamerica: Updated from ADO 96c, new rules for Mexico in 1996.
Diffstat (limited to 'gmon/mcount.c')
-rw-r--r--gmon/mcount.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/gmon/mcount.c b/gmon/mcount.c
index 523217d1d2..ac3584d4a5 100644
--- a/gmon/mcount.c
+++ b/gmon/mcount.c
@@ -48,14 +48,38 @@ static char sccsid[] = "@(#)mcount.c 8.1 (Berkeley) 6/4/93";
* _mcount updates data structures that represent traversals of the
* program's call graph edges. frompc and selfpc are the return
* address and function address that represents the given call graph edge.
- *
+ *
* Note: the original BSD code used the same variable (frompcindex) for
* both frompcindex and frompc. Any reasonable, modern compiler will
* perform this optimization.
*/
+#if 0
_MCOUNT_DECL(frompc, selfpc) /* _mcount; may be static, inline, etc */
register u_long frompc, selfpc;
+#endif
+
+/* GCC version 2 gives us a perfect magical function to get
+ just the information we need:
+ void *__builtin_return_address (unsigned int N)
+ returns the return address of the frame N frames up. */
+
+#if __GNUC__ < 2
+ #error "This file uses __builtin_return_address, a GCC 2 extension."
+#endif
+
+#include <sysdep.h>
+#ifndef NO_UNDERSCORES
+/* The asm symbols for C functions are `_function'.
+ The canonical name for the counter function is `mcount', no _. */
+void _mcount (void) asm ("mcount");
+#endif
+
+void
+_mcount (void)
{
+ register u_long selfpc = (u_long) __builtin_return_address (0);
+ register u_long frompc = (u_long) __builtin_return_address (1);
+
register u_short *frompcindex;
register struct tostruct *top, *prevtop;
register struct gmonparam *p;
@@ -154,7 +178,7 @@ _MCOUNT_DECL(frompc, selfpc) /* _mcount; may be static, inline, etc */
*frompcindex = toindex;
goto done;
}
-
+
}
done:
#ifdef KERNEL
@@ -171,8 +195,10 @@ overflow:
return;
}
+#if 0 /* Obsolete with __builtin_return_address. */
/*
* Actual definition of mcount function. Defined in <machine/profile.h>,
* which is included by <sys/gmon.h>.
*/
MCOUNT
+#endif