Add openat support for AARCH64

This commit is contained in:
Lucas Schumacher 2025-04-26 11:10:39 -04:00
parent 47d317b977
commit 0caa6320b1
2 changed files with 29 additions and 6 deletions

View File

@ -78,4 +78,25 @@ uint32_t fork(){
return (uint32_t)rtn; return (uint32_t)rtn;
} }
int32_t openat(int32_t fd, const char* filename, uint32_t flags, uint32_t mode) {
long int rtn;
asm volatile (
// Assembly Instructions
"mov x8, #56\n" // Syscall number for 'openat' is 56 in AArch64
"mov x0, %1\n" // dir fd
"mov x1, %2\n" // file path
"mov x2, %3\n" // flags
"mov x3, %4\n" // mode
"svc #0\n" // Make the syscall
"mov %0, x0\n" // save return value
// Output operands
: "=r" (rtn)
// Input operand
: "r" ((int64_t)fd), "r"(filename), "r"((int64_t)flags), "r"((int64_t)mode)
// Clobbered registers
: "x0", "x1", "x2", "x3", "x8"
);
return (int32_t)rtn;
}
#endif #endif

View File

@ -33,14 +33,16 @@ int main() {
write(STDIO, input_buffer, n_read); write(STDIO, input_buffer, n_read);
// Test the open syscall // Test the open syscall
#if defined(__x86_64__) || defined(__mips__)
int32_t file = open("/proc/version", O_RDONLY); int32_t file = open("/proc/version", O_RDONLY);
int i = read(file, input_buffer, INPUT_BUFFER_LEN); if (file > 0) {
while(i > 0) { int i = read(file, input_buffer, INPUT_BUFFER_LEN);
write(STDIO, input_buffer, i); while(i > 0) {
i = read(file, input_buffer, INPUT_BUFFER_LEN); write(STDIO, input_buffer, i);
i = read(file, input_buffer, INPUT_BUFFER_LEN);
}
} else {
write(STDIO, "Could not open /proc/version\n", 29);
} }
#endif
return 69; return 69;
} }