summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/kvx/jmpbuf-offsets.h
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/kvx/jmpbuf-offsets.h')
-rw-r--r--libc/sysdeps/linux/kvx/jmpbuf-offsets.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/kvx/jmpbuf-offsets.h b/libc/sysdeps/linux/kvx/jmpbuf-offsets.h
new file mode 100644
index 000000000..27636fa33
--- /dev/null
+++ b/libc/sysdeps/linux/kvx/jmpbuf-offsets.h
@@ -0,0 +1,50 @@
+/*
+ * Private macros for accessing __jmp_buf contents. kvx version.
+ * This file is subject to the terms and conditions of the LGPL V2.1
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2019 Kalray Inc.
+ */
+
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 64
+
+/* We only need to save callee-saved registers plus stackpointer */
+# define JB_R12 0 /* stack pointer */
+# define JB_R14 1 /* frame pointer */
+# define JB_R18 2
+# define JB_R19 3
+# define JB_R20 4
+# define JB_R21 5
+# define JB_R22 6
+# define JB_R23 7
+# define JB_R24 8
+# define JB_R25 9
+# define JB_R26 10
+# define JB_R27 11
+# define JB_R28 12
+# define JB_R29 13
+# define JB_R30 14
+# define JB_R31 15
+
+#ifndef __ASSEMBLER__
+#include <setjmp.h>
+#include <stdint.h>
+#include <sysdep.h>
+
+static inline uintptr_t __attribute__ ((unused))
+_jmpbuf_sp (__jmp_buf jmpbuf)
+{
+ uintptr_t sp = jmpbuf[0].regs[JB_R12];
+ return sp;
+}
+#endif
+
+
+#else
+
+#error unsupported 32 bit wordsize
+
+#endif