diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-01-04 19:37:53 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-01-04 19:37:53 +0100 |
commit | 25c084e0a7b5e8d604d0f86b55f343acadf7af5d (patch) | |
tree | 996be57c41ba2b7a08777e73c19a800431cc8bc6 | |
parent | 50a78baa8e385fac36d54d51800dc5c61ef7f139 (diff) | |
download | glibc-25c084e0a7b5e8d604d0f86b55f343acadf7af5d.tar.gz glibc-25c084e0a7b5e8d604d0f86b55f343acadf7af5d.tar.xz glibc-25c084e0a7b5e8d604d0f86b55f343acadf7af5d.zip |
htl: Add __errno_location and __h_errno_location
As explained on https://sourceware.org/ml/libc-alpha/2020-01/msg00049.html the presence of __errno_location in libpthread.so on GNU/Linux makes libpthread getting linked in for libstdc++. This aligns on that behavior, to avoid issues that only GNU/Hurd would get.
-rw-r--r-- | htl/Makefile | 1 | ||||
-rw-r--r-- | htl/Versions | 1 | ||||
-rw-r--r-- | htl/herrno.c | 34 | ||||
-rw-r--r-- | sysdeps/htl/Makefile | 4 | ||||
-rw-r--r-- | sysdeps/mach/hurd/i386/libpthread.abilist | 2 |
5 files changed, 42 insertions, 0 deletions
diff --git a/htl/Makefile b/htl/Makefile index e091077a28..b9d3831dd9 100644 --- a/htl/Makefile +++ b/htl/Makefile @@ -134,6 +134,7 @@ libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate \ shm-directory \ \ cthreads-compat \ + herrno \ $(SYSDEPS) headers := \ diff --git a/htl/Versions b/htl/Versions index c5a616da10..1c306acf5c 100644 --- a/htl/Versions +++ b/htl/Versions @@ -29,6 +29,7 @@ libc { libpthread { GLIBC_2.2.6 { _IO_flockfile; _IO_ftrylockfile; _IO_funlockfile; + __errno_location; __h_errno_location; } GLIBC_2.12 { __pthread_errorcheck_mutexattr; __pthread_recursive_mutexattr; diff --git a/htl/herrno.c b/htl/herrno.c new file mode 100644 index 0000000000..66174a03e9 --- /dev/null +++ b/htl/herrno.c @@ -0,0 +1,34 @@ +/* Copyright (C) 1996-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <features.h> +#include <netdb.h> +#undef h_errno + +#include <tls.h> + +/* We need to have the error status variable of the resolver + accessible in the libc. */ +extern __thread int __h_errno; + + +/* When threaded, h_errno may be a per-thread variable. */ +int * +__h_errno_location (void) +{ + return &__h_errno; +} diff --git a/sysdeps/htl/Makefile b/sysdeps/htl/Makefile index 12bb54ebf4..ef156f1315 100644 --- a/sysdeps/htl/Makefile +++ b/sysdeps/htl/Makefile @@ -1,3 +1,7 @@ +ifeq ($(subdir),htl) +libpthread-sysdep_routines += errno-loc +endif + ifeq ($(subdir),rt) librt-sysdep_routines += timer_routines endif diff --git a/sysdeps/mach/hurd/i386/libpthread.abilist b/sysdeps/mach/hurd/i386/libpthread.abilist index 4c7d06d073..0ede90859c 100644 --- a/sysdeps/mach/hurd/i386/libpthread.abilist +++ b/sysdeps/mach/hurd/i386/libpthread.abilist @@ -145,5 +145,7 @@ GLIBC_2.12 sem_wait F GLIBC_2.2.6 _IO_flockfile F GLIBC_2.2.6 _IO_ftrylockfile F GLIBC_2.2.6 _IO_funlockfile F +GLIBC_2.2.6 __errno_location F +GLIBC_2.2.6 __h_errno_location F GLIBC_2.21 pthread_hurd_cond_timedwait_np F GLIBC_2.21 pthread_hurd_cond_wait_np F |