aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/x86/thread_pointer.h
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2025-01-09 19:30:16 +0100
committerFlorian Weimer <fweimer@redhat.com>2025-01-09 19:30:16 +0100
commit7a3e2e877a70153a6d1b786925b34f3b396e20f1 (patch)
treebf876444b1ec0ab9e73fcc14bcf34e8244de47b9 /sysdeps/x86/thread_pointer.h
parent9cc9f8e11e8fb8f54f1e84d9f024917634a78201 (diff)
downloadglibc-7a3e2e877a70153a6d1b786925b34f3b396e20f1.tar.xz
glibc-7a3e2e877a70153a6d1b786925b34f3b396e20f1.zip
Move <thread_pointer.h> to kernel-independent sysdeps directories
Hurd is expected to use the same thread ABI as Linux. Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
Diffstat (limited to 'sysdeps/x86/thread_pointer.h')
-rw-r--r--sysdeps/x86/thread_pointer.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/sysdeps/x86/thread_pointer.h b/sysdeps/x86/thread_pointer.h
new file mode 100644
index 0000000000..4c02c8daab
--- /dev/null
+++ b/sysdeps/x86/thread_pointer.h
@@ -0,0 +1,38 @@
+/* __thread_pointer definition. x86 version.
+ Copyright (C) 2021-2025 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 */