diff options
-rw-r--r-- | ChangeLog | 32 | ||||
-rw-r--r-- | Make-dist | 6 | ||||
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | Makerules | 36 | ||||
-rw-r--r-- | gmon/Makefile | 2 | ||||
-rw-r--r-- | gmon/mcount.c | 30 | ||||
-rw-r--r-- | gmon/sys/gmon.h | 1 | ||||
-rw-r--r-- | sysdeps/i386/machine-gmon.h | 29 | ||||
-rw-r--r-- | sysdeps/stub/machine-gmon.h | 30 | ||||
-rw-r--r-- | sysdeps/unix/Makefile | 8 |
10 files changed, 93 insertions, 85 deletions
@@ -1,5 +1,37 @@ +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. + Mon Feb 12 03:10:41 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu> + * 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. + * sunrpc/pm_getport.c: #if 0 out gratuitous inclusion of <net/if.h>. * sunrpc/pm_getmaps.c: Likewise. @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +# Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -170,8 +170,8 @@ mv -f $@.new $@ test ! -d CVS || cvs commit -m'Regenerated: autoconf $(ACFLAGS) $<' $@ endef -configure: configure.in; $(autoconf-it) -%/configure: %/configure.in; $(autoconf-it) +configure: configure.in aclocal.m4; $(autoconf-it) +%/configure: %/configure.in aclocal.m4; $(autoconf-it) .PHONY: dist dist: $(tardir).tar.gz $(tardir)-crypt.tar.gz @@ -36,8 +36,8 @@ mv -f $@.new $@ test ! -d CVS || cvs commit -m'Regenerated: autoconf $(ACFLAGS) $<' $@ endef -configure: configure.in; $(autoconf-it) -%/configure: %/configure.in; $(autoconf-it) +configure: configure.in aclocal.m4; $(autoconf-it) +%/configure: %/configure.in aclocal.m4; $(autoconf-it) include Makeconfig @@ -65,6 +65,11 @@ endif # Add -I switches to get the right sysdep directories. # `+includes' in Makeconfig references $(+sysdep-includes). +sysdep-includes := $(addprefix -I,$(+sysdep_dirs)) + +# The name of the symbol table archive member. The default is suitable for +# BSD style archives. It can be overridden in sysdep Makefiles when SYSV +# style archive are used. +ar-symtab-name = __.SYMDEF # Include any system-specific makefiles. @@ -349,7 +354,7 @@ ARFLAGS := r$(verbose) lib: lib-noranlib $(foreach l,$(libtypes),$(patsubst %,$(common-objpfx)$l,c)) # Pattern rule for libraries: depend on the __.SYMDEF member updated by ranlib. -lib%.a: lib%.a(__.SYMDEF) ; +lib%.a: lib%.a($(ar-symtab-name)) ; libobjs: $(foreach o,$(object-suffixes),\ $(common-objpfx)$(patsubst %,$(libtype$o),c)(\ @@ -392,21 +397,18 @@ endif endif -# Rules to update the __.SYMDEF member with ranlib. -# To consolidate, each flavor library's __.SYMDEF member -# depends on the imaginary intermediate file `symdef.SUFFIX', -# where SUFFIX is that flavor's object suffix; then a pattern rule -# "remakes" symdef.% depending on all the libc.a(foo.%) files in $(objects). -$(common-objpfx)$(patsubst %,$(libtype.o),c)(__.SYMDEF): symdef.o -$(common-objpfx)$(patsubst %,$(libtype.so),c)(__.SYMDEF): symdef.so -$(common-objpfx)$(patsubst %,$(libtype.po),c)(__.SYMDEF): symdef.po -$(common-objpfx)$(patsubst %,$(libtype.go),c)(__.SYMDEF): symdef.go -symdef.%: $(foreach o,$(object-suffixes),\ - $(common-objpfx)$(patsubst %,$(libtype$o),c)(\ - $(patsubst $(objpfx)%.o,%.%,$(objects)))) \ - $(filter subdir_lib,$(firstword $(subdir) subdir_lib)) -# The last line above makes it also depend on subdir_lib for the parent. - $(RANLIB) $(common-objpfx)$(patsubst %,$(libtype.$*),c) +# Rules to update the $(ar-symtab-name) member with ranlib, +# one for each object flavor. +define o-iterator-doit +$(common-objpfx)$(patsubst %,$(libtype$o),c)($(ar-symtab-name)): \ + $(common-objpfx)$(patsubst %,$(libtype$o),c)(\ + $(patsubst $(objpfx)%.o,%$o,$(objects))) \ + $(filter subdir_lib,$(firstword $(subdir) subdir_lib)); \ + $$(RANLIB) $$(common-objpfx)$$(patsubst %,$$(libtype$o),c) +endef +object-suffixes-left = $(object-suffixes) +include $(o-iterator) + # This makes all the object files. .PHONY: objects objs @@ -613,7 +615,7 @@ check: tests .PHONY: TAGS TAGS: distinfo $(..)MakeTAGS - $(MAKE) $(addprefix -f ,$^) + $(MAKE) $(addprefix -f ,$^) $@ .PHONY: echo-headers echo-headers: diff --git a/gmon/Makefile b/gmon/Makefile index e44e3c75af..8fd25c6258 100644 --- a/gmon/Makefile +++ b/gmon/Makefile @@ -21,7 +21,7 @@ # subdir := gmon -headers := sys/gmon.h machine-gmon.h +headers := sys/gmon.h routines := gmon mcount profil 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 diff --git a/gmon/sys/gmon.h b/gmon/sys/gmon.h index 7064a43cb9..f7af72b98a 100644 --- a/gmon/sys/gmon.h +++ b/gmon/sys/gmon.h @@ -37,7 +37,6 @@ #define _SYS_GMON_H_ #include <sys/cdefs.h> -#include <machine-gmon.h> /* * Structure prepended to gmon.out profiling data file. diff --git a/sysdeps/i386/machine-gmon.h b/sysdeps/i386/machine-gmon.h deleted file mode 100644 index 4128390b8b..0000000000 --- a/sysdeps/i386/machine-gmon.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. i386 -Copyright (C) 1995 Free Software Foundation, Inc. -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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#define _MCOUNT_DECL static inline void _mcount - -/* Call _mcount with our the return PC for our caller, - and the return PC our caller will return to. */ -#define MCOUNT \ -void mcount (u_long arg) \ -{ \ - _mcount (((u_long *) (&arg)[-2])[-1], \ - (&arg)[-1]); \ -} diff --git a/sysdeps/stub/machine-gmon.h b/sysdeps/stub/machine-gmon.h deleted file mode 100644 index 166faedab6..0000000000 --- a/sysdeps/stub/machine-gmon.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. Stub -Copyright (C) 1995 Free Software Foundation, Inc. -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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#define _MCOUNT_DECL static inline void _mcount - -/* Call _mcount with our the return PC for our caller, - and the return PC our caller will return to. */ -#define MCOUNT \ -void mcount (u_long arg) \ -{ \ - _mcount (caller return PC, my return PC); \ -} - -#error "sysdeps/MACHINE/machine-gmon.h missing" diff --git a/sysdeps/unix/Makefile b/sysdeps/unix/Makefile index a09ea4f76f..fd4166615d 100644 --- a/sysdeps/unix/Makefile +++ b/sysdeps/unix/Makefile @@ -292,4 +292,12 @@ $(objpfx)sysd-syscalls: $(..)sysdeps/unix/make-syscalls.sh \ done > $@T mv -f $@T $@ +# This syscall objects depend on s-proto.d, which is generated to +# specify dependencies generated syscalls with have on headers. +ifdef subdir +# These deps use file names relative to a subdir, so don't +# include them in the parent directory. +-include $(objpfx)s-proto.d +endif + endif |