diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-05-03 21:03:12 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-05-03 21:03:12 +0200 |
commit | dfd915892a662216fa1f422ea56b89c8b34e3175 (patch) | |
tree | 1b19f8df6ff17c07175d4e9f30509ce0681b4bd5 | |
parent | a3b9243f715e772329e7829c6778168e7e443a86 (diff) | |
download | plan9front-dfd915892a662216fa1f422ea56b89c8b34e3175.tar.xz |
libthread: initial support for arm64
-rw-r--r-- | sys/src/libthread/arm64.c | 28 |
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; +} + |