sys_stubs.S (1643B)
1 /* Linux aarch64 syscall stubs matching the sys_* labels libp1pp 2 * provides (see P1/P1pp.P1pp). boot2-syscall.c declares them as 3 * extern long sys_<name>(...) and the mes-libc layers (read/write/ 4 * open/close/lseek/sbrk/unlink/_exit) call them. The cc.scm + libp1pp 5 * pipeline resolves these labels against P1pp.P1pp's wrappers; the 6 * tcc-libc suite links against this object instead since tcc-built 7 * binaries don't catm libp1pp. 8 * 9 * Linux aarch64 syscall ABI: nr in x8, args in x0-x5, return in x0. 10 * 11 * sys_open/sys_unlink shuffle args because Linux's openat/unlinkat 12 * take an AT_FDCWD prefix that the libp1pp-compatible wrappers 13 * don't surface to callers. 14 */ 15 16 .globl sys_read 17 .globl sys_write 18 .globl sys_close 19 .globl sys_open 20 .globl sys_lseek 21 .globl sys_brk 22 .globl sys_unlink 23 .globl sys_exit 24 25 sys_read: 26 mov x8, #63 27 svc #0 28 ret 29 30 sys_write: 31 mov x8, #64 32 svc #0 33 ret 34 35 sys_close: 36 mov x8, #57 37 svc #0 38 ret 39 40 sys_open: 41 /* (path, flags, mode) -> openat(AT_FDCWD, path, flags, mode) */ 42 mov x3, x2 /* mode */ 43 mov x2, x1 /* flags */ 44 mov x1, x0 /* path */ 45 mov x0, #-100 /* AT_FDCWD */ 46 mov x8, #56 47 svc #0 48 ret 49 50 sys_lseek: 51 mov x8, #62 52 svc #0 53 ret 54 55 sys_brk: 56 mov x8, #214 57 svc #0 58 ret 59 60 sys_unlink: 61 /* (path) -> unlinkat(AT_FDCWD, path, 0) */ 62 mov x1, x0 /* path */ 63 mov x0, #-100 /* AT_FDCWD */ 64 mov x2, #0 /* flags */ 65 mov x8, #35 66 svc #0 67 ret 68 69 sys_exit: 70 mov x8, #93 71 svc #0 72 /* unreachable */ 73 .Lsys_exit_hang: 74 b .Lsys_exit_hang