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 + . */ + +#include +#include +#undef h_errno + +#include + +/* 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