Add read support for x86_64
This commit is contained in:
parent
415dfd9fa4
commit
d64176ea7e
@ -1,34 +1,50 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#if defined(__x86_64__)
|
#if defined(__x86_64__)
|
||||||
|
|
||||||
|
#define SYS_EXIT 60
|
||||||
void exit(int8_t status) {
|
void exit(int8_t status) {
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"syscall"
|
"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 write(int32_t fd, const void* buf, intptr_t size) {
|
||||||
intptr_t n_written = 0;
|
intptr_t n_written = 0;
|
||||||
asm volatile (
|
asm volatile (
|
||||||
"syscall\n"
|
"syscall\n"
|
||||||
"movq %0, %%rax\n"
|
"movq %0, %%rax\n"
|
||||||
: "=r"(n_written)
|
: "=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"
|
: "rcx", "r11", "memory"
|
||||||
);
|
);
|
||||||
return n_written;
|
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() {
|
uint32_t fork() {
|
||||||
uint64_t rtn;
|
uint64_t rtn;
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"syscall\n" // syscall
|
"syscall\n" // syscall
|
||||||
"movq %0, %%rax\n" // save return value
|
"movq %0, %%rax\n" // save return value
|
||||||
: "=r"(rtn)
|
: "=r"(rtn)
|
||||||
: "a"(57)
|
: "a"(SYS_FORK)
|
||||||
:
|
:
|
||||||
);
|
);
|
||||||
return (uint32_t)rtn;
|
return (uint32_t)rtn;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user