aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/generic
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2004-10-04 20:59:53 +0000
committerRoland McGrath <roland@gnu.org>2004-10-04 20:59:53 +0000
commit0c70edcbc655bcd740b10ae9ddaa552491c930b1 (patch)
tree35f793496b2c3f4d8953583f8a4b337f7126d256 /sysdeps/generic
parent96c82b3feea4335a2e47d789deb96231b0aef7a0 (diff)
downloadglibc-0c70edcbc655bcd740b10ae9ddaa552491c930b1.zip
glibc-0c70edcbc655bcd740b10ae9ddaa552491c930b1.tar.gz
glibc-0c70edcbc655bcd740b10ae9ddaa552491c930b1.tar.bz2
* include/errno.h [RTLD_PRIVATE_ERRNO] (errno): Rename the real symbol
to rtld_errno. * sysdeps/generic/errno.c [RTLD_PRIVATE_ERRNO] (rtld_errno): Define it, and don't define any other errno names. * sysdeps/unix/alpha/sysdep.h [RTLD_PRIVATE_ERRNO]: Use rtld_errno in place of errno. * sysdeps/unix/i386/sysdep.S: Likewise. * sysdeps/unix/sysv/linux/i386/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/ia64/sysdep.S: Likewise. * sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise. * sysdeps/unix/x86_64/sysdep.S: Likewise. * sysdeps/generic/errno.c [! USE___THREAD] (errno): Use `nocommon' attribute instead of `section'. are handled by one thread which then hands off the descriptors for the
Diffstat (limited to 'sysdeps/generic')
-rw-r--r--sysdeps/generic/errno.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/sysdeps/generic/errno.c b/sysdeps/generic/errno.c
index 10dbabe7..03d661b 100644
--- a/sysdeps/generic/errno.c
+++ b/sysdeps/generic/errno.c
@@ -22,24 +22,32 @@
#include <dl-sysdep.h>
#undef errno
-#if USE___THREAD
+#if RTLD_PRIVATE_ERRNO
+
+/* Code compiled for rtld refers only to this name. */
+int rtld_errno attribute_hidden;
+
+#elif USE___THREAD
+
__thread int errno;
extern __thread int __libc_errno __attribute__ ((alias ("errno")))
attribute_hidden;
+
#else
+
/* This differs from plain `int errno;' in that it doesn't create
a common definition, but a plain symbol that resides in .bss,
which can have an alias. */
-int errno __attribute__ ((section (".bss")));
+int errno __attribute__ ((nocommon));
strong_alias (errno, _errno)
/* We declare these with compat_symbol so that they are not visible at
link time. Programs must use the accessor functions. RTLD is special,
since it's not exported from there at any time. */
-# if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING \
- && !RTLD_PRIVATE_ERRNO
+# if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING
# include <shlib-compat.h>
compat_symbol (libc, errno, errno, GLIBC_2_0);
compat_symbol (libc, _errno, _errno, GLIBC_2_0);
# endif
+
#endif