37 lines
707 B
C
37 lines
707 B
C
#include <stdint.h>
|
|
#if defined(__x86_64__)
|
|
|
|
void exit(int8_t status) {
|
|
asm volatile(
|
|
"syscall"
|
|
:
|
|
: "a"(60), "D"(status)
|
|
:
|
|
);
|
|
}
|
|
|
|
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
|
|
: "rcx", "r11", "memory"
|
|
);
|
|
return n_written;
|
|
}
|
|
|
|
uint32_t fork() {
|
|
uint64_t rtn;
|
|
asm volatile(
|
|
"syscall\n" // syscall
|
|
"movq %0, %%rax\n" // save return value
|
|
: "=r"(rtn)
|
|
: "a"(57)
|
|
:
|
|
);
|
|
return (uint32_t)rtn;
|
|
}
|
|
#endif /* ifdef __x86_64__ */
|