Skip to content

Commit

Permalink
Fix h_errno namespace (bug 18520).
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Joseph Myers committed Jun 12, 2015
1 parent 4b9c2b7 commit 9acacaa
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 9 deletions.
14 changes: 14 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
3 changes: 2 additions & 1 deletion NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 0 additions & 2 deletions conform/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion include/netdb.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
4 changes: 2 additions & 2 deletions inet/herrno.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
4 changes: 2 additions & 2 deletions nptl/herrno.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
2 changes: 1 addition & 1 deletion resolv/Versions
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ libc {
GLIBC_PRIVATE {
__gai_sigqueue;

h_errno; __resp;
__h_errno; __resp;

__res_maybe_init; __res_iclose;
}
Expand Down

0 comments on commit 9acacaa

Please sign in to comment.