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 | |
parent | 4b9c2b707b1383b4e3b3c50e445afd0af8922788 (diff) | |
download | glibc-9acacaa02f3b75fddc07a56f3d848df45281a5de.tar.gz glibc-9acacaa02f3b75fddc07a56f3d848df45281a5de.tar.xz glibc-9acacaa02f3b75fddc07a56f3d848df45281a5de.zip |
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.
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | conform/Makefile | 2 | ||||
-rw-r--r-- | include/netdb.h | 2 | ||||
-rw-r--r-- | inet/herrno.c | 4 | ||||
-rw-r--r-- | nptl/herrno.c | 4 | ||||
-rw-r--r-- | resolv/Versions | 2 |
7 files changed, 22 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog index 1e0ec7ef8a..6ca1c205f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2015-06-12 Joseph Myers <joseph@codesourcery.com> + + [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. + 2015-06-11 Andrew Senkevich <andrew.senkevich@intel.com> * configure.ac: More strict check for AVX512 assembler support. diff --git a/NEWS b/NEWS index 423d315333..9d1ce0d53f 100644 --- a/NEWS +++ b/NEWS @@ -20,7 +20,8 @@ Version 2.22 18111, 18116, 18125, 18128, 18138, 18185, 18196, 18197, 18206, 18210, 18211, 18217, 18220, 18221, 18234, 18244, 18247, 18287, 18319, 18324, 18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18444, - 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498, 18507. + 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498, 18507, + 18520. * Cache information can be queried via sysconf() function on s390 e.g. with _SC_LEVEL1_ICACHE_SIZE as argument. diff --git a/conform/Makefile b/conform/Makefile index 8e76bcb302..c259d34cb4 100644 --- a/conform/Makefile +++ b/conform/Makefile @@ -373,7 +373,5 @@ test-xfail-POSIX2008/grp.h/linknamespace = yes test-xfail-POSIX2008/netdb.h/linknamespace = yes test-xfail-POSIX2008/semaphore.h/linknamespace = yes test-xfail-XOPEN2K8/fmtmsg.h/linknamespace = yes -test-xfail-XOPEN2K8/grp.h/linknamespace = yes test-xfail-XOPEN2K8/netdb.h/linknamespace = yes -test-xfail-XOPEN2K8/pwd.h/linknamespace = yes test-xfail-XOPEN2K8/syslog.h/linknamespace = yes diff --git a/include/netdb.h b/include/netdb.h index 9e64a15ff7..e1f051d16a 100644 --- a/include/netdb.h +++ b/include/netdb.h @@ -9,7 +9,7 @@ # if IS_IN (libc) # define h_errno __libc_h_errno # else -# define h_errno h_errno /* For #ifndef h_errno tests. */ +# define h_errno __h_errno # endif extern __thread int h_errno attribute_tls_model_ie; # endif /* IS_IN_LIB */ diff --git a/inet/herrno.c b/inet/herrno.c index 829f032e47..672a91d407 100644 --- a/inet/herrno.c +++ b/inet/herrno.c @@ -24,7 +24,7 @@ /* We need to have the error status variable of the resolver accessible in the libc. */ -__thread int h_errno; -extern __thread int __libc_h_errno __attribute__ ((alias ("h_errno"))) +__thread int __h_errno; +extern __thread int __libc_h_errno __attribute__ ((alias ("__h_errno"))) attribute_hidden; #define h_errno __libc_h_errno diff --git a/nptl/herrno.c b/nptl/herrno.c index 281c47eca7..9c91528095 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; } diff --git a/resolv/Versions b/resolv/Versions index 04072acd33..e561bce1a4 100644 --- a/resolv/Versions +++ b/resolv/Versions @@ -24,7 +24,7 @@ libc { GLIBC_PRIVATE { __gai_sigqueue; - h_errno; __resp; + __h_errno; __resp; __res_maybe_init; __res_iclose; } |