summaryrefslogtreecommitdiffstats
path: root/signal.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-08-16 21:17:26 -0700
committerKaz Kylheku <kaz@kylheku.com>2017-08-16 21:17:26 -0700
commite31b1509ebb518548780aa2544459337854af48e (patch)
treeb30ef7d8bb1db97ba8ad7bad4299b349c87f2756 /signal.h
parentc77cd7d90f4a1549dacbf4b5e34827df2d6e4f03 (diff)
downloadtxr-e31b1509ebb518548780aa2544459337854af48e.tar.gz
txr-e31b1509ebb518548780aa2544459337854af48e.tar.bz2
txr-e31b1509ebb518548780aa2544459337854af48e.zip
Port to aarch64 (ARM 8).
Continuations don't work yet. * gc.c (STACK_TOP_EXTRA_WORDS): New macro. (mark): On aarch64, we must include four words above the stack top. Some live root pointers sometimes hide there which are not in any of the callee-saved register that end up in the machine context via jmp_save. * jmp.S (jmp_save, jmp_restore): Implement for aarch64.
Diffstat (limited to 'signal.h')
-rw-r--r--signal.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/signal.h b/signal.h
index 435ce6f6..ec56b9e7 100644
--- a/signal.h
+++ b/signal.h
@@ -127,6 +127,36 @@ struct jmp {
unsigned long r31;
};
+#elif __aarch64__
+
+struct jmp {
+ unsigned long x19;
+ unsigned long x20;
+ unsigned long x21;
+ unsigned long x22;
+ unsigned long x23;
+ unsigned long x24;
+ unsigned long x25;
+ unsigned long x26;
+ unsigned long x27;
+ unsigned long x28;
+ unsigned long x29;
+ unsigned long x30;
+ unsigned long d8;
+ unsigned long d9;
+ unsigned long d10;
+ unsigned long d11;
+ unsigned long d12;
+ unsigned long d13;
+ unsigned long d14;
+ unsigned long d15;
+ unsigned long x16;
+};
+
+/* Jump buffer contains:
+ x19-x28, x29(fp), x30(lr), (x31)sp, d8-d15. Other registers are not
+ saved. */
+
#else
#error port me!
#endif