see https://github.com/checkpoint-restore/criu/issues/1696 and https://github.com/checkpoint-restore/criu/pull/1706
245 lines
9.2 KiB
Diff
245 lines
9.2 KiB
Diff
From 99da2f789ca92aa52eeca07b97aee2cbd3d60fca Mon Sep 17 00:00:00 2001
|
|
From: bb-cat <ningyu9@huawei.com>
|
|
Date: Wed, 2 Mar 2022 15:00:07 +0800
|
|
Subject: [PATCH 09/16] include: add thread_pointer.h from Glibc Implementation
|
|
was taken from the Glibc.
|
|
|
|
https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=8dbeb0561eeb876f557ac9eef5721912ec074ea5
|
|
https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=cb976fba4c51ede7bf8cee5035888527c308dfbc
|
|
|
|
Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
|
|
---
|
|
.../arch/aarch64/include/asm/thread_pointer.h | 27 ++++++++++++++
|
|
.../arch/arm/include/asm/thread_pointer.h | 27 ++++++++++++++
|
|
.../arch/mips/include/asm/thread_pointer.h | 27 ++++++++++++++
|
|
.../arch/ppc64/include/asm/thread_pointer.h | 33 +++++++++++++++++
|
|
.../arch/s390/include/asm/thread_pointer.h | 27 ++++++++++++++
|
|
.../arch/x86/include/asm/thread_pointer.h | 37 +++++++++++++++++++
|
|
6 files changed, 178 insertions(+)
|
|
create mode 100644 criu/arch/aarch64/include/asm/thread_pointer.h
|
|
create mode 100644 criu/arch/arm/include/asm/thread_pointer.h
|
|
create mode 100644 criu/arch/mips/include/asm/thread_pointer.h
|
|
create mode 100644 criu/arch/ppc64/include/asm/thread_pointer.h
|
|
create mode 100644 criu/arch/s390/include/asm/thread_pointer.h
|
|
create mode 100644 criu/arch/x86/include/asm/thread_pointer.h
|
|
|
|
diff --git a/criu/arch/aarch64/include/asm/thread_pointer.h b/criu/arch/aarch64/include/asm/thread_pointer.h
|
|
new file mode 100644
|
|
index 0000000..f7e0706
|
|
--- /dev/null
|
|
+++ b/criu/arch/aarch64/include/asm/thread_pointer.h
|
|
@@ -0,0 +1,27 @@
|
|
+/* __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 *__criu_thread_pointer(void)
|
|
+{
|
|
+ return __builtin_thread_pointer();
|
|
+}
|
|
+
|
|
+#endif /* _SYS_THREAD_POINTER_H */
|
|
diff --git a/criu/arch/arm/include/asm/thread_pointer.h b/criu/arch/arm/include/asm/thread_pointer.h
|
|
new file mode 100644
|
|
index 0000000..f7e0706
|
|
--- /dev/null
|
|
+++ b/criu/arch/arm/include/asm/thread_pointer.h
|
|
@@ -0,0 +1,27 @@
|
|
+/* __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 *__criu_thread_pointer(void)
|
|
+{
|
|
+ return __builtin_thread_pointer();
|
|
+}
|
|
+
|
|
+#endif /* _SYS_THREAD_POINTER_H */
|
|
diff --git a/criu/arch/mips/include/asm/thread_pointer.h b/criu/arch/mips/include/asm/thread_pointer.h
|
|
new file mode 100644
|
|
index 0000000..f7e0706
|
|
--- /dev/null
|
|
+++ b/criu/arch/mips/include/asm/thread_pointer.h
|
|
@@ -0,0 +1,27 @@
|
|
+/* __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 *__criu_thread_pointer(void)
|
|
+{
|
|
+ return __builtin_thread_pointer();
|
|
+}
|
|
+
|
|
+#endif /* _SYS_THREAD_POINTER_H */
|
|
diff --git a/criu/arch/ppc64/include/asm/thread_pointer.h b/criu/arch/ppc64/include/asm/thread_pointer.h
|
|
new file mode 100644
|
|
index 0000000..304516f
|
|
--- /dev/null
|
|
+++ b/criu/arch/ppc64/include/asm/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
|
|
+
|
|
+#ifdef __powerpc64__
|
|
+register void *__thread_register asm("r13");
|
|
+#else
|
|
+register void *__thread_register asm("r2");
|
|
+#endif
|
|
+
|
|
+static inline void *__criu_thread_pointer(void)
|
|
+{
|
|
+ return __thread_register;
|
|
+}
|
|
+
|
|
+#endif /* _SYS_THREAD_POINTER_H */
|
|
\ No newline at end of file
|
|
diff --git a/criu/arch/s390/include/asm/thread_pointer.h b/criu/arch/s390/include/asm/thread_pointer.h
|
|
new file mode 100644
|
|
index 0000000..f7e0706
|
|
--- /dev/null
|
|
+++ b/criu/arch/s390/include/asm/thread_pointer.h
|
|
@@ -0,0 +1,27 @@
|
|
+/* __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 *__criu_thread_pointer(void)
|
|
+{
|
|
+ return __builtin_thread_pointer();
|
|
+}
|
|
+
|
|
+#endif /* _SYS_THREAD_POINTER_H */
|
|
diff --git a/criu/arch/x86/include/asm/thread_pointer.h b/criu/arch/x86/include/asm/thread_pointer.h
|
|
new file mode 100644
|
|
index 0000000..08603ae
|
|
--- /dev/null
|
|
+++ b/criu/arch/x86/include/asm/thread_pointer.h
|
|
@@ -0,0 +1,37 @@
|
|
+/* __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 *__criu_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 */
|
|
\ No newline at end of file
|
|
--
|
|
2.30.0
|
|
|