summaryrefslogtreecommitdiff
path: root/src/user/lib/elfload.S
diff options
context:
space:
mode:
authordzwdz2022-08-19 23:36:29 +0200
committerdzwdz2022-08-19 23:36:29 +0200
commit040bb34290c9a4305e13637e002060411e5a8385 (patch)
tree5bdd71a8925519d5f2e22d60a9fdd572abea2ed0 /src/user/lib/elfload.S
parent390aec5ca22e62d128e71d1dee312a2f0a82ab68 (diff)
include: make camellia/syscalls.h compatible with assembly
Diffstat (limited to 'src/user/lib/elfload.S')
-rw-r--r--src/user/lib/elfload.S20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/user/lib/elfload.S b/src/user/lib/elfload.S
new file mode 100644
index 0000000..0f15c06
--- /dev/null
+++ b/src/user/lib/elfload.S
@@ -0,0 +1,20 @@
+#define ASM_FILE 1
+#include <camellia/syscalls.h>
+
+.section .text
+.global _freejmp_chstack
+.type _freejmp_chstack, @function
+// void _freejmp_chstack(void *entry, void *low, size_t len, char **argv, char **envp, void *stack);
+_freejmp_chstack:
+ mov %r9, %rsp
+ jmp _freejmp
+
+.section .text
+.global execbuf_chstack
+.type execbuf_chstack, @function
+// _Noreturn void execbuf_chstack(void *stack, void __user *buf, size_t len);
+execbuf_chstack:
+ mov %rdi, %rsp
+ mov $_SYSCALL_EXECBUF, %rdi
+ syscall
+ hlt // if execbuf failed we might as well crash