diff options
| author | Florian Weimer <fweimer@redhat.com> | 2021-04-21 19:49:50 +0200 |
|---|---|---|
| committer | Florian Weimer <fweimer@redhat.com> | 2021-04-21 19:49:50 +0200 |
| commit | 1d95b035c721908d3bcbbca9e8d3a5e55a24c09e (patch) | |
| tree | acc915c7a01fc6ad5572767b483cf6cfc9c9118b /sysdeps | |
| parent | 3fec7f18bfcb7044e813a12e19c3c98eb8387e26 (diff) | |
| download | glibc-1d95b035c721908d3bcbbca9e8d3a5e55a24c09e.tar.xz glibc-1d95b035c721908d3bcbbca9e8d3a5e55a24c09e.zip | |
nptl: Move __pthread_unwind_next into libc
It's necessary to stub out __libc_disable_asynccancel and
__libc_enable_asynccancel via rtld-stubbed-symbols because the new
direct references to the unwinder result in symbol conflicts when the
rtld exception handling from libc is linked in during the construction
of librtld.map.
unwind-forcedunwind.c is merged into unwind-resume.c. libc now needs
the functions that were previously only used in libpthread.
The GLIBC_PRIVATE exports of __libc_longjmp and __libc_siglongjmp are
no longer needed, so switch them to hidden symbols.
The symbol __pthread_unwind_next has been moved using
scripts/move-symbol-to-libc.py.
Reviewed-by: Adhemerva Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'sysdeps')
71 files changed, 86 insertions, 162 deletions
diff --git a/sysdeps/arm/Makefile b/sysdeps/arm/Makefile index ad2042b93a..fb4164f0d9 100644 --- a/sysdeps/arm/Makefile +++ b/sysdeps/arm/Makefile @@ -63,8 +63,3 @@ ifeq ($(subdir),rt) librt-sysdep_routines += rt-aeabi_unwind_cpp_pr1 rt-arm-unwind-resume librt-shared-only-routines += rt-aeabi_unwind_cpp_pr1 rt-arm-unwind-resume endif - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += pt-arm-unwind-resume -libpthread-shared-only-routines += pt-arm-unwind-resume -endif diff --git a/sysdeps/arm/nptl/unwind-forcedunwind.c b/sysdeps/arm/nptl/unwind-forcedunwind.c deleted file mode 100644 index 61db34c0b5..0000000000 --- a/sysdeps/arm/nptl/unwind-forcedunwind.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Unwinder function forwarders for libpthread. Arm version. - Copyright (C) 2021 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; see the file COPYING.LIB. If - not, see <https://www.gnu.org/licenses/>. */ - -#include <sysdeps/nptl/unwind-forcedunwind.c> - -void * -__unwind_link_get_resume (void) -{ - return UNWIND_LINK_PTR (__pthread_unwind_link_get (), _Unwind_Resume); -} diff --git a/sysdeps/arm/pt-arm-unwind-resume.S b/sysdeps/arm/pt-arm-unwind-resume.S deleted file mode 100644 index c056eb38d0..0000000000 --- a/sysdeps/arm/pt-arm-unwind-resume.S +++ /dev/null @@ -1,20 +0,0 @@ -/* _Unwind_Resume wrapper for ARM EABI. - Copyright (C) 2015-2021 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/>. */ - -/* The implementation in libpthread is identical to the one in libc. */ -#include <sysdeps/arm/arm-unwind-resume.S> diff --git a/sysdeps/generic/unwind-resume.c b/sysdeps/generic/unwind-resume.c index 9e63762bf1..66dbb67e81 100644 --- a/sysdeps/generic/unwind-resume.c +++ b/sysdeps/generic/unwind-resume.c @@ -44,3 +44,17 @@ __gcc_personality_v0 PERSONALITY_PROTO { return UNWIND_LINK_PTR (link (), personality) PERSONALITY_ARGS; } + +_Unwind_Reason_Code +_Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop, + void *stop_argument) +{ + return UNWIND_LINK_PTR (link (), _Unwind_ForcedUnwind) + (exc, stop, stop_argument); +} + +_Unwind_Word +_Unwind_GetCFA (struct _Unwind_Context *context) +{ + return UNWIND_LINK_PTR (link (), _Unwind_GetCFA) (context); +} diff --git a/sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c b/sysdeps/ia64/unwind-resume.c index eaed6cf2ef..f8cf447162 100644 --- a/sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c +++ b/ |
