aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386/htl
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2020-06-06 20:21:22 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2020-06-06 20:24:30 +0200
commit02937d825a71636c13b3f4229e5d6c9e54e327d5 (patch)
tree822a53b962bde8520f69daf62d8a0d62967a16a1 /sysdeps/i386/htl
parent8fcc772da8381476e914979fc887fdc54e62b15f (diff)
downloadglibc-02937d825a71636c13b3f4229e5d6c9e54e327d5.tar
glibc-02937d825a71636c13b3f4229e5d6c9e54e327d5.tar.gz
glibc-02937d825a71636c13b3f4229e5d6c9e54e327d5.tar.bz2
glibc-02937d825a71636c13b3f4229e5d6c9e54e327d5.zip
hurd: fix clearing SS_ONSTACK when longjmp-ing from sighandler
* sysdeps/i386/htl/Makefile: New file. * sysdeps/i386/htl/tcb-offsets.sym: New file. * sysdeps/mach/hurd/i386/Makefile [setjmp] (gen-as-const-headers): Add signal-defines.sym. * sysdeps/mach/hurd/i386/____longjmp_chk.S: Include tcb-offsets.h. (____longjmp_chk): Harmonize with i386's __longjmp. Clear SS_ONSTACK when jumping off the alternate stack. * sysdeps/mach/hurd/i386/__longjmp.S: New file.
Diffstat (limited to 'sysdeps/i386/htl')
-rw-r--r--sysdeps/i386/htl/Makefile20
-rw-r--r--sysdeps/i386/htl/tcb-offsets.sym8
2 files changed, 28 insertions, 0 deletions
diff --git a/sysdeps/i386/htl/Makefile b/sysdeps/i386/htl/Makefile
new file mode 100644
index 0000000000..8573ce6990
--- /dev/null
+++ b/sysdeps/i386/htl/Makefile
@@ -0,0 +1,20 @@
+# Copyright (C) 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
+# <https://www.gnu.org/licenses/>.
+
+ifeq ($(subdir),csu)
+gen-as-const-headers += tcb-offsets.sym
+endif
diff --git a/sysdeps/i386/htl/tcb-offsets.sym b/sysdeps/i386/htl/tcb-offsets.sym
new file mode 100644
index 0000000000..7b7c719369
--- /dev/null
+++ b/sysdeps/i386/htl/tcb-offsets.sym
@@ -0,0 +1,8 @@
+#include <sysdep.h>
+#include <tls.h>
+#include <kernel-features.h>
+
+MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads)
+SYSINFO_OFFSET offsetof (tcbhead_t, sysinfo)
+POINTER_GUARD offsetof (tcbhead_t, pointer_guard)
+SIGSTATE_OFFSET offsetof (tcbhead_t, _hurd_sigstate)