From bf2cc5fb028fecf8d6b1adffd952f7402f685923 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sun, 24 Nov 2002 23:56:47 +0000 Subject: * sysdeps/posix/readv.c: Include , use __set_errno macro. * sysdeps/posix/writev.c: Likewise. From Momchil Velikov . * 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 . * inet/inet_lnaof.c (inet_lnaof): Change return type to in_addr_t to match declaration. * inet/inet_netof.c (inet_netof): Likewise. * inet/inet_mkadr.c (inet_makeaddr): Likewise for argument types. Reported by Momchil Velikov . --- ChangeLog | 23 +++++++++++++++++++++++ elf/dl-error.c | 12 +++++++++--- elf/dl-tsd.c | 20 ++++++++++++-------- elf/rtld.c | 4 ++++ inet/inet_lnaof.c | 2 +- inet/inet_mkadr.c | 2 +- inet/inet_netof.c | 2 +- libio/iofflush.c | 1 + libio/iofwrite.c | 1 + sysdeps/generic/sigtimedwait.c | 3 ++- sysdeps/generic/sigwaitinfo.c | 1 + sysdeps/posix/readv.c | 3 ++- sysdeps/posix/sigwait.c | 1 + sysdeps/posix/writev.c | 3 ++- 14 files changed, 61 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3f8009c..9895ffb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,28 @@ 2002-11-24 Roland McGrath + * sysdeps/posix/readv.c: Include , use __set_errno macro. + * sysdeps/posix/writev.c: Likewise. + From Momchil Velikov . + + * 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 . + + * inet/inet_lnaof.c (inet_lnaof): Change return type to in_addr_t + to match declaration. + * inet/inet_netof.c (inet_netof): Likewise. + * inet/inet_mkadr.c (inet_makeaddr): Likewise for argument types. + Reported by Momchil Velikov . + * configure.in: Skip AUTOCONF check under --without-cvs. * configure: Regenerated. 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 -#include +#ifdef _LIBC_REENTRANT -#ifndef SHARED +# include +# include + +# 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 */ diff --git a/elf/rtld.c b/elf/rtld.c index 3a64ca7..350cc70 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -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); diff --git a/inet/inet_lnaof.c b/inet/inet_lnaof.c index 7e93464..0e115a4 100644 --- a/inet/inet_lnaof.c +++ b/inet/inet_lnaof.c @@ -40,7 +40,7 @@ static char sccsid[] = "@(#)inet_lnaof.c 8.1 (Berkeley) 6/4/93"; * internet address; handles class a/b/c network * number formats. */ -u_int32_t +in_addr_t inet_lnaof(in) struct in_addr in; { diff --git a/inet/inet_mkadr.c b/inet/inet_mkadr.c index 10f7318..12c9590 100644 --- a/inet/inet_mkadr.c +++ b/inet/inet_mkadr.c @@ -41,7 +41,7 @@ static char sccsid[] = "@(#)inet_makeaddr.c 8.1 (Berkeley) 6/4/93"; */ struct in_addr inet_makeaddr(net, host) - u_int32_t net, host; + in_addr_t net, host; { u_int32_t addr; diff --git a/inet/inet_netof.c b/inet/inet_netof.c index aa99e5c..e49177a 100644 --- a/inet/inet_netof.c +++ b/inet/inet_netof.c @@ -39,7 +39,7 @@ static char sccsid[] = "@(#)inet_netof.c 8.1 (Berkeley) 6/4/93"; * Return the network number from an internet * address; handles class a/b/c network #'s. */ -u_int32_t +in_addr_t inet_netof(in) struct in_addr in; { diff --git a/libio/iofflush.c b/libio/iofflush.c index 6f12e9b..d1a76cc 100644 --- a/libio/iofflush.c +++ b/libio/iofflush.c @@ -53,5 +53,6 @@ weak_alias (_IO_fflush, fflush) #ifndef _IO_MTSAFE_IO weak_alias (_IO_fflush, fflush_unlocked) +libc_hidden_weak (fflush_unlocked) #endif #endif diff --git a/libio/iofwrite.c b/libio/iofwrite.c index 47c166c..67ed6a1 100644 --- a/libio/iofwrite.c +++ b/libio/iofwrite.c @@ -58,5 +58,6 @@ weak_alias (_IO_fwrite, fwrite) libc_hidden_weak (fwrite) # ifndef _IO_MTSAFE_IO weak_alias (_IO_fwrite, fwrite_unlocked) +libc_hidden_weak (fwrite_unlocked) # endif #endif diff --git a/sysdeps/generic/sigtimedwait.c b/sysdeps/generic/sigtimedwait.c index eaf05be..7b114a3 100644 --- a/sysdeps/generic/sigtimedwait.c +++ b/sysdeps/generic/sigtimedwait.c @@ -1,5 +1,5 @@ /* Implementation of sigtimedwait function from POSIX.1b. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2002 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 @@ -27,6 +27,7 @@ __sigtimedwait (const sigset_t *set, siginfo_t *info, __set_errno (ENOSYS); return -1; } +libc_hidden_def (__sigtimedwait) weak_alias (__sigtimedwait, sigtimedwait) stub_warning (sigtimedwait) diff --git a/sysdeps/generic/sigwaitinfo.c b/sysdeps/generic/sigwaitinfo.c index ad24efe..e0659b0 100644 --- a/sysdeps/generic/sigwaitinfo.c +++ b/sysdeps/generic/sigwaitinfo.c @@ -26,6 +26,7 @@ __sigwaitinfo (const sigset_t *set, siginfo_t *info) __set_errno (ENOSYS); return -1; } +libc_hidden_def (__sigwaitinfo) weak_alias (__sigwaitinfo, sigwaitinfo) stub_warning (sigwaitinfo) diff --git a/sysdeps/posix/readv.c b/sysdeps/posix/readv.c index bde57b4..f0e78e6 100644 --- a/sysdeps/posix/readv.c +++ b/sysdeps/posix/readv.c @@ -23,6 +23,7 @@ #include #include #include +#include /* Read data from file descriptor FD, and put the result in the buffers described by VECTOR, which is a vector of COUNT `struct iovec's. @@ -46,7 +47,7 @@ __libc_readv (int fd, const struct iovec *vector, int count) /* Check for ssize_t overflow. */ if (SSIZE_MAX - bytes < vector[i].iov_len) { - errno = EINVAL; + __set_errno (EINVAL); return -1; } bytes += vector[i].iov_len; diff --git a/sysdeps/posix/sigwait.c b/sysdeps/posix/sigwait.c index 1c54970..f2be322 100644 --- a/sysdeps/posix/sigwait.c +++ b/sysdeps/posix/sigwait.c @@ -80,6 +80,7 @@ __sigwait (const sigset_t *set, int *sig) *sig = was_sig; return was_sig == -1 ? -1 : 0; } +libc_hidden_def (__sigwait) weak_alias (__sigwait, sigwait) diff --git a/sysdeps/posix/writev.c b/sysdeps/posix/writev.c index ae5ef1e..a347cc2 100644 --- a/sysdeps/posix/writev.c +++ b/sysdeps/posix/writev.c @@ -23,6 +23,7 @@ #include #include #include +#include /* Write data pointed by the buffers described by VECTOR, which is a vector of COUNT `struct iovec's, to file descriptor FD. @@ -46,7 +47,7 @@ __libc_writev (int fd, const struct iovec *vector, int count) /* Check for ssize_t overflow. */ if (SSIZE_MAX - bytes < vector[i].iov_len) { - errno = EINVAL; + __set_errno (EINVAL); return -1; } bytes += vector[i].iov_len; -- cgit v1.1