about summary refs log tree commit diff
path: root/sysdeps/mach/hurd/i386/ucontext_i.sym
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2019-12-29 16:04:51 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2019-12-29 16:54:08 +0100
commita678c13b8f9fa67c6cffe6ecf4ba1d5e53479e1b (patch)
treecb62c6fb5a84d4cdcb6d46f78318fb1818481af3 /sysdeps/mach/hurd/i386/ucontext_i.sym
parent344e755248ce02c0f8d095d11cc49e340703d926 (diff)
downloadglibc-a678c13b8f9fa67c6cffe6ecf4ba1d5e53479e1b.tar.gz
glibc-a678c13b8f9fa67c6cffe6ecf4ba1d5e53479e1b.tar.xz
glibc-a678c13b8f9fa67c6cffe6ecf4ba1d5e53479e1b.zip
hurd: Add getcontext, makecontext, setcontext, swapcontext
Adapted from the Linux x86 functions.

Not thoroughly tested, but manual testing as well as glibc tests look fine, and
manual -lpthread testing also looks fine (within the given bounds for a new
stack to be used with makecontext).

This has also been in use in Debian since 2013.
Diffstat (limited to 'sysdeps/mach/hurd/i386/ucontext_i.sym')
-rw-r--r--sysdeps/mach/hurd/i386/ucontext_i.sym29
1 files changed, 29 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/i386/ucontext_i.sym b/sysdeps/mach/hurd/i386/ucontext_i.sym
new file mode 100644
index 0000000000..cc1cfd578d
--- /dev/null
+++ b/sysdeps/mach/hurd/i386/ucontext_i.sym
@@ -0,0 +1,29 @@
+#include <stddef.h>
+#include <signal.h>
+#include <sys/ucontext.h>
+
+--
+
+SIG_BLOCK
+SIG_SETMASK
+
+#define ucontext(member)	offsetof (ucontext_t, member)
+#define mcontext(member)	ucontext (uc_mcontext.member)
+#define mreg(reg)		mcontext (gregs[REG_##reg])
+
+oLINK		ucontext (uc_link)
+oSS_SP		ucontext (uc_stack.ss_sp)
+oSS_SIZE	ucontext (uc_stack.ss_size)
+oGS		mreg (GS)
+oFS		mreg (FS)
+oEDI		mreg (EDI)
+oESI		mreg (ESI)
+oEBP		mreg (EBP)
+oESP		mreg (ESP)
+oEBX		mreg (EBX)
+oEDX		mreg (EDX)
+oECX		mreg (ECX)
+oEAX		mreg (EAX)
+oEIP		mreg (EIP)
+oFPREGS		mcontext (fpregs)
+oSIGMASK	ucontext (uc_sigmask)