Add support for openat on x86_64
This commit is contained in:
@@ -20,7 +20,7 @@ intptr_t write(int32_t fd, const void* buf, intptr_t size) {
|
||||
"movq %0, %%rax\n"
|
||||
: "=r"(n_written)
|
||||
: "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"
|
||||
);
|
||||
return n_written;
|
||||
}
|
||||
@@ -50,4 +50,18 @@ uint32_t fork() {
|
||||
);
|
||||
return (uint32_t)rtn;
|
||||
}
|
||||
|
||||
#define SYS_OPENAT 257
|
||||
int32_t openat(int32_t fd, const char* filename, uint32_t flags, uint32_t mode) {
|
||||
int32_t file;
|
||||
asm volatile (
|
||||
"mov %%r10, %5\n"
|
||||
"syscall\n"
|
||||
: "=a"(file)
|
||||
: "a"(SYS_OPENAT), "D"(fd), "S"(filename), "d"(flags), "r"((uint64_t)mode) // RDI, RSI, RDX are used in x86-64 for write args
|
||||
: "rcx", "r10", "r11"
|
||||
);
|
||||
return file;
|
||||
}
|
||||
|
||||
#endif /* ifdef __x86_64__ */
|
||||
|
||||
Reference in New Issue
Block a user