From dbdb6189d5d66b165b4b502498572cbe7e78874e Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Tue, 13 Feb 1996 05:46:59 +0000 Subject: Tue Feb 13 00:12:12 1996 Roland McGrath * 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 * 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 * 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. --- gmon/mcount.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'gmon/mcount.c') diff --git a/gmon/mcount.c b/gmon/mcount.c index 523217d..ac3584d 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 +#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 , * which is included by . */ MCOUNT +#endif -- cgit v1.1