diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-06-12 10:10:18 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-06-12 10:10:18 +0000 |
commit | 9acacaa02f3b75fddc07a56f3d848df45281a5de (patch) | |
tree | f1ed18d61032595c7f9a643c1e8330faaf486a7a /nptl/herrno.c | |
parent | 4b9c2b707b1383b4e3b3c50e445afd0af8922788 (diff) | |
download | glibc-9acacaa02f3b75fddc07a56f3d848df45281a5de.zip glibc-9acacaa02f3b75fddc07a56f3d848df45281a5de.tar.gz glibc-9acacaa02f3b75fddc07a56f3d848df45281a5de.tar.bz2 |
Fix h_errno namespace (bug 18520).
The 2008 edition of POSIX removed h_errno, but some functions still
bring in references to the h_errno external symbol. As this symbol is
not a part of the public ABI (only __h_errno_location is), this patch
fixes this by renaming the GLIBC_PRIVATE TLS symbol to __h_errno.
Tested for x86_64 and x86 (testsuite, and comparison of installed
shared libraries). Disassembly of all shared libraries using h_errno
changes because of the renaming (and changes to associated TLS / GOT
offsets in some cases); disassembly of libpthread on x86_64 changes
more substantially because the enlargement of .dynsym affects
subsequent addresses.
[BZ #18520]
* inet/herrno.c (h_errno): Rename to __h_errno.
(__libc_h_errno): Define as alias of __h_errno not h_errno.
* include/netdb.h [IS_IN_LIB && !IS_IN (libc)] (h_errno): Define
to __h_errno instead of h_errno.
* nptl/herrno.c (h_errno): Rename to __h_errno.
(__h_errno_location): Refer to __h_errno not h_errno.
* resolv/Versions (h_errno): Rename to __h_errno.
* conform/Makefile (test-xfail-XOPEN2K8/grp.h/linknamespace):
Remove variable.
(test-xfail-XOPEN2K8/pwd.h/linknamespace): Likewise.
Diffstat (limited to 'nptl/herrno.c')
-rw-r--r-- | nptl/herrno.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/nptl/herrno.c b/nptl/herrno.c index 281c47e..9c91528 100644 --- a/nptl/herrno.c +++ b/nptl/herrno.c @@ -23,12 +23,12 @@ /* We need to have the error status variable of the resolver accessible in the libc. */ -extern __thread int h_errno; +extern __thread int __h_errno; /* When threaded, h_errno may be a per-thread variable. */ int * __h_errno_location (void) { - return &h_errno; + return &__h_errno; } |