From 25c084e0a7b5e8d604d0f86b55f343acadf7af5d Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sat, 4 Jan 2020 19:37:53 +0100 Subject: 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. --- htl/Makefile | 1 + htl/Versions | 1 + htl/herrno.c | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 htl/herrno.c (limited to 'htl') diff --git a/htl/Makefile b/htl/Makefile index e091077..b9d3831 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 c5a616d..1c306ac 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 0000000..66174a0 --- /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; +} -- cgit v1.1