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.
This commit is contained in:
Samuel Thibault 2020-01-04 19:37:53 +01:00
parent 50a78baa8e
commit 25c084e0a7
5 changed files with 42 additions and 0 deletions

View File

@ -134,6 +134,7 @@ libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate \
shm-directory \
\
cthreads-compat \
herrno \
$(SYSDEPS)
headers := \

View File

@ -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;

34
htl/herrno.c Normal file
View File

@ -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;
}

View File

@ -1,3 +1,7 @@
ifeq ($(subdir),htl)
libpthread-sysdep_routines += errno-loc
endif
ifeq ($(subdir),rt)
librt-sysdep_routines += timer_routines
endif

View File

@ -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