boot2

Playing with the boostrap
git clone https://git.ryansepassi.com/git/boot2.git
Log | Files | Refs | README

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