Tue Feb 21 00:10:50 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>

* csu/Makefile (crtstuff): New variable consolidates crti, crtn;
 	add crti_s, crtn_s.
	(install-lib, extra-objs, generated-, omit-deps): Use that.
	(initfini): New canned sequence, broken out of crt[in].s rule.
	(crt[in].s rule): Use it.
	(crt[in]_s.s): New rule.
	* csu/initfini.c (GLOBAL): New macro; define it to empty if undefined.
	(_init, _fini): Use GLOBAL as storage class.
	Add self reference to avoid GCC optimizing out the functions.

	* Makefile (headers): Remove $(stddef.h).
	* Makeconfig (stddef.h): Variable removed; now require gcc version
 	>= 2.2.
	* stddef.h: File removed.

Mon Feb 20 19:42:31 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/unix/bsd/ultrix4/mips/start.S: Remove `__environ'
 	definition.
	* sysdeps/unix/bsd/osf1/alpha/start.S: Likewise.

	* stdlib/strtod.c: Allow the string to start with a decimal point
 	without a leading zero.
This commit is contained in:
Roland McGrath 1995-02-21 06:02:58 +00:00
parent 41d43dbce0
commit 37f91d336d
9 changed files with 78 additions and 49 deletions

View File

@ -1,3 +1,29 @@
Tue Feb 21 00:10:50 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* csu/Makefile (crtstuff): New variable consolidates crti, crtn;
add crti_s, crtn_s.
(install-lib, extra-objs, generated-, omit-deps): Use that.
(initfini): New canned sequence, broken out of crt[in].s rule.
(crt[in].s rule): Use it.
(crt[in]_s.s): New rule.
* csu/initfini.c (GLOBAL): New macro; define it to empty if undefined.
(_init, _fini): Use GLOBAL as storage class.
Add self reference to avoid GCC optimizing out the functions.
* Makefile (headers): Remove $(stddef.h).
* Makeconfig (stddef.h): Variable removed; now require gcc version
>= 2.2.
* stddef.h: File removed.
Mon Feb 20 19:42:31 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/unix/bsd/ultrix4/mips/start.S: Remove `__environ'
definition.
* sysdeps/unix/bsd/osf1/alpha/start.S: Likewise.
* stdlib/strtod.c: Allow the string to start with a decimal point
without a leading zero.
Mon Feb 20 04:04:57 1995 Roland McGrath <roland@duality.gnu.ai.mit.edu> Mon Feb 20 04:04:57 1995 Roland McGrath <roland@duality.gnu.ai.mit.edu>
* Makefile (subdirs): Put csu first. * Makefile (subdirs): Put csu first.

View File

@ -134,12 +134,6 @@ ifndef includedir
includedir = $(exec_prefix)/include includedir = $(exec_prefix)/include
endif endif
# Define if the library should install its own <stddef.h>.
# Do this unless you are using version 2.2 or later of GCC.
ifndef stddef.h
stddef.h = stddef.h
endif
# Where to install machine-independent data files. # Where to install machine-independent data files.
# These are the timezone database, and eventually the locale database. # These are the timezone database, and eventually the locale database.
ifndef datadir ifndef datadir

View File

@ -79,7 +79,7 @@ subdirs := $(filter mach,$(subdirs)) $(filter hurd,$(subdirs)) \
no-libc.a bin lib \ no-libc.a bin lib \
data headers others) data headers others)
headers := features.h errno.h sys/errno.h errnos.h limits.h $(stddef.h) headers := features.h errno.h sys/errno.h errnos.h limits.h
aux = sysdep $(libc-init) version aux = sysdep $(libc-init) version
echo-headers: subdir_echo-headers echo-headers: subdir_echo-headers

View File

@ -39,33 +39,51 @@ all: # Make this the default target; it will be defined in Rules.
include ../Makeconfig include ../Makeconfig
ifneq ($(elf),yes) ifneq ($(elf),yes)
# When not using ELF, there is just one startfile, called crt0.o. # When not using ELF, there is just one startfile, called crt0.o.
start-installed-name = crt0.o start-installed-name = crt0.o
else else
# In the ELF universe, crt0.o is called crt1.o, and there are # In the ELF universe, crt0.o is called crt1.o, and there are
# some additional bizarre files. # some additional bizarre files.
start-installed-name = crt1.o start-installed-name = crt1.o
install-lib += crti.o crtn.o
extra-objs += crti.o crtn.o # These are the special initializer/finalizer files. They are always the
generated += crti.s crtn.s # first and last file in the link. crti.o ... crtn.o are used for normal
omit-deps += crti crtn # linking; they define the global "functions" _init and _fini to run the
# .init and .fini sections. crti_s.o ... crtn_s.o are for making shared
# library objects; they put the prologue/epilogue code into the .init and
# .fini sections, but define no global symbols.
crtstuff = crti crtn crti_s crtn_s
install-lib += $(crtstuff:=.o)
extra-objs += $(crtstuff:=.o)
generated += $(crtstuff:=.s)
omit-deps += $(crtstuff)
# Compile initfini.c to assembly code, which contains embedded shell # Compile initfini.c to assembly code, which contains embedded shell
# commands that prodice crti.s-new and crtn.s-new when run. We need to # commands that prodice crti.s-new and crtn.s-new when run. We need to
# disable emission of .size directives and debugging information, since # disable emission of .size directives and debugging information, since
# they will get confused by the splitting of the output we do. # they will get confused by the splitting of the output we do.
$(objpfx)cr%i.s $(objpfx)cr%n.s: initfini.c $(objpfx)cr%i.s $(objpfx)cr%n.s: initfini.c; $(initfini)
-rm -f $(objpfx)crtcommon.tmp $(objpfx)cr%i_s.s $(objpfx)cr%n_s.s: initfini.c; $(initfini)
(echo 'cat > crtcommon.tmp <<\EOF_common'; \
$(CC) $< $(CPPFLAGS) $(CFLAGS) -finhibit-size-directive -g0 -S -o -; \
echo 'EOF_common') | (cd $(@D); $(SHELL))
cat $(objpfx)crtcommon.tmp >> $(objpfx)crti.s-new
cat $(objpfx)crtcommon.tmp >> $(objpfx)crtn.s-new
rm -f $(objpfx)crtcommon.tmp
mv -f $(objpfx)crti.s-new $(objpfx)crti.s
mv -f $(objpfx)crtn.s-new $(objpfx)crtn.s
endif
define initfini
-rm -f $(objpfx)crtcommon.tmp
(echo 'cat > crtcommon.tmp <<\EOF_common'; \
$(CC) $< $(CPPFLAGS) $(CFLAGS) \
$(patsubst %,-DGLOBAL=static,$(filter %_s.s,$@)) \
-finhibit-size-directive -g0 -S -o -; \
echo 'EOF_common') | (cd $(@D); $(SHELL))
cat $(objpfx)crtcommon.tmp >> $(objpfx)crti.s-new
cat $(objpfx)crtcommon.tmp >> $(objpfx)crtn.s-new
rm -f $(objpfx)crtcommon.tmp
mv -f $(objpfx)crti.s-new $(subst crtn,crti,$@)
mv -f $(objpfx)crtn.s-new $(subst crti,crtn,$@)
endef
endif
include ../Rules include ../Rules

View File

@ -34,11 +34,18 @@ Cambridge, MA 02139, USA. */
#include <stdlib.h> #include <stdlib.h>
/* We are compiled with -DGLOBAL=static to generate the versions used for
shared libraries' .init and .fini sections, which do not have entry
point symbols. */
#ifndef GLOBAL
#define GLOBAL
#endif
/* These declarations make the functions go in the right sections when /* These declarations make the functions go in the right sections when
we define them below. GCC syntax does not allow the attribute we define them below. GCC syntax does not allow the attribute
specifications to be in the function definitions themselves. */ specifications to be in the function definitions themselves. */
void _init (void) __attribute__ ((section (".init"))); GLOBAL void _init (void) __attribute__ ((section (".init")));
void _fini (void) __attribute__ ((section (".fini"))); GLOBAL void _fini (void) __attribute__ ((section (".fini")));
/* End the here document containing the initial common code. /* End the here document containing the initial common code.
Then move the output file crtcommon.tmp to crti.s-new and crtn.s-new. */ Then move the output file crtcommon.tmp to crti.s-new and crtn.s-new. */
@ -48,9 +55,10 @@ cp -f crti.s-new crtn.s-new");
/* Append the .init prologue to crti.s-new. */ /* Append the .init prologue to crti.s-new. */
asm ("cat >> crti.s-new <<\\EOF.crti.init"); asm ("cat >> crti.s-new <<\\EOF.crti.init");
void GLOBAL void
_init (void) _init (void)
{ {
(void) &_init; /* Don't optimize out the function! */
/* End the here document containing the .init prologue code. /* End the here document containing the .init prologue code.
Then fetch the .section directive just written and append that Then fetch the .section directive just written and append that
to crtn.s-new, followed by the function epilogue. */ to crtn.s-new, followed by the function epilogue. */
@ -66,9 +74,10 @@ asm ("\nEOF.crtn.init\
\n\ \n\
cat >> crti.s-new <<\\EOF.crti.fini"); cat >> crti.s-new <<\\EOF.crti.fini");
void GLOBAL void
_fini (void) _fini (void)
{ {
(void) &_fini; /* Don't optimize out the function! */
/* End the here document containing the .fini prologue code. /* End the here document containing the .fini prologue code.
Then fetch the .section directive just written and append that Then fetch the .section directive just written and append that
to crtn.s-new, followed by the function epilogue. */ to crtn.s-new, followed by the function epilogue. */

View File

@ -396,7 +396,7 @@ STRTOF (nptr, endptr)
/* Return 0.0 if no legal string is found. /* Return 0.0 if no legal string is found.
No character is used even if a sign was found. */ No character is used even if a sign was found. */
if (!isdigit (c)) if (!isdigit (c) && (c != decimal || !isdigit (cp[1])))
RETURN (0.0, nptr); RETURN (0.0, nptr);
/* Record the start of the digits, in case we will check their grouping. */ /* Record the start of the digits, in case we will check their grouping. */

View File

@ -18,13 +18,6 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
#ifndef HAVE_WEAK_SYMBOLS
#define __environ environ
#else
weak_alias (__environ, environ)
#endif
.comm __environ, 8
.comm errno, 4 .comm errno, 4
!.sdata !.sdata

View File

@ -18,13 +18,6 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
#ifndef HAVE_WEAK_SYMBOLS
#define __environ environ
#else
weak_alias (__environ, environ)
#endif
.comm __environ, 4
.comm errno, 4 .comm errno, 4
ENTRY(__start) ENTRY(__start)

View File

@ -35,11 +35,8 @@ weak_alias (__data_start, data_start)
#define DECL_DUMMIES #define DECL_DUMMIES
#endif #endif
VOLATILE int errno; #ifndef errno
volatile int errno;
#ifndef HAVE_WEAK_SYMBOLS
#undef environ
#define __environ environ
#endif #endif
extern void EXFUN(__libc_init, (int argc, char **argv, char **envp)); extern void EXFUN(__libc_init, (int argc, char **argv, char **envp));
@ -66,11 +63,10 @@ DEFUN_VOID(_start)
start1(); start1();
} }
#if !defined (NO_UNDERSCORES) && defined (HAVE_GNU_LD) && !defined (__GNUC__) #if !defined (NO_UNDERSCORES) && defined (HAVE_WEAK_SYMBOLS)
/* Make an alias called `start' (no leading underscore, /* Make an alias called `start' (no leading underscore,
so it can't conflict with C symbols) for `_start'. */ so it can't conflict with C symbols) for `_start'. */
asm(".stabs \"start\",11,0,0,0"); asm (".weak start; start = _start");
asm(".stabs \"__start\",1,0,0,0");
#endif #endif
#endif #endif