From c94a8080d840d47e02b63eda74d26889aa8867fa Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 22 Sep 1998 19:08:42 +0000 Subject: [PATCH] Update. 1998-09-22 19:58 -0400 Zack Weinberg * posix/execvp.c: Don't give up searching the PATH if execve returns ENOTDIR. 1998-09-22 12:53 Ulrich Drepper * sysdeps/unix/sysv/linux/init-first.c (init): Don't call setfpucw only if _dl_fpu_control_set is set. * sysdeps/generic/dl-sysdep.c: Don't set _dl_fpu_control_set. * elf/rtld.c: Don't define _dl_fpu_control_set. * elf/Versions: Remove _dl_fpu_control_set. 1998-09-22 11:51 Ulrich Drepper * sysdeps/unix/sysv/linux/alpha/bits/sigaction.h (SA_ONSTACK): Define. * sysdeps/unix/sysv/linux/sparc/bits/sigaction.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Likewise. Correct values of other SA_* macros according to kernel headers. 1998-09-22 Andreas Schwab * elf/dl-load.c (_dl_init_paths): Avoid warning about unused variable l. * elf/dl-error.c (_dl_catch_error): Avoid warning about clobbering old. 1998-09-21 Andreas Schwab * elf/ldsodefs.h: Fix typo in comment. 1998-09-21 Andreas Schwab * libio/genops.c (_IO_default_pbackfail): Add cast to unsigned char when comparing buffer contents with putback character. 1998-09-21 Andreas Schwab * elf/Makefile (dl-routines, elide-routines.os, rtld-routines): Undo last change. * elf/Versions: Undo last change. Export _dl_fpu_control and _dl_fpu_control_set. * elf/rtld.c (_dl_fpu_control, _dl_fpu_control_set): New variables. Include . * sysdeps/generic/dl-sysdep.c: Store AT_FPUCW value in _dl_fpu_control instead of __fpu_control, set _dl_fpu_control_set to indicate that is was seen. * sysdeps/unix/sysv/linux/init-first.c: Omit call to __setfpucw only if _dl_fpu_control was set and is equal to desired value. * math/Makefile (aux): Undo last change. * math/Versions: Export __fpu_control with version GLIBC_2.0. --- ChangeLog | 52 ++++++++++++++++++++++++++ elf/Versions | 2 +- elf/dl-error.c | 3 +- elf/dl-load.c | 4 +- elf/ldsodefs.h | 2 +- elf/rtld.c | 2 + libio/genops.c | 2 +- math/Makefile | 2 +- math/Versions | 3 ++ posix/execvp.c | 3 +- sysdeps/generic/dl-sysdep.c | 3 +- sysdeps/unix/sysv/linux/alpha/bits/sigaction.h | 3 +- sysdeps/unix/sysv/linux/init-first.c | 10 ++++- sysdeps/unix/sysv/linux/mips/bits/sigaction.h | 11 +++--- sysdeps/unix/sysv/linux/sparc/bits/sigaction.h | 3 +- 15 files changed, 88 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6653962907..378c11c68f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,55 @@ +1998-09-22 19:58 -0400 Zack Weinberg + + * posix/execvp.c: Don't give up searching the PATH if execve + returns ENOTDIR. + +1998-09-22 12:53 Ulrich Drepper + + * sysdeps/unix/sysv/linux/init-first.c (init): Don't call setfpucw only + if _dl_fpu_control_set is set. + * sysdeps/generic/dl-sysdep.c: Don't set _dl_fpu_control_set. + * elf/rtld.c: Don't define _dl_fpu_control_set. + * elf/Versions: Remove _dl_fpu_control_set. + +1998-09-22 11:51 Ulrich Drepper + + * sysdeps/unix/sysv/linux/alpha/bits/sigaction.h (SA_ONSTACK): Define. + * sysdeps/unix/sysv/linux/sparc/bits/sigaction.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Likewise. + Correct values of other SA_* macros according to kernel headers. + +1998-09-22 Andreas Schwab + + * elf/dl-load.c (_dl_init_paths): Avoid warning about unused + variable l. + * elf/dl-error.c (_dl_catch_error): Avoid warning about clobbering + old. + +1998-09-21 Andreas Schwab + + * elf/ldsodefs.h: Fix typo in comment. + +1998-09-21 Andreas Schwab + + * libio/genops.c (_IO_default_pbackfail): Add cast to unsigned + char when comparing buffer contents with putback character. + +1998-09-21 Andreas Schwab + + * elf/Makefile (dl-routines, elide-routines.os, rtld-routines): + Undo last change. + * elf/Versions: Undo last change. Export _dl_fpu_control and + _dl_fpu_control_set. + * elf/rtld.c (_dl_fpu_control, _dl_fpu_control_set): New + variables. Include . + * sysdeps/generic/dl-sysdep.c: Store AT_FPUCW value in + _dl_fpu_control instead of __fpu_control, set _dl_fpu_control_set + to indicate that is was seen. + * sysdeps/unix/sysv/linux/init-first.c: Omit call to __setfpucw + only if _dl_fpu_control was set and is equal to desired value. + * math/Makefile (aux): Undo last change. + * math/Versions: Export __fpu_control with version GLIBC_2.0. + 1998-09-21 Andreas Schwab * sysdeps/m68k/dl-machine.h (elf_machine_lazy_rel): Slightly diff --git a/elf/Versions b/elf/Versions index 2c93632a2b..1cfb5ccf2c 100644 --- a/elf/Versions +++ b/elf/Versions @@ -19,7 +19,7 @@ libc { GLIBC_2.1 { # global variables _dl_profile; _dl_profile_map; _dl_profile_output; _dl_start_profile; - _dl_loaded; _dl_main_searchlist; __fpu_control; + _dl_loaded; _dl_main_searchlist; _dl_fpu_control; # functions used in other libraries _dl_mcount; _dl_mcount_wrapper; _dl_mcount_wrapper_check; _dl_unload_cache; diff --git a/elf/dl-error.c b/elf/dl-error.c index 228c1a80a1..ae63447453 100644 --- a/elf/dl-error.c +++ b/elf/dl-error.c @@ -145,7 +145,8 @@ _dl_catch_error (char **errstring, void *args) { int errcode; - struct catch *old, c; + struct catch *volatile old; + struct catch c; /* We need not handle `receiver' since setting a `catch' is handled before it. */ diff --git a/elf/dl-load.c b/elf/dl-load.c index cb0a4ff753..3e5e291018 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -456,10 +456,12 @@ _dl_init_paths (const char *llp) const char **strp; struct r_search_path_elem *pelem, **aelem; size_t round_size; +#ifdef PIC + struct link_map *l; +#endif /* Fill in the information about the application's RPATH and the directories addressed by the LD_LIBRARY_PATH environment variable. */ - struct link_map *l; /* Get the capabilities. */ capstr = _dl_important_hwcaps (_dl_platform, _dl_platformlen, diff --git a/elf/ldsodefs.h b/elf/ldsodefs.h index 807613e4b4..946cf34439 100644 --- a/elf/ldsodefs.h +++ b/elf/ldsodefs.h @@ -148,7 +148,7 @@ extern unsigned long int _dl_hwcap; /* Mask for important hardware capabilities we honour. */ extern unsigned long int _dl_hwcap_mask; -/* File deccriptor to write debug messages to. */ +/* File descriptor to write debug messages to. */ extern int _dl_debug_fd; /* Names of shared object for which the RPATH should be ignored. */ diff --git a/elf/rtld.c b/elf/rtld.c index 7c2e054d88..4d67176d03 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "dynamic-link.h" #include "dl-librecon.h" @@ -73,6 +74,7 @@ int _dl_verbose; const char *_dl_platform; size_t _dl_platformlen; unsigned long _dl_hwcap; +fpu_control_t _dl_fpu_control = _FPU_DEFAULT; struct r_search_path *_dl_search_paths; const char *_dl_profile; const char *_dl_profile_output; diff --git a/libio/genops.c b/libio/genops.c index 2dce95f842..c75be6234b 100644 --- a/libio/genops.c +++ b/libio/genops.c @@ -872,7 +872,7 @@ _IO_default_pbackfail (fp, c) int c; { if (fp->_IO_read_ptr > fp->_IO_read_base && !_IO_in_backup (fp) - && fp->_IO_read_ptr[-1] == c) + && (unsigned char) fp->_IO_read_ptr[-1] == c) --fp->_IO_read_ptr; else { diff --git a/math/Makefile b/math/Makefile index 59e085d2bc..5110375413 100644 --- a/math/Makefile +++ b/math/Makefile @@ -29,7 +29,7 @@ headers := math.h bits/mathcalls.h bits/mathinline.h bits/huge_val.h \ distribute := math_private.h machine/asm.h machine/endian.h # FPU support code. -aux := setfpucw +aux := setfpucw fpu_control # Build the -lm library. diff --git a/math/Versions b/math/Versions index 580fa253aa..104c7e5a30 100644 --- a/math/Versions +++ b/math/Versions @@ -4,6 +4,9 @@ libc { __isnan; __isnanf; __isnanl; __finite; __finitef; __finitel; __isinf; __isinff; __isinfl; + # global variables + __fpu_control; + # c* copysign; copysignf; copysignl; diff --git a/posix/execvp.c b/posix/execvp.c index 2eda603c39..5b1e14bf1a 100644 --- a/posix/execvp.c +++ b/posix/execvp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 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 @@ -121,6 +121,7 @@ execvp (file, argv) got_eacces = 1; case ENOENT: case ESTALE: + case ENOTDIR: /* Those errors indicate the file is missing or not executable by us, in which case we want to just try the next path directory. */ diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index 120f362e75..4f2a2f6da3 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -41,6 +41,7 @@ extern size_t _dl_pagesize; extern const char *_dl_platform; extern unsigned long int _dl_hwcap; extern size_t _dl_platformlen; +extern fpu_control_t _dl_fpu_control; extern void _end; extern void ENTRY_POINT (void); @@ -128,7 +129,7 @@ _dl_sysdep_start (void **start_argptr, _dl_hwcap = av->a_un.a_val; break; case AT_FPUCW: - __fpu_control = av->a_un.a_val; + _dl_fpu_control = av->a_un.a_val; break; } diff --git a/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h b/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h index 274531f270..ae1249af51 100644 --- a/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h +++ b/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h @@ -37,7 +37,7 @@ struct sigaction /* Bits in `sa_flags'. */ #define SA_NOCLDSTOP 0x00000004 /* Don't send SIGCHLD when children stop. */ #ifdef __USE_MISC -# define SA_STACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ +# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ # define SA_RESTART 0x00000002 /* Restart syscall on signal return. */ # define SA_INTERRUPT 0x20000000 /* Historical no-op. */ # define SA_NOMASK 0x00000008 /* Don't automatically block the signal @@ -47,6 +47,7 @@ struct sigaction /* Some aliases for the SA_ constants. */ # define SA_NODEFER SA_NOMASK # define SA_RESETHAND SA_ONESHOT +# define SA_STACK SA_ONSTACK #endif /* Values for the HOW argument to `sigprocmask'. */ diff --git a/sysdeps/unix/sysv/linux/init-first.c b/sysdeps/unix/sysv/linux/init-first.c index 4b7af46d78..01395baf75 100644 --- a/sysdeps/unix/sysv/linux/init-first.c +++ b/sysdeps/unix/sysv/linux/init-first.c @@ -34,6 +34,9 @@ static void init (int, char **, char **) __attribute__ ((unused)); extern int _dl_starting_up; weak_extern (_dl_starting_up) +extern fpu_control_t _dl_fpu_control; +extern int _dl_fpu_control_set; + /* Set nonzero if we have to be prepared for more then one libc being used in the process. Safe assumption if initializer never runs. */ int __libc_multiple_libcs = 1; @@ -61,8 +64,11 @@ init (int argc, char **argv, char **envp) __personality (PER_LINUX); /* Set the FPU control word to the proper default value if the - kernel would use a different value. */ - if (__fpu_control != _FPU_DEFAULT) + kernel would use a different value. (In a static program we + don't have this information.) */ +#ifdef PIC + if (__fpu_control != _dl_fpu_control) +#endif __setfpucw (__fpu_control); } diff --git a/sysdeps/unix/sysv/linux/mips/bits/sigaction.h b/sysdeps/unix/sysv/linux/mips/bits/sigaction.h index 71ca8846eb..7f72406e01 100644 --- a/sysdeps/unix/sysv/linux/mips/bits/sigaction.h +++ b/sysdeps/unix/sysv/linux/mips/bits/sigaction.h @@ -45,16 +45,17 @@ struct sigaction /* Bits in `sa_flags'. */ #define SA_NOCLDSTOP 1 /* Don't send SIGCHLD when children stop. */ #ifdef __USE_MISC -# define SA_STACK 0x08000000 /* Use signal stack by using `sa_restorer'. */ -# define SA_RESTART 0x10000000 /* Restart syscall on signal return. */ -# define SA_INTERRUPT 0x20000000 /* Historical no-op. */ -# define SA_NODEFER 0x40000000 /* Don't automatically block the signal when +# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ +# define SA_RESTART 0x00000004 /* Restart syscall on signal return. */ +# define SA_INTERRUPT 0x00000000 /* Historical no-op. */ +# define SA_NODEFER 0x00000010 /* Don't automatically block the signal when its handler is being executed. */ -# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler. */ +# define SA_RESETHAND 0x00000002 /* Reset to SIG_DFL on entry to handler. */ /* Some aliases for the SA_ constants. */ # define SA_NOMASK SA_NODEFER # define SA_ONESHOT SA_RESETHAND +# define SA_STACK SA_ONSTACK #endif /* Values for the HOW argument to `sigprocmask'. */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h index 3e4e855915..651b526a40 100644 --- a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h +++ b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h @@ -43,7 +43,7 @@ struct sigaction #define SA_SIGINFO 0x00000200 /* Invoke signal-catching function with three arguments instead of one. */ #ifdef __USE_MISC -# define SA_STACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ +# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ # define SA_RESTART 0x00000002 /* Restart syscall on signal return. */ # define SA_INTERRUPT 0x00000010 /* Historical no-op. */ # define SA_NOMASK 0x00000020 /* Don't automatically block the signal when @@ -53,6 +53,7 @@ struct sigaction /* Some aliases for the SA_ constants. */ # define SA_NODEFER SA_NOMASK # define SA_RESETHAND SA_ONESHOT +# define SA_STACK SA_ONSTACK #endif /* Values for the HOW argument to `sigprocmask'. */ -- 2.11.4.GIT