diff options
author | Ian Moffett <ian@osmora.org> | 2024-03-07 17:28:00 -0500 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2024-03-07 17:28:32 -0500 |
commit | bd5969fc876a10b18613302db7087ef3c40f18e1 (patch) | |
tree | 7c2b8619afe902abf99570df2873fbdf40a4d1a1 /lib/mlibc/sysdeps/linux/riscv64/thread_entry.S | |
parent | a95b38b1b92b172e6cc4e8e56a88a30cc65907b0 (diff) |
lib: Add mlibc
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'lib/mlibc/sysdeps/linux/riscv64/thread_entry.S')
-rw-r--r-- | lib/mlibc/sysdeps/linux/riscv64/thread_entry.S | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/mlibc/sysdeps/linux/riscv64/thread_entry.S b/lib/mlibc/sysdeps/linux/riscv64/thread_entry.S new file mode 100644 index 0000000..fe170fa --- /dev/null +++ b/lib/mlibc/sysdeps/linux/riscv64/thread_entry.S @@ -0,0 +1,29 @@ +.section .text +.global __mlibc_spawn_thread +.type __mlibc_spawn_thread, "function" +__mlibc_spawn_thread: + // __mlibc_spawn_thread(flags, stack, pid_out, child_tid, tls) + // a0, a1, a2, a3, a4 + // syscall(NR_clone, flags, stack, ptid, tls, ctid) + // a7, a0, a1, a2, a3, a4 + + // Swap a3 <-> a4 + mv a5, a4 + mv a4, a3 + mv a3, a5 + + li a7, 220 // NR_clone + ecall + bnez a0, .parent + + ld a0, 0(sp) + ld a1, 8(sp) + addi sp, sp, 8 + andi sp, sp, -16 + call __mlibc_enter_thread + unimp + +.parent: + ret +.section .note.GNU-stack,"",%progbits + |