From 9acacaa02f3b75fddc07a56f3d848df45281a5de Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Fri, 12 Jun 2015 10:10:18 +0000 Subject: 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. --- inet/herrno.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'inet/herrno.c') 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 -- cgit v1.2.3