diff options
author | Roland McGrath <roland@gnu.org> | 2002-11-24 23:56:47 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-11-24 23:56:47 +0000 |
commit | bf2cc5fb028fecf8d6b1adffd952f7402f685923 (patch) | |
tree | 52589daf3f86896ace602af8803d9b92593ca9d4 /elf | |
parent | 13a571a7470a1830736e6a1b1cd46b1553db041c (diff) | |
download | glibc-bf2cc5fb028fecf8d6b1adffd952f7402f685923.zip glibc-bf2cc5fb028fecf8d6b1adffd952f7402f685923.tar.gz glibc-bf2cc5fb028fecf8d6b1adffd952f7402f685923.tar.bz2 |
* sysdeps/posix/readv.c: Include <errno.h>, use __set_errno macro.
* sysdeps/posix/writev.c: Likewise.
From Momchil Velikov <velco@fadata.bg>.
* elf/dl-error.c [! _LIBC_REENTRANT]: Use a static variable instead of
calling *GL(dl_error_catch_tsd) for a thread-local location.
* elf/rtld.c (startup_error_tsd): Conditionalize on [_LIBC_REENTRANT].
(dl_main): Same for GL(dl_error_catch_tsd) initialization.
* elf/dl-tsd.c: Conditionalize contents on [_LIBC_REENTRANT].
* libio/iofflush.c: Add libc_hidden_def.
* libio/iofwrite.c: Likewise.
* sysdeps/generic/sigtimedwait.c: Likewise.
* sysdeps/generic/sigwaitinfo.c: Likewise.
* sysdeps/posix/sigwait.c: Likewise.
Reported by Momchil Velikov <velco@fadata.bg>.
* inet/inet_lnaof.c (inet_lnaof): Change return type to in_addr_t
to match <arpa/inet.h> declaration.
* inet/inet_netof.c (inet_netof): Likewise.
* inet/inet_mkadr.c (inet_makeaddr): Likewise for argument types.
Reported by Momchil Velikov <velco@fadata.bg>.
Diffstat (limited to 'elf')
-rw-r--r-- | elf/dl-error.c | 12 | ||||
-rw-r--r-- | elf/dl-tsd.c | 20 | ||||
-rw-r--r-- | elf/rtld.c | 4 |
3 files changed, 25 insertions, 11 deletions
diff --git a/elf/dl-error.c b/elf/dl-error.c index e8f2f3e..df91088 100644 --- a/elf/dl-error.c +++ b/elf/dl-error.c @@ -57,6 +57,12 @@ INTVARDEF(_dl_out_of_memory) global variable. */ static receiver_fct receiver; +#ifdef _LIBC_REENTRANT +# define CATCH_HOOK (*(struct catch **) (*GL(dl_error_catch_tsd)) ()) +#else +static struct catch *catch_hook; +# define CATCH_HOOK catch_hook +#endif void internal_function @@ -68,7 +74,7 @@ _dl_signal_error (int errcode, const char *objname, const char *occation, if (! errstring) errstring = N_("DYNAMIC LINKER BUG!!!"); - lcatch = *((*GL(dl_error_catch_tsd)) ()); + lcatch = CATCH_HOOK; if (objname == NULL) objname = ""; if (lcatch != NULL) @@ -147,7 +153,7 @@ _dl_catch_error (const char **objname, const char **errstring, inefficient. So we initialize `c' by hand. */ c.errstring = NULL; - void **catchp = (*GL(dl_error_catch_tsd)) (); + struct catch **const catchp = &CATCH_HOOK; old = *catchp; errcode = setjmp (c.env); if (__builtin_expect (errcode, 0) == 0) @@ -173,7 +179,7 @@ void internal_function _dl_receive_error (receiver_fct fct, void (*operate) (void *), void *args) { - void **catchp = (*GL(dl_error_catch_tsd)) (); + struct catch **const catchp = &CATCH_HOOK; struct catch *old_catch; receiver_fct old_receiver; diff --git a/elf/dl-tsd.c b/elf/dl-tsd.c index aa290a7..c60cd1a 100644 --- a/elf/dl-tsd.c +++ b/elf/dl-tsd.c @@ -17,10 +17,12 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <ldsodefs.h> -#include <tls.h> +#ifdef _LIBC_REENTRANT -#ifndef SHARED +# include <ldsodefs.h> +# include <tls.h> + +# ifndef SHARED /* _dl_error_catch_tsd points to this for the single-threaded case. It's reset by the thread library for multithreaded programs @@ -28,17 +30,17 @@ static void ** __attribute__ ((const)) startup_error_tsd (void) { -#if USE___THREAD +# if USE___THREAD static __thread void *data; -#else +# else static void *data; -#endif +# endif return &data; } void **(*_dl_error_catch_tsd) (void) __attribute__ ((const)) = &startup_error_tsd; -#elif USE___THREAD +# elif USE___THREAD /* libpthread sets _dl_error_catch_tsd to point to this function. We define it here instead of in libpthread so that it doesn't @@ -51,4 +53,6 @@ __libc_dl_error_tsd (void) return &data; } -#endif +# endif /* SHARED */ + +#endif /* _LIBC_REENTRANT */ @@ -560,6 +560,7 @@ match_version (const char *string, struct link_map *map) return 0; } +#ifdef _LIBC_REENTRANT /* _dl_error_catch_tsd points to this for the single-threaded case. It's reset by the thread library for multithreaded programs. */ static void ** __attribute__ ((const)) @@ -568,6 +569,7 @@ startup_error_tsd (void) static void *data; return &data; } +#endif static const char *library_path; /* The library search path. */ static const char *preloadlist; /* The list preloaded objects. */ @@ -598,8 +600,10 @@ dl_main (const ElfW(Phdr) *phdr, void *tcbp; #endif +#ifdef _LIBC_REENTRANT /* Explicit initialization since the reloc would just be more work. */ GL(dl_error_catch_tsd) = &startup_error_tsd; +#endif /* Process the environment variable which control the behaviour. */ process_envvars (&mode); |