Skip to content

Instantly share code, notes, and snippets.

@AtieP
Last active January 29, 2023 18:02
Show Gist options
  • Save AtieP/f65d991240b88a31410b1b2af29f71c3 to your computer and use it in GitHub Desktop.
Save AtieP/f65d991240b88a31410b1b2af29f71c3 to your computer and use it in GitHub Desktop.
mlibc sysdeps

Non-optional mlibc sysdeps

  • mlibc
    void sys_libc_log(const char *message);
    [[noreturn]] void sys_libc_panic();
    int sys_tcb_set(void *pointer);
    int sys_futex_wait(int *pointer, int expected, const struct timespec *time);
    int sys_futex_wake(int *pointer);
    int sys_anon_allocate(size_t size, void **pointer);
    int sys_anon_free(void *pointer, size_t size);
    int sys_open(const char *pathname, int flags, mode_t mode, int *fd);
    int sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read);
    int sys_seek(int fd, off_t offset, int whence, off_t *new_offset);
    int sys_close(int fd);
    int sys_vm_map(void *hint, size_t size, int prot, int flags, int fd, off_t offset, void **window);
    int sys_vm_unmap(void *pointer, size_t size);

  • ANSI
    [[noreturn]] void sys_exit(int status);
    int sys_open(const char *pathname, int flags, mode_t mode, int *fd);
    int sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read);
    int sys_write(int fd, const void *buf, size_t count, ssize_t *bytes_written);
    int sys_seek(int fd, off_t offset, int whence, off_t *new_offset);
    int sys_close(int fd);
    int sys_clock_get(int clock, time_t *secs, long *nanos);

  • Linux
    int sys_open(const char *pathname, int flags, mode_t mode, int *fd);
    int sys_close(int fd);
    int sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read);
    int sys_write(int fd, const void *buf, size_t count, ssize_t *bytes_written);

  • POSIX
    void sys_libc_log(const char *message);
    [[noreturn]] void sys_libc_panic();
    int sys_futex_wait(int *pointer, int expected, const struct timespec *time);
    int sys_futex_wake(int *pointer);
    [[noreturn]] void sys_exit(int status);
    int sys_clock_get(int clock, time_t *secs, long *nanos);
    int sys_open(const char *pathname, int flags, mode_t mode, int *fd);
    int sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read);
    int sys_write(int fd, const void *buf, size_t count, ssize_t *bytes_written);
    int sys_seek(int fd, off_t offset, int whence, off_t *new_offset);
    int sys_close(int fd);
    int sys_vm_map(void *hint, size_t size, int prot, int flags, int fd, off_t offset, void **window);
    int sys_vm_unmap(void *pointer, size_t size);

  • RTDL
    int sys_tcb_set(void *pointer);

  • Notes: sys_vm_map return pointer contents must be zeroed. The window double-pointer must be set to the returned area.
    Functions must return 0 on success, and errno on failure.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment