summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2019-05-03 21:03:12 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2019-05-03 21:03:12 +0200
commitdfd915892a662216fa1f422ea56b89c8b34e3175 (patch)
tree1b19f8df6ff17c07175d4e9f30509ce0681b4bd5
parenta3b9243f715e772329e7829c6778168e7e443a86 (diff)
downloadplan9front-dfd915892a662216fa1f422ea56b89c8b34e3175.tar.xz
libthread: initial support for arm64
-rw-r--r--sys/src/libthread/arm64.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/sys/src/libthread/arm64.c b/sys/src/libthread/arm64.c
new file mode 100644
index 000000000..0170e6caf
--- /dev/null
+++ b/sys/src/libthread/arm64.c
@@ -0,0 +1,28 @@
+#include <u.h>
+#include <libc.h>
+#include <thread.h>
+#include "threadimpl.h"
+
+/* first argument goes in a register; simplest just to ignore it */
+static void
+launcherarm64(int, void (*f)(void *arg), void *arg)
+{
+ (*f)(arg);
+ threadexits(nil);
+}
+
+void
+_threadinitstack(Thread *t, void (*f)(void*), void *arg)
+{
+ uintptr *tos;
+
+ tos = (uintptr*)&t->stk[t->stksize&~15];
+ *--tos = (uintptr)arg;
+ *--tos = (uintptr)f;
+ *--tos = 0; /* first arg to launcherarm64 */
+ *--tos = 0; /* place to store return PC */
+
+ t->sched[JMPBUFPC] = (uintptr)launcherarm64+JMPBUFDPC;
+ t->sched[JMPBUFSP] = (uintptr)tos;
+}
+