diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-05-08 20:42:23 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-05-08 20:42:23 +0000 |
commit | c7562c74ed1b18fda99bfd5f6c4b61a449bcb35f (patch) | |
tree | e41cbd118cf034f46d55af209737acb87f0eaf2c /csu | |
parent | b9a60a8f14b13145029d370fdeffd34b37c69c6a (diff) | |
download | glibc-c7562c74ed1b18fda99bfd5f6c4b61a449bcb35f.tar.gz glibc-c7562c74ed1b18fda99bfd5f6c4b61a449bcb35f.tar.xz glibc-c7562c74ed1b18fda99bfd5f6c4b61a449bcb35f.zip |
Update.
* intl/locale.alias: Change italian to it_IT.ISO-8859-1. Reported by Ottavio G. Rizzo <otto@mast.queensu.ca>. 1998-05-08 19:24 Zack Weinberg <zack@rabi.phys.columbia.edu> * Makefile (+subdir-inits): Delete variable. (+init_subdirs): Likewise. (aux): Likewise. (before-compile): Likewise. (libc-init): Delete stanza. (version-info.h): Delete rule and associated variable. (distribute): Don't distribute moved files. * Makerules (interp-obj): It lives in elf now. Only use it if $(elf) is set. Delete rule to build it. * csu/Makefile: Build set-init.o and/or munch-init.o. Build version.o and version-info.h. Minor cleanups. (routines): Add libc-init, sysdep, version. (generated): Add version-info.h. * elf/Makefile: Build interp.os. * interp.c: Moved to elf. * set-init.c: Moved to csu. * munch-init.c: Likewise. * munch.awk: Likewise. * version.c: Likewise. * Makeconfig: Add emacs mode marker. * Makerules: Likewise. * Rules: Likewise, and also unconfuse syntax highlighting with a fake comment. 1998-05-08 Ulrich Drepper <drepper@cygnus.com>
Diffstat (limited to 'csu')
-rw-r--r-- | csu/Makefile | 57 | ||||
-rw-r--r-- | csu/munch-tmpl.c | 38 | ||||
-rw-r--r-- | csu/munch.awk | 11 | ||||
-rw-r--r-- | csu/set-init.c | 23 | ||||
-rw-r--r-- | csu/version.c | 73 |
5 files changed, 197 insertions, 5 deletions
diff --git a/csu/Makefile b/csu/Makefile index da17b2c301..6d804f46aa 100644 --- a/csu/Makefile +++ b/csu/Makefile @@ -27,7 +27,7 @@ subdir := csu -routines = init-first libc-start +routines = init-first libc-start $(libc-init) sysdep version csu-dummies = $(filter-out $(start-installed-name),crt1.o Mcrt1.o) extra-objs = start.o gmon-start.o \ $(start-installed-name) g$(start-installed-name) \ @@ -36,17 +36,35 @@ omit-deps = $(patsubst %.o,%,$(start-installed-name) g$(start-installed-name) \ $(csu-dummies)) install-lib = $(start-installed-name) g$(start-installed-name) \ $(csu-dummies) -distribute = initfini.c gmon-start.c start.c defs.awk abi-note.S init.c +distribute = initfini.c gmon-start.c start.c defs.awk munch.awk \ + abi-note.S init.c +generated = version-info.h +before-compile = $(objpfx)version-info.h all: # Make this the default target; it will be defined in Rules. include ../Makeconfig -ifeq ($(elf),yes) -before-compile = $(objpfx)abi-tag.h +ifeq (yes,$(elf)) +before-compile += $(objpfx)abi-tag.h generated += abi-tag.h endif +ifeq (yes,$(gnu-ld)) +libc-init = set-init +else +libc-init = munch-init +$(objpfx)munch-init.c: munch.awk munch-tmpl.c $(+subdir_inits) + $(AWK) -f $< subdirs='$(+init_subdirs)' $(word 2,$^) > $@-t + mv -f $@-t $@ +generated += munch-init.c + +# All initialization source files. ++subdir_inits := $(wildcard $(foreach dir,$(subdirs),$(dir)/init-$(dir).c)) +# All subdirectories containing initialization source files. ++init_subdirs := $(patsubst %/,%,$(dir $(+subdir_inits))) +endif + ifeq ($(have-initfini),yes) CPPFLAGS += -DHAVE_INITFINI @@ -130,11 +148,12 @@ $(addprefix $(objpfx),$(filter-out $(start-installed-name),$(csu-dummies))): $(COMPILE.c) $(@:.o=.c) $(OUTPUT_OPTION) rm -f $(@:.o=.c) +# These headers are used by the startup code. / := $$/# bite me. $(objpfx)abi-tag.h: $(..)abi-tags $(make-target-directory) rm -f $@.new - sed 's/#.*$//;/^[ ]*$$/d' $< | while read conf tag; do \ + sed 's/#.*$//;/^[ ]*$/d' $< | while read conf tag; do \ test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \ : "$$conf"` != 0 || continue; \ echo "$$tag" | sed > $@.new \ @@ -142,3 +161,31 @@ $(objpfx)abi-tag.h: $(..)abi-tags done if test -r $@.new; then mv -f $@.new $@; \ else echo >&2 'This configuration not matched in $<'; exit 1; fi + +all-Banner-files = $(wildcard $(addsuffix /Banner, \ + $(addprefix $(..), $(subdirs)))) +$(objpfx)version-info.h: $(common-objpfx)config.make $(all-Banner-files) + $(make-target-directory) + (case $(config-os) in \ + linux*) version=`(echo -e "#include <linux/version.h>\nUTS_RELEASE"\ + | $(CC) -E -P - | \ + sed -e 's/"\([^"]*\)".*/\1/p' -e d) 2>/dev/null`;\ + if [ -z "$$version" ]; then \ + if [ -r /proc/version ]; then \ + version=`sed 's/.*version \([^ ]*\) .*/>>\1<</' \ + < /proc/version`; \ + else \ + version=`uname -r`; \ + fi; \ + fi; \ + echo -n "\"Compiled on a Linux $$version system "; \ + echo "on `date +%Y-%m-%d`.\\n\"" ;; \ + *) ;; \ + esac; \ + files="$(all-Banner-files)"; \ + if test -n "$$files"; then \ + echo "\"Available extensions:"; \ + sed -e '/^#/d' -e 's/^[[:space:]]*/ /' $$files; \ + echo "\""; \ + fi) > $@T + mv -f $@T $@ diff --git a/csu/munch-tmpl.c b/csu/munch-tmpl.c new file mode 100644 index 0000000000..c24eb89787 --- /dev/null +++ b/csu/munch-tmpl.c @@ -0,0 +1,38 @@ +/* Copyright (C) 1991, 1995, 1997 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <stdlib.h> + + +EXTERNS + +void +__libc_init (int argc, char **argv, char **envp) +{ + CALLS + +#ifdef HAVE_INITFINI + { + /* These functions are defined in crti.o to run the .init and .fini + sections, which are used for initializers and finalizers. */ + extern void _init __P ((void)), _fini __P ((void)); + atexit (&_fini); /* Arrange for _fini to run at exit. */ + _init (); + } +#endif +} diff --git a/csu/munch.awk b/csu/munch.awk new file mode 100644 index 0000000000..1ed68686c1 --- /dev/null +++ b/csu/munch.awk @@ -0,0 +1,11 @@ +BEGIN { special = 0 } + +/EXTERNS/ { ndirs = split(subdirs, dirs) + for (i = 1; i <= ndirs; ++i) + printf "extern void __init_%s __P ((int argc, char **argv, char **envp));\n", dirs[i] + special = 1 } +/CALLS/ { ndirs = split(subdirs, dirs) + for (i = 1; i <= ndirs; ++i) printf " __init_%s (argc, argv, envp);\n", dirs[i] + special = 1 } + +{ if (special == 0) print $0; special = 0 } diff --git a/csu/set-init.c b/csu/set-init.c new file mode 100644 index 0000000000..4aea847db5 --- /dev/null +++ b/csu/set-init.c @@ -0,0 +1,23 @@ +/* Copyright (C) 1991, 1992, 1994, 1995, 1997 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <stdlib.h> +#include <set-hooks.h> + +DEFINE_HOOK_RUNNER (__libc_subinit, __libc_init, + (int argc, char **argv, char **envp), (argc, argv, envp)) diff --git a/csu/version.c b/csu/version.c new file mode 100644 index 0000000000..2285c75506 --- /dev/null +++ b/csu/version.c @@ -0,0 +1,73 @@ +/* Copyright (C) 1991,92,93,94,95,96,97,98 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include "version.h" +#include <gnu/libc-version.h> + +static const char __libc_release[] = RELEASE; +static const char __libc_version[] = VERSION; + +static const char banner[] = +"GNU C Library "RELEASE" release version "VERSION", by Roland McGrath et al.\n\ +Copyright (C) 1992, 93, 94, 95, 96, 97, 98 Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions.\n\ +There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\ +PARTICULAR PURPOSE.\n\ +Compiled by GNU CC version "__VERSION__".\n" +#include "version-info.h" +"Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"; + +#include <unistd.h> + +void +__libc_print_version (void) +{ + __write (STDOUT_FILENO, banner, sizeof banner - 1); +} + +const char * +__gnu_get_libc_release (void) +{ + return __libc_release; +} +weak_alias (__gnu_get_libc_release, gnu_get_libc_release) + +const char * +__gnu_get_libc_version (void) +{ + return __libc_version; +} +weak_alias (__gnu_get_libc_version, gnu_get_libc_version) + +#ifdef HAVE_ELF +/* This function is the entry point for the shared object. + Running the library as a program will get here. */ + +void +__libc_main (void) +{ + __libc_print_version (); + _exit (0); +} +#endif + +/* + Local Variables: + version-control: never + End: +*/ |