summaryrefslogtreecommitdiff
path: root/rseq-nptl-Add-thread_pointer.h-for-defining-__thread_poin.patch
diff options
context:
space:
mode:
Diffstat (limited to 'rseq-nptl-Add-thread_pointer.h-for-defining-__thread_poin.patch')
-rw-r--r--rseq-nptl-Add-thread_pointer.h-for-defining-__thread_poin.patch141
1 files changed, 141 insertions, 0 deletions
diff --git a/rseq-nptl-Add-thread_pointer.h-for-defining-__thread_poin.patch b/rseq-nptl-Add-thread_pointer.h-for-defining-__thread_poin.patch
new file mode 100644
index 0000000..39c25a0
--- /dev/null
+++ b/rseq-nptl-Add-thread_pointer.h-for-defining-__thread_poin.patch
@@ -0,0 +1,141 @@
+From c773e8d7fb0c7a97290bd889ba984411a1952e9e Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Thu, 9 Dec 2021 09:49:32 +0100
+Subject: [PATCH 1/9] nptl: Add <thread_pointer.h> for defining
+ __thread_pointer
+
+<tls.h> already contains a definition that is quite similar,
+but it is not consistent across architectures.
+
+Only architectures for which rseq support is added are covered.
+
+Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
+---
+ sysdeps/nptl/thread_pointer.h | 28 ++++++++++++++++++++
+ sysdeps/powerpc/nptl/thread_pointer.h | 33 +++++++++++++++++++++++
+ sysdeps/x86/nptl/thread_pointer.h | 38 +++++++++++++++++++++++++++
+ 3 files changed, 99 insertions(+)
+ create mode 100644 sysdeps/nptl/thread_pointer.h
+ create mode 100644 sysdeps/powerpc/nptl/thread_pointer.h
+ create mode 100644 sysdeps/x86/nptl/thread_pointer.h
+
+diff --git a/sysdeps/nptl/thread_pointer.h b/sysdeps/nptl/thread_pointer.h
+new file mode 100644
+index 00000000..92f2f309
+--- /dev/null
++++ b/sysdeps/nptl/thread_pointer.h
+@@ -0,0 +1,28 @@
++/* __thread_pointer definition. Generic 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. If not, see
++ <https://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_THREAD_POINTER_H
++#define _SYS_THREAD_POINTER_H
++
++static inline void *
++__thread_pointer (void)
++{
++ return __builtin_thread_pointer ();
++}
++
++#endif /* _SYS_THREAD_POINTER_H */
+diff --git a/sysdeps/powerpc/nptl/thread_pointer.h b/sysdeps/powerpc/nptl/thread_pointer.h
+new file mode 100644
+index 00000000..8fd5ba67
+--- /dev/null
++++ b/sysdeps/powerpc/nptl/thread_pointer.h
+@@ -0,0 +1,33 @@
++/* __thread_pointer definition. powerpc 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. If not, see
++ <https://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_THREAD_POINTER_H
++#define _SYS_THREAD_POINTER_H
++
++static inline void *
++__thread_pointer (void)
++{
++#ifdef __powerpc64__
++ register void *__result asm ("r13");
++#else
++ register void *__result asm ("r2");
++#endif
++ return __result;
++}
++
++#endif /* _SYS_THREAD_POINTER_H */
+diff --git a/sysdeps/x86/nptl/thread_pointer.h b/sysdeps/x86/nptl/thread_pointer.h
+new file mode 100644
+index 00000000..6b71b6f7
+--- /dev/null
++++ b/sysdeps/x86/nptl/thread_pointer.h
+@@ -0,0 +1,38 @@
++/* __thread_pointer definition. x86 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. If not, see
++ <https://www.gnu.org/licenses/>. */
++
++#ifndef _SYS_THREAD_POINTER_H
++#define _SYS_THREAD_POINTER_H
++
++static inline void *
++__thread_pointer (void)
++{
++#if __GNUC_PREREQ (11, 1)
++ return __builtin_thread_pointer ();
++#else
++ void *__result;
++# ifdef __x86_64__
++ __asm__ ("mov %%fs:0, %0" : "=r" (__result));
++# else
++ __asm__ ("mov %%gs:0, %0" : "=r" (__result));
++# endif
++ return __result;
++#endif /* !GCC 11 */
++}
++
++#endif /* _SYS_THREAD_POINTER_H */
+--
+2.23.0
+