From d64176ea7e40f301c68040d417cd3cec672f17f5 Mon Sep 17 00:00:00 2001 From: Lucas Schumacher Date: Mon, 14 Apr 2025 13:03:04 -0400 Subject: [PATCH] Add read support for x86_64 --- arch/x86_64.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/arch/x86_64.c b/arch/x86_64.c index ebb7394..409aabe 100644 --- a/arch/x86_64.c +++ b/arch/x86_64.c @@ -1,34 +1,50 @@ #include #if defined(__x86_64__) +#define SYS_EXIT 60 void exit(int8_t status) { asm volatile( "syscall" : - : "a"(60), "D"(status) + : "a"(SYS_EXIT), "D"(status) : ); } +#define SYS_WRITE 1 intptr_t write(int32_t fd, const void* buf, intptr_t size) { intptr_t n_written = 0; asm volatile ( "syscall\n" "movq %0, %%rax\n" : "=r"(n_written) - : "a"(1), "D"(fd), "S"(buf), "d"(size) // RDI, RSI, RDX are used in x86-64 for write args + : "a"(SYS_WRITE), "D"(fd), "S"(buf), "d"(size) // RDI, RSI, RDX are used in x86-64 for write args : "rcx", "r11", "memory" ); return n_written; } +#define SYS_READ 0 +intptr_t read(int32_t fd, const void* buf, intptr_t size) { + intptr_t n_read = 0; + asm volatile ( + "syscall\n" + "movq %0, %%rax\n" + : "=r"(n_read) + : "a"(SYS_READ), "D"(fd), "S"(buf), "d"(size) // RDI, RSI, RDX are used in x86-64 for write args + : "rcx", "r11", "memory" + ); + return n_read; +} + +#define SYS_FORK 57 uint32_t fork() { uint64_t rtn; asm volatile( "syscall\n" // syscall "movq %0, %%rax\n" // save return value : "=r"(rtn) - : "a"(57) + : "a"(SYS_FORK) : ); return (uint32_t)rtn;