aboutsummaryrefslogtreecommitdiff
path: root/lib/mlibc/sysdeps
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2024-03-07 17:28:52 -0500
committerIan Moffett <ian@osmora.org>2024-03-07 18:24:51 -0500
commitf5e48e94a2f4d4bbd6e5628c7f2afafc6dbcc459 (patch)
tree93b156621dc0303816b37f60ba88051b702d92f6 /lib/mlibc/sysdeps
parentbd5969fc876a10b18613302db7087ef3c40f18e1 (diff)
build: Build mlibc + add distclean target
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'lib/mlibc/sysdeps')
-rw-r--r--lib/mlibc/sysdeps/aero/crt-x86_64/crt0.S10
-rw-r--r--lib/mlibc/sysdeps/aero/generic/aero.cpp360
-rw-r--r--lib/mlibc/sysdeps/aero/generic/entry.cpp36
-rw-r--r--lib/mlibc/sysdeps/aero/generic/filesystem.cpp472
-rw-r--r--lib/mlibc/sysdeps/aero/generic/signals.S9
-rw-r--r--lib/mlibc/sysdeps/aero/generic/signals.cpp53
-rw-r--r--lib/mlibc/sysdeps/aero/generic/sockets.cpp250
-rw-r--r--lib/mlibc/sysdeps/aero/generic/thread.cpp55
-rw-r--r--lib/mlibc/sysdeps/aero/generic/thread_entry.S10
-rw-r--r--lib/mlibc/sysdeps/aero/generic/time.cpp25
l---------lib/mlibc/sysdeps/aero/include/abi-bits/access.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/auxv.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/blkcnt_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/blksize_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/clockid_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/dev_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/epoll.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/errno.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/fcntl.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/fsblkcnt_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/fsfilcnt_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/gid_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/in.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/ino_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/inotify.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/ioctls.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/limits.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/mode_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/mqueue.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/msg.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/nlink_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/packet.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/pid_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/poll.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/ptrace.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/reboot.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/resource.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/seek-whence.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/shm.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/signal.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/socket.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/socklen_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/stat.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/statfs.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/statvfs.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/suseconds_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/termios.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/time.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/uid_t.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/utsname.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/vm-flags.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/wait.h1
l---------lib/mlibc/sysdeps/aero/include/abi-bits/xattr.h1
-rw-r--r--lib/mlibc/sysdeps/aero/include/aero/syscall.h231
-rw-r--r--lib/mlibc/sysdeps/aero/include/mlibc/thread-entry.hpp11
-rw-r--r--lib/mlibc/sysdeps/aero/meson.build85
-rw-r--r--lib/mlibc/sysdeps/dripos/crt-x86_64/crt1.S9
-rw-r--r--lib/mlibc/sysdeps/dripos/generic/entry.cpp35
-rw-r--r--lib/mlibc/sysdeps/dripos/generic/generic.cpp298
-rw-r--r--lib/mlibc/sysdeps/dripos/generic/thread.cpp53
-rw-r--r--lib/mlibc/sysdeps/dripos/generic/thread_entry.S11
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/access.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/auxv.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/blkcnt_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/blksize_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/clockid_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/dev_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/epoll.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/errno.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/fcntl.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/fsblkcnt_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/fsfilcnt_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/gid_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/in.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/ino_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/inotify.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/ioctls.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/limits.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/mode_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/mqueue.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/msg.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/nlink_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/packet.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/pid_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/poll.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/ptrace.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/resource.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/seek-whence.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/shm.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/signal.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/socket.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/socklen_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/stat.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/statfs.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/statvfs.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/suseconds_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/termios.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/time.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/uid_t.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/utsname.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/vm-flags.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/wait.h1
l---------lib/mlibc/sysdeps/dripos/include/abi-bits/xattr.h1
-rw-r--r--lib/mlibc/sysdeps/dripos/include/mlibc/thread-entry.hpp10
-rw-r--r--lib/mlibc/sysdeps/dripos/meson.build71
-rw-r--r--lib/mlibc/sysdeps/hyra/crt-x86_64/crt0.S9
-rw-r--r--lib/mlibc/sysdeps/hyra/generic/entry.cpp35
-rw-r--r--lib/mlibc/sysdeps/hyra/generic/hyra.cpp121
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/access.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/auxv.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/blkcnt_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/blksize_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/clockid_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/dev_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/epoll.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/errno.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/fcntl.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/fsblkcnt_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/fsfilcnt_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/gid_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/in.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/ino_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/inotify.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/ioctls.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/limits.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/mode_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/mqueue.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/msg.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/nlink_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/packet.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/pid_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/poll.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/ptrace.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/reboot.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/resource.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/seek-whence.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/shm.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/signal.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/socket.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/socklen_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/stat.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/statfs.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/statvfs.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/suseconds_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/termios.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/time.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/uid_t.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/utsname.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/vm-flags.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/vt.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/wait.h1
l---------lib/mlibc/sysdeps/hyra/include/abi-bits/xattr.h1
-rw-r--r--lib/mlibc/sysdeps/hyra/include/hyra/syscall.h55
-rw-r--r--lib/mlibc/sysdeps/hyra/meson.build69
-rw-r--r--lib/mlibc/sysdeps/ironclad/crt-x86_64/crt0.S9
-rw-r--r--lib/mlibc/sysdeps/ironclad/crt-x86_64/crti.S11
-rw-r--r--lib/mlibc/sysdeps/ironclad/crt-x86_64/crtn.S9
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/entry.cpp35
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/generic.cpp1266
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/mac.cpp32
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/mntent.cpp97
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/mount.cpp20
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/ptrace.cpp9
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/pty.cpp41
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/reboot.cpp9
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/sched2.cpp20
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/thread.S9
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/thread.cpp54
-rw-r--r--lib/mlibc/sysdeps/ironclad/generic/utmpx.cpp76
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/access.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/auxv.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/blkcnt_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/blksize_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/clockid_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/dev_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/epoll.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/errno.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/fcntl.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/fsblkcnt_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/fsfilcnt_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/gid_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/in.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/ino_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/inotify.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/ioctls.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/limits.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/mode_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/mqueue.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/msg.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/nlink_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/packet.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/pid_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/poll.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/ptrace.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/reboot.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/resource.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/seek-whence.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/shm.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/signal.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/socket.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/socklen_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/stat.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/statfs.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/statvfs.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/suseconds_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/termios.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/time.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/uid_t.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/utsname.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/vm-flags.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/wait.h1
l---------lib/mlibc/sysdeps/ironclad/include/abi-bits/xattr.h1
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/asm/ioctls.h102
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/linux/fb.h397
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/mntent.h46
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/pty.h16
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/sys/ironclad_devices.h44
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/sys/mac.h46
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/sys/mount.h24
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/sys/ptrace.h23
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/sys/reboot.h16
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/sys/sched2.h24
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/sys/syscall.h187
-rw-r--r--lib/mlibc/sysdeps/ironclad/include/utmpx.h63
-rw-r--r--lib/mlibc/sysdeps/ironclad/meson.build125
-rw-r--r--lib/mlibc/sysdeps/keyronex/generic/entry.cpp108
-rw-r--r--lib/mlibc/sysdeps/keyronex/generic/generic.cpp753
-rw-r--r--lib/mlibc/sysdeps/keyronex/generic/linux.cpp41
-rw-r--r--lib/mlibc/sysdeps/keyronex/generic/signal.cpp66
-rw-r--r--lib/mlibc/sysdeps/keyronex/generic/socket.cpp119
-rw-r--r--lib/mlibc/sysdeps/keyronex/generic/thread.S9
-rw-r--r--lib/mlibc/sysdeps/keyronex/generic/thread.cpp80
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/access.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/auxv.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/blkcnt_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/blksize_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/clockid_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/dev_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/epoll.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/errno.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/fcntl.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/fsblkcnt_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/fsfilcnt_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/gid_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/in.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/ino_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/inotify.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/ioctls.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/limits.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/mode_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/mqueue.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/msg.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/nlink_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/packet.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/pid_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/poll.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/ptrace.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/reboot.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/resource.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/seek-whence.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/shm.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/signal.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/socket.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/socklen_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/stat.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/statfs.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/statvfs.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/suseconds_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/termios.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/time.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/uid_t.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/utsname.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/vm-flags.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/wait.h1
l---------lib/mlibc/sysdeps/keyronex/include/abi-bits/xattr.h1
-rw-r--r--lib/mlibc/sysdeps/keyronex/include/keyronex/syscall.h213
-rw-r--r--lib/mlibc/sysdeps/keyronex/meson.build98
-rw-r--r--lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crt0.S7
-rw-r--r--lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crti.S11
-rw-r--r--lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crtn.S9
-rwxr-xr-xlib/mlibc/sysdeps/lemon/crt-x86_64/crt0.S10
-rw-r--r--lib/mlibc/sysdeps/lemon/generic/entry.cpp33
-rwxr-xr-xlib/mlibc/sysdeps/lemon/generic/filesystem.cpp406
-rw-r--r--lib/mlibc/sysdeps/lemon/generic/lemon.cpp199
-rw-r--r--lib/mlibc/sysdeps/lemon/generic/pty.cpp63
-rw-r--r--lib/mlibc/sysdeps/lemon/generic/signals.cpp38
-rwxr-xr-xlib/mlibc/sysdeps/lemon/generic/sockets.cpp132
-rw-r--r--lib/mlibc/sysdeps/lemon/generic/thread.cpp53
-rw-r--r--lib/mlibc/sysdeps/lemon/generic/thread_entry.S11
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/access.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/auxv.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/blkcnt_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/blksize_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/clockid_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/dev_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/epoll.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/errno.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/fcntl.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/fsblkcnt_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/fsfilcnt_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/gid_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/in.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/ino_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/inotify.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/ioctls.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/limits.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/mode_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/mqueue.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/msg.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/nlink_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/packet.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/pid_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/poll.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/ptrace.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/reboot.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/resource.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/seek-whence.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/shm.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/signal.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/socket.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/socklen_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/stat.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/statfs.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/statvfs.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/suseconds_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/termios.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/time.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/uid_t.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/utsname.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/vm-flags.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/wait.h1
l---------lib/mlibc/sysdeps/lemon/include/abi-bits/xattr.h1
-rwxr-xr-xlib/mlibc/sysdeps/lemon/include/lemon/syscall.h194
-rw-r--r--lib/mlibc/sysdeps/lemon/include/mlibc/thread-entry.hpp10
-rw-r--r--lib/mlibc/sysdeps/lemon/meson.build81
-rw-r--r--lib/mlibc/sysdeps/linux/aarch64/arch-syscall.cpp117
-rw-r--r--lib/mlibc/sysdeps/linux/aarch64/cp_syscall.S31
-rw-r--r--lib/mlibc/sysdeps/linux/aarch64/crt-src/Scrt1.S11
-rw-r--r--lib/mlibc/sysdeps/linux/aarch64/crt-src/crt1.S9
-rw-r--r--lib/mlibc/sysdeps/linux/aarch64/crt-src/crti.S13
-rw-r--r--lib/mlibc/sysdeps/linux/aarch64/crt-src/crtn.S9
-rw-r--r--lib/mlibc/sysdeps/linux/aarch64/signals.S12
-rw-r--r--lib/mlibc/sysdeps/linux/aarch64/syscallnos.h313
-rw-r--r--lib/mlibc/sysdeps/linux/aarch64/thread_entry.S27
-rw-r--r--lib/mlibc/sysdeps/linux/generic/cxx-syscall.hpp118
-rw-r--r--lib/mlibc/sysdeps/linux/generic/entry.cpp38
-rw-r--r--lib/mlibc/sysdeps/linux/generic/sysdeps.cpp2002
-rw-r--r--lib/mlibc/sysdeps/linux/generic/thread.cpp60
-rw-r--r--lib/mlibc/sysdeps/linux/include-internal/linux/unistd.h2
l---------lib/mlibc/sysdeps/linux/include/abi-bits/access.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/auxv.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/blkcnt_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/blksize_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/clockid_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/dev_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/epoll.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/errno.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/fcntl.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/fsblkcnt_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/fsfilcnt_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/gid_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/in.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/ino_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/inotify.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/ioctls.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/limits.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/mode_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/mqueue.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/msg.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/nlink_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/packet.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/pid_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/poll.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/ptrace.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/reboot.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/resource.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/seek-whence.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/shm.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/signal.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/socket.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/socklen_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/stat.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/statfs.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/statvfs.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/suseconds_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/termios.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/time.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/uid_t.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/utsname.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/vm-flags.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/vt.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/wait.h1
l---------lib/mlibc/sysdeps/linux/include/abi-bits/xattr.h1
-rw-r--r--lib/mlibc/sysdeps/linux/include/bits/syscall.h90
-rw-r--r--lib/mlibc/sysdeps/linux/include/bits/syscall_aliases.h1823
-rw-r--r--lib/mlibc/sysdeps/linux/include/mlibc/thread-entry.hpp12
-rw-r--r--lib/mlibc/sysdeps/linux/include/sys/syscall.h12
-rw-r--r--lib/mlibc/sysdeps/linux/include/syscall.h1
-rw-r--r--lib/mlibc/sysdeps/linux/meson.build143
-rwxr-xr-xlib/mlibc/sysdeps/linux/mlibc-gcc.in2
-rw-r--r--lib/mlibc/sysdeps/linux/mlibc-gcc.specs.in32
-rw-r--r--lib/mlibc/sysdeps/linux/riscv64/arch-syscall.cpp117
-rw-r--r--lib/mlibc/sysdeps/linux/riscv64/cp_syscall.S30
-rw-r--r--lib/mlibc/sysdeps/linux/riscv64/crt-src/Scrt1.S18
-rw-r--r--lib/mlibc/sysdeps/linux/riscv64/crt-src/crt1.S15
-rw-r--r--lib/mlibc/sysdeps/linux/riscv64/crt-src/crti.S11
-rw-r--r--lib/mlibc/sysdeps/linux/riscv64/crt-src/crtn.S7
-rw-r--r--lib/mlibc/sysdeps/linux/riscv64/signals.S12
-rw-r--r--lib/mlibc/sysdeps/linux/riscv64/syscallnos.h314
-rw-r--r--lib/mlibc/sysdeps/linux/riscv64/thread_entry.S29
-rwxr-xr-xlib/mlibc/sysdeps/linux/update-syscall-list.py332
-rw-r--r--lib/mlibc/sysdeps/linux/x86/arch-syscall.cpp90
-rw-r--r--lib/mlibc/sysdeps/linux/x86/cp_syscall.S42
-rw-r--r--lib/mlibc/sysdeps/linux/x86/crt-src/Scrt1.S29
-rw-r--r--lib/mlibc/sysdeps/linux/x86/crt-src/crt1.S18
-rw-r--r--lib/mlibc/sysdeps/linux/x86/crt-src/crti.S11
-rw-r--r--lib/mlibc/sysdeps/linux/x86/crt-src/crtn.S9
-rw-r--r--lib/mlibc/sysdeps/linux/x86/signals.S18
-rw-r--r--lib/mlibc/sysdeps/linux/x86/syscallnos.h433
-rw-r--r--lib/mlibc/sysdeps/linux/x86/thread_entry.S61
-rw-r--r--lib/mlibc/sysdeps/linux/x86_64/arch-syscall.cpp78
-rw-r--r--lib/mlibc/sysdeps/linux/x86_64/cp_syscall.S29
-rw-r--r--lib/mlibc/sysdeps/linux/x86_64/crt-src/Scrt1.S8
-rw-r--r--lib/mlibc/sysdeps/linux/x86_64/crt-src/crt1.S8
-rw-r--r--lib/mlibc/sysdeps/linux/x86_64/crt-src/crti.S11
-rw-r--r--lib/mlibc/sysdeps/linux/x86_64/crt-src/crtn.S9
-rw-r--r--lib/mlibc/sysdeps/linux/x86_64/signals.S14
-rw-r--r--lib/mlibc/sysdeps/linux/x86_64/syscallnos.h362
-rw-r--r--lib/mlibc/sysdeps/linux/x86_64/thread_entry.S23
-rw-r--r--lib/mlibc/sysdeps/lyre/generic/entry.cpp120
-rw-r--r--lib/mlibc/sysdeps/lyre/generic/generic.cpp860
-rw-r--r--lib/mlibc/sysdeps/lyre/generic/mntent.cpp97
-rw-r--r--lib/mlibc/sysdeps/lyre/generic/mount.cpp16
-rw-r--r--lib/mlibc/sysdeps/lyre/generic/reboot.cpp7
-rw-r--r--lib/mlibc/sysdeps/lyre/generic/thread.S9
-rw-r--r--lib/mlibc/sysdeps/lyre/generic/thread.cpp58
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/access.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/auxv.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/blkcnt_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/blksize_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/clockid_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/dev_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/epoll.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/errno.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/fcntl.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/fsblkcnt_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/fsfilcnt_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/gid_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/in.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/ino_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/inotify.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/ioctls.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/limits.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/mode_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/mqueue.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/msg.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/nlink_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/packet.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/pid_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/poll.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/ptrace.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/reboot.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/resource.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/seek-whence.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/shm.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/signal.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/socket.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/socklen_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/stat.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/statfs.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/statvfs.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/suseconds_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/termios.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/time.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/uid_t.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/utsname.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/vm-flags.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/wait.h1
l---------lib/mlibc/sysdeps/lyre/include/abi-bits/xattr.h1
-rw-r--r--lib/mlibc/sysdeps/lyre/include/asm/ioctl.h105
-rw-r--r--lib/mlibc/sysdeps/lyre/include/asm/ioctls.h121
-rw-r--r--lib/mlibc/sysdeps/lyre/include/linux/fb.h400
-rw-r--r--lib/mlibc/sysdeps/lyre/include/lyre/sockios.h25
-rw-r--r--lib/mlibc/sysdeps/lyre/include/lyre/syscall.h113
-rw-r--r--lib/mlibc/sysdeps/lyre/include/mntent.h50
-rw-r--r--lib/mlibc/sysdeps/lyre/include/sys/mount.h54
-rw-r--r--lib/mlibc/sysdeps/lyre/include/sys/reboot.h20
-rw-r--r--lib/mlibc/sysdeps/lyre/include/sys/sysmacros.h33
-rw-r--r--lib/mlibc/sysdeps/lyre/meson.build122
-rw-r--r--lib/mlibc/sysdeps/lyre/x86_64/crt-src/crt0.S7
-rw-r--r--lib/mlibc/sysdeps/lyre/x86_64/crt-src/crti.S11
-rw-r--r--lib/mlibc/sysdeps/lyre/x86_64/crt-src/crtn.S9
-rw-r--r--lib/mlibc/sysdeps/managarm/aarch64/crt-src/Scrt1.S10
-rw-r--r--lib/mlibc/sysdeps/managarm/aarch64/crt-src/crt0.S11
-rw-r--r--lib/mlibc/sysdeps/managarm/aarch64/crt-src/crti.S15
-rw-r--r--lib/mlibc/sysdeps/managarm/aarch64/crt-src/crtn.S11
-rw-r--r--lib/mlibc/sysdeps/managarm/aarch64/signals.S10
-rw-r--r--lib/mlibc/sysdeps/managarm/aarch64/thread.cpp56
-rw-r--r--lib/mlibc/sysdeps/managarm/aarch64/thread_entry.S11
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/drm.cpp1176
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/ensure.cpp38
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/entry.cpp132
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/file.cpp2526
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/fork-exec.cpp744
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/ioctl.cpp708
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/memory.cpp30
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/mount.cpp44
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/net.cpp57
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/sched.cpp102
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/signals.cpp139
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/socket.cpp423
-rw-r--r--lib/mlibc/sysdeps/managarm/generic/time.cpp81
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/access.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/auxv.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/blkcnt_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/blksize_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/clockid_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/dev_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/epoll.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/errno.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/fcntl.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/fsblkcnt_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/fsfilcnt_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/gid_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/in.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/ino_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/inotify.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/ioctls.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/limits.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/mode_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/mqueue.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/msg.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/nlink_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/packet.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/pid_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/poll.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/ptrace.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/reboot.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/resource.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/seek-whence.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/shm.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/signal.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/socket.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/socklen_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/stat.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/statfs.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/statvfs.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/suseconds_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/termios.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/time.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/uid_t.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/utsname.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/vm-flags.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/vt.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/wait.h1
l---------lib/mlibc/sysdeps/managarm/include/abi-bits/xattr.h1
-rw-r--r--lib/mlibc/sysdeps/managarm/include/mlibc/posix-pipe.hpp300
-rw-r--r--lib/mlibc/sysdeps/managarm/include/mlibc/thread-entry.hpp10
-rw-r--r--lib/mlibc/sysdeps/managarm/meson.build145
-rw-r--r--lib/mlibc/sysdeps/managarm/rtdl-generic/support.cpp444
-rw-r--r--lib/mlibc/sysdeps/managarm/x86_64/crt-src/Scrt1.S8
-rw-r--r--lib/mlibc/sysdeps/managarm/x86_64/crt-src/crt0.S10
-rw-r--r--lib/mlibc/sysdeps/managarm/x86_64/crt-src/crti.S15
-rw-r--r--lib/mlibc/sysdeps/managarm/x86_64/crt-src/crtn.S11
-rw-r--r--lib/mlibc/sysdeps/managarm/x86_64/signals.S10
-rw-r--r--lib/mlibc/sysdeps/managarm/x86_64/thread.cpp56
-rw-r--r--lib/mlibc/sysdeps/managarm/x86_64/thread_entry.S11
567 files changed, 0 insertions, 24922 deletions
diff --git a/lib/mlibc/sysdeps/aero/crt-x86_64/crt0.S b/lib/mlibc/sysdeps/aero/crt-x86_64/crt0.S
deleted file mode 100644
index 62298e3..0000000
--- a/lib/mlibc/sysdeps/aero/crt-x86_64/crt0.S
+++ /dev/null
@@ -1,10 +0,0 @@
-.section .text
-
-.global _start
-_start:
- mov $main, %rdi
- call __mlibc_entry
-
-.size _start, . - _start
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/aero/generic/aero.cpp b/lib/mlibc/sysdeps/aero/generic/aero.cpp
deleted file mode 100644
index e6bd277..0000000
--- a/lib/mlibc/sysdeps/aero/generic/aero.cpp
+++ /dev/null
@@ -1,360 +0,0 @@
-#include <abi-bits/pid_t.h>
-#include <aero/syscall.h>
-#include <bits/ensure.h>
-#include <errno.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/debug.hpp>
-#include <mlibc/thread-entry.hpp>
-#include <stddef.h>
-
-#include <frg/vector.hpp>
-#include <mlibc/allocator.hpp>
-
-#define ARCH_SET_GS 0x1001
-#define ARCH_SET_FS 0x1002
-#define ARCH_GET_FS 0x1003
-#define ARCH_GET_GS 0x1004
-
-struct Slice {
- void *ptr;
- uint64_t len;
-};
-
-/// Helper function to construct a slice vector from the provided argument
-/// array. A slice basically consists of a pointer to the data and the length of
-/// it.
-///
-/// ## Examples
-/// ```cc
-/// auto slice = create_slice({ "hello", "world" });
-/// ```
-///
-/// The `slice` will look like the following:
-///
-/// ```cc
-/// vector<Slice>(
-/// Slice { .ptr: hello_ptr, .size: hello_size },
-/// Slice { .ptr: world_ptr, .size: world_size }
-/// )
-/// ```
-static frg::vector<Slice, MemoryAllocator> create_slice(char *const arg[]) {
- if (arg == nullptr) {
- return frg::vector<Slice, MemoryAllocator>{getAllocator()};
- }
-
- // Find out the length of arg:
- size_t len = 0;
-
- while (arg[len] != nullptr) {
- len += 1;
- }
-
- frg::vector<Slice, MemoryAllocator> params{getAllocator()};
- params.resize(len);
-
- // Construct the slice vector:
- for (size_t i = 0; i < len; ++i) {
- params[i].ptr = (void *)arg[i];
- params[i].len = strlen(arg[i]);
- }
-
- return params;
-}
-
-namespace mlibc {
-int sys_uname(struct utsname *buf) {
- auto result = syscall(SYS_UNAME, buf);
-
- if (result < 0) {
- return -result;
- }
-
- return result;
-}
-
-int sys_futex_wait(int *pointer, int expected, const struct timespec *time) {
- // auto result = syscall(SYS_FUTEX_WAIT, pointer, expected, time);
- //
- // if (result < 0) {
- // return -result;
- // }
- //
- return 0;
-}
-
-int sys_futex_wake(int *pointer) {
- // auto result = syscall(SYS_FUTEX_WAKE, pointer);
- //
- // if (result < 0) {
- // return -result;
- // }
- //
- return 0;
-}
-
-int sys_tcb_set(void *pointer) {
- auto result = syscall(SYS_ARCH_PRCTL, ARCH_SET_FS, (uint64_t)pointer);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_vm_map(void *hint, size_t size, int prot, int flags, int fd,
- off_t offset, void **window) {
- auto result = syscall(SYS_MMAP, hint, size, prot, flags, fd, offset);
-
- if (result < 0) {
- return -result;
- }
-
- *window = (void *)result;
- return 0;
-}
-
-int sys_vm_unmap(void *address, size_t size) {
- return syscall(SYS_MUNMAP, address, size);
-}
-
-int sys_vm_protect(void *pointer, size_t size, int prot) {
- auto res = syscall(SYS_MPROTECT, pointer, size, prot);
- if (res < 0)
- return -res;
-
- return 0;
-}
-
-int sys_anon_allocate(size_t size, void **pointer) {
- return sys_vm_map(nullptr, size, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0, pointer);
-}
-
-int sys_anon_free(void *pointer, size_t size) {
- return sys_vm_unmap(pointer, size);
-}
-
-void sys_libc_panic() {
- mlibc::infoLogger() << "libc_panic: panicked at 'unknown'" << frg::endlog;
- __ensure(!syscall(SYS_BACKTRACE));
-
- sys_exit(1);
-}
-
-void sys_libc_log(const char *msg) { syscall(SYS_LOG, msg, strlen(msg)); }
-
-void sys_exit(int status) {
- syscall(SYS_EXIT, status);
-
- __builtin_unreachable();
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-pid_t sys_getpid() {
- auto result = syscall(SYS_GETPID);
- __ensure(result >= 0);
-
- return result;
-}
-
-pid_t sys_getppid() {
- auto result = syscall(SYS_GETPPID);
- __ensure(result != 0);
-
- return result;
-}
-
-int sys_kill(int pid, int sig) {
- auto result = syscall(SYS_KILL, pid, sig);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_clock_get(int clock, time_t *secs, long *nanos) {
- struct timespec ts;
- auto result = syscall(SYS_GETTIME, clock, &ts);
-
- if (result < 0) {
- return -result;
- }
-
- *secs = ts.tv_sec;
- *nanos = ts.tv_nsec;
-
- return 0;
-}
-
-int sys_getcwd(char *buffer, size_t size) {
- auto result = syscall(SYS_GETCWD, buffer, size);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_chdir(const char *path) {
- auto result = syscall(SYS_CHDIR, path, strlen(path));
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_gethostname(char *buffer, size_t bufsize) {
- auto result = syscall(SYS_GETHOSTNAME, buffer, bufsize);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_sleep(time_t *sec, long *nanosec) {
- struct timespec ts = {.tv_sec = *sec, .tv_nsec = *nanosec};
-
- auto result = syscall(SYS_SLEEP, &ts);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-pid_t sys_getpgid(pid_t pid, pid_t *pgid) {
- auto ret = syscall(SYS_GETPGID, pid);
- if(int e = sc_error(ret); e)
- return e;
- *pgid = ret;
- return 0;
-}
-
-int sys_setpgid(pid_t pid, pid_t pgid) {
- auto ret = syscall(SYS_SETPGID, pid, pgid);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-uid_t sys_getuid() {
- mlibc::infoLogger() << "mlibc: sys_setuid is a stub" << frg::endlog;
- return 0;
-}
-
-uid_t sys_geteuid() {
- mlibc::infoLogger() << "mlibc: sys_seteuid is a stub" << frg::endlog;
- return 0;
-}
-
-int sys_setsid(pid_t *sid) {
- auto ret = syscall(SYS_SETSID);
- if(int e = sc_error(ret); e)
- return e;
- *sid = ret;
- return 0;
-}
-
-int sys_seteuid(uid_t euid) UNIMPLEMENTED("sys_seteuid")
-
- gid_t sys_getgid() {
- mlibc::infoLogger() << "mlibc: sys_setgid is a stub" << frg::endlog;
- return 0;
-}
-
-gid_t sys_getegid() {
- mlibc::infoLogger() << "mlibc: sys_getegid is a stub" << frg::endlog;
- return 0;
-}
-
-int sys_setgid(gid_t gid) {
- mlibc::infoLogger() << "mlibc: sys_setgid is a stub" << frg::endlog;
- return 0;
-}
-
-int sys_setegid(gid_t egid) {
- mlibc::infoLogger() << "mlibc: sys_setegid is a stub" << frg::endlog;
- return 0;
-}
-
-void sys_yield() {
- mlibc::infoLogger() << "mlibc: sys_yield is a stub" << frg::endlog;
- __ensure(!syscall(SYS_BACKTRACE));
-}
-
-int sys_clone(void *tcb, pid_t *tid_out, void *stack) {
- auto result = syscall(SYS_CLONE, (uintptr_t)__mlibc_start_thread, stack);
-
- if (result < 0) {
- return -result;
- }
-
- *tid_out = (pid_t)result;
- return 0;
-}
-
-void sys_thread_exit() UNIMPLEMENTED("sys_thread_exit")
-
- int sys_waitpid(pid_t pid, int *status, int flags, struct rusage *ru,
- pid_t *ret_pid) {
- if (ru) {
- mlibc::infoLogger()
- << "mlibc: struct rusage in sys_waitpid is unsupported"
- << frg::endlog;
- return ENOSYS;
- }
-
- auto result = syscall(SYS_WAITPID, pid, status, flags);
-
- if (result < 0) {
- return -result;
- }
-
- *ret_pid = result;
- return 0;
-}
-
-int sys_fork(pid_t *child) {
- auto result = syscall(SYS_FORK);
-
- if (result < 0) {
- return -result;
- }
-
- *child = result;
- return 0;
-}
-
-int sys_execve(const char *path, char *const argv[], char *const envp[]) {
- auto envv_slice = create_slice(envp);
- auto argv_slice = create_slice(argv);
-
- auto path_ptr = (uintptr_t)path;
- auto path_len = strlen(path);
-
- auto result =
- syscall(SYS_EXEC, path_ptr, path_len, argv_slice.data(),
- argv_slice.size(), envv_slice.data(), envv_slice.size());
-
- if (result < 0) {
- return -result;
- }
-
- __builtin_unreachable();
-}
-
-// int sys_getentropy(void *buffer, size_t length)
-// UNIMPLEMENTED("sys_getentropy")
-
-#endif
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/aero/generic/entry.cpp b/lib/mlibc/sysdeps/aero/generic/entry.cpp
deleted file mode 100644
index 77d6ed5..0000000
--- a/lib/mlibc/sysdeps/aero/generic/entry.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <bits/ensure.h>
-#include <mlibc/elf/startup.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-// defined by the POSIX library
-void __mlibc_initLocale();
-
-extern "C" uintptr_t *__dlapi_entrystack();
-
-extern char **environ;
-static mlibc::exec_stack_data __mlibc_stack_data;
-
-struct LibraryGuard {
- LibraryGuard();
-};
-
-static LibraryGuard guard;
-
-LibraryGuard::LibraryGuard() {
- __mlibc_initLocale();
-
- // Parse the exec() stack.
- mlibc::parse_exec_stack(__dlapi_entrystack(), &__mlibc_stack_data);
- mlibc::set_startup_data(__mlibc_stack_data.argc, __mlibc_stack_data.argv,
- __mlibc_stack_data.envp);
-}
-
-extern "C" void __mlibc_entry(int (*main_fn)(int argc, char *argv[],
- char *env[])) {
- // TODO: call __dlapi_enter, otherwise static builds will break (see Linux
- // sysdeps)
- auto result =
- main_fn(__mlibc_stack_data.argc, __mlibc_stack_data.argv, environ);
- exit(result);
-}
diff --git a/lib/mlibc/sysdeps/aero/generic/filesystem.cpp b/lib/mlibc/sysdeps/aero/generic/filesystem.cpp
deleted file mode 100644
index 049f4c0..0000000
--- a/lib/mlibc/sysdeps/aero/generic/filesystem.cpp
+++ /dev/null
@@ -1,472 +0,0 @@
-#include "mlibc/fsfd_target.hpp"
-#include <aero/syscall.h>
-
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-
-#include <unistd.h>
-
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/debug.hpp>
-
-namespace mlibc {
-int sys_write(int fd, const void *buffer, size_t count, ssize_t *written) {
- auto result = syscall(SYS_WRITE, fd, buffer, count);
-
- if (result < 0) {
- return -result;
- }
-
- *written = result;
- return 0;
-}
-
-int sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read) {
- auto result = syscall(SYS_READ, fd, buf, count);
-
- if (result < 0) {
- *bytes_read = 0;
- return -result;
- }
-
- *bytes_read = result;
- return 0;
-}
-
-// clang-format off
-int sys_pwrite(int fd, const void *buffer, size_t count, off_t off,
- ssize_t *written) UNIMPLEMENTED("sys_pwrite")
-
-// clang-format off
-int sys_pread(int fd, void *buf, size_t count,
- off_t off, ssize_t *bytes_read) UNIMPLEMENTED("sys_pread")
-
-int sys_seek(int fd, off_t offset, int whence, off_t *new_offset) {
- auto result = syscall(SYS_SEEK, fd, offset, whence);
-
- if (result < 0) {
- return -result;
- }
-
- *new_offset = result;
- return 0;
-}
-
-int sys_open(const char *filename, int flags, mode_t mode, int *fd) {
- auto result = syscall(SYS_OPEN, 0, filename, strlen(filename), flags);
-
- if (result < 0) {
- return -result;
- }
-
- *fd = result;
- return 0;
-}
-
-int sys_close(int fd) {
- auto result = syscall(SYS_CLOSE, fd);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_access(const char *filename, int mode) {
- auto result =
- syscall(SYS_ACCESS, AT_FDCWD, filename, strlen(filename), mode, 0);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_stat(fsfd_target fsfdt, int fd, const char *path, int flags,
- struct stat *statbuf) {
- switch (fsfdt) {
- case fsfd_target::path:
- fd = AT_FDCWD;
- break;
- case fsfd_target::fd:
- flags |= AT_EMPTY_PATH;
-
- case fsfd_target::fd_path:
- break;
-
- default:
- __ensure(!"Invalid fsfd_target");
- __builtin_unreachable();
- }
-
- auto ret = syscall(SYS_FSTAT, fd, path, strlen(path), flags, statbuf);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_ioctl(int fd, unsigned long request, void *arg, int *result) {
- auto sys_res = syscall(SYS_IOCTL, fd, request, arg);
-
- if (sys_res < 0) {
- return -sys_res;
- }
-
- if (result)
- *result = sys_res;
- return 0;
-}
-
-int sys_isatty(int fd) {
- // NOTE: The easiest way to check if a file descriptor is a TTY is to
- // do an ioctl of TIOCGWINSZ on it and see if it succeeds :^)
- struct winsize ws;
- int result;
-
- if (!sys_ioctl(fd, TIOCGWINSZ, &ws, &result)) {
- return 0;
- }
-
- return ENOTTY;
-}
-
-int sys_tcgetattr(int fd, struct termios *attr) {
- int result;
-
- if (int e = sys_ioctl(fd, TCGETS, (void *)attr, &result); e)
- return e;
-
- return 0;
-}
-
-int sys_tcsetattr(int fd, int optional_action, const struct termios *attr) {
- int req;
-
- switch (optional_action) {
- case TCSANOW: req = TCSETS; break;
- case TCSADRAIN: req = TCSETSW; break;
- case TCSAFLUSH: req = TCSETSF; break;
- default: return EINVAL;
- }
-
- if (int e = sys_ioctl(fd, req, (void *)attr, NULL); e)
- return e;
-
- return 0;
-}
-
-int sys_mkdir(const char *path, mode_t) {
- auto result = syscall(SYS_MKDIR, path, strlen(path));
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_link(const char *srcpath, const char *destpath) {
- auto result =
- syscall(SYS_LINK, srcpath, strlen(srcpath), destpath, strlen(destpath));
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_rmdir(const char *path) {
- return sys_unlinkat(AT_FDCWD, path, AT_REMOVEDIR);
-}
-
-int sys_unlinkat(int fd, const char *path, int flags) {
- auto ret = syscall(SYS_UNLINK, fd, path, strlen(path), flags);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-struct aero_dir_entry {
- size_t inode;
- size_t offset;
- size_t reclen;
- size_t filetyp;
- char name[];
-} __attribute__((__packed__));
-
-int sys_read_entries(int handle, void *buffer, size_t max_size,
- size_t *bytes_read) {
- auto result = syscall(SYS_GETDENTS, handle, buffer, max_size);
-
- // Check if we got an error.
- if (result < 0) {
- *bytes_read = 0;
- return -result;
- }
-
- // Nothing to read.
- if (result == 0) {
- *bytes_read = 0;
- return 0;
- }
-
- auto entry = (struct aero_dir_entry *)buffer;
-
- struct dirent dirent = {
- .d_ino = static_cast<ino_t>(entry->inode),
- .d_off = static_cast<off_t>(entry->offset),
- .d_reclen = static_cast<unsigned short>(entry->reclen),
- .d_type = static_cast<unsigned char>(entry->filetyp),
- };
-
- // The reclen is the size of the dirent struct, plus the size of the name.
- auto name_size = entry->reclen - sizeof(struct aero_dir_entry);
- __ensure(name_size < 255);
-
- memcpy(&dirent.d_name, entry->name, name_size);
- *bytes_read = entry->reclen;
-
- memcpy(buffer, &dirent, sizeof(struct dirent));
- return 0;
-}
-
-int sys_open_dir(const char *path, int *handle) {
- return sys_open(path, O_DIRECTORY, 0, handle);
-}
-
-int sys_rename(const char *path, const char *new_path) {
- auto result =
- syscall(SYS_RENAME, path, strlen(path), new_path, strlen(new_path));
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_readlink(const char *path, void *buffer, size_t max_size,
- ssize_t *length) {
- auto result = syscall(SYS_READ_LINK, path, strlen(path), buffer, max_size);
-
- if (result < 0) {
- return -result;
- }
-
- *length = result;
- return 0;
-}
-
-int sys_dup(int fd, int flags, int *newfd) {
- auto result = syscall(SYS_DUP, fd, flags);
-
- if (result < 0) {
- return -result;
- }
-
- *newfd = result;
- return 0;
-}
-
-int sys_dup2(int fd, int flags, int newfd) {
- auto result = syscall(SYS_DUP2, fd, newfd, flags);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_fcntl(int fd, int request, va_list args, int *result_value) {
- auto result = syscall(SYS_FCNTL, fd, request, va_arg(args, uint64_t));
-
- if (result < 0) {
- return -result;
- }
-
- *result_value = result;
- return 0;
-}
-
-// int sys_chmod(const char *pathname, mode_t mode) UNIMPLEMENTED("sys_chmod")
-
-int sys_pipe(int *fds, int flags) {
- auto result = syscall(SYS_PIPE, fds, flags);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-// epoll API syscalls:
-int sys_epoll_create(int flags, int *fd) {
- auto result = syscall(SYS_EPOLL_CREATE, flags);
-
- if (result < 0) {
- return -result;
- }
-
- *fd = result;
- return 0;
-}
-
-int sys_epoll_ctl(int epfd, int mode, int fd, struct epoll_event *ev) {
- auto result = syscall(SYS_EPOLL_CTL, epfd, mode, fd, ev);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_epoll_pwait(int epfd, struct epoll_event *ev, int n, int timeout,
- const sigset_t *sigmask, int *raised) {
- auto result = syscall(SYS_EPOLL_PWAIT, epfd, ev, n, timeout, sigmask);
-
- if (result < 0) {
- return -result;
- }
-
- *raised = result;
- return 0;
-}
-
-int sys_eventfd_create(unsigned int initval, int flags, int *fd) {
- auto result = syscall(SYS_EVENT_FD, initval, flags);
-
- if (result < 0) {
- return -result;
- }
-
- *fd = result;
- return 0;
-}
-
-int sys_ppoll(struct pollfd *fds, int nfds, const struct timespec *timeout,
- const sigset_t *sigmask, int *num_events) {
- auto result = syscall(SYS_POLL, fds, nfds, timeout, sigmask);
-
- if (result < 0) {
- return -result;
- }
-
- *num_events = result;
- return 0;
-}
-
-int sys_poll(struct pollfd *fds, nfds_t count, int timeout, int *num_events) {
- struct timespec ts;
- ts.tv_sec = timeout / 1000;
- ts.tv_nsec = (timeout % 1000) * 1000000;
-
- return sys_ppoll(fds, count, &ts, NULL, num_events);
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-#include <stdio.h>
-int sys_ptsname(int fd, char *buffer, size_t length) {
- int index;
- if (int e = sys_ioctl(fd, TIOCGPTN, &index, NULL); e)
- return e;
- if ((size_t)snprintf(buffer, length, "/dev/pts/%d", index) >= length) {
- return ERANGE;
- }
- return 0;
-}
-
-int sys_pselect(int num_fds, fd_set *read_set, fd_set *write_set,
- fd_set *except_set, const struct timespec *timeout,
- const sigset_t *sigmask, int *num_events) {
- int fd = epoll_create1(0);
- if (fd == -1)
- return -1;
-
- for (int k = 0; k < FD_SETSIZE; k++) {
- struct epoll_event ev;
- memset(&ev, 0, sizeof(struct epoll_event));
-
- if (read_set && FD_ISSET(k, read_set))
- ev.events |= EPOLLIN;
- if (write_set && FD_ISSET(k, write_set))
- ev.events |= EPOLLOUT;
- if (except_set && FD_ISSET(k, except_set))
- ev.events |= EPOLLPRI;
-
- if (!ev.events)
- continue;
-
- ev.data.u32 = k;
- if (epoll_ctl(fd, EPOLL_CTL_ADD, k, &ev))
- return -1;
- }
-
- struct epoll_event evnts[16];
- int n = epoll_pwait(
- fd, evnts, 16,
- timeout ? (timeout->tv_sec * 1000 + timeout->tv_nsec / 100) : -1,
- sigmask);
-
- if (n == -1)
- return -1;
-
- fd_set res_read_set;
- fd_set res_write_set;
- fd_set res_except_set;
- FD_ZERO(&res_read_set);
- FD_ZERO(&res_write_set);
- FD_ZERO(&res_except_set);
-
- int m = 0;
-
- for (int i = 0; i < n; i++) {
- int k = evnts[i].data.u32;
-
- if (read_set && FD_ISSET(k, read_set) &&
- evnts[i].events & (EPOLLIN | EPOLLERR | EPOLLHUP)) {
- FD_SET(k, &res_read_set);
- m++;
- }
-
- if (write_set && FD_ISSET(k, write_set) &&
- evnts[i].events & (EPOLLOUT | EPOLLERR | EPOLLHUP)) {
- FD_SET(k, &res_write_set);
- m++;
- }
-
- if (except_set && FD_ISSET(k, except_set) &&
- evnts[i].events & EPOLLPRI) {
- FD_SET(k, &res_except_set);
- m++;
- }
- }
-
- if (close(fd))
- __ensure("mlibc::pselect: close() failed on epoll file");
-
- if (read_set)
- memcpy(read_set, &res_read_set, sizeof(fd_set));
-
- if (write_set)
- memcpy(write_set, &res_write_set, sizeof(fd_set));
-
- if (except_set)
- memcpy(except_set, &res_except_set, sizeof(fd_set));
-
- *num_events = m;
- return 0;
-}
-#endif // #ifndef MLIBC_BUILDING_RTDL
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/aero/generic/signals.S b/lib/mlibc/sysdeps/aero/generic/signals.S
deleted file mode 100644
index 62dee9b..0000000
--- a/lib/mlibc/sysdeps/aero/generic/signals.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .text
-.global __mlibc_signal_restore
-
-__mlibc_signal_restore:
- mov $39, %rax
- syscall
- ud2
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/aero/generic/signals.cpp b/lib/mlibc/sysdeps/aero/generic/signals.cpp
deleted file mode 100644
index a6f69ff..0000000
--- a/lib/mlibc/sysdeps/aero/generic/signals.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <mlibc/ansi-sysdeps.hpp>
-#include <mlibc/debug.hpp>
-
-#include <aero/syscall.h>
-#include <sys/types.h>
-
-#define LOG_SIGACTION_INSTALL 0
-
-extern "C" void __mlibc_signal_restore(); // defined in `signals.S`
-
-namespace mlibc {
-int sys_sigaction(int how, const struct sigaction *__restrict action,
- struct sigaction *__restrict old_action) {
-#if LOG_SIGACTION_INSTALL
- mlibc::infoLogger() << "sys_sigaction: signal " << how << frg::endlog;
- mlibc::infoLogger() << "sys_sigaction: size: " << sizeof(*action)
- << frg::endlog;
-
- if (action != NULL) {
- mlibc::infoLogger() << "sys_sigaction: handler "
- << (int64_t)action->sa_handler << frg::endlog;
- mlibc::infoLogger() << "sys_sigaction: action "
- << (int64_t)action->sa_sigaction << frg::endlog;
- mlibc::infoLogger() << "sys_sigaction: flags "
- << (int64_t)action->sa_flags << frg::endlog;
- }
-
- mlibc::infoLogger() << frg::endlog;
-#endif
-
- auto sigreturn = (sc_word_t)__mlibc_signal_restore;
-
- auto res = syscall(SYS_SIGACTION, how, (sc_word_t)action, sigreturn,
- (sc_word_t)old_action);
-
- if (res < 0) {
- return -res;
- }
-
- return 0;
-}
-
-int sys_sigprocmask(int how, const sigset_t *__restrict set,
- sigset_t *__restrict retrieve) {
- auto result = syscall(SYS_SIGPROCMASK, how, set, retrieve);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-} // namespace mlibc \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/generic/sockets.cpp b/lib/mlibc/sysdeps/aero/generic/sockets.cpp
deleted file mode 100644
index 0cce3c0..0000000
--- a/lib/mlibc/sysdeps/aero/generic/sockets.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/thread-entry.hpp>
-#include <mlibc/debug.hpp>
-#include <abi-bits/in.h>
-#include <abi-bits/errno.h>
-
-#include <aero/syscall.h>
-
-#include <unistd.h>
-#include <stdint.h>
-#include <net/if.h>
-#include <sys/ioctl.h>
-
-namespace {
-
-int fcntl_helper(int fd, int request, int *result, ...) {
- va_list args;
- va_start(args, result);
- if(!mlibc::sys_fcntl) {
- return ENOSYS;
- }
- int ret = mlibc::sys_fcntl(fd, request, args, result);
- va_end(args);
- return ret;
-}
-
-}
-
-namespace mlibc {
-int sys_socket(int family, int type, int protocol, int *fd) {
- auto result = syscall(SYS_SOCKET, family, type, protocol);
-
- if (result < 0) {
- return -result;
- }
-
- *fd = result;
- return 0;
-}
-
-int sys_bind(int fd, const struct sockaddr *addr_ptr, socklen_t addr_length) {
- auto result = syscall(SYS_BIND, fd, addr_ptr, (sc_word_t)addr_length);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_connect(int fd, const struct sockaddr *addr_ptr,
- socklen_t addr_length) {
- auto result = syscall(SYS_CONNECT, fd, addr_ptr, (sc_word_t)addr_length);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_listen(int fd, int backlog) {
- auto result = syscall(SYS_LISTEN, fd, backlog);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_accept(int sockfd, int *newfd, struct sockaddr *addr_ptr,
- socklen_t *addr_length, int flags) {
- auto result = syscall(SYS_ACCEPT, sockfd, addr_ptr, addr_length);
-
- if (result < 0) {
- return -result;
- }
-
- *newfd = result;
-
- if(flags & SOCK_NONBLOCK) {
- int fcntl_ret = 0;
- fcntl_helper(*newfd, F_GETFL, &fcntl_ret);
- fcntl_helper(*newfd, F_SETFL, &fcntl_ret, fcntl_ret | O_NONBLOCK);
- }
-
- if(flags & SOCK_CLOEXEC) {
- int fcntl_ret = 0;
- fcntl_helper(*newfd, F_GETFD, &fcntl_ret);
- fcntl_helper(*newfd, F_SETFD, &fcntl_ret, fcntl_ret | FD_CLOEXEC);
- }
-
- return 0;
-}
-
-int sys_msg_send(int fd, const struct msghdr *hdr, int flags, ssize_t *length) {
- auto result = syscall(SYS_SOCK_SEND, fd, hdr, flags);
- if (result < 0)
- return -result;
-
- *length = result;
- return 0;
-}
-
-int sys_msg_recv(int sockfd, struct msghdr *msg_hdr, int flags,
- ssize_t *length) {
- auto result = syscall(SYS_SOCK_RECV, sockfd, msg_hdr, flags);
-
- if (result < 0) {
- return -result;
- }
-
- *length = result;
- return 0;
-}
-
-int sys_socketpair(int domain, int type_and_flags, int proto, int *fds) {
- auto result = syscall(SYS_SOCKET_PAIR, domain, type_and_flags, proto, fds);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_getsockopt(int fd, int layer, int number, void *__restrict buffer,
- socklen_t *__restrict size) {
- (void)fd;
- (void)size;
- if (layer == SOL_SOCKET && number == SO_PEERCRED) {
- mlibc::infoLogger() << "\e[31mmlibc: getsockopt() call with SOL_SOCKET "
- "and SO_PEERCRED is unimplemented\e[39m"
- << frg::endlog;
- *(int *)buffer = 0;
- return 0;
- } else if (layer == SOL_SOCKET && number == SO_SNDBUF) {
- mlibc::infoLogger() << "\e[31mmlibc: getsockopt() call with SOL_SOCKET "
- "and SO_SNDBUF is unimplemented\e[39m"
- << frg::endlog;
- *(int *)buffer = 4096;
- return 0;
- } else if (layer == SOL_SOCKET && number == SO_TYPE) {
- mlibc::infoLogger()
- << "\e[31mmlibc: getsockopt() call with SOL_SOCKET and SO_TYPE is "
- "unimplemented, hardcoding SOCK_STREAM\e[39m"
- << frg::endlog;
- *(int *)buffer = SOCK_STREAM;
- return 0;
- } else if (layer == SOL_SOCKET && number == SO_ERROR) {
- mlibc::infoLogger()
- << "\e[31mmlibc: getsockopt() call with SOL_SOCKET and SO_ERROR is "
- "unimplemented, hardcoding 0\e[39m"
- << frg::endlog;
- *(int *)buffer = 0;
- return 0;
- } else if (layer == SOL_SOCKET && number == SO_KEEPALIVE) {
- mlibc::infoLogger()
- << "\e[31mmlibc: getsockopt() call with SOL_SOCKET and "
- "SO_KEEPALIVE is unimplemented, hardcoding 0\e[39m"
- << frg::endlog;
- *(int *)buffer = 0;
- return 0;
- } else {
- mlibc::panicLogger()
- << "\e[31mmlibc: Unexpected getsockopt() call, layer: " << layer
- << " number: " << number << "\e[39m" << frg::endlog;
- __builtin_unreachable();
- }
-
- return 0;
-}
-
-int sys_setsockopt(int fd, int layer, int number, const void *buffer,
- socklen_t size) {
- (void)fd;
- (void)buffer;
- (void)size;
-
- if (layer == SOL_SOCKET && number == SO_PASSCRED) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt(SO_PASSCRED) is not "
- "implemented correctly\e[39m"
- << frg::endlog;
- return 0;
- } else if (layer == SOL_SOCKET && number == SO_ATTACH_FILTER) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt(SO_ATTACH_FILTER) is "
- "not implemented correctly\e[39m"
- << frg::endlog;
- return 0;
- } else if (layer == SOL_SOCKET && number == SO_RCVBUFFORCE) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt(SO_RCVBUFFORCE) is not "
- "implemented correctly\e[39m"
- << frg::endlog;
- return 0;
- } else if (layer == SOL_SOCKET && number == SO_SNDBUF) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_SOCKET "
- "and SO_SNDBUF is unimplemented\e[39m"
- << frg::endlog;
- return 0;
- } else if (layer == SOL_SOCKET && number == SO_KEEPALIVE) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_SOCKET "
- "and SO_KEEPALIVE is unimplemented\e[39m"
- << frg::endlog;
- return 0;
- } else if (layer == SOL_SOCKET && number == SO_REUSEADDR) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_SOCKET "
- "and SO_REUSEADDR is unimplemented\e[39m"
- << frg::endlog;
- return 0;
- } else if (layer == AF_NETLINK && number == SO_ACCEPTCONN) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with AF_NETLINK "
- "and SO_ACCEPTCONN is unimplemented\e[39m"
- << frg::endlog;
- return 0;
- } else {
- mlibc::infoLogger()
- << "\e[31mmlibc: Unexpected setsockopt() call, layer: " << layer
- << " number: " << number << "\e[39m" << frg::endlog;
- return 0;
- }
-}
-
-int sys_shutdown(int sockfd, int how) {
- auto ret = syscall(SYS_SOCK_SHUTDOWN, sockfd, how);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_if_nametoindex(const char *name, unsigned int *ret) {
- int fd = 0;
- int r = sys_socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, AF_UNSPEC, &fd);
-
- if (r)
- return r;
-
- struct ifreq ifr;
- strncpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
-
- r = sys_ioctl(fd, SIOCGIFINDEX, &ifr, NULL);
- close(fd);
-
- if (r)
- return r;
-
- *ret = ifr.ifr_ifindex;
- return 0;
-}
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/aero/generic/thread.cpp b/lib/mlibc/sysdeps/aero/generic/thread.cpp
deleted file mode 100644
index bc9a449..0000000
--- a/lib/mlibc/sysdeps/aero/generic/thread.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/thread-entry.hpp>
-
-#include <bits/ensure.h>
-#include <mlibc/tcb.hpp>
-
-#include <sys/mman.h>
-
-#include <stddef.h>
-#include <stdint.h>
-
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg, Tcb *tcb) {
- // Wait until our parent sets up the TID:
- while (!__atomic_load_n(&tcb->tid, __ATOMIC_RELAXED))
- mlibc::sys_futex_wait(&tcb->tid, 0, nullptr);
-
- if (mlibc::sys_tcb_set(tcb))
- __ensure(!"sys_tcb_set() failed");
-
- tcb->invokeThreadFunc(entry, user_arg);
-
- auto self = reinterpret_cast<Tcb *>(tcb);
-
- __atomic_store_n(&self->didExit, 1, __ATOMIC_RELEASE);
- mlibc::sys_futex_wake(&self->didExit);
-
- mlibc::sys_thread_exit();
-}
-
-namespace mlibc {
-
-static constexpr size_t default_stacksize = 0x1000000;
-
-int sys_prepare_stack(void **stack, void *entry, void *user_arg, void *tcb,
- size_t *stack_size, size_t *guard_size, void **stack_base) {
- if (!*stack_size)
- *stack_size = default_stacksize;
- *guard_size = 0;
-
- if (*stack) {
- *stack_base = *stack;
- } else {
- *stack_base = mmap(nullptr, *stack_size, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- }
-
- uintptr_t *sp = reinterpret_cast<uintptr_t *>(reinterpret_cast<uintptr_t>(*stack_base) + *stack_size);
-
- *--sp = reinterpret_cast<uintptr_t>(tcb);
- *--sp = reinterpret_cast<uintptr_t>(user_arg);
- *--sp = reinterpret_cast<uintptr_t>(entry);
- *stack = reinterpret_cast<void *>(sp);
- return 0;
-}
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/aero/generic/thread_entry.S b/lib/mlibc/sysdeps/aero/generic/thread_entry.S
deleted file mode 100644
index 498fda3..0000000
--- a/lib/mlibc/sysdeps/aero/generic/thread_entry.S
+++ /dev/null
@@ -1,10 +0,0 @@
-.section .text
-.global __mlibc_start_thread
-
-__mlibc_start_thread:
- pop %rdi
- pop %rsi
- pop %rdx
- call __mlibc_enter_thread
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/aero/generic/time.cpp b/lib/mlibc/sysdeps/aero/generic/time.cpp
deleted file mode 100644
index c995148..0000000
--- a/lib/mlibc/sysdeps/aero/generic/time.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <mlibc/all-sysdeps.hpp>
-#include <aero/syscall.h>
-
-namespace mlibc {
-int sys_setitimer(int which, const struct itimerval *new_value,
- struct itimerval *old_value) {
- auto result = syscall(SYS_SETITIMER, which, new_value, old_value);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-
-int sys_getitimer(int which, struct itimerval *curr_value) {
- auto result = syscall(SYS_GETITIMER, which, curr_value);
-
- if (result < 0) {
- return -result;
- }
-
- return 0;
-}
-} // namespace mlibc \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/access.h b/lib/mlibc/sysdeps/aero/include/abi-bits/access.h
deleted file mode 120000
index 171f75f..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/access.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/access.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/auxv.h b/lib/mlibc/sysdeps/aero/include/abi-bits/auxv.h
deleted file mode 120000
index 86157e8..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/auxv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/aero/auxv.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/blkcnt_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/blkcnt_t.h
deleted file mode 120000
index e9d9f1b..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/blkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/blkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/blksize_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/blksize_t.h
deleted file mode 120000
index c6dfb6e..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/blksize_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/blksize_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/clockid_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/clockid_t.h
deleted file mode 120000
index 71f37bb..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/clockid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/clockid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/dev_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/dev_t.h
deleted file mode 120000
index 0c1143b..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/dev_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/dev_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/epoll.h b/lib/mlibc/sysdeps/aero/include/abi-bits/epoll.h
deleted file mode 120000
index 9efc3a0..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/epoll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/epoll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/errno.h b/lib/mlibc/sysdeps/aero/include/abi-bits/errno.h
deleted file mode 120000
index 589859f..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/errno.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/errno.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/fcntl.h b/lib/mlibc/sysdeps/aero/include/abi-bits/fcntl.h
deleted file mode 120000
index ea5323a..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/fcntl.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/fsblkcnt_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/fsblkcnt_t.h
deleted file mode 120000
index 898dfb2..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/fsblkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsblkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/fsfilcnt_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/fsfilcnt_t.h
deleted file mode 120000
index 791755c..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/fsfilcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsfilcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/gid_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/gid_t.h
deleted file mode 120000
index 6a77218..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/gid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/gid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/in.h b/lib/mlibc/sysdeps/aero/include/abi-bits/in.h
deleted file mode 120000
index b58c683..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/in.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/in.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/ino_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/ino_t.h
deleted file mode 120000
index 10d644e..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/ino_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/ino_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/inotify.h b/lib/mlibc/sysdeps/aero/include/abi-bits/inotify.h
deleted file mode 120000
index 3f19ef6..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/inotify.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/inotify.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/ioctls.h b/lib/mlibc/sysdeps/aero/include/abi-bits/ioctls.h
deleted file mode 120000
index 595106b..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/ioctls.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ioctls.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/limits.h b/lib/mlibc/sysdeps/aero/include/abi-bits/limits.h
deleted file mode 120000
index 1aa5894..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/limits.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/limits.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/mode_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/mode_t.h
deleted file mode 120000
index 29d7733..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/mode_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/mode_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/mqueue.h b/lib/mlibc/sysdeps/aero/include/abi-bits/mqueue.h
deleted file mode 120000
index fa87b07..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/mqueue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mqueue.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/msg.h b/lib/mlibc/sysdeps/aero/include/abi-bits/msg.h
deleted file mode 120000
index f402b49..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/msg.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/msg.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/nlink_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/nlink_t.h
deleted file mode 120000
index 7618c27..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/nlink_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/nlink_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/packet.h b/lib/mlibc/sysdeps/aero/include/abi-bits/packet.h
deleted file mode 120000
index 47067e2..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/packet.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/packet.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/pid_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/pid_t.h
deleted file mode 120000
index 3fd26a7..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/pid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/pid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/poll.h b/lib/mlibc/sysdeps/aero/include/abi-bits/poll.h
deleted file mode 120000
index ab989c7..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/poll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/poll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/ptrace.h b/lib/mlibc/sysdeps/aero/include/abi-bits/ptrace.h
deleted file mode 120000
index f391fb7..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/ptrace.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/ptrace.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/reboot.h b/lib/mlibc/sysdeps/aero/include/abi-bits/reboot.h
deleted file mode 120000
index 77013a4..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/reboot.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/reboot.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/resource.h b/lib/mlibc/sysdeps/aero/include/abi-bits/resource.h
deleted file mode 120000
index 3e59c75..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/resource.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/seek-whence.h b/lib/mlibc/sysdeps/aero/include/abi-bits/seek-whence.h
deleted file mode 120000
index 3bd41ef..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/seek-whence.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/seek-whence.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/shm.h b/lib/mlibc/sysdeps/aero/include/abi-bits/shm.h
deleted file mode 120000
index 067d8c4..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/shm.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/shm.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/signal.h b/lib/mlibc/sysdeps/aero/include/abi-bits/signal.h
deleted file mode 120000
index 4dcb0b7..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/signal.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/signal.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/socket.h b/lib/mlibc/sysdeps/aero/include/abi-bits/socket.h
deleted file mode 120000
index 0e1d6be..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/socket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/socket.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/socklen_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/socklen_t.h
deleted file mode 120000
index 41f3b11..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/socklen_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socklen_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/stat.h b/lib/mlibc/sysdeps/aero/include/abi-bits/stat.h
deleted file mode 120000
index 82642c3..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/stat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/stat.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/statfs.h b/lib/mlibc/sysdeps/aero/include/abi-bits/statfs.h
deleted file mode 120000
index e3d202f..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/statfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/statvfs.h b/lib/mlibc/sysdeps/aero/include/abi-bits/statvfs.h
deleted file mode 120000
index 1fc80c2..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/statvfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statvfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/suseconds_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/suseconds_t.h
deleted file mode 120000
index 9ed6597..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/suseconds_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/suseconds_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/termios.h b/lib/mlibc/sysdeps/aero/include/abi-bits/termios.h
deleted file mode 120000
index ee8f0b0..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/termios.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/termios.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/time.h b/lib/mlibc/sysdeps/aero/include/abi-bits/time.h
deleted file mode 120000
index 97f3d52..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/time.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/time.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/uid_t.h b/lib/mlibc/sysdeps/aero/include/abi-bits/uid_t.h
deleted file mode 120000
index 1113eba..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/uid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/uid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/utsname.h b/lib/mlibc/sysdeps/aero/include/abi-bits/utsname.h
deleted file mode 120000
index b285754..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/utsname.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/utsname.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/vm-flags.h b/lib/mlibc/sysdeps/aero/include/abi-bits/vm-flags.h
deleted file mode 120000
index f1a985e..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/vm-flags.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/vm-flags.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/wait.h b/lib/mlibc/sysdeps/aero/include/abi-bits/wait.h
deleted file mode 120000
index feb2840..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/wait.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/wait.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/abi-bits/xattr.h b/lib/mlibc/sysdeps/aero/include/abi-bits/xattr.h
deleted file mode 120000
index 66412d7..0000000
--- a/lib/mlibc/sysdeps/aero/include/abi-bits/xattr.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/xattr.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/aero/include/aero/syscall.h b/lib/mlibc/sysdeps/aero/include/aero/syscall.h
deleted file mode 100644
index 3f36e4d..0000000
--- a/lib/mlibc/sysdeps/aero/include/aero/syscall.h
+++ /dev/null
@@ -1,231 +0,0 @@
-#ifndef SYSCALL_H
-#define SYSCALL_H
-
-#include <bits/ensure.h>
-#include <stdint.h>
-
-#define SYS_READ 0
-#define SYS_WRITE 1
-#define SYS_OPEN 2
-#define SYS_CLOSE 3
-#define SYS_SHUTDOWN 4
-#define SYS_EXIT 5
-#define SYS_FORK 6
-#define SYS_REBOOT 7
-#define SYS_MMAP 8
-#define SYS_MUNMAP 9
-#define SYS_ARCH_PRCTL 10
-#define SYS_GETDENTS 11
-#define SYS_GETCWD 12
-#define SYS_CHDIR 13
-#define SYS_MKDIR 14
-#define SYS_MKDIR_AT 15
-#define SYS_RMDIR 16
-#define SYS_EXEC 17
-#define SYS_LOG 18
-#define SYS_UNAME 19
-#define SYS_WAITPID 20
-#define SYS_IOCTL 21
-#define SYS_GETPID 22
-#define SYS_SOCKET 23
-#define SYS_CONNECT 24
-#define SYS_BIND 25
-#define SYS_LISTEN 26
-#define SYS_ACCEPT 27
-#define SYS_SEEK 28
-#define SYS_GETTID 29
-#define SYS_GETTIME 30
-#define SYS_SLEEP 31
-#define SYS_ACCESS 32
-#define SYS_PIPE 33
-#define SYS_UNLINK 34
-#define SYS_GETHOSTNAME 35
-#define SYS_SETHOSTNAME 36
-#define SYS_INFO 37
-#define SYS_CLONE 38
-#define SYS_SIGRETURN 39
-#define SYS_SIGACTION 40
-#define SYS_SIGPROCMASK 41
-#define SYS_DUP 42
-#define SYS_FCNTL 43
-#define SYS_DUP2 44
-#define SYS_IPC_SEND 45
-#define SYS_IPC_RECV 46
-#define SYS_DISCOVER_ROOT 47
-#define SYS_BECOME_ROOT 48
-#define SYS_STAT 49
-#define SYS_FSTAT 50
-#define SYS_READ_LINK 51
-#define SYS_EPOLL_CREATE 52
-#define SYS_EPOLL_PWAIT 53
-#define SYS_EPOLL_CTL 54
-#define SYS_EVENT_FD 55
-#define SYS_KILL 56
-#define SYS_FUTEX_WAIT 57
-#define SYS_FUTEX_WAKE 58
-#define SYS_LINK 59
-#define SYS_BACKTRACE 60
-#define SYS_POLL 61
-#define SYS_EXIT_THREAD 62
-#define SYS_SOCK_RECV 63
-#define SYS_SETITIMER 64
-#define SYS_GETITIMER 65
-#define SYS_GETPPID 66
-#define SYS_SOCKET_PAIR 67
-#define SYS_RENAME 68
-#define SYS_MPROTECT 69
-#define SYS_SOCK_SEND 70
-#define SYS_TRACE 71
-#define SYS_SETPGID 72
-#define SYS_SETSID 73
-#define SYS_GETPGID 74
-#define SYS_SOCK_SHUTDOWN 75
-
-// Invalid syscall used to trigger a log error in the kernel (as a hint)
-// so, that we can implement the syscall in the kernel.
-#define UNIMPLEMENTED(FUNCTION_NAME) \
- { \
- sys_libc_log("Unimplemented syscall: " FUNCTION_NAME); \
- sys_exit(1); \
- __builtin_unreachable(); \
- }
-
-extern "C" {
-using sc_word_t = long;
-
-static sc_word_t syscall0(int sc) {
- sc_word_t ret;
- asm volatile("syscall" : "=a"(ret) : "a"(sc) : "rcx", "r11", "memory");
- return ret;
-}
-
-static sc_word_t syscall1(int sc, sc_word_t arg1) {
- sc_word_t ret;
- asm volatile("syscall"
- : "=a"(ret)
- : "a"(sc), "D"(arg1)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-static sc_word_t syscall2(int sc, sc_word_t arg1, sc_word_t arg2) {
- sc_word_t ret;
- asm volatile("syscall"
- : "=a"(ret)
- : "a"(sc), "D"(arg1), "S"(arg2)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-static sc_word_t syscall3(int sc, sc_word_t arg1, sc_word_t arg2,
- sc_word_t arg3) {
- sc_word_t ret;
- asm volatile("syscall"
- : "=a"(ret)
- : "a"(sc), "D"(arg1), "S"(arg2), "d"(arg3)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-static sc_word_t syscall4(int sc, sc_word_t arg1, sc_word_t arg2,
- sc_word_t arg3, sc_word_t arg4) {
- sc_word_t ret;
-
- register sc_word_t arg4_reg asm("r10") = arg4;
-
- asm volatile("syscall"
- : "=a"(ret)
- : "a"(sc), "D"(arg1), "S"(arg2), "d"(arg3), "r"(arg4_reg)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-static sc_word_t syscall5(int sc, sc_word_t arg1, sc_word_t arg2,
- sc_word_t arg3, sc_word_t arg4, sc_word_t arg5) {
- sc_word_t ret;
-
- register sc_word_t arg4_reg asm("r10") = arg4;
- register sc_word_t arg5_reg asm("r8") = arg5;
-
- asm volatile("syscall"
- : "=a"(ret)
- : "a"(sc), "D"(arg1), "S"(arg2), "d"(arg3), "r"(arg4_reg),
- "r"(arg5_reg)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-static sc_word_t syscall6(int sc, sc_word_t arg1, sc_word_t arg2,
- sc_word_t arg3, sc_word_t arg4, sc_word_t arg5,
- sc_word_t arg6) {
- sc_word_t ret;
-
- register sc_word_t arg4_reg asm("r10") = arg4;
- register sc_word_t arg5_reg asm("r8") = arg5;
- register sc_word_t arg6_reg asm("r9") = arg6;
-
- asm volatile("syscall"
- : "=a"(ret)
- : "a"(sc), "D"(arg1), "S"(arg2), "d"(arg3), "r"(arg4_reg),
- "r"(arg5_reg), "r"(arg6_reg)
- : "rcx", "r11", "memory");
- return ret;
-}
-} // extern "C"
-
-// Cast to the argument type of the extern "C" functions.
-__attribute__((__always_inline__)) inline sc_word_t sc_cast(long x) { return x; }
-__attribute__((__always_inline__)) inline sc_word_t sc_cast(const void *x) {
- return reinterpret_cast<sc_word_t>(x);
-}
-
-// C++ wrappers for the extern "C" functions.
-__attribute__((__always_inline__)) static inline long _syscall(int call) {
- return syscall0(call);
-}
-
-__attribute__((__always_inline__)) static inline long _syscall(int call,
- sc_word_t arg0) {
- return syscall1(call, arg0);
-}
-
-__attribute__((__always_inline__)) static inline long
-_syscall(int call, sc_word_t arg0, sc_word_t arg1) {
- return syscall2(call, arg0, arg1);
-}
-
-__attribute__((__always_inline__)) static inline long
-_syscall(int call, sc_word_t arg0, sc_word_t arg1, sc_word_t arg2) {
- return syscall3(call, arg0, arg1, arg2);
-}
-
-__attribute__((__always_inline__)) static inline long
-_syscall(int call, sc_word_t arg0, sc_word_t arg1, sc_word_t arg2,
- sc_word_t arg3) {
- return syscall4(call, arg0, arg1, arg2, arg3);
-}
-
-__attribute__((__always_inline__)) static inline long
-_syscall(int call, sc_word_t arg0, sc_word_t arg1, sc_word_t arg2,
- sc_word_t arg3, sc_word_t arg4) {
- return syscall5(call, arg0, arg1, arg2, arg3, arg4);
-}
-
-__attribute__((__always_inline__)) static inline long
-_syscall(int call, sc_word_t arg0, sc_word_t arg1, sc_word_t arg2,
- sc_word_t arg3, sc_word_t arg4, sc_word_t arg5) {
- return syscall6(call, arg0, arg1, arg2, arg3, arg4, arg5);
-}
-
-template <typename... T>
-__attribute__((__always_inline__)) static inline long syscall(sc_word_t call,
- T... args) {
- return _syscall(call, sc_cast(args)...);
-}
-
-inline int sc_error(long ret) {
- if (ret < 0)
- return -ret;
- return 0;
-}
-#endif // SYSCALL_H
diff --git a/lib/mlibc/sysdeps/aero/include/mlibc/thread-entry.hpp b/lib/mlibc/sysdeps/aero/include/mlibc/thread-entry.hpp
deleted file mode 100644
index a241479..0000000
--- a/lib/mlibc/sysdeps/aero/include/mlibc/thread-entry.hpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#pragma once
-
-#include <mlibc/tcb.hpp>
-
-extern "C" void __mlibc_start_thread(void);
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg, Tcb *tcb);
-
-namespace mlibc {
-int prepare_stack(void **stack, void *entry, void *user_arg, void *tcb, size_t *stack_size,
- size_t *guard_size);
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/aero/meson.build b/lib/mlibc/sysdeps/aero/meson.build
deleted file mode 100644
index 20cf6cf..0000000
--- a/lib/mlibc/sysdeps/aero/meson.build
+++ /dev/null
@@ -1,85 +0,0 @@
-rtdl_dso_sources += files(
- 'generic/aero.cpp',
- 'generic/filesystem.cpp',
-)
-
-libc_sources += files(
- 'generic/aero.cpp',
- 'generic/entry.cpp',
- 'generic/thread_entry.S',
- 'generic/thread.cpp',
- 'generic/filesystem.cpp',
- 'generic/sockets.cpp',
- 'generic/signals.cpp',
- 'generic/time.cpp',
-)
-
-if not no_headers
- install_headers(
- 'include/abi-bits/auxv.h',
- 'include/abi-bits/seek-whence.h',
- 'include/abi-bits/vm-flags.h',
- 'include/abi-bits/errno.h',
- 'include/abi-bits/fcntl.h',
- 'include/abi-bits/in.h',
- 'include/abi-bits/resource.h',
- 'include/abi-bits/signal.h',
- 'include/abi-bits/stat.h',
- 'include/abi-bits/socket.h',
- 'include/abi-bits/termios.h',
- 'include/abi-bits/time.h',
- 'include/abi-bits/blkcnt_t.h',
- 'include/abi-bits/blksize_t.h',
- 'include/abi-bits/dev_t.h',
- 'include/abi-bits/gid_t.h',
- 'include/abi-bits/ino_t.h',
- 'include/abi-bits/mode_t.h',
- 'include/abi-bits/nlink_t.h',
- 'include/abi-bits/pid_t.h',
- 'include/abi-bits/uid_t.h',
- 'include/abi-bits/access.h',
- 'include/abi-bits/wait.h',
- 'include/abi-bits/limits.h',
- 'include/abi-bits/utsname.h',
- 'include/abi-bits/ptrace.h',
- 'include/abi-bits/poll.h',
- 'include/abi-bits/epoll.h',
- 'include/abi-bits/packet.h',
- 'include/abi-bits/inotify.h',
- 'include/abi-bits/clockid_t.h',
- 'include/abi-bits/shm.h',
- 'include/abi-bits/mqueue.h',
- 'include/abi-bits/suseconds_t.h',
- 'include/abi-bits/fsfilcnt_t.h',
- 'include/abi-bits/fsblkcnt_t.h',
- 'include/abi-bits/socklen_t.h',
- 'include/abi-bits/statfs.h',
- 'include/abi-bits/statvfs.h',
- 'include/abi-bits/ioctls.h',
- 'include/abi-bits/xattr.h',
- 'include/abi-bits/msg.h',
- subdir: 'abi-bits',
- follow_symlinks: true
- )
- install_headers(
- 'include/aero/syscall.h',
- subdir: 'aero'
- )
-endif
-
-if not headers_only
- crt = custom_target('crt0',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: 'crt-x86_64/crt0.S',
- output: 'crt0.o',
- install: true,
- install_dir: get_option('libdir')
- )
-endif
-
-if host_machine.cpu_family() == 'x86_64'
- libc_sources += files('generic/signals.S')
-else
- error('Unknown architecture')
-endif
diff --git a/lib/mlibc/sysdeps/dripos/crt-x86_64/crt1.S b/lib/mlibc/sysdeps/dripos/crt-x86_64/crt1.S
deleted file mode 100644
index 18d109e..0000000
--- a/lib/mlibc/sysdeps/dripos/crt-x86_64/crt1.S
+++ /dev/null
@@ -1,9 +0,0 @@
-
-.section .text
-.global _start
-_start:
- mov $main, %rdi
- call __mlibc_entry
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/dripos/generic/entry.cpp b/lib/mlibc/sysdeps/dripos/generic/entry.cpp
deleted file mode 100644
index 2b8b914..0000000
--- a/lib/mlibc/sysdeps/dripos/generic/entry.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <bits/ensure.h>
-#include <mlibc/elf/startup.h>
-
-// defined by the POSIX library
-void __mlibc_initLocale();
-
-extern "C" uintptr_t *__dlapi_entrystack();
-
-extern char **environ;
-static mlibc::exec_stack_data __mlibc_stack_data;
-
-struct LibraryGuard {
- LibraryGuard();
-};
-
-static LibraryGuard guard;
-
-LibraryGuard::LibraryGuard() {
- __mlibc_initLocale();
-
- // Parse the exec() stack.
- mlibc::parse_exec_stack(__dlapi_entrystack(), &__mlibc_stack_data);
- mlibc::set_startup_data(__mlibc_stack_data.argc, __mlibc_stack_data.argv,
- __mlibc_stack_data.envp);
-}
-
-extern "C" void __mlibc_entry(int (*main_fn)(int argc, char *argv[], char *env[])) {
- // TODO: call __dlapi_enter, otherwise static builds will break (see Linux sysdeps)
- auto result = main_fn(__mlibc_stack_data.argc, __mlibc_stack_data.argv, environ);
- exit(result);
-}
-
diff --git a/lib/mlibc/sysdeps/dripos/generic/generic.cpp b/lib/mlibc/sysdeps/dripos/generic/generic.cpp
deleted file mode 100644
index 89203c3..0000000
--- a/lib/mlibc/sysdeps/dripos/generic/generic.cpp
+++ /dev/null
@@ -1,298 +0,0 @@
-#include <bits/ensure.h>
-#include <mlibc/debug.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/thread-entry.hpp>
-#include <errno.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <limits.h>
-
-namespace mlibc {
-
-void sys_libc_log(const char *message) {
- unsigned long res;
- asm volatile ("syscall" : "=a"(res)
- : "a"(50), "D"(message)
- : "rcx", "r11", "rdx");
-}
-
-void sys_libc_panic() {
- mlibc::infoLogger() << "\e[31mmlibc: panic!" << frg::endlog;
- asm volatile ("syscall" :
- : "a"(12), "D"(1)
- : "rcx", "r11", "rdx");
-}
-
-int sys_tcb_set(void *pointer) {
- int res;
- asm volatile ("syscall" : "=a"(res)
- : "a"(300), "D"(pointer)
- : "rcx", "r11", "rdx");
- return res;
-}
-
-int sys_anon_allocate(size_t size, void **pointer) {
- void *ret;
- int sys_errno;
-
- asm volatile ("syscall"
- : "=a"(ret), "=d"(sys_errno)
- : "a"(9), "D"(0), "S"(size)
- : "rcx", "r11");
-
- if (!ret)
- return sys_errno;
-
- *pointer = ret;
- return 0;
-}
-
-int sys_anon_free(void *pointer, size_t size) {
- int unused_return;
- int sys_errno;
-
- asm volatile ("syscall"
- : "=a"(unused_return), "=d"(sys_errno)
- : "a"(11), "D"(pointer), "S"(size)
- : "rcx", "r11");
-
- if (unused_return)
- return sys_errno;
-
- return 0;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-void sys_exit(int status) {
- asm volatile ("syscall" :
- : "a"(12), "D"(status)
- : "rcx", "r11", "rdx");
-}
-#endif
-
-#ifndef MLIBC_BUILDING_RTDL
-int sys_clock_get(int clock, time_t *secs, long *nanos) {
- return 0;
-}
-#endif
-
-int sys_open(const char *path, int flags, mode_t mode, int *fd) {
- int ret;
- int sys_errno;
-
- asm volatile ("syscall"
- : "=a"(ret), "=d"(sys_errno)
- : "a"(2), "D"(path), "S"(flags), "d"(0)
- : "rcx", "r11");
-
- if (ret == -1)
- return sys_errno;
-
- *fd = ret;
- return 0;
-}
-
-int sys_close(int fd) {
- int ret;
- int sys_errno;
-
- asm volatile ("syscall"
- : "=a"(ret), "=d"(sys_errno)
- : "a"(3), "D"(fd)
- : "rcx", "r11");
-
- if (ret == -1)
- return sys_errno;
-
- return 0;
-}
-
-int sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read) {
- ssize_t ret;
- int sys_errno;
-
- asm volatile ("syscall"
- : "=a"(ret), "=d"(sys_errno)
- : "a"(0), "D"(fd), "S"(buf), "d"(count)
- : "rcx", "r11");
-
- if (ret == -1)
- return sys_errno;
-
- *bytes_read = ret;
- return 0;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-int sys_write(int fd, const void *buf, size_t count, ssize_t *bytes_written) {
- ssize_t ret;
- int sys_errno;
-
- asm volatile ("syscall"
- : "=a"(ret), "=d"(sys_errno)
- : "a"(1), "D"(fd), "S"(buf), "d"(count)
- : "rcx", "r11");
-
- if (ret == -1)
- return sys_errno;
-
- *bytes_written = ret;
- return 0;
-}
-#endif
-
-
-int sys_seek(int fd, off_t offset, int whence, off_t *new_offset) {
- off_t ret;
- int sys_errno;
-
- asm volatile ("syscall"
- : "=a"(ret), "=d"(sys_errno)
- : "a"(8), "D"(fd), "S"(offset), "d"(whence)
- : "rcx", "r11");
-
- if (ret == -1)
- return sys_errno;
-
- *new_offset = ret;
- return 0;
-}
-
-int sys_vm_map(void *hint, size_t size, int prot, int flags,
- int fd, off_t offset, void **window) {
- __ensure(flags & MAP_ANONYMOUS);
- void *ret;
- int sys_errno;
-
- // mlibc::infoLogger() << "calling sys_vm_map with size: " << size << frg::endlog;
-
- asm volatile ("syscall"
- : "=a"(ret), "=d"(sys_errno)
- : "a"(9), "D"(hint), "S"(size)
- : "rcx", "r11");
-
- if (!ret)
- return sys_errno;
-
- *window = ret;
-
- return 0;
-}
-
-int sys_vm_unmap(void *pointer, size_t size) {
- return sys_anon_free(pointer, size);
-}
-
-int sys_futex_wait(int *pointer, int expected, const struct timespec *time) {
- uint64_t err;
- asm volatile ("syscall"
- : "=d"(err)
- : "a"(66), "D"(pointer), "S"(expected)
- : "rcx", "r11");
-
- if (err) {
- return -1;
- }
-
- return 0;
-}
-
-int sys_futex_wake(int *pointer) {
- uint64_t err;
- asm volatile ("syscall"
- : "=d"(err)
- : "a"(65), "D"(pointer)
- : "rcx", "r11");
-
- if (err) {
- return -1;
- }
-
- return 0;
-}
-
-// All remaining functions are disabled in ldso.
-#ifndef MLIBC_BUILDING_RTDL
-
-int sys_clone(void *tcb, pid_t *tid_out, void *stack) {
- int tid;
-
- asm volatile ("syscall"
- : "=a"(tid)
- : "a"(67), "D"(__mlibc_start_thread), "S"(stack), "d"(tcb)
- : "rcx", "r11");
-
- if (tid_out)
- *tid_out = tid;
-
- return 0;
-}
-
-void sys_thread_exit() {
- asm volatile ("syscall"
- :
- : "a"(68)
- : "rcx", "r11");
- __builtin_trap();
-}
-
-int sys_sleep(time_t *secs, long *nanos) {
- long ms = (*nanos / 1000000) + (*secs * 1000);
- asm volatile ("syscall"
- :
- : "a"(6), "D"(ms)
- : "rcx", "r11");
- *secs = 0;
- *nanos = 0;
- return 0;
-}
-
-int sys_fork(pid_t *child) {
- pid_t ret;
- int sys_errno;
-
- asm volatile ("syscall"
- : "=a"(ret), "=d"(sys_errno)
- : "a"(57)
- : "rcx", "r11");
-
- if (ret == -1)
- return sys_errno;
-
- *child = ret;
- return 0;
-}
-
-int sys_execve(const char *path, char *const argv[], char *const envp[]) {
- int ret;
- int sys_errno;
-
- asm volatile ("syscall"
- : "=a"(ret), "=d"(sys_errno)
- : "a"(59), "D"(path), "S"(argv), "d"(envp)
- : "rcx", "r11");
-
- if (sys_errno != 0)
- return sys_errno;
-
- return 0;
-}
-
-pid_t sys_getpid() {
- pid_t pid;
- asm volatile ("syscall" : "=a"(pid)
- : "a"(5)
- : "rcx", "r11", "rdx");
- return pid;
-}
-pid_t sys_getppid() {
- pid_t ppid;
- asm volatile ("syscall" : "=a"(ppid)
- : "a"(14)
- : "rcx", "r11", "rdx");
- return ppid;
-}
-
-#endif // MLIBC_BUILDING_RTDL
-
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/dripos/generic/thread.cpp b/lib/mlibc/sysdeps/dripos/generic/thread.cpp
deleted file mode 100644
index 42cd758..0000000
--- a/lib/mlibc/sysdeps/dripos/generic/thread.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <mlibc/thread-entry.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/tcb.hpp>
-#include <bits/ensure.h>
-#include <sys/mman.h>
-#include <stdint.h>
-#include <stddef.h>
-
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg, Tcb *tcb) {
- // Wait until our parent sets up the TID.
- while(!__atomic_load_n(&tcb->tid, __ATOMIC_RELAXED))
- mlibc::sys_futex_wait(&tcb->tid, 0, nullptr);
-
- if(mlibc::sys_tcb_set(tcb))
- __ensure(!"sys_tcb_set() failed");
-
- tcb->invokeThreadFunc(entry, user_arg);
-
- auto self = reinterpret_cast<Tcb *>(tcb);
-
- __atomic_store_n(&self->didExit, 1, __ATOMIC_RELEASE);
- mlibc::sys_futex_wake(&self->didExit);
-
- mlibc::sys_thread_exit();
-}
-
-namespace mlibc {
-
-static constexpr size_t default_stacksize = 0x200000;
-
-int sys_prepare_stack(void **stack, void *entry, void *user_arg, void *tcb, size_t *stack_size, size_t *guard_size, void **stack_base) {
- if (!*stack_size)
- *stack_size = default_stacksize;
- *guard_size = 0;
-
- if (*stack) {
- *stack_base = *stack;
- } else {
- *stack_base = mmap(nullptr, *stack_size,
- PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- }
-
- uintptr_t *sp = reinterpret_cast<uintptr_t *>(reinterpret_cast<uintptr_t>(*stack_base) + *stack_size);
-
- *--sp = reinterpret_cast<uintptr_t>(tcb);
- *--sp = reinterpret_cast<uintptr_t>(user_arg);
- *--sp = reinterpret_cast<uintptr_t>(entry);
- *stack = reinterpret_cast<void*>(sp);
- return 0;
-}
-
-} //namespace mlibc
diff --git a/lib/mlibc/sysdeps/dripos/generic/thread_entry.S b/lib/mlibc/sysdeps/dripos/generic/thread_entry.S
deleted file mode 100644
index 51e703b..0000000
--- a/lib/mlibc/sysdeps/dripos/generic/thread_entry.S
+++ /dev/null
@@ -1,11 +0,0 @@
-
-.section .text
-.global __mlibc_start_thread
-__mlibc_start_thread:
- pop %rdi
- pop %rsi
- pop %rdx
- call __mlibc_enter_thread
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/access.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/access.h
deleted file mode 120000
index 171f75f..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/access.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/access.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/auxv.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/auxv.h
deleted file mode 120000
index 866c8bb..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/auxv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/dripos/auxv.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/blkcnt_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/blkcnt_t.h
deleted file mode 120000
index e9d9f1b..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/blkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/blkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/blksize_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/blksize_t.h
deleted file mode 120000
index c6dfb6e..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/blksize_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/blksize_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/clockid_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/clockid_t.h
deleted file mode 120000
index 71f37bb..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/clockid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/clockid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/dev_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/dev_t.h
deleted file mode 120000
index 0c1143b..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/dev_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/dev_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/epoll.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/epoll.h
deleted file mode 120000
index 9efc3a0..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/epoll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/epoll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/errno.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/errno.h
deleted file mode 120000
index 2a2ab26..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/errno.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/dripos/errno.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/fcntl.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/fcntl.h
deleted file mode 120000
index ea5323a..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/fcntl.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/fsblkcnt_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/fsblkcnt_t.h
deleted file mode 120000
index 898dfb2..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/fsblkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsblkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/fsfilcnt_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/fsfilcnt_t.h
deleted file mode 120000
index 791755c..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/fsfilcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsfilcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/gid_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/gid_t.h
deleted file mode 120000
index 6a77218..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/gid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/gid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/in.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/in.h
deleted file mode 120000
index b58c683..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/in.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/in.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/ino_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/ino_t.h
deleted file mode 120000
index 10d644e..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/ino_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/ino_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/inotify.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/inotify.h
deleted file mode 120000
index 3f19ef6..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/inotify.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/inotify.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/ioctls.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/ioctls.h
deleted file mode 120000
index 595106b..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/ioctls.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ioctls.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/limits.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/limits.h
deleted file mode 120000
index 1aa5894..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/limits.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/limits.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/mode_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/mode_t.h
deleted file mode 120000
index 29d7733..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/mode_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/mode_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/mqueue.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/mqueue.h
deleted file mode 120000
index fa87b07..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/mqueue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mqueue.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/msg.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/msg.h
deleted file mode 120000
index f402b49..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/msg.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/msg.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/nlink_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/nlink_t.h
deleted file mode 120000
index 7618c27..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/nlink_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/nlink_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/packet.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/packet.h
deleted file mode 120000
index 47067e2..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/packet.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/packet.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/pid_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/pid_t.h
deleted file mode 120000
index 3fd26a7..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/pid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/pid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/poll.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/poll.h
deleted file mode 120000
index ab989c7..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/poll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/poll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/ptrace.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/ptrace.h
deleted file mode 120000
index f391fb7..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/ptrace.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/ptrace.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/resource.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/resource.h
deleted file mode 120000
index 3e59c75..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/resource.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/seek-whence.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/seek-whence.h
deleted file mode 120000
index 3bd41ef..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/seek-whence.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/seek-whence.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/shm.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/shm.h
deleted file mode 120000
index 067d8c4..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/shm.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/shm.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/signal.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/signal.h
deleted file mode 120000
index b20e511..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/signal.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/signal.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/socket.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/socket.h
deleted file mode 120000
index 0e1d6be..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/socket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/socket.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/socklen_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/socklen_t.h
deleted file mode 120000
index 41f3b11..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/socklen_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socklen_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/stat.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/stat.h
deleted file mode 120000
index 82642c3..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/stat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/stat.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/statfs.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/statfs.h
deleted file mode 120000
index e3d202f..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/statfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/statvfs.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/statvfs.h
deleted file mode 120000
index 1fc80c2..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/statvfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statvfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/suseconds_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/suseconds_t.h
deleted file mode 120000
index 9ed6597..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/suseconds_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/suseconds_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/termios.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/termios.h
deleted file mode 120000
index cfcfe76..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/termios.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/termios.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/time.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/time.h
deleted file mode 120000
index 2a02625..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/time.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/time.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/uid_t.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/uid_t.h
deleted file mode 120000
index 1113eba..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/uid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/uid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/utsname.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/utsname.h
deleted file mode 120000
index 17b993f..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/utsname.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/utsname.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/vm-flags.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/vm-flags.h
deleted file mode 120000
index f1a985e..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/vm-flags.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/vm-flags.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/wait.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/wait.h
deleted file mode 120000
index 6d911c7..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/wait.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/wait.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/abi-bits/xattr.h b/lib/mlibc/sysdeps/dripos/include/abi-bits/xattr.h
deleted file mode 120000
index 66412d7..0000000
--- a/lib/mlibc/sysdeps/dripos/include/abi-bits/xattr.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/xattr.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/dripos/include/mlibc/thread-entry.hpp b/lib/mlibc/sysdeps/dripos/include/mlibc/thread-entry.hpp
deleted file mode 100644
index 2dd88a6..0000000
--- a/lib/mlibc/sysdeps/dripos/include/mlibc/thread-entry.hpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#pragma once
-
-#include <mlibc/tcb.hpp>
-
-extern "C" void __mlibc_start_thread(void);
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg, Tcb *tcb);
-
-namespace mlibc {
- void *prepare_stack(void *entry, void *user_arg, void *tcb);
-}
diff --git a/lib/mlibc/sysdeps/dripos/meson.build b/lib/mlibc/sysdeps/dripos/meson.build
deleted file mode 100644
index afecf25..0000000
--- a/lib/mlibc/sysdeps/dripos/meson.build
+++ /dev/null
@@ -1,71 +0,0 @@
-
-rtdl_sources += files(
- 'generic/generic.cpp'
-)
-
-libc_sources += files(
- 'generic/entry.cpp',
- 'generic/generic.cpp',
- 'generic/thread.cpp',
- 'generic/thread_entry.S'
-)
-
-if not no_headers
- install_headers(
- 'include/abi-bits/auxv.h',
- 'include/abi-bits/seek-whence.h',
- 'include/abi-bits/vm-flags.h',
- 'include/abi-bits/errno.h',
- 'include/abi-bits/fcntl.h',
- 'include/abi-bits/in.h',
- 'include/abi-bits/resource.h',
- 'include/abi-bits/stat.h',
- 'include/abi-bits/signal.h',
- 'include/abi-bits/socket.h',
- 'include/abi-bits/termios.h',
- 'include/abi-bits/blkcnt_t.h',
- 'include/abi-bits/blksize_t.h',
- 'include/abi-bits/dev_t.h',
- 'include/abi-bits/gid_t.h',
- 'include/abi-bits/ino_t.h',
- 'include/abi-bits/mode_t.h',
- 'include/abi-bits/nlink_t.h',
- 'include/abi-bits/pid_t.h',
- 'include/abi-bits/uid_t.h',
- 'include/abi-bits/access.h',
- 'include/abi-bits/wait.h',
- 'include/abi-bits/limits.h',
- 'include/abi-bits/utsname.h',
- 'include/abi-bits/ptrace.h',
- 'include/abi-bits/poll.h',
- 'include/abi-bits/epoll.h',
- 'include/abi-bits/packet.h',
- 'include/abi-bits/inotify.h',
- 'include/abi-bits/clockid_t.h',
- 'include/abi-bits/shm.h',
- 'include/abi-bits/mqueue.h',
- 'include/abi-bits/suseconds_t.h',
- 'include/abi-bits/fsfilcnt_t.h',
- 'include/abi-bits/fsblkcnt_t.h',
- 'include/abi-bits/socklen_t.h',
- 'include/abi-bits/statfs.h',
- 'include/abi-bits/statvfs.h',
- 'include/abi-bits/ioctls.h',
- 'include/abi-bits/xattr.h',
- 'include/abi-bits/msg.h',
- subdir: 'abi-bits',
- follow_symlinks: true
- )
-endif
-
-if not headers_only
- crt = custom_target('crt1',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: 'crt-x86_64/crt1.S',
- output: 'crt1.o',
- install: true,
- install_dir: get_option('libdir')
- )
-endif
-
diff --git a/lib/mlibc/sysdeps/hyra/crt-x86_64/crt0.S b/lib/mlibc/sysdeps/hyra/crt-x86_64/crt0.S
deleted file mode 100644
index 57f0dd1..0000000
--- a/lib/mlibc/sysdeps/hyra/crt-x86_64/crt0.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .text
-
-.global _start
-_start:
- mov $main, %rdi
- call __mlibc_entry
-
-.size _start, . - _start
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/hyra/generic/entry.cpp b/lib/mlibc/sysdeps/hyra/generic/entry.cpp
deleted file mode 100644
index d5129af..0000000
--- a/lib/mlibc/sysdeps/hyra/generic/entry.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <bits/ensure.h>
-#include <mlibc/elf/startup.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-// defined by the POSIX library
-void __mlibc_initLocale();
-
-extern "C" uintptr_t *__dlapi_entrystack();
-
-extern char **environ;
-static mlibc::exec_stack_data __mlibc_stack_data;
-
-struct LibraryGuard {
- LibraryGuard();
-};
-
-static LibraryGuard guard;
-
-LibraryGuard::LibraryGuard() {
- __mlibc_initLocale();
-
- // Parse the exec() stack.
- mlibc::parse_exec_stack(__dlapi_entrystack(), &__mlibc_stack_data);
- mlibc::set_startup_data(__mlibc_stack_data.argc, __mlibc_stack_data.argv,
- __mlibc_stack_data.envp);
-}
-
-extern "C" void __mlibc_entry(int (*main_fn)(int argc, char *argv[],
- char *env[])) {
- // TODO: call __dlapi_enter, otherwise static builds will break (see Linux
- // sysdeps)
- auto result = main_fn(__mlibc_stack_data.argc, __mlibc_stack_data.argv, environ);
- exit(result);
-}
diff --git a/lib/mlibc/sysdeps/hyra/generic/hyra.cpp b/lib/mlibc/sysdeps/hyra/generic/hyra.cpp
deleted file mode 100644
index fb555b9..0000000
--- a/lib/mlibc/sysdeps/hyra/generic/hyra.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-#include <stddef.h>
-#include <sys/types.h>
-#include <hyra/syscall.h>
-
-namespace mlibc {
-void sys_libc_log(const char *msg) {
- __syscall(0, (uintptr_t)msg);
-}
-
-int sys_anon_allocate(size_t size, void **pointer) {
- (void)size;
- (void)pointer;
- while (1);
-}
-
-void sys_libc_panic() {
- sys_libc_log("\n** MLIBC PANIC **\n");
- while (1);
-}
-
-int sys_tcb_set(void *pointer) {
- (void)pointer;
-
- while (1);
-}
-
-void sys_exit(int status) {
-}
-
-void sys_seek(int fd, off_t offset, int whence, off_t *new_offset) {
- (void)fd;
- (void)offset;
- (void)whence;
- (void)new_offset;
-
- while (1);
-}
-
-int sys_vm_map(void *hint, size_t size, int prot, int flags, int fd,
- off_t offset, void **window) {
- (void)hint;
- (void)size;
- (void)prot;
- (void)flags;
- (void)fd;
- (void)offset;
- (void)window;
-
- while (1);
-}
-
-int sys_vm_unmap(void *address, size_t size) {
- (void)address;
- (void)size;
-
- while (1);
-}
-
-int sys_anon_free(void *pointer, size_t size) {
- (void)pointer;
- (void)size;
-
- while (1);
-}
-
-int sys_clock_get(int clock, time_t *secs, long *nanos) {
- (void)clock;
- (void)secs;
- (void)nanos;
-
- while (1);
-}
-
-int sys_futex_wait(int *pointer, int expected, const struct timespec *time) {
- (void)pointer;
- (void)expected;
- (void)time;
-
- return 0;
-}
-
-int sys_futex_wake(int *pointer) {
- (void)pointer;
-
- return 0;
-}
-
-int sys_open(const char *filename, int flags, mode_t mode, int *fd) {
- (void)filename;
- (void)flags;
- (void)mode;
- (void)fd;
-
- while (1);
-}
-
-int sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read) {
- (void)fd;
- (void)buf;
- (void)count;
- (void)bytes_read;
-
- while (1);
-}
-
-int sys_write(int fd, const void *buffer, size_t count, ssize_t *written) {
- (void)fd;
- (void)buffer;
- (void)count;
- (void)written;
-
- while (1);
-}
-
-int sys_close(int fd) {
- (void)fd;
-
- while (1);
-}
-
-}
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/access.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/access.h
deleted file mode 120000
index cb83931..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/access.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/access.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/auxv.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/auxv.h
deleted file mode 120000
index 6959fac..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/auxv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/hyra/auxv.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/blkcnt_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/blkcnt_t.h
deleted file mode 120000
index 0b0ec27..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/blkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/blkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/blksize_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/blksize_t.h
deleted file mode 120000
index 7dc8d7c..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/blksize_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/blksize_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/clockid_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/clockid_t.h
deleted file mode 120000
index 6a42da5..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/clockid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/clockid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/dev_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/dev_t.h
deleted file mode 120000
index bca881e..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/dev_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/dev_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/epoll.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/epoll.h
deleted file mode 120000
index eb4b76d..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/epoll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/epoll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/errno.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/errno.h
deleted file mode 120000
index 6e507de..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/errno.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/errno.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/fcntl.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/fcntl.h
deleted file mode 120000
index 463e2c9..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fcntl.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/fsblkcnt_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/fsblkcnt_t.h
deleted file mode 120000
index 898dfb2..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/fsblkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsblkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/fsfilcnt_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/fsfilcnt_t.h
deleted file mode 120000
index 791755c..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/fsfilcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsfilcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/gid_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/gid_t.h
deleted file mode 120000
index abce6d6..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/gid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/gid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/in.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/in.h
deleted file mode 120000
index 418d1d5..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/in.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/in.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/ino_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/ino_t.h
deleted file mode 120000
index 4c20aca..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/ino_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ino_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/inotify.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/inotify.h
deleted file mode 120000
index b5cb282..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/inotify.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/inotify.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/ioctls.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/ioctls.h
deleted file mode 120000
index 595106b..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/ioctls.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ioctls.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/limits.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/limits.h
deleted file mode 120000
index 6c88db2..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/limits.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/limits.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/mode_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/mode_t.h
deleted file mode 120000
index 5d78fdf..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/mode_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mode_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/mqueue.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/mqueue.h
deleted file mode 120000
index fa87b07..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/mqueue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mqueue.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/msg.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/msg.h
deleted file mode 120000
index f402b49..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/msg.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/msg.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/nlink_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/nlink_t.h
deleted file mode 120000
index bb3b625..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/nlink_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/nlink_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/packet.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/packet.h
deleted file mode 120000
index 998ef1a..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/packet.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/packet.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/pid_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/pid_t.h
deleted file mode 120000
index baa90f6..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/pid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/pid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/poll.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/poll.h
deleted file mode 120000
index 8ea6a0a..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/poll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/poll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/ptrace.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/ptrace.h
deleted file mode 120000
index b2517b2..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/ptrace.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ptrace.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/reboot.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/reboot.h
deleted file mode 120000
index 77013a4..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/reboot.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/reboot.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/resource.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/resource.h
deleted file mode 120000
index 88d7402..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/resource.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/seek-whence.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/seek-whence.h
deleted file mode 120000
index df7bccf..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/seek-whence.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/seek-whence.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/shm.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/shm.h
deleted file mode 120000
index 067d8c4..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/shm.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/shm.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/signal.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/signal.h
deleted file mode 120000
index 4dcb0b7..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/signal.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/signal.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/socket.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/socket.h
deleted file mode 120000
index f1dc016..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/socket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socket.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/socklen_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/socklen_t.h
deleted file mode 120000
index 41f3b11..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/socklen_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socklen_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/stat.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/stat.h
deleted file mode 120000
index 1f63b41..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/stat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/stat.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/statfs.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/statfs.h
deleted file mode 120000
index e3d202f..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/statfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/statvfs.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/statvfs.h
deleted file mode 120000
index 1fc80c2..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/statvfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statvfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/suseconds_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/suseconds_t.h
deleted file mode 120000
index 9ed6597..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/suseconds_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/suseconds_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/termios.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/termios.h
deleted file mode 120000
index ee8f0b0..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/termios.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/termios.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/time.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/time.h
deleted file mode 120000
index 2a02625..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/time.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/time.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/uid_t.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/uid_t.h
deleted file mode 120000
index b306777..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/uid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/uid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/utsname.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/utsname.h
deleted file mode 120000
index b285754..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/utsname.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/utsname.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/vm-flags.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/vm-flags.h
deleted file mode 120000
index bbe258c..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/vm-flags.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/vm-flags.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/vt.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/vt.h
deleted file mode 120000
index 5798a4a..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/vt.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/vt.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/wait.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/wait.h
deleted file mode 120000
index feb2840..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/wait.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/wait.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/abi-bits/xattr.h b/lib/mlibc/sysdeps/hyra/include/abi-bits/xattr.h
deleted file mode 120000
index 66412d7..0000000
--- a/lib/mlibc/sysdeps/hyra/include/abi-bits/xattr.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/xattr.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/hyra/include/hyra/syscall.h b/lib/mlibc/sysdeps/hyra/include/hyra/syscall.h
deleted file mode 100644
index f38a59b..0000000
--- a/lib/mlibc/sysdeps/hyra/include/hyra/syscall.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef _HYRA_SYSCALL_H_
-#define _HYRA_SYSCALL_H_
-
-#define SYS_debug 0
-#define SYS_exit 1
-
-__attribute__((__always_inline__))
-static inline long syscall0() {
- volatile long ret;
- asm volatile("int $0x80" : "=a"(ret));
- return ret;
-}
-
-__attribute__((__always_inline__))
-static inline long syscall1(uint64_t code, uint64_t arg0) {
- volatile long ret;
- asm volatile("int $0x80"
- : "=a"(ret)
- : "a"(code),
- "D"(arg0) : "memory");
- return ret;
-}
-
-__attribute__((__always_inline__))
-static inline long syscall2(uint64_t code, uint64_t arg0, uint64_t arg1) {
- volatile long ret;
- asm volatile("int $0x80"
- : "=a"(ret)
- : "a"(code),
- "D"(arg0),
- "S"(arg1)
- : "memory");
- return ret;
-}
-
-__attribute__((__always_inline__))
-static inline long syscall3(uint64_t code, uint64_t arg0, uint64_t arg1, uint64_t arg2) {
- volatile long ret;
- asm volatile("int $0x80"
- : "=a"(ret)
- : "a"(code),
- "D"(arg0),
- "S"(arg1),
- "d"(arg2)
- : "memory");
- return ret;
-}
-
-#define _GET_SYSCALL(a0, a1, a2, a3, name, ...) name
-
-#define __syscall(...) \
- _GET_SYSCALL(__VA_ARGS__, syscall3, syscall2, syscall1, \
- syscall0)(__VA_ARGS__)
-
-#endif /* !_HYRA_SYSCALL_H_ */
diff --git a/lib/mlibc/sysdeps/hyra/meson.build b/lib/mlibc/sysdeps/hyra/meson.build
deleted file mode 100644
index 80136db..0000000
--- a/lib/mlibc/sysdeps/hyra/meson.build
+++ /dev/null
@@ -1,69 +0,0 @@
-rtdl_dso_sources += files(
- 'generic/hyra.cpp'
-)
-
-libc_sources += files(
- 'generic/entry.cpp',
- 'generic/hyra.cpp',
-)
-
-if not no_headers
- install_headers(
- 'include/abi-bits/auxv.h',
- 'include/abi-bits/seek-whence.h',
- 'include/abi-bits/vm-flags.h',
- 'include/abi-bits/errno.h',
- 'include/abi-bits/fcntl.h',
- 'include/abi-bits/in.h',
- 'include/abi-bits/resource.h',
- 'include/abi-bits/signal.h',
- 'include/abi-bits/stat.h',
- 'include/abi-bits/socket.h',
- 'include/abi-bits/termios.h',
- 'include/abi-bits/time.h',
- 'include/abi-bits/blkcnt_t.h',
- 'include/abi-bits/blksize_t.h',
- 'include/abi-bits/dev_t.h',
- 'include/abi-bits/gid_t.h',
- 'include/abi-bits/ino_t.h',
- 'include/abi-bits/mode_t.h',
- 'include/abi-bits/nlink_t.h',
- 'include/abi-bits/pid_t.h',
- 'include/abi-bits/uid_t.h',
- 'include/abi-bits/access.h',
- 'include/abi-bits/wait.h',
- 'include/abi-bits/limits.h',
- 'include/abi-bits/utsname.h',
- 'include/abi-bits/ptrace.h',
- 'include/abi-bits/poll.h',
- 'include/abi-bits/epoll.h',
- 'include/abi-bits/packet.h',
- 'include/abi-bits/inotify.h',
- 'include/abi-bits/clockid_t.h',
- 'include/abi-bits/shm.h',
- 'include/abi-bits/mqueue.h',
- subdir: 'abi-bits',
- follow_symlinks: true
- )
- install_headers(
- 'include/hyra/syscall.h',
- subdir: 'hyra'
- )
-endif
-
-if not headers_only
- crt = custom_target('crt0',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: 'crt-x86_64/crt0.S',
- output: 'crt0.o',
- install: true,
- install_dir: get_option('libdir')
- )
-endif
-
-if host_machine.cpu_family() == 'x86_64'
- # libc_sources += files('generic/signals.S')
-else
- error('Unknown architecture')
-endif
diff --git a/lib/mlibc/sysdeps/ironclad/crt-x86_64/crt0.S b/lib/mlibc/sysdeps/ironclad/crt-x86_64/crt0.S
deleted file mode 100644
index 18d109e..0000000
--- a/lib/mlibc/sysdeps/ironclad/crt-x86_64/crt0.S
+++ /dev/null
@@ -1,9 +0,0 @@
-
-.section .text
-.global _start
-_start:
- mov $main, %rdi
- call __mlibc_entry
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/ironclad/crt-x86_64/crti.S b/lib/mlibc/sysdeps/ironclad/crt-x86_64/crti.S
deleted file mode 100644
index 911b078..0000000
--- a/lib/mlibc/sysdeps/ironclad/crt-x86_64/crti.S
+++ /dev/null
@@ -1,11 +0,0 @@
-.section .init
-.global _init
-_init:
- push %rax
-
-.section .fini
-.global _fini
-_fini:
- push %rax
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/ironclad/crt-x86_64/crtn.S b/lib/mlibc/sysdeps/ironclad/crt-x86_64/crtn.S
deleted file mode 100644
index 0187e50..0000000
--- a/lib/mlibc/sysdeps/ironclad/crt-x86_64/crtn.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .init
- pop %rax
- ret
-
-.section .fini
- pop %rax
- ret
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/ironclad/generic/entry.cpp b/lib/mlibc/sysdeps/ironclad/generic/entry.cpp
deleted file mode 100644
index 2b8b914..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/entry.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <bits/ensure.h>
-#include <mlibc/elf/startup.h>
-
-// defined by the POSIX library
-void __mlibc_initLocale();
-
-extern "C" uintptr_t *__dlapi_entrystack();
-
-extern char **environ;
-static mlibc::exec_stack_data __mlibc_stack_data;
-
-struct LibraryGuard {
- LibraryGuard();
-};
-
-static LibraryGuard guard;
-
-LibraryGuard::LibraryGuard() {
- __mlibc_initLocale();
-
- // Parse the exec() stack.
- mlibc::parse_exec_stack(__dlapi_entrystack(), &__mlibc_stack_data);
- mlibc::set_startup_data(__mlibc_stack_data.argc, __mlibc_stack_data.argv,
- __mlibc_stack_data.envp);
-}
-
-extern "C" void __mlibc_entry(int (*main_fn)(int argc, char *argv[], char *env[])) {
- // TODO: call __dlapi_enter, otherwise static builds will break (see Linux sysdeps)
- auto result = main_fn(__mlibc_stack_data.argc, __mlibc_stack_data.argv, environ);
- exit(result);
-}
-
diff --git a/lib/mlibc/sysdeps/ironclad/generic/generic.cpp b/lib/mlibc/sysdeps/ironclad/generic/generic.cpp
deleted file mode 100644
index 3d15365..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/generic.cpp
+++ /dev/null
@@ -1,1266 +0,0 @@
-#include <mlibc-config.h>
-#include <bits/ensure.h>
-#include <mlibc/debug.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <errno.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <asm/ioctls.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/syscall.h>
-#include <sys/ironclad_devices.h>
-#include <sched.h>
-#include <sys/mman.h>
-#include <unistd.h>
-#include <sys/file.h>
-#include <mlibc/tcb.hpp>
-
-namespace mlibc {
-
-void sys_libc_log(const char *message) {
- ssize_t unused;
- char new_line = '\n';
- sys_write(2, message, strlen(message), &unused);
- sys_write(2, &new_line, 1, &unused);
-}
-
-void sys_libc_panic() {
- ssize_t unused;
- char const *message = "mlibc panicked unrecoverably\n";
- sys_write(2, message, strlen(message), &unused);
- sys_exit(1);
-}
-
-void sys_exit(int status) {
- int ret, errno;
- SYSCALL1(SYSCALL_EXIT, status);
- __builtin_unreachable();
-}
-
-int sys_tcb_set(void *pointer) {
- int ret, errno;
- SYSCALL2(SYSCALL_ARCH_PRCTL, 1, pointer);
- return errno;
-}
-
-int sys_thread_getname(void *tcb, char *name, size_t size) {
- int ret, errno;
- auto t = reinterpret_cast<Tcb *>(tcb);
- SYSCALL3(SYSCALL_GETTIDID, t->tid, name, size);
- return errno;
-}
-
-int sys_thread_setname(void *tcb, const char *name) {
- int ret, errno;
- size_t len = strlen(name);
- auto t = reinterpret_cast<Tcb *>(tcb);
- SYSCALL3(SYSCALL_SETTIDID, t->tid, name, len);
- return errno;
-}
-
-int sys_open(const char *path, int flags, mode_t mode, int *fd) {
- return sys_openat(AT_FDCWD, path, flags, mode, fd);
-}
-
-int sys_openat(int dirfd, const char *path, int flags, mode_t mode, int *fd) {
- int ret, errno;
-
- int path_len = strlen (path);
- SYSCALL4(SYSCALL_OPEN, dirfd, path, path_len, flags);
- if (ret != -1 && (flags & O_EXCL)) {
- SYSCALL1(SYSCALL_CLOSE, ret);
- return EEXIST;
- }
-
- if (ret == -1 && (flags & O_CREAT)) {
- SYSCALL5(SYSCALL_MAKENODE, AT_FDCWD, path, path_len, mode, 0);
- if (ret == -1) {
- return errno;
- }
- SYSCALL4(SYSCALL_OPEN, AT_FDCWD, path, path_len, flags);
- } else if (ret != -1 && (flags & O_TRUNC)) {
- // If the file cannot be truncated, dont sweat it, some software
- // depends on some things being truncate-able that ironclad does not
- // allow. For example, some devices.
- sys_ftruncate(ret, 0);
- } else if (ret != -1 && (flags & O_DIRECTORY)) {
- struct stat st;
- sys_stat(fsfd_target::fd, ret, NULL, 0, &st);
- if (!S_ISDIR (st.st_mode)) {
- ret = -1;
- errno = ENOTDIR;
- }
- }
-
- *fd = ret;
- return errno;
-}
-
-int sys_open_dir(const char *path, int *handle) {
- return sys_open(path, O_RDONLY | O_DIRECTORY, 0660, handle);
-}
-
-int sys_read_entries(int handle, void *buffer, size_t max_size, size_t *bytes_read) {
- size_t ret;
- int errno;
- SYSCALL3(SYSCALL_GETDENTS, handle, buffer, max_size);
- if (errno != 0) {
- return errno;
- } else {
- *bytes_read = ret;
- return 0;
- }
-}
-
-void sys_thread_exit() {
- int ret, errno;
- SYSCALL0(SYSCALL_EXIT_THREAD);
- __builtin_unreachable();
-}
-
-int sys_close(int fd) {
- int ret, errno;
- SYSCALL1(SYSCALL_CLOSE, fd);
- return errno;
-}
-
-void sys_sync() {
- int ret, errno;
- SYSCALL0(SYSCALL_SYNC);
- if (ret != 0) {
- sys_libc_log("mlibc: sync failed");
- }
-}
-
-int sys_fsync(int fd) {
- int ret, errno;
- SYSCALL2(SYSCALL_FSYNC, fd, 0);
- return errno;
-}
-
-int sys_fdatasync(int fd) {
- int ret, errno;
- SYSCALL2(SYSCALL_FSYNC, fd, 1);
- return errno;
-}
-
-int sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read) {
- ssize_t ret;
- int errno;
- SYSCALL3(SYSCALL_READ, fd, buf, count);
- *bytes_read = ret;
- return errno;
-}
-
-int sys_write(int fd, const void *buf, size_t count, ssize_t *bytes_written) {
- ssize_t ret;
- int errno;
- SYSCALL3(SYSCALL_WRITE, fd, buf, count);
- *bytes_written = ret;
- return errno;
-}
-
-int sys_pread(int fd, void *buf, size_t n, off_t off, ssize_t *bytes_read) {
- ssize_t ret;
- int errno;
- SYSCALL4(SYSCALL_PREAD, fd, buf, n, off);
- *bytes_read = ret;
- return errno;
-}
-
-int sys_pwrite(int fd, const void *buf, size_t n, off_t off, ssize_t *bytes_written) {
- ssize_t ret;
- int errno;
- SYSCALL4(SYSCALL_WRITE, fd, buf, n, off);
- *bytes_written = ret;
- return errno;
-}
-
-int sys_seek(int fd, off_t offset, int whence, off_t *new_offset) {
- ssize_t ret;
- int errno;
- SYSCALL3(SYSCALL_SEEK, fd, offset, whence);
- *new_offset = ret;
- return errno;
-}
-
-int sys_ftruncate (int fd, size_t size) {
- int ret, errno;
- SYSCALL2(SYSCALL_TRUNCATE, fd, size);
- return errno;
-}
-
-int sys_flock(int fd, int options) {
- // XXX: Shouldnt this use F_SETLKW and F_SETLK only when LOCK_NB ?
- struct flock lock;
- lock.l_whence = SEEK_SET;
- lock.l_start = 0;
- lock.l_len = (off_t)((uint64_t)-1);
- lock.l_pid = sys_getpid();
-
- switch (options & ~(LOCK_NB)) {
- case LOCK_SH:
- lock.l_type = F_RDLCK;
- break;
- case LOCK_EX:
- lock.l_type = F_WRLCK;
- break;
- case LOCK_UN:
- lock.l_type = F_UNLCK;
- break;
- default:
- return -1;
- }
-
- int ret, errno;
- SYSCALL3(SYSCALL_FCNTL, fd, F_SETLK, &lock);
- return errno;
-}
-
-int sys_getpriority(int which, id_t who, int *value) {
- int ret, errno;
- SYSCALL2(SYSCALL_GETPRIO, which, who);
- *value = ret;
- return errno;
-}
-
-int sys_setpriority(int which, id_t who, int value) {
- int ret, errno;
- SYSCALL3(SYSCALL_SETPRIO, which, who, value);
- return errno;
-}
-
-int sys_getrusage(int scope, struct rusage *usage) {
- int ret, errno;
- SYSCALL2(SYSCALL_GETRUSAGE, scope, usage);
-
- // Ironclad returns nanoseconds instead of microseconds for usage, so we
- // have to compensate for that.
- usage->ru_utime.tv_usec = usage->ru_utime.tv_usec / 1000;
- usage->ru_stime.tv_usec = usage->ru_stime.tv_usec / 1000;
-
- return errno;
-}
-
-int sys_anon_allocate(size_t size, void **pointer) {
- return sys_vm_map(NULL, size, PROT_READ | PROT_WRITE, MAP_ANON, 0, 0, pointer);
-}
-
-int sys_anon_free(void *pointer, size_t size) {
- return sys_vm_unmap(pointer, size);
-}
-
-int sys_vm_map(void *hint, size_t size, int prot, int flags, int fd, off_t offset, void **window) {
- void *ret;
- int errno;
- SYSCALL6(SYSCALL_MMAP, hint, size, prot, flags, fd, offset);
- *window = ret;
- return errno;
-}
-
-int sys_getsockopt(int fd, int layer, int number, void *__restrict buffer, socklen_t *__restrict size) {
- int ret, errno;
- SYSCALL5(SYSCALL_GETSOCKOPT, fd, layer, number, buffer, size);
- return errno;
-}
-
-int sys_setsockopt(int fd, int layer, int number, const void *buffer, socklen_t size) {
- int ret, errno;
- SYSCALL5(SYSCALL_SETSOCKOPT, fd, layer, number, buffer, size);
- return errno;
-}
-
-int sys_vm_unmap(void *pointer, size_t size) {
- int ret;
- int errno;
- SYSCALL2(SYSCALL_MUNMAP, pointer, size);
- if (ret != 0) {
- return errno;
- } else {
- return 0;
- }
-}
-
-int sys_getcwd(char *buf, size_t size) {
- buf[0] = '/';
- buf[1] = '\0';
- return 0;
-}
-
-int sys_vm_protect(void *pointer, size_t size, int prot) {
- int ret;
- int errno;
- SYSCALL3(SYSCALL_MPROTECT, pointer, size, prot);
- if (ret != 0) {
- return errno;
- }
- return 0;
-}
-
-int sys_getsid(pid_t pid, pid_t *sid) {
- // STUB.
- return 0;
-}
-
-pid_t sys_getpid() {
- pid_t ret;
- int errno;
- SYSCALL0(SYSCALL_GETPID);
- return ret;
-}
-
-pid_t sys_getppid() {
- pid_t ret;
- int errno;
- SYSCALL0(SYSCALL_GETPPID);
- return ret;
-}
-
-int sys_getgroups(size_t size, const gid_t *list, int *retval) {
- int ret, errno;
- SYSCALL2(SYSCALL_GETGROUPS, size, list);
- *retval = ret;
- return errno;
-}
-
-int sys_setgroups(size_t size, const gid_t *list) {
- int ret, errno;
- SYSCALL2(SYSCALL_SETGROUPS, size, list);
- return errno;
-}
-
-int sys_sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) {
- return 0;
-}
-
-int sys_ptrace(long req, pid_t pid, void *addr, void *data, long *out) {
- int ret, errno;
- SYSCALL4(SYSCALL_PTRACE, req, pid, addr, data);
- *out = (long)ret;
- return errno;
-}
-
-int sys_fcntl(int fd, int request, va_list args, int *result) {
- int ret, errno;
- SYSCALL3(SYSCALL_FCNTL, fd, request, va_arg(args, uint64_t));
- *result = ret;
- return errno;
-}
-
-int sys_sigprocmask(int how, const sigset_t *__restrict set, sigset_t *__restrict retrieve) {
- return 0;
-}
-
-int sys_isatty(int fd) {
- struct termios t;
- if (sys_tcgetattr(fd, &t) == 0) {
- return 0;
- } else {
- return ENOTTY;
- }
-}
-
-int sys_getpgid(pid_t pid, pid_t *pgid) {
- (void)pid;
- // FIXME: Stub needed by mlibc.
- *pgid = 0;
- return 0;
-}
-
-int sys_execve(const char *path, char *const argv[], char *const envp[]) {
- int ret, errno, argv_len, envp_len;
- for (argv_len = 0; argv[argv_len] != NULL; argv_len++);
- for (envp_len = 0; envp[envp_len] != NULL; envp_len++);
-
- size_t path_len = strlen (path);
- SYSCALL6(SYSCALL_EXEC, path, path_len, argv, argv_len, envp, envp_len);
-
- if (ret == -1) {
- return errno;
- }
-
- return 0;
-}
-
-int sys_fork(pid_t *child) {
- pid_t ret;
- int errno;
-
- SYSCALL6(SYSCALL_CLONE, 0, 0, 0, 0, 0, 1);
-
- if (ret == -1) {
- return errno;
- }
-
- if (child != NULL) {
- *child = ret;
- }
-
- return 0;
-}
-
-int sys_getrlimit(int resource, struct rlimit *limit) {
- uint64_t ret, errno;
- SYSCALL1(SYSCALL_GETRLIMIT, resource);
- limit->rlim_cur = ret;
- limit->rlim_max = ret;
- return errno;
-}
-
-int sys_setrlimit(int resource, const struct rlimit *limit) {
- int ret, errno;
- SYSCALL2(SYSCALL_SETRLIMIT, resource, limit->rlim_cur);
- return errno;
-}
-
-int sys_waitpid(pid_t pid, int *status, int flags, struct rusage *ru, pid_t *ret_pid) {
- pid_t ret;
- int errno;
-
- if(ru) {
- mlibc::infoLogger() << "mlibc: struct rusage in sys_waitpid is unsupported" << frg::endlog;
- return ENOSYS;
- }
-
- SYSCALL3(SYSCALL_WAIT, pid, status, flags);
-
- if (ret == -1) {
- return errno;
- }
-
- *ret_pid = ret;
- return errno;
-}
-
-int sys_uname(struct utsname *buf) {
- int ret, errno;
-
- SYSCALL3(SYSCALL_SYSCONF, 10, buf, sizeof(struct utsname));
-
- if (ret == -1) {
- return errno;
- }
-
- return 0;
-}
-
-
-
-int sys_setpgid(pid_t pid, pid_t pgid) {
- (void)pid;
- (void)pgid;
- return 0;
-}
-
-int sys_ttyname(int fd, char *buff, size_t size) {
- int ret, errno;
- SYSCALL3(SYSCALL_TTYNAME, fd, buff, size);
- return errno;
-}
-
-int sys_sethostname(const char *buff, size_t size) {
- int ret, errno;
-
- SYSCALL2(SYSCALL_SETHOSTNAME, buff, size);
-
- if (ret == -1) {
- return errno;
- }
-
- return 0;
-}
-
-int sys_chdir(const char *buff) {
- int ret, errno;
-
- size_t buff_len = strlen(buff);
- SYSCALL4(SYSCALL_OPEN, AT_FDCWD, buff, buff_len, O_RDONLY);
- if (ret == -1) {
- return ENOENT;
- }
-
- SYSCALL1(SYSCALL_CHDIR, ret);
-
- if (ret == -1) {
- return errno;
- }
-
- return 0;
-}
-
-int sys_fchdir(int fd) {
- int ret, errno;
-
- SYSCALL1(SYSCALL_CHDIR, fd);
-
- if (ret == -1) {
- return errno;
- }
-
- return 0;
-}
-
-int sys_ioctl(int fd, unsigned long request, void *arg, int *result) {
- int ret, errno;
-
- if (request == TIOCGPGRP) {
- *result = 0;
- return 0;
- } else if (request == TIOCSPGRP) {
- return 0;
- }
-
- SYSCALL3(SYSCALL_IOCTL, fd, request, arg);
-
- if (ret == -1) {
- return errno;
- }
-
- *result = ret;
- return 0;
-}
-
-void sys_yield(void) {
- int ret, errno;
- SYSCALL0(SYSCALL_SCHED_YIELD);
-}
-
-int sys_kill(int pid, int sig) {
- int ret, errno;
- if (sig == SIGKILL) {
- SYSCALL1(SYSCALL_ACTUALLY_KILL, pid);
- } else {
- SYSCALL2(SYSCALL_SEND_SIGNAL, pid, sig);
- }
-
- return errno;
-}
-
-int sys_dup(int fd, int flags, int *newfd) {
- int ret, errno;
- if (flags & O_CLOEXEC) {
- SYSCALL3(SYSCALL_FCNTL, fd, F_DUPFD_CLOEXEC, 0);
- } else {
- SYSCALL3(SYSCALL_FCNTL, fd, F_DUPFD, 0);
- }
- *newfd = ret;
- return errno;
-}
-
-int sys_dup2(int fd, int flags, int newfd) {
- int ret = sys_close(newfd);
- if (ret != 0 && ret != EBADFD) {
- return EBADFD;
- }
-
- int errno;
- if (flags & O_CLOEXEC) {
- SYSCALL3(SYSCALL_FCNTL, fd, F_DUPFD_CLOEXEC, newfd);
- } else {
- SYSCALL3(SYSCALL_FCNTL, fd, F_DUPFD, newfd);
- }
-
- if (ret != -1 && ret != newfd) {
- return EBADFD;
- } else {
- return errno;
- }
-}
-
-int sys_tcgetattr(int fd, struct termios *attr) {
- int ret;
-
- if (int r = sys_ioctl(fd, TCGETS, attr, &ret) != 0) {
- return r;
- }
-
- return 0;
-}
-
-int sys_tcsetattr(int fd, int optional_action, const struct termios *attr) {
- int ret;
-
- switch (optional_action) {
- case TCSANOW:
- optional_action = TCSETS; break;
- case TCSADRAIN:
- optional_action = TCSETSW; break;
- case TCSAFLUSH:
- optional_action = TCSETSF; break;
- default:
- __ensure(!"Unsupported tcsetattr");
- }
-
- if (int r = sys_ioctl(fd, optional_action, (void *)attr, &ret) != 0) {
- return r;
- }
-
- return 0;
-}
-
-int sys_tcflow(int fd, int action) {
- int ret;
- return sys_ioctl(fd, TCXONC, &action, &ret);
-}
-
-int sys_tcflush(int fd, int action) {
- int ret;
- return sys_ioctl(fd, TCFLSH, &action, &ret);
-}
-
-int sys_access(const char *path, int mode) {
- int ret, errno;
- size_t len = strlen(path);
- SYSCALL5(SYSCALL_ACCESS, AT_FDCWD, path, len, mode, 0);
- return errno;
-}
-
-int sys_faccessat(int dirfd, const char *pathname, int mode, int flags) {
- int ret, errno;
- size_t len = strlen(pathname);
- SYSCALL5(SYSCALL_ACCESS, dirfd, pathname, len, mode, flags);
- return errno;
-}
-
-struct futex_item {
- uint64_t addr;
- uint32_t expected;
- uint32_t flags;
-};
-
-int sys_futex_wait(int *pointer, int expected, const struct timespec *time) {
- int ret, errno;
- struct futex_item item = {.addr = (uint64_t)pointer, .expected = expected, .flags = 0};
- if (time == NULL) {
- struct timespec t = {(time_t)-1, (time_t)-1};
- SYSCALL4(SYSCALL_FUTEX, 0b01, &item, 1, &t);
- } else {
- SYSCALL4(SYSCALL_FUTEX, 0b01, &item, 1, time);
- }
- return errno;
-}
-
-int sys_futex_wake(int *pointer) {
- int ret, errno;
- struct futex_item item = {.addr = (uint64_t)pointer, .expected = 0, .flags = 0};
- struct timespec t = {(time_t)-1, (time_t)-1};
- SYSCALL4(SYSCALL_FUTEX, 0b10, &item, 1, &t);
- return errno;
-}
-
-int sys_pipe(int *fds, int flags) {
- int ret, errno;
- SYSCALL2(SYSCALL_PIPE, fds, flags);
- return errno;
-}
-
-int sys_getentropy(void *buffer, size_t length) {
- ssize_t ret;
- int errno;
- SYSCALL2(SYSCALL_GETRANDOM, buffer, length);
- return errno;
-}
-
-int sys_mkdir(const char *path, mode_t mode) {
- return sys_mkdirat(AT_FDCWD, path, mode);
-}
-
-int sys_mkdirat(int dirfd, const char *path, mode_t mode) {
- int ret, errno;
- size_t path_len = strlen (path);
- SYSCALL5(SYSCALL_MAKENODE, dirfd, path, path_len, S_IFDIR | mode, 0);
- return errno;
-}
-
-int sys_rmdir(const char* path){
- int ret, errno;
- size_t path_len = strlen (path);
- SYSCALL3(SYSCALL_UNLINK, AT_FDCWD, path, path_len);
- return errno;
-}
-
-int sys_unlinkat(int fd, const char *path, int flags) {
- int ret, errno;
- size_t path_len = strlen (path);
- SYSCALL3(SYSCALL_UNLINK, fd, path, path_len);
- return errno;
-}
-
-int sys_link(const char* srcpath, const char* destpath) {
- int ret, errno;
- size_t src_len = strlen (srcpath);
- size_t dst_len = strlen (destpath);
- SYSCALL6(SYSCALL_LINK, AT_FDCWD, srcpath, src_len, AT_FDCWD, destpath, dst_len);
- return errno;
-}
-
-int sys_socket(int domain, int type, int protocol, int *fd) {
- int ret, errno;
- SYSCALL3(SYSCALL_SOCKET, domain, type, protocol);
- if (ret != -1) {
- *fd = ret;
- return 0;
- } else {
- return errno;
- }
-}
-
-uid_t sys_getuid() {
- uint64_t ret, errno;
- SYSCALL0(SYSCALL_GETUID);
- return (uid_t)ret;
-}
-
-uid_t sys_geteuid() {
- uint64_t ret, errno;
- SYSCALL0(SYSCALL_GETEUID);
- return (uid_t)ret;
-}
-
-int sys_setuid(uid_t uid) {
- int ret, errno;
- SYSCALL2(SYSCALL_SETUIDS, uid, uid);
- return ret;
-}
-
-int sys_seteuid(uid_t euid) {
- int ret, errno;
- SYSCALL2(SYSCALL_SETUIDS, ((uint64_t)-1), euid);
- return ret;
-}
-
-int sys_setreuid(uid_t ruid, uid_t euid) {
- int ret, errno;
- SYSCALL2(SYSCALL_SETUIDS, ruid, euid);
- return ret;
-}
-
-gid_t sys_getgid() {
- uint64_t ret, errno;
- SYSCALL0(SYSCALL_GETGID);
- return (gid_t)ret;
-}
-
-gid_t sys_getegid() {
- return sys_getgid();
-}
-
-int sys_setgid(gid_t gid) {
- int ret, errno;
- SYSCALL2(SYSCALL_SETGIDS, gid, gid);
- return ret;
-}
-
-int sys_setegid(gid_t egid) {
- int ret, errno;
- SYSCALL2(SYSCALL_SETGIDS, ((uint64_t)-1), egid);
- return ret;
-}
-
-int sys_setregid(gid_t rgid, gid_t egid) {
- int ret, errno;
- SYSCALL2(SYSCALL_SETGIDS, rgid, egid);
- return ret;
-}
-
-int sys_setsid(pid_t *sid) {
- return 0;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-extern "C" void __mlibc_thread_entry();
-
-int sys_clone(void *tcb, pid_t *tid_out, void *stack) {
- int ret, errno;
- SYSCALL6(SYSCALL_CLONE, (uintptr_t)__mlibc_thread_entry, 0, stack, 0b10, tcb, 1);
-
- if (ret == -1) {
- return errno;
- }
-
- *tid_out = (pid_t)ret;
- return 0;
-}
-
-int sys_prepare_stack(void **stack, void *entry, void *arg, void *tcb, size_t *stack_size, size_t *guard_size) {
- // TODO guard
-
- mlibc::infoLogger() << "mlibc: sys_prepare_stack() does not setup a guard!" << frg::endlog;
-
- *guard_size = 0;
- *stack_size = *stack_size ? *stack_size : 0x400000;
-
- if (!*stack) {
- *stack = (void *)((char *)mmap(NULL, *stack_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0) + *stack_size);
- if (*stack == MAP_FAILED) {
- return errno;
- }
- }
-
- void **stack_it = (void **)*stack;
-
- *--stack_it = arg;
- *--stack_it = tcb;
- *--stack_it = entry;
-
- *stack = (void *)stack_it;
-
- return 0;
-}
-
-int sys_clock_getres(int clock, time_t *secs, long *nanos) {
- struct timespec time;
- int ret, errno;
- SYSCALL3(SYSCALL_CLOCK, 0, clock, &time);
- *secs = time.tv_sec;
- *nanos = time.tv_nsec;
- return errno;
-}
-
-int sys_clock_get(int clock, time_t *secs, long *nanos) {
- struct timespec time;
- int ret, errno;
- SYSCALL3(SYSCALL_CLOCK, 1, clock, &time);
- *secs = time.tv_sec;
- *nanos = time.tv_nsec;
- return errno;
-}
-
-int sys_clock_set(int clock, time_t secs, long nanos) {
- struct timespec time = {.tv_sec = secs, .tv_nsec = nanos };
- int ret, errno;
- SYSCALL3(SYSCALL_CLOCK, 2, clock, &time);
- return errno;
-}
-
-int sys_bind(int fd, const struct sockaddr *addr_ptr, socklen_t addrlen) {
- int ret, errno;
- SYSCALL3(SYSCALL_BIND, fd, addr_ptr, addrlen);
- return errno;
-}
-
-int sys_connect(int fd, const struct sockaddr *addr_ptr, socklen_t addrlen) {
- int ret, errno;
- SYSCALL3(SYSCALL_CONNECT, fd, addr_ptr, addrlen);
- return errno;
-}
-
-int sys_listen(int fd, int backlog) {
- int ret, errno;
- SYSCALL2(SYSCALL_LISTEN, fd, backlog);
- return errno;
-}
-
-int sys_accept(int fd, int *newfd, struct sockaddr *addr_ptr, socklen_t *addr_length, int flags) {
- int ret, errno;
- SYSCALL4(SYSCALL_ACCEPT, fd, addr_ptr, addr_length, flags);
- *newfd = ret;
- return errno;
-}
-
-
-int sys_sockname(int fd, struct sockaddr *addr_ptr, socklen_t max_addr_length, socklen_t *actual_length) {
- int ret, errno;
- SYSCALL3(SYSCALL_GETSOCKNAME, fd, addr_ptr, &max_addr_length);
- *actual_length = max_addr_length;
- return errno;
-}
-
-int sys_peername(int fd, struct sockaddr *addr_ptr, socklen_t max_addr_length, socklen_t *actual_length) {
- int ret, errno;
- SYSCALL3(SYSCALL_GETPEERNAME, fd, addr_ptr, &max_addr_length);
- *actual_length = max_addr_length;
- return errno;
-}
-
-int sys_shutdown(int sockfd, int how) {
- int ret, errno;
- SYSCALL2(SYSCALL_SHUTDOWN, sockfd, how);
- return errno;
-}
-
-int sys_setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value) {
- return ENOSYS;
-}
-
-int sys_msg_recv(int fd, struct msghdr *hdr, int flags, ssize_t *length) {
- if (hdr->msg_control != NULL) {
- // mlibc::infoLogger() << "mlibc: recv() msg_control not supported!" << frg::endlog;
- }
-
- int ret;
- size_t count = 0;
- int errno;
-
- for (int i = 0; i < hdr->msg_iovlen; i++) {
- SYSCALL6(SYSCALL_RECVFROM, fd, hdr->msg_iov->iov_base, hdr->msg_iov->iov_len,
- hdr->msg_flags, hdr->msg_name, hdr->msg_namelen);
- if (ret == -1) {
- return errno;
- }
- count += ret;
- }
-
- *length = count;
- return 0;
-}
-
-int sys_msg_send(int fd, const struct msghdr *hdr, int flags, ssize_t *length) {
- if (hdr->msg_control != NULL) {
- // mlibc::infoLogger() << "mlibc: recv() msg_control not supported!" << frg::endlog;
- }
-
- int ret;
- size_t count = 0;
- int errno;
-
- for (int i = 0; i < hdr->msg_iovlen; i++) {
- SYSCALL6(SYSCALL_SENDTO, fd, hdr->msg_iov->iov_base, hdr->msg_iov->iov_len,
- hdr->msg_flags, hdr->msg_name, hdr->msg_namelen);
- if (ret == -1) {
- return errno;
- }
- count += ret;
- }
-
- *length = count;
- return 0;
-}
-
-
-int sys_ppoll(struct pollfd *fds, int nfds, const struct timespec *timeout, const sigset_t *sigmask, int *num_events) {
- // XXX: Ironclad has no sigprogmask so this is basically a weird ppoll poll
- // chimeral abomination.
- int ret, errno;
- if (timeout == NULL) {
- struct timespec t = {.tv_sec = (time_t)-1, .tv_nsec = (time_t)-1};
- SYSCALL3(SYSCALL_POLL, fds, nfds, &t);
- } else {
- SYSCALL3(SYSCALL_POLL, fds, nfds, timeout);
- }
- if (ret == -1) {
- return errno;
- }
-
- *num_events = ret;
- return errno;
-}
-
-int sys_poll(struct pollfd *fds, nfds_t count, int timeout, int *num_events) {
- struct timespec ts;
- ts.tv_sec = timeout / 1000;
- ts.tv_nsec = (timeout % 1000) * 1000000;
- return sys_ppoll(fds, count, timeout == -1 ? NULL : &ts, NULL, num_events);
-}
-
-int sys_pselect(int nfds, fd_set *read_set, fd_set *write_set,
- fd_set *except_set, const struct timespec *timeout,
- const sigset_t *sigmask, int *num_events) {
- struct pollfd *fds = (struct pollfd *)calloc(nfds, sizeof(struct pollfd));
- if (fds == NULL) {
- return ENOMEM;
- }
-
- for (int i = 0; i < nfds; i++) {
- struct pollfd *fd = &fds[i];
-
- if (read_set && FD_ISSET(i, read_set)) {
- fd->events |= POLLIN;
- }
- if (write_set && FD_ISSET(i, write_set)) {
- fd->events |= POLLOUT;
- }
- if (except_set && FD_ISSET(i, except_set)) {
- fd->events |= POLLPRI;
- }
-
- if (!fd->events) {
- fd->fd = -1;
- continue;
- }
- fd->fd = i;
- }
-
- int ret = sys_ppoll(fds, nfds, timeout, sigmask, num_events);
- if (ret != 0) {
- free(fds);
- return ret;
- }
-
- fd_set res_read_set, res_write_set, res_except_set;
- FD_ZERO(&res_read_set);
- FD_ZERO(&res_write_set);
- FD_ZERO(&res_except_set);
-
- for (int i = 0; i < nfds; i++) {
- struct pollfd *fd = &fds[i];
-
- if (read_set && FD_ISSET(i, read_set) && (fd->revents & (POLLIN | POLLERR | POLLHUP)) != 0) {
- FD_SET(i, &res_read_set);
- }
- if (write_set && FD_ISSET(i, write_set) && (fd->revents & (POLLOUT | POLLERR | POLLHUP)) != 0) {
- FD_SET(i, &res_write_set);
- }
- if (except_set && FD_ISSET(i, except_set) && (fd->revents & POLLPRI) != 0) {
- FD_SET(i, &res_except_set);
- }
- }
-
- free(fds);
- if (read_set) {
- *read_set = res_read_set;
- }
- if (write_set) {
- *write_set = res_write_set;
- }
- if (except_set) {
- *except_set = res_except_set;
- }
-
- return 0;
-}
-
-int sys_sleep(time_t *secs, long *nanos) {
- struct timespec time = {.tv_sec = *secs, .tv_nsec = *nanos};
- struct timespec rem = {.tv_sec = 0, .tv_nsec = 0};
-
- int ret, errno;
- SYSCALL4(SYSCALL_CLOCK_NANOSLEEP, CLOCK_MONOTONIC, 0, &time, &rem);
- *secs = rem.tv_sec;
- *nanos = rem.tv_nsec;
- return errno;
-}
-
-int sys_gethostname(char *buffer, size_t bufsize) {
- struct utsname buf;
- if (uname(&buf)) {
- return -1;
- }
-
- strncpy(buffer, buf.nodename, bufsize);
- return 0;
-}
-
-int sys_utimensat(int dirfd, const char *pathname, const struct timespec times[2], int flags) {
- int ret, errno;
- if (pathname == NULL) {
- pathname = "";
- flags |= AT_EMPTY_PATH;
- }
-
- size_t path_len = strlen (pathname);
- if (times == NULL) {
- time_t secs;
- long nsec;
- ret = sys_clock_get(CLOCK_REALTIME, &secs, &nsec);
- if (ret) {
- return ret;
- }
- struct timespec times2[2] = {0, 0};
- times2[0].tv_sec = secs;
- times2[0].tv_nsec = nsec;
- times2[1].tv_sec = secs;
- times2[1].tv_nsec = nsec;
- SYSCALL5(SYSCALL_UTIMES, dirfd, pathname, path_len, &times2[0], flags);
- } else {
- SYSCALL5(SYSCALL_UTIMES, dirfd, pathname, path_len, times, flags);
- }
-
- return errno;
-}
-
-int sys_sysconf(int num, long *rret) {
- long ret, errno;
- SYSCALL3(SYSCALL_SYSCONF, num, 0, 0);
- *rret = ret;
- return errno;
-}
-
-int sys_stat(fsfd_target fsfdt, int fd, const char *path, int flags, struct stat *statbuf) {
- int ret, errno;
- (void)flags;
-
- switch (fsfdt) {
- case fsfd_target::fd: {
- SYSCALL5(SYSCALL_STAT, fd, "", 0, statbuf, AT_EMPTY_PATH);
- break;
- }
- case fsfd_target::path: {
- size_t len = strlen(path);
- SYSCALL5(SYSCALL_STAT, AT_FDCWD, path, len, statbuf, flags);
- break;
- }
- case fsfd_target::fd_path: {
- size_t len = strlen(path);
- SYSCALL5(SYSCALL_STAT, fd, path, len, statbuf, flags);
- break;
- }
- default: {
- __ensure(!"stat: Invalid fsfdt");
- __builtin_unreachable();
- }
- }
-
- return errno;
-}
-
-int sys_chmod(const char *pathname, mode_t mode) {
- int ret, errno;
- size_t len = strlen(pathname);
- SYSCALL5(SYSCALL_FCHMOD, AT_FDCWD, pathname, len, mode, 0);
- return errno;
-}
-
-int sys_fchmodat(int fd, const char *pathname, mode_t mode, int flags) {
- int ret, errno;
- size_t len = strlen(pathname);
- SYSCALL5(SYSCALL_FCHMOD, fd, pathname, len, mode, flags);
- return errno;
-}
-
-int sys_fchmod(int fd, mode_t mode) {
- int ret, errno;
- SYSCALL5(SYSCALL_FCHMOD, fd, "", 0, mode, AT_EMPTY_PATH);
- return errno;
-}
-
-int sys_chown(const char *pathname, uid_t uid, gid_t gid) {
- int ret, errno;
- size_t len = strlen(pathname);
- SYSCALL6(SYSCALL_FCHOWN, AT_FDCWD, pathname, len, uid, gid, 0);
- return errno;
-}
-
-int sys_fchownat(int fd, const char *pathname, uid_t uid, gid_t gid, int flags) {
- int ret, errno;
- size_t len = strlen(pathname);
- SYSCALL6(SYSCALL_FCHOWN, fd, pathname, len, uid, gid, flags);
- return errno;
-}
-
-int sys_fchown(int fd, uid_t uid, gid_t gid) {
- int ret, errno;
- SYSCALL6(SYSCALL_FCHOWN, fd, "", 0, uid, gid, AT_EMPTY_PATH);
- return errno;
-}
-
-int sys_umask(mode_t mode, mode_t *old) {
- mode_t ret;
- int errno;
- SYSCALL1(SYSCALL_UMASK, mode);
- *old = (mode_t)ret;
- return errno;
-}
-
-int sys_fadvise(int fd, off_t offset, off_t length, int advice) {
- int ret, errno;
- SYSCALL4(SYSCALL_FADVISE, fd, offset, length, advice);
- return errno;
-}
-
-int sys_readlink(const char *path, void *buffer, size_t max_size, ssize_t *length) {
- ssize_t ret;
- int errno;
- size_t path_len = strlen(path);
- SYSCALL5(SYSCALL_READLINK, AT_FDCWD, path, path_len, buffer, max_size);
- if (ret == -1) {
- return errno;
- } else {
- *length = ret;
- return 0;
- }
-}
-
-int sys_rename(const char *path, const char *new_path) {
- int ret;
- int errno;
- size_t old_len = strlen(path);
- size_t new_len = strlen(new_path);
- SYSCALL7(SYSCALL_RENAME, AT_FDCWD, path, old_len, AT_FDCWD, new_path, new_len, 0);
- return errno;
-}
-
-int sys_renameat(int olddirfd, const char *old_path, int newdirfd, const char *new_path) {
- int ret;
- int errno;
- size_t old_len = strlen(old_path);
- size_t new_len = strlen(new_path);
- SYSCALL7(SYSCALL_RENAME, olddirfd, old_path, old_len, newdirfd, new_path, new_len, 0);
- return errno;
-}
-
-int sys_mknodat(int dirfd, const char *path, mode_t mode, dev_t dev) {
- int ret;
- int errno;
- size_t len = strlen(path);
- SYSCALL5(SYSCALL_MAKENODE, dirfd, path, len, mode, dev);
- return errno;
-}
-
-#define SC_LIST_MOUNTS 9
-struct mountinfo {
- uint32_t type;
- uint32_t flags;
- char source[20];
- uint32_t source_length;
- char location[20];
- uint32_t location_length;
- uint64_t block_size;
- uint64_t fragment_size;
- uint64_t size_in_fragments;
- uint64_t free_blocks;
- uint64_t free_blocks_user;
- uint64_t inode_count;
- uint64_t free_inodes;
- uint64_t free_inodes_user;
- uint64_t max_filename;
-};
-
-#include <sys/mount.h>
-
-int sys_fstatvfs(int fd, struct statvfs *out) {
- return sys_statvfs("/", out);
-}
-
-int sys_statvfs(const char *path, struct statvfs *out) {
- long ret, errno;
- struct mountinfo *buffer = (mountinfo *)malloc(5 * sizeof(struct mountinfo));
- SYSCALL3(SYSCALL_SYSCONF, SC_LIST_MOUNTS, buffer, 5 * sizeof(struct mountinfo));
- if (errno) {
- free(buffer);
- return errno;
- } else if (ret > 5) {
- free(buffer);
- return 1;
- }
-
- for (int i = 0; i < ret; i++) {
- if (!strncmp(path, buffer[i].location, buffer[i].location_length)) {
- out->f_bsize = buffer[i].block_size;
- out->f_frsize = buffer[i].fragment_size;
- out->f_blocks = buffer[i].size_in_fragments;
- out->f_bfree = buffer[i].free_blocks;
- out->f_bavail = buffer[i].free_blocks_user;
- out->f_files = buffer[i].inode_count;
- out->f_ffree = buffer[i].free_inodes;
- out->f_favail = buffer[i].free_inodes_user;
- out->f_fsid = 0;
- out->f_flag = buffer[i].flags;
- out->f_namemax = buffer[i].max_filename;
- if (buffer[i].type == MNT_EXT) {
- strcpy(out->f_basetype, "ext");
- } else {
- strcpy(out->f_basetype, "fat");
- }
- return 0;
- }
- }
-
- return EINVAL;
-}
-#endif
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/ironclad/generic/mac.cpp b/lib/mlibc/sysdeps/ironclad/generic/mac.cpp
deleted file mode 100644
index 12b63d8..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/mac.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <sys/syscall.h>
-#include <sys/mac.h>
-#include <errno.h>
-#include <string.h>
-
-extern "C" {
-
-unsigned long get_mac_capabilities(void) {
- int ret;
- SYSCALL0(SYSCALL_GET_MAC_CAPABILITIES);
- return ret;
-}
-
-int set_mac_capabilities(unsigned long request) {
- int ret;
- SYSCALL1(SYSCALL_SET_MAC_CAPABILITIES, request);
- return ret;
-}
-
-int add_mac_permissions(const char *path, int flags) {
- int ret;
- SYSCALL3(SYSCALL_ADD_MAC_PERMISSIONS, path, strlen(path), flags);
- return ret;
-}
-
-int set_mac_enforcement(unsigned long enforcement) {
- int ret;
- SYSCALL1(SYSCALL_SET_MAC_ENFORCEMENT, enforcement);
- return ret;
-}
-
-}
diff --git a/lib/mlibc/sysdeps/ironclad/generic/mntent.cpp b/lib/mlibc/sysdeps/ironclad/generic/mntent.cpp
deleted file mode 100644
index d064af3..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/mntent.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <errno.h>
-#include <mntent.h>
-#include <stdio.h>
-#include <limits.h>
-#include <string.h>
-#include <bits/ensure.h>
-
-namespace {
-
-char *internal_buf;
-size_t internal_bufsize;
-
-}
-
-#define SENTINEL (char *)&internal_buf
-
-FILE *setmntent(const char *name, const char *mode) {
- return fopen(name, mode);
-}
-
-struct mntent *getmntent(FILE *f) {
- static struct mntent mnt;
- return getmntent_r(f, &mnt, SENTINEL, 0);
-}
-
-int addmntent(FILE *f, const struct mntent *mnt) {
- if(fseek(f, 0, SEEK_END)) {
- return 1;
- }
- return fprintf(f, "%s\t%s\t%s\t%s\t%d\t%d\n",
- mnt->mnt_fsname, mnt->mnt_dir, mnt->mnt_type, mnt->mnt_opts,
- mnt->mnt_freq, mnt->mnt_passno) < 0;
-}
-
-int endmntent(FILE *f) {
- if(f) {
- fclose(f);
- }
- return 1;
-}
-
-char *hasmntopt(const struct mntent *mnt, const char *opt) {
- return strstr(mnt->mnt_opts, opt);
-}
-
-/* Adapted from musl */
-struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int buflen) {
- int n[8];
- bool use_internal = (linebuf == SENTINEL);
- int len;
- size_t i;
-
- mnt->mnt_freq = 0;
- mnt->mnt_passno = 0;
-
- do {
- if(use_internal) {
- getline(&internal_buf, &internal_bufsize, f);
- linebuf = internal_buf;
- } else {
- fgets(linebuf, buflen, f);
- }
- if(feof(f) || ferror(f)) {
- return 0;
- }
- if(!strchr(linebuf, '\n')) {
- fscanf(f, "%*[^\n]%*[\n]");
- errno = ERANGE;
- return 0;
- }
-
- len = strlen(linebuf);
- if(len > INT_MAX) {
- continue;
- }
-
- for(i = 0; i < sizeof n / sizeof *n; i++) {
- n[i] = len;
- }
-
- sscanf(linebuf, " %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d",
- n, n + 1, n + 2, n + 3, n + 4, n + 5, n + 6, n + 7,
- &mnt->mnt_freq, &mnt->mnt_passno);
- } while(linebuf[n[0]] == '#' || n[1] == len);
-
- linebuf[n[1]] = 0;
- linebuf[n[3]] = 0;
- linebuf[n[5]] = 0;
- linebuf[n[7]] = 0;
-
- mnt->mnt_fsname = linebuf + n[0];
- mnt->mnt_dir = linebuf + n[2];
- mnt->mnt_type = linebuf + n[4];
- mnt->mnt_opts = linebuf + n[6];
-
- return mnt;
-}
diff --git a/lib/mlibc/sysdeps/ironclad/generic/mount.cpp b/lib/mlibc/sysdeps/ironclad/generic/mount.cpp
deleted file mode 100644
index feb6e4c..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/mount.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <errno.h>
-#include <sys/mount.h>
-#include <bits/ensure.h>
-#include <sys/syscall.h>
-#include <string.h>
-
-int mount(const char *source, const char *target, int type, int flags) {
- int ret;
- size_t source_len = strlen(source);
- size_t target_len = strlen(target);
- SYSCALL6(SYSCALL_MOUNT, source, source_len, target, target_len, type, flags);
- return ret;
-}
-
-int umount(const char *target, int flags) {
- int ret;
- size_t target_len = strlen(target);
- SYSCALL3(SYSCALL_UMOUNT, target, target_len, flags);
- return ret;
-}
diff --git a/lib/mlibc/sysdeps/ironclad/generic/ptrace.cpp b/lib/mlibc/sysdeps/ironclad/generic/ptrace.cpp
deleted file mode 100644
index 58a8dd2..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/ptrace.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <sys/syscall.h>
-#include <errno.h>
-#include <sys/ptrace.h>
-
-int ptrace(int request, pid_t pid, void *addr, void *data) {
- int ret;
- SYSCALL4(SYSCALL_PTRACE, request, pid, addr, data);
- return ret;
-}
diff --git a/lib/mlibc/sysdeps/ironclad/generic/pty.cpp b/lib/mlibc/sysdeps/ironclad/generic/pty.cpp
deleted file mode 100644
index 1626e4b..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/pty.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <asm/ioctls.h>
-#include <bits/ensure.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <pty.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/syscall.h>
-#include <sys/ioctl.h>
-
-int openpty(int *mfd, int *sfd, char *name, const struct termios *ios, const struct winsize *win) {
- int ret;
- int fds[2];
- SYSCALL1(SYSCALL_OPENPTY, fds);
- if (errno) {
- return -1;
- }
- *mfd = fds[0];
- *sfd = fds[1];
-
- if (name != NULL) {
- ret = ttyname_r(*mfd, name, (size_t)-1);
- if (ret) {
- return -1;
- }
- }
- if (ios != NULL) {
- ret = tcsetattr(*mfd, TCSANOW, ios);
- if (ret) {
- return -1;
- }
- }
- if (win != NULL) {
- ret = ioctl(*mfd, TIOCGWINSZ, win);
- if (ret) {
- return -1;
- }
- }
- return ret;
-}
diff --git a/lib/mlibc/sysdeps/ironclad/generic/reboot.cpp b/lib/mlibc/sysdeps/ironclad/generic/reboot.cpp
deleted file mode 100644
index 45e8f03..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/reboot.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <errno.h>
-#include <sys/reboot.h>
-#include <sys/syscall.h>
-
-int reboot(int what) {
- int ret, errno;
- SYSCALL2(SYSCALL_REBOOT, what, 0);
- return ret;
-}
diff --git a/lib/mlibc/sysdeps/ironclad/generic/sched2.cpp b/lib/mlibc/sysdeps/ironclad/generic/sched2.cpp
deleted file mode 100644
index 9699517..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/sched2.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <sys/syscall.h>
-#include <sys/sched2.h>
-#include <errno.h>
-#include <string.h>
-
-extern "C" {
-
-int get_thread_sched(void) {
- return 0;
-}
-
-int set_thread_sched(int flags) {
- return 0;
-}
-
-int set_deadlines(int runtime, int period) {
- return 0;
-}
-
-}
diff --git a/lib/mlibc/sysdeps/ironclad/generic/thread.S b/lib/mlibc/sysdeps/ironclad/generic/thread.S
deleted file mode 100644
index 47ab6a9..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/thread.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .text
-.global __mlibc_thread_entry
-__mlibc_thread_entry:
- pop %rdi
- pop %rsi
- pop %rdx
- call __mlibc_thread_trampoline
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/ironclad/generic/thread.cpp b/lib/mlibc/sysdeps/ironclad/generic/thread.cpp
deleted file mode 100644
index 1b2f040..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/thread.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <sys/mman.h>
-#include <mlibc/debug.hpp>
-#include <errno.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <bits/ensure.h>
-#include <mlibc/tcb.hpp>
-
-extern "C" void __mlibc_thread_trampoline(void *(*fn)(void *), Tcb *tcb, void *arg) {
- while (__atomic_load_n(&tcb->tid, __ATOMIC_RELAXED) == 0) {
- mlibc::sys_futex_wait(&tcb->tid, 0, nullptr);
- }
-
- tcb->invokeThreadFunc(reinterpret_cast<void *>(fn), arg);
-
- __atomic_store_n(&tcb->didExit, 1, __ATOMIC_RELEASE);
- mlibc::sys_futex_wake(&tcb->didExit);
-
- mlibc::sys_thread_exit();
-}
-
-#define DEFAULT_STACK 0x20000
-
-namespace mlibc {
- int sys_prepare_stack(void **stack, void *entry, void *arg, void *tcb, size_t *stack_size, size_t *guard_size, void **stack_base) {
- // TODO guard
-
- mlibc::infoLogger() << "mlibc: sys_prepare_stack() does not setup a guard!" << frg::endlog;
-
- *guard_size = 0;
-
- *stack_size = *stack_size ? *stack_size : DEFAULT_STACK;
-
- if (!*stack) {
- *stack_base = mmap(NULL, *stack_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
- if (*stack_base == MAP_FAILED) {
- return errno;
- }
- } else {
- *stack_base = *stack;
- }
-
- *stack = (void *)((char *)*stack_base + *stack_size);
-
- void **stack_it = (void **)*stack;
-
- *--stack_it = arg;
- *--stack_it = tcb;
- *--stack_it = entry;
-
- *stack = (void *)stack_it;
-
- return 0;
- }
-}
diff --git a/lib/mlibc/sysdeps/ironclad/generic/utmpx.cpp b/lib/mlibc/sysdeps/ironclad/generic/utmpx.cpp
deleted file mode 100644
index ec74e22..0000000
--- a/lib/mlibc/sysdeps/ironclad/generic/utmpx.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <bits/ensure.h>
-#include <stddef.h>
-#include <errno.h>
-#include <utmpx.h>
-#include <stdio.h>
-#include <time.h>
-#include <paths.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-int utmpx_file = -1;
-
-void updwtmpx(const char *, const struct utmpx *) {
- // Empty as musl does
-}
-
-void endutxent(void) {
- if (utmpx_file >= 0) {
- close(utmpx_file);
- }
-}
-
-void setutxent(void) {
- if (utmpx_file < 0) {
- utmpx_file = open(UTMPX_FILE, O_RDWR | O_CREAT, 0755);
- } else {
- lseek(utmpx_file, 0, SEEK_SET);
- }
-}
-
-struct utmpx returned;
-
-struct utmpx *getutxent(void) {
- if (utmpx_file < 0) {
- setutxent();
- if (utmpx_file < 0) {
- return NULL;
- }
- }
-
- if (read(utmpx_file, &returned, sizeof(struct utmpx)) != sizeof(struct utmpx)) {
- return NULL;
- }
-
- return &returned;
-}
-
-struct utmpx *pututxline(const struct utmpx *added) {
- if (utmpx_file < 0) {
- setutxent();
- if (utmpx_file < 0) {
- return NULL;
- }
- }
-
- lseek(utmpx_file, 0, SEEK_END);
- if (write(utmpx_file, added, sizeof(struct utmpx)) != sizeof(struct utmpx)) {
- return NULL;
- }
-
- return (struct utmpx *)added;
-}
-
-int utmpxname(const char *path) {
- if (utmpx_file > 0) {
- close(utmpx_file);
- }
-
- utmpx_file = open(path, O_RDWR | O_CREAT, 0755);
- if (utmpx_file > 0) {
- lseek(utmpx_file, 0, SEEK_END);
- return 1;
- } else {
- return 0;
- }
-}
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/access.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/access.h
deleted file mode 120000
index 8f0556a..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/access.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/access.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/auxv.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/auxv.h
deleted file mode 120000
index f9be899..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/auxv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/auxv.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/blkcnt_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/blkcnt_t.h
deleted file mode 120000
index 02c7cf3..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/blkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/blkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/blksize_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/blksize_t.h
deleted file mode 120000
index 1745393..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/blksize_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/blksize_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/clockid_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/clockid_t.h
deleted file mode 120000
index b05d507..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/clockid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/clockid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/dev_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/dev_t.h
deleted file mode 120000
index e403f5b..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/dev_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/dev_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/epoll.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/epoll.h
deleted file mode 120000
index 0364554..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/epoll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/epoll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/errno.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/errno.h
deleted file mode 120000
index ec9b8f6..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/errno.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/errno.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/fcntl.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/fcntl.h
deleted file mode 120000
index c60789c..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/fcntl.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/fsblkcnt_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/fsblkcnt_t.h
deleted file mode 120000
index c5e0d6a..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/fsblkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/fsblkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/fsfilcnt_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/fsfilcnt_t.h
deleted file mode 120000
index b8925b8..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/fsfilcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/fsfilcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/gid_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/gid_t.h
deleted file mode 120000
index 1ee9676..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/gid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/gid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/in.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/in.h
deleted file mode 120000
index e10e010..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/in.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/in.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/ino_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/ino_t.h
deleted file mode 120000
index 8da8d60..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/ino_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/ino_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/inotify.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/inotify.h
deleted file mode 120000
index 95578b0..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/inotify.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/inotify.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/ioctls.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/ioctls.h
deleted file mode 120000
index d532c47..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/ioctls.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/ioctls.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/limits.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/limits.h
deleted file mode 120000
index 9f4938c..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/limits.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/limits.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/mode_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/mode_t.h
deleted file mode 120000
index 47764b7..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/mode_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/mode_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/mqueue.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/mqueue.h
deleted file mode 120000
index 394c37d..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/mqueue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/mqueue.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/msg.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/msg.h
deleted file mode 120000
index 7c59866..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/msg.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/msg.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/nlink_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/nlink_t.h
deleted file mode 120000
index a5c8e25..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/nlink_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/nlink_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/packet.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/packet.h
deleted file mode 120000
index 5a7a333..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/packet.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/packet.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/pid_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/pid_t.h
deleted file mode 120000
index 36e4068..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/pid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/pid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/poll.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/poll.h
deleted file mode 120000
index 156ddd9..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/poll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/poll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/ptrace.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/ptrace.h
deleted file mode 120000
index 1260bf7..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/ptrace.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/ptrace.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/reboot.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/reboot.h
deleted file mode 120000
index 23c9af3..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/reboot.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/reboot.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/resource.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/resource.h
deleted file mode 120000
index e950420..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/resource.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/seek-whence.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/seek-whence.h
deleted file mode 120000
index fbd0a8f..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/seek-whence.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/seek-whence.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/shm.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/shm.h
deleted file mode 120000
index f20c4fc..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/shm.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/shm.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/signal.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/signal.h
deleted file mode 120000
index ae8aa10..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/signal.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/signal.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/socket.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/socket.h
deleted file mode 120000
index 5ddea1c..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/socket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/socket.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/socklen_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/socklen_t.h
deleted file mode 120000
index 7db34a4..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/socklen_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/socklen_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/stat.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/stat.h
deleted file mode 120000
index a307c32..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/stat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/stat.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/statfs.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/statfs.h
deleted file mode 120000
index bc1f622..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/statfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/statfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/statvfs.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/statvfs.h
deleted file mode 120000
index e0b90f0..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/statvfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/statvfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/suseconds_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/suseconds_t.h
deleted file mode 120000
index 88197dd..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/suseconds_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/suseconds_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/termios.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/termios.h
deleted file mode 120000
index a6bacb3..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/termios.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/termios.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/time.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/time.h
deleted file mode 120000
index fa8e486..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/time.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/time.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/uid_t.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/uid_t.h
deleted file mode 120000
index 1aebbe3..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/uid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/uid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/utsname.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/utsname.h
deleted file mode 120000
index 0a5dbc8..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/utsname.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/utsname.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/vm-flags.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/vm-flags.h
deleted file mode 120000
index 6dc4788..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/vm-flags.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/vm-flags.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/wait.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/wait.h
deleted file mode 120000
index a87457d..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/wait.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/wait.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/abi-bits/xattr.h b/lib/mlibc/sysdeps/ironclad/include/abi-bits/xattr.h
deleted file mode 120000
index 99e5aa3..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/abi-bits/xattr.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/ironclad/xattr.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/ironclad/include/asm/ioctls.h b/lib/mlibc/sysdeps/ironclad/include/asm/ioctls.h
deleted file mode 100644
index aa9f0b4..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/asm/ioctls.h
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef _ASM_IOCTLS_H
-#define _ASM_IOCTLS_H
-
-// List of all the IOCTLs supported, for further explanation on the meanings
-// please refer to documentation. If you did not get any, good luck!
-// Some IOCTL codes may be the same, in which case the device they are used in
-// gives them meaning. Cross-device IOCTLs have more distinct values.
-
-#define PS2MOUSE_2_1_SCALING 1
-#define PS2MOUSE_1_1_SCALING 2
-#define PS2MOUSE_SET_RES 3
-#define PS2MOUSE_SET_SAMPLE_RATE 4
-#define RTC_RD_TIME 1
-#define RTC_SET_TIME 2
-#define FIOQSIZE 0x5460
-#define TCGETS 0x5401
-#define TCSETS 0x5402
-#define TCSETSW 0x5403
-#define TCSETSF 0x5404
-#define TCGETA 0x5405
-#define TCSETA 0x5406
-#define TCSETAW 0x5407
-#define TCSETAF 0x5408
-#define TCSBRK 0x5409
-#define TCXONC 0x540A
-#define TCFLSH 0x540B
-#define TIOCEXCL 0x540C
-#define TIOCNXCL 0x540D
-#define TIOCSCTTY 0x540E
-#define TIOCGPGRP 0x540F
-#define TIOCSPGRP 0x5410
-#define TIOCOUTQ 0x5411
-#define TIOCSTI 0x5412
-#define TIOCGWINSZ 0x5413
-#define TIOCSWINSZ 0x5414
-#define TIOCMGET 0x5415
-#define TIOCMBIS 0x5416
-#define TIOCMBIC 0x5417
-#define TIOCMSET 0x5418
-#define TIOCGSOFTCAR 0x5419
-#define TIOCSSOFTCAR 0x541A
-#define FIONREAD 0x541B
-#define TIOCINQ FIONREAD
-#define TIOCLINUX 0x541C
-#define TIOCCONS 0x541D
-#define TIOCGSERIAL 0x541E
-#define TIOCSSERIAL 0x541F
-#define TIOCPKT 0x5420
-#define FIONBIO 0x5421
-#define TIOCNOTTY 0x5422
-#define TIOCSETD 0x5423
-#define TIOCGETD 0x5424
-#define TCSBRKP 0x5425
-#define TIOCSBRK 0x5427
-#define TIOCCBRK 0x5428
-#define TIOCGSID 0x5429
-#define TCGETS2 3
-#define TCSETS2 3
-#define TCSETSW2 3
-#define TCSETSF2 3
-#define TIOCGRS485 0x542E
-#define TIOCSRS485 0x542F
-#define TIOCGPTN 3
-#define TIOCSPTLCK 3
-#define TIOCGDEV 3
-#define TCGETX 0x5432
-#define TCSETX 0x5433
-#define TCSETXF 0x5434
-#define TCSETXW 0x5435
-#define TIOCSIG 0x36
-#define TIOCVHANGUP 0x5437
-#define TIOCGPKT 3
-#define TIOCGPTLCK 3
-#define TIOCGEXCL 3
-#define TIOCGPTPEER 3
-#define TIOCGISO7816 3
-#define TIOCSISO7816 3
-#define FIONCLEX 0x5450
-#define FIOCLEX 0x5451
-#define FIOASYNC 0x5452
-#define TIOCSERCONFIG 0x5453
-#define TIOCSERGWILD 0x5454
-#define TIOCSERSWILD 0x5455
-#define TIOCGLCKTRMIOS 0x5456
-#define TIOCSLCKTRMIOS 0x5457
-#define TIOCSERGSTRUCT 0x5458
-#define TIOCSERGETLSR 0x5459
-#define TIOCSERGETMULTI 0x545A
-#define TIOCSERSETMULTI 0x545B
-#define TIOCMIWAIT 0x545C
-#define TIOCGICOUNT 0x545D
-#define TIOCPKT_DATA 0
-#define TIOCPKT_FLUSHREAD 1
-#define TIOCPKT_FLUSHWRITE 2
-#define TIOCPKT_STOP 4
-#define TIOCPKT_START 8
-#define TIOCPKT_NOSTOP 16
-#define TIOCPKT_DOSTOP 32
-#define TIOCPKT_IOCTL 64
-#define TIOCSER_TEMT 0x01
-
-#endif /* _ASM_IOCTLS_H */
diff --git a/lib/mlibc/sysdeps/ironclad/include/linux/fb.h b/lib/mlibc/sysdeps/ironclad/include/linux/fb.h
deleted file mode 100644
index 563ce82..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/linux/fb.h
+++ /dev/null
@@ -1,397 +0,0 @@
-#ifndef _SYS_FB_H
-#define _SYS_FB_H
-
-#include <stddef.h>
-
-/* Definitions of frame buffers */
-
-#define FB_MAX 32 /* sufficient for now */
-
-/* ioctls
- 0x46 is 'F' */
-#define FBIOGET_VSCREENINFO 0x4600
-#define FBIOPUT_VSCREENINFO 0x4601
-#define FBIOGET_FSCREENINFO 0x4602
-#define FBIOGETCMAP 0x4604
-#define FBIOPUTCMAP 0x4605
-#define FBIOPAN_DISPLAY 0x4606
-#define FBIO_CURSOR _IOWR('F', 0x08, struct fb_cursor)
-/* 0x4607-0x460B are defined below */
-/* #define FBIOGET_MONITORSPEC 0x460C */
-/* #define FBIOPUT_MONITORSPEC 0x460D */
-/* #define FBIOSWITCH_MONIBIT 0x460E */
-#define FBIOGET_CON2FBMAP 0x460F
-#define FBIOPUT_CON2FBMAP 0x4610
-#define FBIOBLANK 0x4611 /* arg: 0 or vesa level + 1 */
-#define FBIOGET_VBLANK _IOR('F', 0x12, struct fb_vblank)
-#define FBIO_ALLOC 0x4613
-#define FBIO_FREE 0x4614
-#define FBIOGET_GLYPH 0x4615
-#define FBIOGET_HWCINFO 0x4616
-#define FBIOPUT_MODEINFO 0x4617
-#define FBIOGET_DISPINFO 0x4618
-
-#define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */
-#define FB_TYPE_PLANES 1 /* Non interleaved planes */
-#define FB_TYPE_INTERLEAVED_PLANES 2 /* Interleaved planes */
-#define FB_TYPE_TEXT 3 /* Text/attributes */
-#define FB_TYPE_VGA_PLANES 4 /* EGA/VGA planes */
-#define FB_TYPE_FOURCC 5 /* Type identified by a V4L2 FOURCC */
-
-#define FB_AUX_TEXT_MDA 0 /* Monochrome text */
-#define FB_AUX_TEXT_CGA 1 /* CGA/EGA/VGA Color text */
-#define FB_AUX_TEXT_S3_MMIO 2 /* S3 MMIO fasttext */
-#define FB_AUX_TEXT_MGA_STEP16 3 /* MGA Millenium I: text, attr, 14 reserved bytes */
-#define FB_AUX_TEXT_MGA_STEP8 4 /* other MGAs: text, attr, 6 reserved bytes */
-#define FB_AUX_TEXT_SVGA_GROUP 8 /* 8-15: SVGA tileblit compatible modes */
-#define FB_AUX_TEXT_SVGA_MASK 7 /* lower three bits says step */
-#define FB_AUX_TEXT_SVGA_STEP2 8 /* SVGA text mode: text, attr */
-#define FB_AUX_TEXT_SVGA_STEP4 9 /* SVGA text mode: text, attr, 2 reserved bytes */
-#define FB_AUX_TEXT_SVGA_STEP8 10 /* SVGA text mode: text, attr, 6 reserved bytes */
-#define FB_AUX_TEXT_SVGA_STEP16 11 /* SVGA text mode: text, attr, 14 reserved bytes */
-#define FB_AUX_TEXT_SVGA_LAST 15 /* reserved up to 15 */
-
-#define FB_AUX_VGA_PLANES_VGA4 0 /* 16 color planes (EGA/VGA) */
-#define FB_AUX_VGA_PLANES_CFB4 1 /* CFB4 in planes (VGA) */
-#define FB_AUX_VGA_PLANES_CFB8 2 /* CFB8 in planes (VGA) */
-
-#define FB_VISUAL_MONO01 0 /* Monochr. 1=Black 0=White */
-#define FB_VISUAL_MONO10 1 /* Monochr. 1=White 0=Black */
-#define FB_VISUAL_TRUECOLOR 2 /* True color */
-#define FB_VISUAL_PSEUDOCOLOR 3 /* Pseudo color (like atari) */
-#define FB_VISUAL_DIRECTCOLOR 4 /* Direct color */
-#define FB_VISUAL_STATIC_PSEUDOCOLOR 5 /* Pseudo color readonly */
-#define FB_VISUAL_FOURCC 6 /* Visual identified by a V4L2 FOURCC */
-
-#define FB_ACCEL_NONE 0 /* no hardware accelerator */
-#define FB_ACCEL_ATARIBLITT 1 /* Atari Blitter */
-#define FB_ACCEL_AMIGABLITT 2 /* Amiga Blitter */
-#define FB_ACCEL_S3_TRIO64 3 /* Cybervision64 (S3 Trio64) */
-#define FB_ACCEL_NCR_77C32BLT 4 /* RetinaZ3 (NCR 77C32BLT) */
-#define FB_ACCEL_S3_VIRGE 5 /* Cybervision64/3D (S3 ViRGE) */
-#define FB_ACCEL_ATI_MACH64GX 6 /* ATI Mach 64GX family */
-#define FB_ACCEL_DEC_TGA 7 /* DEC 21030 TGA */
-#define FB_ACCEL_ATI_MACH64CT 8 /* ATI Mach 64CT family */
-#define FB_ACCEL_ATI_MACH64VT 9 /* ATI Mach 64CT family VT class */
-#define FB_ACCEL_ATI_MACH64GT 10 /* ATI Mach 64CT family GT class */
-#define FB_ACCEL_SUN_CREATOR 11 /* Sun Creator/Creator3D */
-#define FB_ACCEL_SUN_CGSIX 12 /* Sun cg6 */
-#define FB_ACCEL_SUN_LEO 13 /* Sun leo/zx */
-#define FB_ACCEL_IMS_TWINTURBO 14 /* IMS Twin Turbo */
-#define FB_ACCEL_3DLABS_PERMEDIA2 15 /* 3Dlabs Permedia 2 */
-#define FB_ACCEL_MATROX_MGA2064W 16 /* Matrox MGA2064W (Millenium) */
-#define FB_ACCEL_MATROX_MGA1064SG 17 /* Matrox MGA1064SG (Mystique) */
-#define FB_ACCEL_MATROX_MGA2164W 18 /* Matrox MGA2164W (Millenium II) */
-#define FB_ACCEL_MATROX_MGA2164W_AGP 19 /* Matrox MGA2164W (Millenium II) */
-#define FB_ACCEL_MATROX_MGAG100 20 /* Matrox G100 (Productiva G100) */
-#define FB_ACCEL_MATROX_MGAG200 21 /* Matrox G200 (Myst, Mill, ...) */
-#define FB_ACCEL_SUN_CG14 22 /* Sun cgfourteen */
-#define FB_ACCEL_SUN_BWTWO 23 /* Sun bwtwo */
-#define FB_ACCEL_SUN_CGTHREE 24 /* Sun cgthree */
-#define FB_ACCEL_SUN_TCX 25 /* Sun tcx */
-#define FB_ACCEL_MATROX_MGAG400 26 /* Matrox G400 */
-#define FB_ACCEL_NV3 27 /* nVidia RIVA 128 */
-#define FB_ACCEL_NV4 28 /* nVidia RIVA TNT */
-#define FB_ACCEL_NV5 29 /* nVidia RIVA TNT2 */
-#define FB_ACCEL_CT_6555x 30 /* C&T 6555x */
-#define FB_ACCEL_3DFX_BANSHEE 31 /* 3Dfx Banshee */
-#define FB_ACCEL_ATI_RAGE128 32 /* ATI Rage128 family */
-#define FB_ACCEL_IGS_CYBER2000 33 /* CyberPro 2000 */
-#define FB_ACCEL_IGS_CYBER2010 34 /* CyberPro 2010 */
-#define FB_ACCEL_IGS_CYBER5000 35 /* CyberPro 5000 */
-#define FB_ACCEL_SIS_GLAMOUR 36 /* SiS 300/630/540 */
-#define FB_ACCEL_3DLABS_PERMEDIA3 37 /* 3Dlabs Permedia 3 */
-#define FB_ACCEL_ATI_RADEON 38 /* ATI Radeon family */
-#define FB_ACCEL_I810 39 /* Intel 810/815 */
-#define FB_ACCEL_SIS_GLAMOUR_2 40 /* SiS 315, 650, 740 */
-#define FB_ACCEL_SIS_XABRE 41 /* SiS 330 ("Xabre") */
-#define FB_ACCEL_I830 42 /* Intel 830M/845G/85x/865G */
-#define FB_ACCEL_NV_10 43 /* nVidia Arch 10 */
-#define FB_ACCEL_NV_20 44 /* nVidia Arch 20 */
-#define FB_ACCEL_NV_30 45 /* nVidia Arch 30 */
-#define FB_ACCEL_NV_40 46 /* nVidia Arch 40 */
-#define FB_ACCEL_XGI_VOLARI_V 47 /* XGI Volari V3XT, V5, V8 */
-#define FB_ACCEL_XGI_VOLARI_Z 48 /* XGI Volari Z7 */
-#define FB_ACCEL_OMAP1610 49 /* TI OMAP16xx */
-#define FB_ACCEL_TRIDENT_TGUI 50 /* Trident TGUI */
-#define FB_ACCEL_TRIDENT_3DIMAGE 51 /* Trident 3DImage */
-#define FB_ACCEL_TRIDENT_BLADE3D 52 /* Trident Blade3D */
-#define FB_ACCEL_TRIDENT_BLADEXP 53 /* Trident BladeXP */
-#define FB_ACCEL_CIRRUS_ALPINE 53 /* Cirrus Logic 543x/544x/5480 */
-#define FB_ACCEL_NEOMAGIC_NM2070 90 /* NeoMagic NM2070 */
-#define FB_ACCEL_NEOMAGIC_NM2090 91 /* NeoMagic NM2090 */
-#define FB_ACCEL_NEOMAGIC_NM2093 92 /* NeoMagic NM2093 */
-#define FB_ACCEL_NEOMAGIC_NM2097 93 /* NeoMagic NM2097 */
-#define FB_ACCEL_NEOMAGIC_NM2160 94 /* NeoMagic NM2160 */
-#define FB_ACCEL_NEOMAGIC_NM2200 95 /* NeoMagic NM2200 */
-#define FB_ACCEL_NEOMAGIC_NM2230 96 /* NeoMagic NM2230 */
-#define FB_ACCEL_NEOMAGIC_NM2360 97 /* NeoMagic NM2360 */
-#define FB_ACCEL_NEOMAGIC_NM2380 98 /* NeoMagic NM2380 */
-#define FB_ACCEL_PXA3XX 99 /* PXA3xx */
-
-#define FB_ACCEL_SAVAGE4 0x80 /* S3 Savage4 */
-#define FB_ACCEL_SAVAGE3D 0x81 /* S3 Savage3D */
-#define FB_ACCEL_SAVAGE3D_MV 0x82 /* S3 Savage3D-MV */
-#define FB_ACCEL_SAVAGE2000 0x83 /* S3 Savage2000 */
-#define FB_ACCEL_SAVAGE_MX_MV 0x84 /* S3 Savage/MX-MV */
-#define FB_ACCEL_SAVAGE_MX 0x85 /* S3 Savage/MX */
-#define FB_ACCEL_SAVAGE_IX_MV 0x86 /* S3 Savage/IX-MV */
-#define FB_ACCEL_SAVAGE_IX 0x87 /* S3 Savage/IX */
-#define FB_ACCEL_PROSAVAGE_PM 0x88 /* S3 ProSavage PM133 */
-#define FB_ACCEL_PROSAVAGE_KM 0x89 /* S3 ProSavage KM133 */
-#define FB_ACCEL_S3TWISTER_P 0x8a /* S3 Twister */
-#define FB_ACCEL_S3TWISTER_K 0x8b /* S3 TwisterK */
-#define FB_ACCEL_SUPERSAVAGE 0x8c /* S3 Supersavage */
-#define FB_ACCEL_PROSAVAGE_DDR 0x8d /* S3 ProSavage DDR */
-#define FB_ACCEL_PROSAVAGE_DDRK 0x8e /* S3 ProSavage DDR-K */
-
-#define FB_ACCEL_PUV3_UNIGFX 0xa0 /* PKUnity-v3 Unigfx */
-
-#define FB_CAP_FOURCC 1 /* Device supports FOURCC-based formats */
-
-struct fb_fix_screeninfo {
- char id[16]; /* identification string eg "TT Builtin" */
- unsigned long smem_start; /* Start of frame buffer mem */
- /* (physical address) */
- uint32_t smem_len; /* Length of frame buffer mem */
- uint32_t type; /* see FB_TYPE_* */
- uint32_t type_aux; /* Interleave for interleaved Planes */
- uint32_t visual; /* see FB_VISUAL_* */
- uint16_t xpanstep; /* zero if no hardware panning */
- uint16_t ypanstep; /* zero if no hardware panning */
- uint16_t ywrapstep; /* zero if no hardware ywrap */
- uint32_t line_length; /* length of a line in bytes */
- unsigned long mmio_start; /* Start of Memory Mapped I/O */
- /* (physical address) */
- uint32_t mmio_len; /* Length of Memory Mapped I/O */
- uint32_t accel; /* Indicate to driver which */
- /* specific chip/card we have */
- uint16_t capabilities; /* see FB_CAP_* */
- uint16_t reserved[2]; /* Reserved for future compatibility */
-};
-
-/* Interpretation of offset for color fields: All offsets are from the right,
- * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
- * can use the offset as right argument to <<). A pixel afterwards is a bit
- * stream and is written to video memory as that unmodified.
- *
- * For pseudocolor: offset and length should be the same for all color
- * components. Offset specifies the position of the least significant bit
- * of the palette index in a pixel value. Length indicates the number
- * of available palette entries (i.e. # of entries = 1 << length).
- */
-struct fb_bitfield {
- uint32_t offset; /* beginning of bitfield */
- uint32_t length; /* length of bitfield */
- uint32_t msb_right; /* != 0 : Most significant bit is */
- /* right */
-};
-
-#define FB_NONSTD_HAM 1 /* Hold-And-Modify (HAM) */
-#define FB_NONSTD_REV_PIX_IN_B 2 /* order of pixels in each byte is reversed */
-
-#define FB_ACTIVATE_NOW 0 /* set values immediately (or vbl)*/
-#define FB_ACTIVATE_NXTOPEN 1 /* activate on next open */
-#define FB_ACTIVATE_TEST 2 /* don't set, round up impossible */
-#define FB_ACTIVATE_MASK 15
- /* values */
-#define FB_ACTIVATE_VBL 16 /* activate values on next vbl */
-#define FB_CHANGE_CMAP_VBL 32 /* change colormap on vbl */
-#define FB_ACTIVATE_ALL 64 /* change all VCs on this fb */
-#define FB_ACTIVATE_FORCE 128 /* force apply even when no change*/
-#define FB_ACTIVATE_INV_MODE 256 /* invalidate videomode */
-#define FB_ACTIVATE_KD_TEXT 512 /* for KDSET vt ioctl */
-
-#define FB_ACCELF_TEXT 1 /* (OBSOLETE) see fb_info.flags and vc_mode */
-
-#define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */
-#define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */
-#define FB_SYNC_EXT 4 /* external sync */
-#define FB_SYNC_COMP_HIGH_ACT 8 /* composite sync high active */
-#define FB_SYNC_BROADCAST 16 /* broadcast video timings */
- /* vtotal = 144d/288n/576i => PAL */
- /* vtotal = 121d/242n/484i => NTSC */
-#define FB_SYNC_ON_GREEN 32 /* sync on green */
-
-#define FB_VMODE_NONINTERLACED 0 /* non interlaced */
-#define FB_VMODE_INTERLACED 1 /* interlaced */
-#define FB_VMODE_DOUBLE 2 /* double scan */
-#define FB_VMODE_ODD_FLD_FIRST 4 /* interlaced: top line first */
-#define FB_VMODE_MASK 255
-
-#define FB_VMODE_YWRAP 256 /* ywrap instead of panning */
-#define FB_VMODE_SMOOTH_XPAN 512 /* smooth xpan possible (internally used) */
-#define FB_VMODE_CONUPDATE 512 /* don't update x/yoffset */
-
-/*
- * Display rotation support
- */
-#define FB_ROTATE_UR 0
-#define FB_ROTATE_CW 1
-#define FB_ROTATE_UD 2
-#define FB_ROTATE_CCW 3
-
-#define PICOS2KHZ(a) (1000000000UL/(a))
-#define KHZ2PICOS(a) (1000000000UL/(a))
-
-struct fb_var_screeninfo {
- uint32_t xres; /* visible resolution */
- uint32_t yres;
- uint32_t xres_virtual; /* virtual resolution */
- uint32_t yres_virtual;
- uint32_t xoffset; /* offset from virtual to visible */
- uint32_t yoffset; /* resolution */
-
- uint32_t bits_per_pixel; /* guess what */
- uint32_t grayscale; /* 0 = color, 1 = grayscale, */
- /* >1 = FOURCC */
- struct fb_bitfield red; /* bitfield in fb mem if true color, */
- struct fb_bitfield green; /* else only length is significant */
- struct fb_bitfield blue;
- struct fb_bitfield transp; /* transparency */
-
- uint32_t nonstd; /* != 0 Non standard pixel format */
-
- uint32_t activate; /* see FB_ACTIVATE_* */
-
- uint32_t height; /* height of picture in mm */
- uint32_t width; /* width of picture in mm */
-
- uint32_t accel_flags; /* (OBSOLETE) see fb_info.flags */
-
- /* Timing: All values in pixclocks, except pixclock (of course) */
- uint32_t pixclock; /* pixel clock in ps (pico seconds) */
- uint32_t left_margin; /* time from sync to picture */
- uint32_t right_margin; /* time from picture to sync */
- uint32_t upper_margin; /* time from sync to picture */
- uint32_t lower_margin;
- uint32_t hsync_len; /* length of horizontal sync */
- uint32_t vsync_len; /* length of vertical sync */
- uint32_t sync; /* see FB_SYNC_* */
- uint32_t vmode; /* see FB_VMODE_* */
- uint32_t rotate; /* angle we rotate counter clockwise */
- uint32_t colorspace; /* colorspace for FOURCC-based modes */
- uint32_t reserved[4]; /* Reserved for future compatibility */
-};
-
-struct fb_cmap {
- uint32_t start; /* First entry */
- uint32_t len; /* Number of entries */
- uint16_t *red; /* Red values */
- uint16_t *green;
- uint16_t *blue;
- uint16_t *transp; /* transparency, can be NULL */
-};
-
-struct fb_con2fbmap {
- uint32_t console;
- uint32_t framebuffer;
-};
-
-/* VESA Blanking Levels */
-#define VESA_NO_BLANKING 0
-#define VESA_VSYNC_SUSPEND 1
-#define VESA_HSYNC_SUSPEND 2
-#define VESA_POWERDOWN 3
-
-
-enum {
- /* screen: unblanked, hsync: on, vsync: on */
- FB_BLANK_UNBLANK = VESA_NO_BLANKING,
-
- /* screen: blanked, hsync: on, vsync: on */
- FB_BLANK_NORMAL = VESA_NO_BLANKING + 1,
-
- /* screen: blanked, hsync: on, vsync: off */
- FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1,
-
- /* screen: blanked, hsync: off, vsync: on */
- FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1,
-
- /* screen: blanked, hsync: off, vsync: off */
- FB_BLANK_POWERDOWN = VESA_POWERDOWN + 1
-};
-
-#define FB_VBLANK_VBLANKING 0x001 /* currently in a vertical blank */
-#define FB_VBLANK_HBLANKING 0x002 /* currently in a horizontal blank */
-#define FB_VBLANK_HAVE_VBLANK 0x004 /* vertical blanks can be detected */
-#define FB_VBLANK_HAVE_HBLANK 0x008 /* horizontal blanks can be detected */
-#define FB_VBLANK_HAVE_COUNT 0x010 /* global retrace counter is available */
-#define FB_VBLANK_HAVE_VCOUNT 0x020 /* the vcount field is valid */
-#define FB_VBLANK_HAVE_HCOUNT 0x040 /* the hcount field is valid */
-#define FB_VBLANK_VSYNCING 0x080 /* currently in a vsync */
-#define FB_VBLANK_HAVE_VSYNC 0x100 /* verical syncs can be detected */
-
-struct fb_vblank {
- uint32_t flags; /* FB_VBLANK flags */
- uint32_t count; /* counter of retraces since boot */
- uint32_t vcount; /* current scanline position */
- uint32_t hcount; /* current scandot position */
- uint32_t reserved[4]; /* reserved for future compatibility */
-};
-
-/* Internal HW accel */
-#define ROP_COPY 0
-#define ROP_XOR 1
-
-struct fb_copyarea {
- uint32_t dx;
- uint32_t dy;
- uint32_t width;
- uint32_t height;
- uint32_t sx;
- uint32_t sy;
-};
-
-struct fb_fillrect {
- uint32_t dx; /* screen-relative */
- uint32_t dy;
- uint32_t width;
- uint32_t height;
- uint32_t color;
- uint32_t rop;
-};
-
-struct fb_image {
- uint32_t dx; /* Where to place image */
- uint32_t dy;
- uint32_t width; /* Size of image */
- uint32_t height;
- uint32_t fg_color; /* Only used when a mono bitmap */
- uint32_t bg_color;
- uint8_t depth; /* Depth of the image */
- const char *data; /* Pointer to image data */
- struct fb_cmap cmap; /* color map info */
-};
-
-/*
- * hardware cursor control
- */
-
-#define FB_CUR_SETIMAGE 0x01
-#define FB_CUR_SETPOS 0x02
-#define FB_CUR_SETHOT 0x04
-#define FB_CUR_SETCMAP 0x08
-#define FB_CUR_SETSHAPE 0x10
-#define FB_CUR_SETSIZE 0x20
-#define FB_CUR_SETALL 0xFF
-
-struct fbcurpos {
- uint16_t x, y;
-};
-
-struct fb_cursor {
- uint16_t set; /* what to set */
- uint16_t enable; /* cursor on/off */
- uint16_t rop; /* bitop operation */
- const char *mask; /* cursor mask bits */
- struct fbcurpos hot; /* cursor hot spot */
- struct fb_image image; /* Cursor image */
-};
-
-/* Settings for the generic backlight code */
-#define FB_BACKLIGHT_LEVELS 128
-#define FB_BACKLIGHT_MAX 0xFF
-
-
-#endif /* _SYS_FB_H */
diff --git a/lib/mlibc/sysdeps/ironclad/include/mntent.h b/lib/mlibc/sysdeps/ironclad/include/mntent.h
deleted file mode 100644
index e5e49e7..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/mntent.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef _MNTENT_H
-#define _MNTENT_H
-
-#include <stdio.h>
-
-// TODO: Refer to _PATH_MOUNTED
-#define MOUNTED "/etc/mtab"
-
-/* Generic mount options */
-#define MNTOPT_DEFAULTS "defaults" /* Use all default options. */
-#define MNTOPT_RO "ro" /* Read only. */
-#define MNTOPT_RW "rw" /* Read/write. */
-#define MNTOPT_SUID "suid" /* Set uid allowed. */
-#define MNTOPT_NOSUID "nosuid" /* No set uid allowed. */
-#define MNTOPT_NOAUTO "noauto" /* Do not auto mount. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct mntent {
- char *mnt_fsname;
- char *mnt_dir;
- char *mnt_type;
- char *mnt_opts;
- int mnt_freq;
- int mnt_passno;
-};
-
-FILE *setmntent(const char *, const char *);
-
-struct mntent *getmntent(FILE *);
-
-int addmntent(FILE *, const struct mntent *);
-
-int endmntent(FILE *);
-
-char *hasmntopt(const struct mntent *, const char *);
-
-struct mntent *getmntent_r(FILE *, struct mntent *, char *, int);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _MNTENT_H
diff --git a/lib/mlibc/sysdeps/ironclad/include/pty.h b/lib/mlibc/sysdeps/ironclad/include/pty.h
deleted file mode 100644
index 0468b46..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/pty.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _PTY_H
-#define _PTY_H
-
-#include <termios.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int openpty(int *mfd, int *sfd, char *name, const struct termios *ios, const struct winsize *win);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _PTY_H
diff --git a/lib/mlibc/sysdeps/ironclad/include/sys/ironclad_devices.h b/lib/mlibc/sysdeps/ironclad/include/sys/ironclad_devices.h
deleted file mode 100644
index 74f47f8..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/sys/ironclad_devices.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef _SYS_IRONCLAD_DEVICES_H
-#define _SYS_IRONCLAD_DEVICES_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <asm/ioctls.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define PS2MOUSE_2_1_SCALING 1
-#define PS2MOUSE_1_1_SCALING 2
-#define PS2MOUSE_SET_RES 3
-#define PS2MOUSE_SET_SAMPLE_RATE 4
-
-struct ironclad_mouse_data {
- int x_variation;
- int y_variation;
- bool is_left;
- bool is_right;
-};
-
-#define RTC_RD_TIME 1
-#define RTC_SET_TIME 2
-
-struct rtc_time {
- int tm_sec;
- int tm_min;
- int tm_hour;
- int tm_mday;
- int tm_mon;
- int tm_year;
- int tm_wday; /* unused */
- int tm_yday; /* unused */
- int tm_isdst; /* unused */
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _SYS_IRONCLAD_DEVICES_H
diff --git a/lib/mlibc/sysdeps/ironclad/include/sys/mac.h b/lib/mlibc/sysdeps/ironclad/include/sys/mac.h
deleted file mode 100644
index d4cf76d..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/sys/mac.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef _SYS_MAC_H
-#define _SYS_MAC_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define MAC_CAP_SCHED 0b00000000001
-#define MAC_CAP_SPAWN 0b00000000010
-#define MAC_CAP_ENTROPY 0b00000000100
-#define MAC_CAP_SYS_MEM 0b00000001000
-#define MAC_CAP_USE_NET 0b00000010000
-#define MAC_CAP_SYS_NET 0b00000100000
-#define MAC_CAP_SYS_MNT 0b00001000000
-#define MAC_CAP_SYS_PWR 0b00010000000
-#define MAC_CAP_PTRACE 0b00100000000
-#define MAC_CAP_SETUID 0b01000000000
-#define MAC_CAP_SYS_MAC 0b10000000000
-#define MAC_CAP_CLOCK 0b100000000000
-#define MAC_CAP_SIGNALALL 0b1000000000000
-unsigned long get_mac_capabilities(void);
-int set_mac_capabilities(unsigned long request);
-
-#define MAC_PERM_CONTENTS 0b0000001
-#define MAC_PERM_READ 0b0000010
-#define MAC_PERM_WRITE 0b0000100
-#define MAC_PERM_EXEC 0b0001000
-#define MAC_PERM_APPEND 0b0010000
-#define MAC_PERM_FLOCK 0b0100000
-#define MAC_PERM_DEV 0b1000000
-int add_mac_permissions(const char *path, int flags);
-
-#define MAC_DENY 0b001
-#define MAC_DENY_AND_SCREAM 0b010
-#define MAC_KILL 0b100
-int set_mac_enforcement(unsigned long enforcement);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _SYS_MAC_H
diff --git a/lib/mlibc/sysdeps/ironclad/include/sys/mount.h b/lib/mlibc/sysdeps/ironclad/include/sys/mount.h
deleted file mode 100644
index 51263fa..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/sys/mount.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef _SYS_MOUNT_H
-#define _SYS_MOUNT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define MNT_EXT 1
-#define MNT_FAT 2
-
-#define MS_RDONLY 0b001
-#define MS_REMOUNT 0b010
-#define MS_RELATIME 0b100
-
-#define MNT_FORCE 1
-
-int mount(const char *source, const char *target, int type, int flags);
-int umount(const char *target, int flags);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _SYS_MOUNT_H
diff --git a/lib/mlibc/sysdeps/ironclad/include/sys/ptrace.h b/lib/mlibc/sysdeps/ironclad/include/sys/ptrace.h
deleted file mode 100644
index 3993753..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/sys/ptrace.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef _SYS_PTRACE_H
-#define _SYS_PTRACE_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define PTRACE_ATTACH 1
-#define PTRACE_DETACH 2
-#define PTRACE_CONT 3
-#define PTRACE_SYSCALL 4
-#define PTRACE_GETREGS 5
-int ptrace(int request, pid_t pid, void *addr, void *data);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _SYS_PTRACE_H
diff --git a/lib/mlibc/sysdeps/ironclad/include/sys/reboot.h b/lib/mlibc/sysdeps/ironclad/include/sys/reboot.h
deleted file mode 100644
index c2dbbf2..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/sys/reboot.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _SYS_REBOOT_H
-#define _SYS_REBOOT_H
-
-#include <abi-bits/reboot.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int reboot(int arg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _SYS_REBOOT_H
diff --git a/lib/mlibc/sysdeps/ironclad/include/sys/sched2.h b/lib/mlibc/sysdeps/ironclad/include/sys/sched2.h
deleted file mode 100644
index caeb86a..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/sys/sched2.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef _SYS_SCHED2_H
-#define _SYS_SCHED2_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define THREAD_RT 0b0001
-#define THREAD_MONO 0b0010
-#define THREAD_MLOCK 0b0100
-#define THREAD_BANNED 0b1000
-int get_thread_sched(void);
-int set_thread_sched(int flags);
-int set_deadlines(int runtime, int period);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _SYS_SCHED2_H
diff --git a/lib/mlibc/sysdeps/ironclad/include/sys/syscall.h b/lib/mlibc/sysdeps/ironclad/include/sys/syscall.h
deleted file mode 100644
index 01ab016..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/sys/syscall.h
+++ /dev/null
@@ -1,187 +0,0 @@
-#ifndef _SYS_SYSCALL_H
-#define _SYS_SYSCALL_H
-
-#include <stddef.h>
-
-#define SYSCALL0(NUM) ({ \
- asm volatile ("syscall" \
- : "=a"(ret), "=d"(errno) \
- : "a"(NUM) \
- : "rcx", "r11", "memory"); \
-})
-
-#define SYSCALL1(NUM, ARG0) ({ \
- asm volatile ("syscall" \
- : "=a"(ret), "=d"(errno) \
- : "a"(NUM), "D"(ARG0) \
- : "rcx", "r11", "memory"); \
-})
-
-#define SYSCALL2(NUM, ARG0, ARG1) ({ \
- asm volatile ("syscall" \
- : "=a"(ret), "=d"(errno) \
- : "a"(NUM), "D"(ARG0), "S"(ARG1) \
- : "rcx", "r11", "memory"); \
-})
-
-#define SYSCALL3(NUM, ARG0, ARG1, ARG2) ({ \
- asm volatile ("syscall" \
- : "=a"(ret), "=d"(errno) \
- : "a"(NUM), "D"(ARG0), "S"(ARG1), "d"(ARG2) \
- : "rcx", "r11", "memory"); \
-})
-
-#define SYSCALL4(NUM, ARG0, ARG1, ARG2, ARG3) ({ \
- register __typeof(ARG3) arg_r12 asm("r12") = ARG3; \
- asm volatile ("syscall" \
- : "=a"(ret), "=d"(errno) \
- : "a"(NUM), "D"(ARG0), "S"(ARG1), "d"(ARG2), \
- "r"(arg_r12) \
- : "rcx", "r11", "memory"); \
-})
-
-#define SYSCALL5(NUM, ARG0, ARG1, ARG2, ARG3, ARG4) ({ \
- register __typeof(ARG3) arg_r12 asm("r12") = ARG3; \
- register __typeof(ARG4) arg_r8 asm("r8") = ARG4; \
- asm volatile ("syscall" \
- : "=a"(ret), "=d"(errno) \
- : "a"(NUM), "D"(ARG0), "S"(ARG1), "d"(ARG2), \
- "r"(arg_r12), "r"(arg_r8) \
- : "rcx", "r11", "memory"); \
-})
-
-#define SYSCALL6(NUM, ARG0, ARG1, ARG2, ARG3, ARG4, ARG5) ({ \
- register __typeof(ARG3) arg_r12 asm("r12") = ARG3; \
- register __typeof(ARG4) arg_r8 asm("r8") = ARG4; \
- register __typeof(ARG5) arg_r9 asm("r9") = ARG5; \
- asm volatile ("syscall" \
- : "=a"(ret), "=d"(errno) \
- : "a"(NUM), "D"(ARG0), "S"(ARG1), "d"(ARG2), \
- "r"(arg_r12), "r"(arg_r8), "r"(arg_r9) \
- : "rcx", "r11", "memory"); \
-})
-
-#define SYSCALL6(NUM, ARG0, ARG1, ARG2, ARG3, ARG4, ARG5) ({ \
- register __typeof(ARG3) arg_r12 asm("r12") = ARG3; \
- register __typeof(ARG4) arg_r8 asm("r8") = ARG4; \
- register __typeof(ARG5) arg_r9 asm("r9") = ARG5; \
- asm volatile ("syscall" \
- : "=a"(ret), "=d"(errno) \
- : "a"(NUM), "D"(ARG0), "S"(ARG1), "d"(ARG2), \
- "r"(arg_r12), "r"(arg_r8), "r"(arg_r9) \
- : "rcx", "r11", "memory"); \
-})
-
-#define SYSCALL7(NUM, ARG0, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) ({ \
- register __typeof(ARG3) arg_r12 asm("r12") = ARG3; \
- register __typeof(ARG4) arg_r8 asm("r8") = ARG4; \
- register __typeof(ARG5) arg_r9 asm("r9") = ARG5; \
- register __typeof(ARG6) arg_r10 asm("r10") = ARG6; \
- asm volatile ("syscall" \
- : "=a"(ret), "=d"(errno) \
- : "a"(NUM), "D"(ARG0), "S"(ARG1), "d"(ARG2), \
- "r"(arg_r12), "r"(arg_r8), "r"(arg_r9), "r"(arg_r10) \
- : "rcx", "r11", "memory"); \
-})
-
-#define SYSCALL_EXIT 0
-#define SYSCALL_ARCH_PRCTL 1
-#define SYSCALL_OPEN 2
-#define SYSCALL_CLOSE 3
-#define SYSCALL_READ 4
-#define SYSCALL_WRITE 5
-#define SYSCALL_SEEK 6
-#define SYSCALL_MMAP 7
-#define SYSCALL_MUNMAP 8
-#define SYSCALL_GETPID 9
-#define SYSCALL_GETPPID 10
-#define SYSCALL_EXEC 11
-#define SYSCALL_CLONE 12
-#define SYSCALL_WAIT 13
-#define SYSCALL_SOCKET 14
-#define SYSCALL_SETHOSTNAME 15
-#define SYSCALL_UNLINK 16
-#define SYSCALL_STAT 17
-#define SYSCALL_GETCWD 18
-#define SYSCALL_CHDIR 19
-#define SYSCALL_IOCTL 20
-#define SYSCALL_SCHED_YIELD 21
-#define SYSCALL_DELETE_TCLUSTER 22
-#define SYSCALL_PIPE 23
-#define SYSCALL_GETUID 24
-#define SYSCALL_RENAME 25
-#define SYSCALL_SYSCONF 26
-#define SYSCALL_SPAWN 27
-#define SYSCALL_GETTID 28
-#define SYSCALL_MANAGE_TCLUSTER 29
-#define SYSCALL_FCNTL 30
-#define SYSCALL_EXIT_THREAD 31
-#define SYSCALL_GETRANDOM 32
-#define SYSCALL_MPROTECT 33
-#define SYSCALL_SYNC 34
-#define SYSCALL_SET_MAC_CAPABILITIES 35
-#define SYSCALL_GET_MAC_CAPABILITIES 36
-#define SYSCALL_ADD_MAC_PERMISSIONS 37
-#define SYSCALL_SET_MAC_ENFORCEMENT 38
-#define SYSCALL_MOUNT 39
-#define SYSCALL_UMOUNT 40
-#define SYSCALL_READLINK 41
-#define SYSCALL_GETDENTS 42
-#define SYSCALL_MAKENODE 43
-#define SYSCALL_TRUNCATE 44
-#define SYSCALL_BIND 45
-#define SYSCALL_SYMLINK 46
-#define SYSCALL_CONNECT 47
-#define SYSCALL_OPENPTY 48
-#define SYSCALL_FSYNC 49
-#define SYSCALL_LINK 50
-#define SYSCALL_PTRACE 51
-#define SYSCALL_LISTEN 52
-#define SYSCALL_ACCEPT 53
-#define SYSCALL_GETRLIMIT 54
-#define SYSCALL_SETRLIMIT 55
-#define SYSCALL_ACCESS 56
-#define SYSCALL_POLL 57
-#define SYSCALL_GETEUID 58
-#define SYSCALL_SETUIDS 59
-#define SYSCALL_FCHMOD 60
-#define SYSCALL_UMASK 61
-#define SYSCALL_REBOOT 62
-#define SYSCALL_FCHOWN 63
-#define SYSCALL_PREAD 64
-#define SYSCALL_PWRITE 65
-#define SYSCALL_GETSOCKNAME 66
-#define SYSCALL_GETPEERNAME 67
-#define SYSCALL_SHUTDOWN 68
-#define SYSCALL_FUTEX 69
-#define SYSCALL_CLOCK 70
-#define SYSCALL_CLOCK_NANOSLEEP 71
-#define SYSCALL_GETRUSAGE 72
-#define SYSCALL_RECVFROM 73
-#define SYSCALL_SENDTO 74
-#define SYSCALL_CONFIG_NETINTER 75
-#define SYSCALL_UTIMES 76
-#define SYSCALL_CREATE_TCLUSTER 77
-#define SYSCALL_SWITCH_TCLUSTER 78
-#define SYSCALL_ACTUALLY_KILL 79
-#define SYSCALL_SIGNALPOST 80
-#define SYSCALL_SEND_SIGNAL 81
-#define SYSCALL_GETPRIO 82
-#define SYSCALL_SETPRIO 83
-#define SYSCALL_GETGID 84
-#define SYSCALL_GETEGID 85
-#define SYSCALL_SETGIDS 86
-#define SYSCALL_GETGROUPS 87
-#define SYSCALL_SETGROUPS 88
-#define SYSCALL_TTYNAME 89
-#define SYSCALL_FADVISE 90
-#define SYSCALL_SHMAT 91
-#define SYSCALL_SHMCTL 92
-#define SYSCALL_SHMDT 93
-#define SYSCALL_SHMGET 94
-#define SYSCALL_GETSOCKOPT 95
-#define SYSCALL_SETSOCKOPT 96
-#define SYSCALL_GETTIDID 97
-#define SYSCALL_SETTIDID 98
-
-#endif // _SYS_SYSCALL_H
diff --git a/lib/mlibc/sysdeps/ironclad/include/utmpx.h b/lib/mlibc/sysdeps/ironclad/include/utmpx.h
deleted file mode 100644
index 2d7d3e1..0000000
--- a/lib/mlibc/sysdeps/ironclad/include/utmpx.h
+++ /dev/null
@@ -1,63 +0,0 @@
-
-#ifndef _UTMPX_H
-#define _UTMPX_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <abi-bits/pid_t.h>
-#include <bits/posix/timeval.h>
-
-#define UTMPX_FILE "/var/run/utmp"
-#define WTMPX_FILE "/var/run/wtmp"
-
-// Struct definition taken from musl
-struct utmpx {
- short ut_type;
- short __ut_pad1;
- pid_t ut_pid;
- char ut_line[32];
- char ut_id[4];
- char ut_user[32];
- char ut_host[256];
- struct {
- short __e_termination;
- short __e_exit;
- } ut_exit;
- int ut_session, __ut_pad2;
- struct timeval ut_tv;
- unsigned ut_addr_v6[4];
- char __unused[20];
-};
-
-#ifndef __MLIBC_ABI_ONLY
-
-void updwtmpx(const char *, const struct utmpx *);
-int utmpxname(const char *);
-struct utmpx *pututxline(const struct utmpx *);
-struct utmpx *getutxent(void);
-void setutxent(void);
-void endutxent(void);
-
-#endif /* !__MLIBC_ABI_ONLY */
-
-#define EMPTY 0
-#define RUN_LVL 1
-#define BOOT_TIME 2
-#define NEW_TIME 3
-#define OLD_TIME 4
-#define INIT_PROCESS 5
-#define LOGIN_PROCESS 6
-#define USER_PROCESS 7
-#define DEAD_PROCESS 8
-
-#define __UT_HOSTSIZE 256
-#define __UT_NAMESIZE 32
-#define __UT_LINESIZE 32
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _UTMPX_H
diff --git a/lib/mlibc/sysdeps/ironclad/meson.build b/lib/mlibc/sysdeps/ironclad/meson.build
deleted file mode 100644
index a23203c..0000000
--- a/lib/mlibc/sysdeps/ironclad/meson.build
+++ /dev/null
@@ -1,125 +0,0 @@
-
-rtdl_sources += files(
- 'generic/generic.cpp'
-)
-
-libc_sources += files(
- 'generic/entry.cpp',
- 'generic/ptrace.cpp',
- 'generic/generic.cpp',
- 'generic/mntent.cpp',
- 'generic/mount.cpp',
- 'generic/reboot.cpp',
- 'generic/pty.cpp',
- 'generic/thread.cpp',
- 'generic/mac.cpp',
- 'generic/sched2.cpp',
- 'generic/thread.S',
- 'generic/utmpx.cpp'
-)
-
-if not no_headers
- install_headers(
- 'include/abi-bits/access.h',
- 'include/abi-bits/auxv.h',
- 'include/abi-bits/seek-whence.h',
- 'include/abi-bits/vm-flags.h',
- 'include/abi-bits/errno.h',
- 'include/abi-bits/fcntl.h',
- 'include/abi-bits/in.h',
- 'include/abi-bits/reboot.h',
- 'include/abi-bits/resource.h',
- 'include/abi-bits/stat.h',
- 'include/abi-bits/signal.h',
- 'include/abi-bits/socket.h',
- 'include/abi-bits/termios.h',
- 'include/abi-bits/time.h',
- 'include/abi-bits/blkcnt_t.h',
- 'include/abi-bits/blksize_t.h',
- 'include/abi-bits/dev_t.h',
- 'include/abi-bits/gid_t.h',
- 'include/abi-bits/ino_t.h',
- 'include/abi-bits/mode_t.h',
- 'include/abi-bits/nlink_t.h',
- 'include/abi-bits/pid_t.h',
- 'include/abi-bits/uid_t.h',
- 'include/abi-bits/wait.h',
- 'include/abi-bits/limits.h',
- 'include/abi-bits/utsname.h',
- 'include/abi-bits/ptrace.h',
- 'include/abi-bits/poll.h',
- 'include/abi-bits/epoll.h',
- 'include/abi-bits/packet.h',
- 'include/abi-bits/inotify.h',
- 'include/abi-bits/clockid_t.h',
- 'include/abi-bits/shm.h',
- 'include/abi-bits/mqueue.h',
- 'include/abi-bits/suseconds_t.h',
- 'include/abi-bits/fsfilcnt_t.h',
- 'include/abi-bits/fsblkcnt_t.h',
- 'include/abi-bits/socklen_t.h',
- 'include/abi-bits/statfs.h',
- 'include/abi-bits/statvfs.h',
- 'include/abi-bits/ioctls.h',
- 'include/abi-bits/xattr.h',
- 'include/abi-bits/msg.h',
- subdir: 'abi-bits',
- follow_symlinks: true
- )
- install_headers(
- 'include/sys/sched2.h',
- 'include/sys/ironclad_devices.h',
- 'include/sys/mac.h',
- 'include/sys/syscall.h',
- 'include/sys/reboot.h',
- 'include/sys/mount.h',
- 'include/sys/ptrace.h',
- subdir: 'sys'
- )
-
- install_headers(
- 'include/asm/ioctls.h',
- subdir: 'asm'
- )
-
- install_headers(
- 'include/linux/fb.h',
- subdir: 'linux'
- )
-
- install_headers(
- 'include/mntent.h',
- 'include/pty.h',
- 'include/utmpx.h'
- )
-endif
-
-if not headers_only
- crt = custom_target('crt0',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: 'crt-x86_64/crt0.S',
- output: 'crt0.o',
- install: true,
- install_dir: get_option('libdir')
- )
-
- custom_target('crti',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: 'crt-x86_64/crti.S',
- output: 'crti.o',
- install: true,
- install_dir: get_option('libdir')
- )
-
- custom_target('crtn',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: 'crt-x86_64/crtn.S',
- output: 'crtn.o',
- install: true,
- install_dir: get_option('libdir')
- )
-endif
-
diff --git a/lib/mlibc/sysdeps/keyronex/generic/entry.cpp b/lib/mlibc/sysdeps/keyronex/generic/entry.cpp
deleted file mode 100644
index ff15c62..0000000
--- a/lib/mlibc/sysdeps/keyronex/generic/entry.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-#include <bits/ensure.h>
-#include <bits/posix/posix_signal.h>
-#include <keyronex/syscall.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/debug.hpp>
-#include <mlibc/elf/startup.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-// defined by the POSIX library
-void __mlibc_initLocale();
-
-extern "C" uintptr_t *__dlapi_entrystack();
-
-extern char **environ;
-static mlibc::exec_stack_data __mlibc_stack_data;
-
-struct LibraryGuard {
- LibraryGuard();
-};
-
-static LibraryGuard guard;
-
-LibraryGuard::LibraryGuard()
-{
- __mlibc_initLocale();
-
- // Parse the exec() stack.
- mlibc::parse_exec_stack(__dlapi_entrystack(), &__mlibc_stack_data);
- mlibc::set_startup_data(__mlibc_stack_data.argc,
- __mlibc_stack_data.argv, __mlibc_stack_data.envp);
-}
-
-namespace mlibc {
-int
-sys_sigentry(void *sigentry)
-{
- uintptr_t ret = syscall1(kPXSysSigEntry, (uintptr_t)sigentry, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-[[noreturn]] int
-sys_sigreturn(ucontext_t *context)
-{
- syscall1(kPXSysSigReturn, (uintptr_t)context, NULL);
- __builtin_unreachable();
-}
-}
-
-static void
-do_stacktrace(ucontext_t *ctx)
-{
- size_t *base_ptr = (size_t *)ctx->uc_mcontext.gregs[REG_RBP];
-
- mlibc::infoLogger() << "Stacktrace:" << frg::endlog;
- mlibc::infoLogger() << " [" << (void *)ctx->uc_mcontext.gregs[REG_RIP]
- << "]" << frg::endlog;
- for (;;) {
- size_t old_bp = base_ptr[0];
- size_t ret_addr = base_ptr[1];
- if (!ret_addr)
- break;
- mlibc::infoLogger()
- << " [" << (void *)ret_addr << "]" << frg::endlog;
- if (!old_bp)
- break;
- base_ptr = (size_t *)old_bp;
- }
-}
-
-static void
-__mlibc_sigentry(int which, siginfo_t *siginfo, void *handler,
- bool is_sigaction, ucontext_t *ret_context)
-{
- if ((uintptr_t)handler == (uintptr_t)SIG_DFL) {
- mlibc::infoLogger()
- << "mlibc: Unhandled signal " << which << frg::endlog;
- do_stacktrace(ret_context);
- mlibc::sys_exit(128 + which);
- } else if ((uintptr_t)handler == (uintptr_t)SIG_IGN) {
- /* epsilon */
- } else {
- if (is_sigaction)
- ((void (*)(int, siginfo_t *, void *))handler)(which,
- siginfo, ret_context);
- else
- ((void (*)(int))handler)(which);
- }
-
- mlibc::sys_sigreturn(ret_context);
-
- __builtin_unreachable();
-}
-
-extern "C" void
-__mlibc_entry(int (*main_fn)(int argc, char *argv[], char *env[]))
-{
- /* communicate the signal handler entry point to the kernel */
- mlibc::sys_sigentry((void *)__mlibc_sigentry);
-
- // TODO: call __dlapi_enter, otherwise static builds will break (see
- // Linux sysdeps)
- auto result = main_fn(__mlibc_stack_data.argc, __mlibc_stack_data.argv,
- environ);
- exit(result);
-}
diff --git a/lib/mlibc/sysdeps/keyronex/generic/generic.cpp b/lib/mlibc/sysdeps/keyronex/generic/generic.cpp
deleted file mode 100644
index a3e77fb..0000000
--- a/lib/mlibc/sysdeps/keyronex/generic/generic.cpp
+++ /dev/null
@@ -1,753 +0,0 @@
-#include <asm/ioctls.h>
-
-#include <bits/ensure.h>
-#include <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <frg/logging.hpp>
-#include <keyronex/syscall.h>
-#include <limits.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/debug.hpp>
-#include <stdlib.h>
-
-#define STUB_ONLY \
- { \
- __ensure(!"STUB_ONLY function was called"); \
- __builtin_unreachable(); \
- }
-
-namespace mlibc {
-
-void
-sys_libc_log(const char *message)
-{
- syscall1(kPXSysDebug, (uintptr_t)message, NULL);
-}
-
-void
-sys_libc_panic()
-{
- sys_libc_log("\nMLIBC PANIC\n");
- for (;;)
- ;
- STUB_ONLY
-}
-
-void
-sys_exit(int status)
-{
- syscall1(kPXSysExit, status, NULL);
- mlibc::panicLogger() << "sys_exit() returned!" << frg::endlog;
- __builtin_unreachable();
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-int
-sys_tcgetattr(int fd, struct termios *attr)
-{
- int ret;
-
- if (int r = sys_ioctl(fd, TCGETS, attr, &ret) != 0) {
- return r;
- }
-
- return 0;
-}
-
-int
-sys_tcsetattr(int fd, int optional_action, const struct termios *attr)
-{
- int ret;
-
- switch (optional_action) {
- case TCSANOW:
- optional_action = TCSETS;
- break;
- case TCSADRAIN:
- optional_action = TCSETSW;
- break;
- case TCSAFLUSH:
- optional_action = TCSETSF;
- break;
- default:
- __ensure(!"Unsupported tcsetattr");
- }
-
- if (int r = sys_ioctl(fd, optional_action, (void *)attr, &ret) != 0) {
- return r;
- }
-
- return 0;
-}
-#endif
-
-int
-sys_tcb_set(void *pointer)
-{
- return syscall1(kPXSysSetFSBase, (uintptr_t)pointer, NULL);
-}
-
-int
-sys_ppoll(struct pollfd *fds, int nfds, const struct timespec *timeout,
- const sigset_t *sigmask, int *num_events)
-{
- uintptr_t ret = syscall4(kPXSysPPoll, (uintptr_t)fds, (uintptr_t)nfds,
- (uintptr_t)timeout, (uintptr_t)sigmask, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *num_events = (ssize_t)ret;
- return 0;
-}
-
-int
-sys_poll(struct pollfd *fds, nfds_t count, int timeout, int *num_events)
-{
- struct timespec ts;
- ts.tv_sec = timeout / 1000;
- ts.tv_nsec = (timeout % 1000) * 1000000;
- return sys_ppoll(fds, count, timeout < 0 ? NULL : &ts, NULL,
- num_events);
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-int
-sys_pselect(int nfds, fd_set *read_set, fd_set *write_set, fd_set *except_set,
- const struct timespec *timeout, const sigset_t *sigmask, int *num_events)
-{
- struct pollfd *fds = (struct pollfd *)malloc(
- nfds * sizeof(struct pollfd));
-
- for (int i = 0; i < nfds; i++) {
- struct pollfd *fd = &fds[i];
- memset(fd, 0, sizeof(struct pollfd));
-
- if (read_set && FD_ISSET(i, read_set))
- fd->events |= POLLIN; // TODO: Additional events.
- if (write_set && FD_ISSET(i, write_set))
- fd->events |= POLLOUT; // TODO: Additional events.
- if (except_set && FD_ISSET(i, except_set))
- fd->events |= POLLPRI;
-
- if (!fd->events) {
- fd->fd = -1;
- continue;
- }
-
- fd->fd = i;
- }
-
- int e = sys_ppoll(fds, nfds, timeout, sigmask, num_events);
-
- if (e != 0) {
- free(fds);
- return e;
- }
-
- fd_set res_read_set;
- fd_set res_write_set;
- fd_set res_except_set;
- FD_ZERO(&res_read_set);
- FD_ZERO(&res_write_set);
- FD_ZERO(&res_except_set);
-
- for (int i = 0; i < nfds; i++) {
- struct pollfd *fd = &fds[i];
-
- if (read_set && FD_ISSET(i, read_set) &&
- fd->revents & (POLLIN | POLLERR | POLLHUP)) {
- FD_SET(i, &res_read_set);
- }
-
- if (write_set && FD_ISSET(i, write_set) &&
- fd->revents & (POLLOUT | POLLERR | POLLHUP)) {
- FD_SET(i, &res_write_set);
- }
-
- if (except_set && FD_ISSET(i, except_set) &&
- fd->revents & POLLPRI) {
- FD_SET(i, &res_except_set);
- }
- }
-
- free(fds);
-
- if (read_set)
- memcpy(read_set, &res_read_set, sizeof(fd_set));
- if (write_set)
- memcpy(write_set, &res_write_set, sizeof(fd_set));
- if (except_set)
- memcpy(except_set, &res_except_set, sizeof(fd_set));
-
- return 0;
-}
-#endif
-
-int
-sys_fcntl(int fd, int request, va_list args, int *result)
-{
- auto ret = syscall3(kPXSysFCntl, fd, request, va_arg(args, uint64_t),
- NULL);
- if (int e = sc_error(ret); e)
- return e;
- *result = ret;
- return 0;
-}
-
-int
-sys_futex_wait(int *pointer, int expected, const struct timespec *time)
-{
- auto ret = syscall3(kPXSysFutexWait, (uintptr_t)pointer, expected,
- (uintptr_t)time, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_futex_wake(int *pointer)
-{
- auto ret = syscall1(kPXSysFutexWake, (uintptr_t)pointer, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-int
-sys_ioctl(int fd, unsigned long request, void *arg, int *result)
-{
- uintptr_t r = syscall3(kPXSysIOCtl, fd, request, (uintptr_t)arg, NULL);
- if (int e = sc_error(r); e)
- return e;
- *result = r;
- return 0;
-}
-#endif
-
-int
-sys_isatty(int fd)
-{
- uintptr_t ret = syscall1(kPXSysIsATTY, fd, NULL);
- if (int e = sc_error(ret); e) {
- return e;
- }
- return 0;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-int
-sys_getcwd(char *buffer, size_t size)
-{
- uintptr_t ret = syscall2(kPXSysGetCWD, (uintptr_t)buffer, size, NULL);
- if (int e = sc_error(ret); e) {
- return e;
- }
- return 0;
-}
-#endif
-
-int
-sys_dup(int fd, int flags, int *newfd)
-{
- uintptr_t ret = syscall2(kPXSysDup, fd, flags, NULL);
- if (int e = sc_error(ret); e) {
- return e;
- }
- *newfd = ret;
- return 0;
-}
-
-int
-sys_dup2(int fd, int flags, int newfd)
-{
- uintptr_t ret = syscall3(kPXSysDup3, fd, newfd, flags, NULL);
- if (int e = sc_error(ret); e) {
- return e;
- }
- return 0;
-}
-
-int
-sys_openat(int dirfd, const char *path, int flags, mode_t mode, int *fd)
-{
- uintptr_t r = syscall4(kPXSysOpenAt, dirfd, (uintptr_t)path,
- (uintptr_t)flags, (uintptr_t)mode, NULL);
- if (int e = sc_error(r); e)
- return e;
- *fd = (int)r;
- return 0;
-}
-
-int
-sys_open(const char *path, int flags, mode_t mode, int *fd)
-{
- return sys_openat(AT_FDCWD, path, flags, mode, fd);
-}
-
-int
-sys_open_dir(const char *path, int *handle)
-{
- return sys_open(path, O_DIRECTORY, 0, handle);
-}
-
-int
-sys_read_entries(int fd, void *buffer, size_t max_size, size_t *bytes_read)
-{
- uintptr_t r = syscall3(kPXSysReadDir, fd, (uintptr_t)buffer, max_size,
- NULL);
-
- if (int e = sc_error(r); e)
- return e;
-
- *bytes_read = r;
- return 0;
-}
-
-int
-sys_close(int fd)
-{
- return (int)syscall1(kPXSysClose, fd, NULL);
-}
-
-int
-sys_link(const char *old_path, const char *new_path)
-{
- uintptr_t ret = syscall2(kPXSysLink, (uintptr_t)old_path,
- (uintptr_t)new_path, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_seek(int fd, off_t offset, int whence, off_t *new_offset)
-{
- uintptr_t ret = syscall3(kPXSysSeek, fd, offset, whence, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *new_offset = (ssize_t)ret;
- return 0;
-}
-
-int
-sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read)
-{
- uintptr_t ret = syscall3(kPXSysRead, fd, (uintptr_t)buf,
- (uintptr_t)count, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *bytes_read = (ssize_t)ret;
- return 0;
-}
-
-int
-sys_write(int fd, const void *buf, size_t count, ssize_t *bytes_written)
-{
- uintptr_t ret = syscall3(kPXSysWrite, fd, (uintptr_t)buf,
- (uintptr_t)count, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *bytes_written = (ssize_t)ret;
- return 0;
-}
-
-int
-sys_readlink(const char *path, void *buffer, size_t max_size, ssize_t *length)
-{
- uintptr_t ret = syscall3(kPXSysReadLink, (uintptr_t)path,
- (uintptr_t)buffer, (uintptr_t)max_size, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *length = (ssize_t)ret;
- return 0;
-}
-
-int
-sys_pipe(int *fds, int flags)
-{
- uintptr_t ret = syscall2(kPXSysPipe, (uintptr_t)fds, flags, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_unlinkat(int fd, const char *path, int flags)
-{
- uintptr_t ret = syscall3(kPXSysUnlinkAt, fd, (uintptr_t)path, flags,
- NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_vm_map(void *hint, size_t size, int prot, int flags, int fd, off_t offset,
- void **window)
-{
- uintptr_t r = syscall6(kPXSysMmap, (uintptr_t)hint, size, prot, flags,
- fd, offset, NULL);
- if (int e = sc_error(r); e)
- return e;
- *window = (void *)r;
- return 0;
-}
-
-int
-sys_vm_unmap(void *pointer, size_t size)
-{
- uintptr_t r = syscall2(kPXSysMunmap, (uintptr_t)pointer, size, NULL);
- if (int e = sc_error(r); e)
- return e;
- return 0;
-}
-
-int
-sys_vm_protect(void *pointer, size_t size, int prot)
-{
-
- mlibc::infoLogger() << "mlibc: sys_vm_protect(" << pointer << ", "
- << size << ", " << prot << "); stub!\n"
- << frg::endlog;
- return 0;
-}
-
-int
-sys_anon_allocate(size_t size, void **pointer)
-{
- return sys_vm_map(NULL, size, PROT_EXEC | PROT_READ | PROT_WRITE,
- MAP_ANONYMOUS, -1, 0, pointer);
-}
-
-int
-sys_anon_free(void *pointer, size_t size)
-{
- return sys_vm_unmap(pointer, size);
-}
-
-pid_t
-sys_getpid()
-{
- return syscall0(kPXSysGetPID, NULL);
-}
-
-pid_t
-sys_getppid()
-{
- return syscall0(kPXSysGetPPID, NULL);
-}
-
-uid_t
-sys_getuid()
-{
- return 0;
-}
-
-uid_t
-sys_geteuid()
-{
- return 0;
-}
-
-gid_t
-sys_getgid()
-{
- return 0;
-}
-
-int
-sys_getsid(pid_t pid, pid_t *sid)
-{
- auto ret = syscall1(kPXSysGetSID, pid, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *sid = (pid_t)(ret);
- return 0;
-}
-
-int
-sys_setgid(gid_t gid)
-{
- (void)gid;
- return 0;
-}
-
-int
-sys_getpgid(pid_t pid, pid_t *out)
-{
- auto ret = syscall1(kPXSysGetPGID, pid, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *out = (pid_t)(ret);
- return 0;
-}
-
-int
-sys_setpgid(pid_t pid, pid_t pgid)
-{
- auto ret = syscall2(kPXSysSetPGID, pid, pgid, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_setsid(pid_t *sid)
-{
- auto ret = syscall0(kPXSysSetSID, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *sid = (pid_t)ret;
- return 0;
-}
-
-gid_t
-sys_getegid()
-{
- mlibc::infoLogger() << "mlibc: " << __func__ << " is a stub!\n"
- << frg::endlog;
- return 0;
-}
-
-pid_t
-sys_gettid()
-{
- return syscall0(kPXSysGetTID, NULL);
-}
-
-int
-sys_clock_get(int clock, time_t *secs, long *nanos)
-{
- auto ret = syscall1(kPXSysClockGet, clock, NULL);
- *secs = ret / 1000000000;
- *nanos = ret % 1000000000;
- return 0;
-}
-
-int
-sys_stat(fsfd_target fsfdt, int fd, const char *path, int flags,
- struct stat *statbuf)
-{
- uintptr_t r;
- enum posix_stat_kind kind;
-
- switch (fsfdt) {
- case fsfd_target::fd:
- kind = kPXStatKindFD;
- break;
-
- case fsfd_target::path:
- kind = kPXStatKindCWD;
- break;
- case fsfd_target::fd_path:
- kind = kPXStatKindAt;
- break;
-
- default:
- __ensure(!"stat: Invalid fsfdt");
- __builtin_unreachable();
- }
-
- r = syscall5(kPXSysStat, kind, fd, (uintptr_t)path, flags,
- (uintptr_t)statbuf, NULL);
- if (int e = sc_error(r); e)
- return e;
- return 0;
-}
-
-int
-sys_statfs(const char *path, struct statfs *buf)
-{
- uintptr_t ret = syscall2(kPXSysStatFS, (uintptr_t)path, (uintptr_t)buf,
- NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_statvfs(const char *path, struct statvfs *buf)
-{
- struct statfs sb;
- uintptr_t ret = syscall2(kPXSysStatFS, (uintptr_t)path, (uintptr_t)&sb,
- NULL);
- if (int e = sc_error(ret); e)
- return e;
-
- buf->f_bsize = sb.f_bsize;
- buf->f_frsize = sb.f_frsize;
- buf->f_blocks = sb.f_blocks;
- buf->f_bfree = sb.f_bfree;
- buf->f_bavail = sb.f_bavail;
-
- buf->f_files = sb.f_files;
- buf->f_ffree = sb.f_ffree;
- buf->f_favail = sb.f_ffree;
-
- buf->f_fsid = sb.f_fsid.__val[1] | (uint64_t)sb.f_fsid.__val[0] << 32;
- buf->f_flag = sb.f_flags;
- buf->f_namemax = sb.f_namelen;
-
- return 0;
-}
-
-int
-sys_faccessat(int dirfd, const char *pathname, int mode, int flags)
-{
- (void)flags;
- struct stat buf;
- if (int r = sys_stat(dirfd == AT_FDCWD ? fsfd_target::path :
- fsfd_target::fd_path,
- dirfd, pathname, mode & AT_SYMLINK_FOLLOW, &buf)) {
- return r;
- }
- return 0;
-}
-
-int
-sys_access(const char *path, int mode)
-{
- return sys_faccessat(AT_FDCWD, path, mode, 0);
-}
-
-int
-sys_fork(pid_t *child)
-{
- uintptr_t ret = syscall0(kPXSysFork, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *child = (int)ret;
- return 0;
-}
-
-int
-sys_execve(const char *path, char *const argv[], char *const envp[])
-{
- uintptr_t ret = syscall3(kPXSysExecVE, (uintptr_t)path, (uintptr_t)argv,
- (uintptr_t)envp, NULL);
- if (int e = sc_error(ret); e)
- return e;
- mlibc::panicLogger() << "execve returned! " << ret << frg::endlog;
- __builtin_unreachable();
-}
-
-int
-sys_waitpid(pid_t pid, int *status, int flags, struct rusage *ru,
- pid_t *ret_pid)
-{
- (void)ru;
-
- uintptr_t ret = syscall3(kPXSysWaitPID, pid, (uintptr_t)status, flags,
- NULL);
- if (int e = sc_error(ret); e)
- return e;
- *ret_pid = (pid_t)ret;
- return 0;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-int
-sys_sleep(time_t *sec, long *nanosec)
-{
- auto ret = syscall1(kPXSysSleep, *sec * 1000000000 + *nanosec, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_uname(struct utsname *buf)
-{
- uintptr_t ret = syscall1(kPXSysUTSName, (uintptr_t)buf, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_gethostname(char *buf, size_t bufsize)
-{
- struct utsname uname_buf;
- if (auto e = sys_uname(&uname_buf); e)
- return e;
-
- auto node_len = strlen(uname_buf.nodename);
- if (node_len >= bufsize)
- return ENAMETOOLONG;
-
- memcpy(buf, uname_buf.nodename, node_len);
- buf[node_len] = '\0';
- return 0;
-}
-
-int
-sys_fsync(int)
-{
- mlibc::infoLogger() << "mlibc: fsync is a stub" << frg::endlog;
- return 0;
-}
-
-int
-sys_getentropy(void *buffer, size_t length)
-{
- /* todo: improve lmao */
- mlibc::infoLogger() << "mlibc: getentropy is a stub" << frg::endlog;
- memset(buffer, 123, length);
- return 0;
-}
-#endif
-
-int
-sys_mkdir(const char *path, mode_t mode)
-{
- return sys_mkdirat(AT_FDCWD, path, mode);
-}
-
-int
-sys_mkdirat(int dirfd, const char *path, mode_t mode)
-{
- uintptr_t ret = syscall3(kPXSysMkDirAt, dirfd, (uintptr_t)path, mode,
- NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_chdir(const char *path)
-{
- uintptr_t ret = syscall1(kPXSysChDir, (uintptr_t)path, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_umask(mode_t mode, mode_t *old)
-{
- uintptr_t ret = syscall1(kPXSysUMask, mode, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *old = (mode_t)ret;
- return 0;
-}
-
-int
-sys_rename(const char *old_path, const char *new_path)
-{
- return sys_renameat(AT_FDCWD, old_path, AT_FDCWD, new_path);
-}
-
-int
-sys_renameat(int old_dirfd, const char *old_path, int new_dirfd,
- const char *new_path)
-{
- auto ret = syscall4(kPXSysRenameAt, old_dirfd, (uintptr_t)old_path,
- new_dirfd, (uintptr_t)new_path, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/keyronex/generic/linux.cpp b/lib/mlibc/sysdeps/keyronex/generic/linux.cpp
deleted file mode 100644
index 9b4a4c7..0000000
--- a/lib/mlibc/sysdeps/keyronex/generic/linux.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <sys/types.h>
-
-#include <keyronex/syscall.h>
-#include <mlibc/ansi-sysdeps.hpp>
-#include <mlibc/debug.hpp>
-#include <mlibc/posix-sysdeps.hpp>
-#include <mlibc/linux-sysdeps.hpp>
-
-namespace mlibc {
-
-int
-sys_epoll_pwait(int epfd, struct epoll_event *ev, int n, int timeout,
- const sigset_t *sigmask, int *raised)
-{
- uintptr_t ret = syscall5(kPXSysEPollWait, epfd, (uintptr_t)ev, n,
- timeout, (uintptr_t)sigmask, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *raised = ret;
- return 0;
-}
-
-int
-sys_epoll_create(int flags, int *fd)
-{
- uintptr_t ret = syscall1(kPXSysEPollCreate, flags, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *fd = ret;
- return 0;
-}
-
-int
-sys_epoll_ctl(int epfd, int mode, int fd, struct epoll_event *ev)
-{
- uintptr_t ret = syscall4(kPXSysEPollCtl, epfd, mode, fd, (uintptr_t)ev,
- NULL);
- return sc_error(ret);
-}
-
-} \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/generic/signal.cpp b/lib/mlibc/sysdeps/keyronex/generic/signal.cpp
deleted file mode 100644
index ead3dee..0000000
--- a/lib/mlibc/sysdeps/keyronex/generic/signal.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <sys/types.h>
-
-#include <keyronex/syscall.h>
-#include <mlibc/ansi-sysdeps.hpp>
-#include <mlibc/posix-sysdeps.hpp>
-#include <mlibc/debug.hpp>
-
-namespace mlibc {
-
-int
-sys_sigprocmask(int how, const sigset_t *__restrict set,
- sigset_t *__restrict retrieve)
-{
- auto ret = syscall3(kPXSysSigMask, how, (uintptr_t)set,
- (uintptr_t)retrieve, NULL);
- if (int e = sc_error(ret); e) {
- return e;
- }
-
- return 0;
-}
-
-int
-sys_sigaction(int signal, const struct sigaction *__restrict action,
- struct sigaction *__restrict oldAction)
-{
- auto ret = syscall3(kPXSysSigAction, signal, (uintptr_t)action,
- (uintptr_t)oldAction, NULL);
- if (int e = sc_error(ret); e) {
- return e;
- }
-
- return 0;
-}
-
-int
-sys_kill(int pid, int signal)
-{
- if (signal == 0) {
- mlibc::infoLogger() << "Sending signal 0! Allowing" << frg::endlog;
- return 0;
- }
-
- auto ret = syscall2(kPXSysSigSend, pid, signal, NULL);
- if (int e = sc_error(ret); e) {
- return e;
- }
-
- return 0;
-}
-
-int
-sys_sigsuspend(const sigset_t *set)
-{
- auto ret = syscall1(kPXSysSigSuspend, (uintptr_t)set, NULL);
- if (int e = sc_error(ret); e) {
- return e;
- }
-
- mlibc::panicLogger()
- << "Unexpected zero return from sigsuspend()" << frg::endlog;
-
- return 0;
-}
-
-} \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/generic/socket.cpp b/lib/mlibc/sysdeps/keyronex/generic/socket.cpp
deleted file mode 100644
index c6453bf..0000000
--- a/lib/mlibc/sysdeps/keyronex/generic/socket.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <sys/errno.h>
-
-#include <keyronex/syscall.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/allocator.hpp>
-#include <mlibc/debug.hpp>
-
-#define log_unimplemented() \
- mlibc::infoLogger() << "mlibc: " << __PRETTY_FUNCTION__ \
- << " is a stub!" << frg::endlog;
-
-namespace mlibc {
-
-int
-sys_socket(int family, int type, int protocol, int *fd)
-{
- auto ret = syscall3(kPXSysSocket, family, type, protocol, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *fd = ret;
- return 0;
-}
-
-int
-sys_bind(int fd, const struct sockaddr *addr, socklen_t addrlen)
-{
- auto ret = syscall3(kPXSysBind, fd, (uintptr_t)addr, addrlen, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_connect(int fd, const struct sockaddr *addr, socklen_t addrlen)
-{
- auto ret = syscall3(kPXSysConnect, fd, (uintptr_t)addr, addrlen, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_listen(int fd, int backlog)
-{
- auto ret = syscall2(kPXSysListen, fd, backlog, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_accept(int fd, int *newfd, struct sockaddr *addr, socklen_t *addrlen,
- int flags)
-{
- auto ret = syscall4(kPXSysAccept, fd, (uintptr_t)addr,
- (uintptr_t)addrlen, flags, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *newfd = ret;
- return 0;
-}
-
-int
-sys_msg_send(int fd, const struct msghdr *msg, int flags, ssize_t *length)
-{
- auto ret = syscall3(kPXSysSendMsg, fd, (uintptr_t)msg, flags, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *length = ret;
- return 0;
-}
-
-int
-sys_msg_recv(int fd, struct msghdr *msg, int flags, ssize_t *length)
-{
- auto ret = syscall3(kPXSysRecvMsg, fd, (uintptr_t)msg, flags, NULL);
- if (int e = sc_error(ret); e)
- return e;
- *length = ret;
- return 0;
-}
-
-int
-sys_socketpair(int domain, int type_and_flags, int proto, int *fds)
-{
- auto ret = syscall4(kPXSysSocketPair, domain, type_and_flags, proto,
- (uintptr_t)fds, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int
-sys_getsockopt(int fd, int layer, int number, void *__restrict buffer,
- socklen_t *__restrict size)
-{
- (void)fd;
- (void)layer;
- (void)number;
- (void)buffer;
- (void)size;
- log_unimplemented();
- return ENOSYS;
-}
-
-int
-sys_setsockopt(int fd, int layer, int number, const void *buffer,
- socklen_t size)
-{
- (void)fd;
- (void)layer;
- (void)number;
- (void)buffer;
- (void)size;
- log_unimplemented();
- return ENOSYS;
-}
-
-}
diff --git a/lib/mlibc/sysdeps/keyronex/generic/thread.S b/lib/mlibc/sysdeps/keyronex/generic/thread.S
deleted file mode 100644
index 47ab6a9..0000000
--- a/lib/mlibc/sysdeps/keyronex/generic/thread.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .text
-.global __mlibc_thread_entry
-__mlibc_thread_entry:
- pop %rdi
- pop %rsi
- pop %rdx
- call __mlibc_thread_trampoline
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/keyronex/generic/thread.cpp b/lib/mlibc/sysdeps/keyronex/generic/thread.cpp
deleted file mode 100644
index cafb74a..0000000
--- a/lib/mlibc/sysdeps/keyronex/generic/thread.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <sys/mman.h>
-#include <mlibc/debug.hpp>
-#include <errno.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <bits/ensure.h>
-#include <mlibc/tcb.hpp>
-#include <keyronex/syscall.h>
-
-extern "C" void __mlibc_thread_trampoline(void *(*fn)(void *), Tcb *tcb, void *arg) {
- if (mlibc::sys_tcb_set(tcb)) {
- __ensure(!"failed to set tcb for new thread");
- }
-
- while (__atomic_load_n(&tcb->tid, __ATOMIC_RELAXED) == 0) {
- mlibc::sys_futex_wait(&tcb->tid, 0, nullptr);
- }
-
- tcb->invokeThreadFunc(reinterpret_cast<void *>(fn), arg);
-
- __atomic_store_n(&tcb->didExit, 1, __ATOMIC_RELEASE);
- mlibc::sys_futex_wake(&tcb->didExit);
-
- mlibc::sys_thread_exit();
-}
-
-#define DEFAULT_STACK 0x400000
-
-namespace mlibc {
-
-extern "C" void __mlibc_thread_entry();
-
- int sys_clone(void *tcb, pid_t *tid_out, void *stack) {
- (void)tcb;
-
- auto ret = syscall2(kPXSysForkThread, (uintptr_t)__mlibc_thread_entry, (uintptr_t)stack, NULL);
- if (int e = sc_error(ret); e)
- return e;
-
- *tid_out = ret;
- return 0;
- }
-
- int sys_prepare_stack(void **stack, void *entry, void *arg, void *tcb, size_t *stack_size, size_t *guard_size, void **stack_base) {
- // TODO guard
-
- mlibc::infoLogger() << "mlibc: sys_prepare_stack() does not setup a guard!" << frg::endlog;
-
- *guard_size = 0;
-
- *stack_size = *stack_size ? *stack_size : DEFAULT_STACK;
-
- if (!*stack) {
- *stack_base = mmap(NULL, *stack_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
- if (*stack_base == MAP_FAILED) {
- return errno;
- }
- } else {
- *stack_base = *stack;
- }
-
- *stack = (void *)((char *)*stack_base + *stack_size);
-
- void **stack_it = (void **)*stack;
-
- *--stack_it = arg;
- *--stack_it = tcb;
- *--stack_it = entry;
-
- *stack = (void *)stack_it;
-
- return 0;
- }
-
- void sys_thread_exit() {
- mlibc::panicLogger() << "mlibc: sys_thread_exit unimplemented!" << frg::endlog;
- __builtin_unreachable();
- }
-
-
-}
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/access.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/access.h
deleted file mode 120000
index cb83931..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/access.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/access.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/auxv.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/auxv.h
deleted file mode 120000
index c43f878..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/auxv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/auxv.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/blkcnt_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/blkcnt_t.h
deleted file mode 120000
index 0b0ec27..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/blkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/blkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/blksize_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/blksize_t.h
deleted file mode 120000
index 7dc8d7c..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/blksize_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/blksize_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/clockid_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/clockid_t.h
deleted file mode 120000
index 6a42da5..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/clockid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/clockid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/dev_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/dev_t.h
deleted file mode 120000
index bca881e..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/dev_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/dev_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/epoll.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/epoll.h
deleted file mode 120000
index eb4b76d..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/epoll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/epoll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/errno.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/errno.h
deleted file mode 120000
index 6e507de..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/errno.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/errno.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/fcntl.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/fcntl.h
deleted file mode 120000
index 463e2c9..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fcntl.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/fsblkcnt_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/fsblkcnt_t.h
deleted file mode 120000
index 898dfb2..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/fsblkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsblkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/fsfilcnt_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/fsfilcnt_t.h
deleted file mode 120000
index 791755c..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/fsfilcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsfilcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/gid_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/gid_t.h
deleted file mode 120000
index abce6d6..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/gid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/gid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/in.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/in.h
deleted file mode 120000
index 418d1d5..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/in.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/in.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/ino_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/ino_t.h
deleted file mode 120000
index 4c20aca..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/ino_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ino_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/inotify.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/inotify.h
deleted file mode 120000
index b5cb282..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/inotify.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/inotify.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/ioctls.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/ioctls.h
deleted file mode 120000
index 595106b..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/ioctls.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ioctls.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/limits.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/limits.h
deleted file mode 120000
index 6c88db2..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/limits.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/limits.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/mode_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/mode_t.h
deleted file mode 120000
index 5d78fdf..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/mode_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mode_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/mqueue.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/mqueue.h
deleted file mode 120000
index fa87b07..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/mqueue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mqueue.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/msg.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/msg.h
deleted file mode 120000
index f402b49..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/msg.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/msg.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/nlink_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/nlink_t.h
deleted file mode 120000
index bb3b625..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/nlink_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/nlink_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/packet.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/packet.h
deleted file mode 120000
index 998ef1a..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/packet.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/packet.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/pid_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/pid_t.h
deleted file mode 120000
index baa90f6..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/pid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/pid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/poll.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/poll.h
deleted file mode 120000
index 8ea6a0a..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/poll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/poll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/ptrace.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/ptrace.h
deleted file mode 120000
index b2517b2..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/ptrace.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ptrace.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/reboot.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/reboot.h
deleted file mode 120000
index 77013a4..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/reboot.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/reboot.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/resource.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/resource.h
deleted file mode 120000
index 88d7402..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/resource.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/seek-whence.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/seek-whence.h
deleted file mode 120000
index df7bccf..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/seek-whence.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/seek-whence.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/shm.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/shm.h
deleted file mode 120000
index 067d8c4..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/shm.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/shm.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/signal.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/signal.h
deleted file mode 120000
index 4dcb0b7..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/signal.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/signal.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/socket.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/socket.h
deleted file mode 120000
index f1dc016..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/socket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socket.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/socklen_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/socklen_t.h
deleted file mode 120000
index 41f3b11..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/socklen_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socklen_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/stat.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/stat.h
deleted file mode 120000
index 1f63b41..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/stat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/stat.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/statfs.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/statfs.h
deleted file mode 120000
index e3d202f..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/statfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/statvfs.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/statvfs.h
deleted file mode 120000
index 1fc80c2..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/statvfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statvfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/suseconds_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/suseconds_t.h
deleted file mode 120000
index 9ed6597..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/suseconds_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/suseconds_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/termios.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/termios.h
deleted file mode 120000
index ee8f0b0..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/termios.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/termios.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/time.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/time.h
deleted file mode 120000
index 2a02625..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/time.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/time.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/uid_t.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/uid_t.h
deleted file mode 120000
index b306777..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/uid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/uid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/utsname.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/utsname.h
deleted file mode 120000
index b285754..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/utsname.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/utsname.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/vm-flags.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/vm-flags.h
deleted file mode 120000
index bbe258c..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/vm-flags.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/vm-flags.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/wait.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/wait.h
deleted file mode 120000
index feb2840..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/wait.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/wait.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/abi-bits/xattr.h b/lib/mlibc/sysdeps/keyronex/include/abi-bits/xattr.h
deleted file mode 120000
index 66412d7..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/abi-bits/xattr.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/xattr.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/keyronex/include/keyronex/syscall.h b/lib/mlibc/sysdeps/keyronex/include/keyronex/syscall.h
deleted file mode 100644
index 9cbafd0..0000000
--- a/lib/mlibc/sysdeps/keyronex/include/keyronex/syscall.h
+++ /dev/null
@@ -1,213 +0,0 @@
-#ifndef _KEYRONEX__SYSCALL_H
-#define _KEYRONEX__SYSCALL_H
-
-#include <stdint.h>
-
-enum posix_syscall {
- /*! debug print */
- kPXSysDebug,
- kPXSysMmap,
- kPXSysMunmap,
-
- kPXSysIOCtl,
- kPXSysOpenAt,
- kPXSysClose,
- kPXSysRead,
- kPXSysReadLink,
- kPXSysWrite,
- kPXSysSeek,
- kPXSysPPoll,
- kPXSysIsATTY,
- kPXSysReadDir,
- kPXSysStat,
- kPXSysUnlinkAt,
- kPXSysGetCWD,
- kPXSysPipe,
- kPXSysDup,
- kPXSysDup3,
- kPXSysLink,
- kPXSysChDir,
- kPXSysUMask,
- kPXSysMkDirAt,
- kPXSysRenameAt,
- kPXSysStatFS,
- kPXSysFCntl,
-
- kPXSysSetFSBase,
- kPXSysExecVE,
- kPXSysExit,
- kPXSysFork,
- kPXSysWaitPID,
- kPXSysGetPID,
- kPXSysGetPPID,
- kPXSysGetPGID,
- kPXSysSetPGID,
- kPXSysGetSID,
- kPXSysSetSID,
- kPXSysGetTID,
-
- kPXSysSigAction,
- kPXSysSigMask,
- kPXSysSigSend,
- kPXSysSigSuspend,
- kPXSysSigTimedWait,
-
- kPXSysSocket,
- kPXSysBind,
- kPXSysConnect,
- kPXSysListen,
- kPXSysAccept,
- kPXSysSendMsg,
- kPXSysRecvMsg,
- kPXSysSocketPair,
- kPXSysGetSockOpt,
- kPXSysSetSockOpt,
-
- kPXSysEPollCreate,
- kPXSysEPollCtl,
- kPXSysEPollWait,
-
- kPXSysSleep,
- kPXSysUTSName,
- kPXSysClockGet,
-
- kPXSysForkThread,
- kPXSysFutexWait,
- kPXSysFutexWake,
-
- /*! register signal entry function */
- kPXSysSigEntry,
- /*! return from a signal */
- kPXSysSigReturn,
-};
-
-enum posix_stat_kind {
- kPXStatKindFD,
- kPXStatKindAt,
- kPXStatKindCWD,
-};
-
-#if defined(__x86_64__)
-static inline uintptr_t
-syscall0(uintptr_t num, uintptr_t *out)
-{
- uintptr_t ret, ret2;
- asm volatile("int $0x80" : "=a"(ret), "=D"(ret2) : "a"(num) : "memory");
- if (out)
- *out = ret2;
- return ret;
-}
-
-static inline uintptr_t
-syscall1(uintptr_t num, uintptr_t arg1, uintptr_t *out)
-{
- uintptr_t ret, ret2;
- asm volatile("int $0x80"
- : "=a"(ret), "=D"(ret2)
- : "a"(num), "D"(arg1)
- : "memory");
- if (out)
- *out = ret2;
- return ret;
-}
-
-static inline uintptr_t
-syscall2(uintptr_t num, uintptr_t arg1, uintptr_t arg2, uintptr_t *out)
-{
- uintptr_t ret, ret2;
-
- asm volatile("int $0x80"
- : "=a"(ret), "=D"(ret2)
- : "a"(num), "D"(arg1), "S"(arg2)
- : "memory");
-
- if (out)
- *out = ret2;
-
- return ret;
-}
-
-static inline uintptr_t
-syscall3(intptr_t num, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3,
- uintptr_t *out)
-{
- uintptr_t ret, ret2;
-
- asm volatile("int $0x80"
- : "=a"(ret), "=D"(ret2)
- : "a"(num), "D"(arg1), "S"(arg2), "d"(arg3)
- : "memory");
-
- if (out)
- *out = ret2;
-
- return ret;
-}
-
-static inline uintptr_t
-syscall4(intptr_t num, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3,
- uintptr_t arg4, uintptr_t *out)
-{
- register uintptr_t r10 asm("r10") = arg4;
- uintptr_t ret, ret2;
-
- asm volatile("int $0x80"
- : "=a"(ret), "=D"(ret2)
- : "a"(num), "D"(arg1), "S"(arg2), "d"(arg3), "r"(r10)
- : "memory");
-
- if (out)
- *out = ret2;
-
- return ret;
-}
-
-static inline uintptr_t
-syscall5(uintptr_t num, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3,
- uintptr_t arg4, uintptr_t arg5, uintptr_t *out)
-{
- register uintptr_t r10 asm("r10") = arg4, r8 asm("r8") = arg5;
- uintptr_t ret, ret2;
-
- asm volatile("int $0x80"
- : "=a"(ret), "=D"(ret2)
- : "a"(num), "D"(arg1), "S"(arg2), "d"(arg3), "r"(r10),
- "r"(r8)
- : "memory");
-
- if (out)
- *out = ret2;
-
- return ret;
-}
-
-static inline uintptr_t
-syscall6(uintptr_t num, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3,
- uintptr_t arg4, uintptr_t arg5, uintptr_t arg6, uintptr_t *out)
-{
- register uintptr_t r10 asm("r10") = arg4, r8 asm("r8") = arg5,
- r9 asm("r9") = arg6;
- uintptr_t ret, ret2;
-
- asm volatile("int $0x80"
- : "=a"(ret), "=D"(ret2)
- : "a"(num), "D"(arg1), "S"(arg2), "d"(arg3), "r"(r10),
- "r"(r8), "r"(r9)
- : "memory");
-
- if (out)
- *out = ret2;
-
- return ret;
-}
-
-static inline int
-sc_error(uintptr_t ret)
-{
- if (ret > -4096UL)
- return -ret;
- return 0;
-}
-#endif
-
-#endif
diff --git a/lib/mlibc/sysdeps/keyronex/meson.build b/lib/mlibc/sysdeps/keyronex/meson.build
deleted file mode 100644
index 42de7a8..0000000
--- a/lib/mlibc/sysdeps/keyronex/meson.build
+++ /dev/null
@@ -1,98 +0,0 @@
-
-rtdl_sources += files(
- 'generic/generic.cpp'
-)
-
-libc_sources += files(
- 'generic/entry.cpp',
- 'generic/generic.cpp',
- 'generic/linux.cpp',
- 'generic/signal.cpp',
- 'generic/socket.cpp',
- 'generic/thread.cpp',
- 'generic/thread.S'
-)
-
-if not no_headers
- install_headers(
- 'include/abi-bits/auxv.h',
- 'include/abi-bits/seek-whence.h',
- 'include/abi-bits/vm-flags.h',
- 'include/abi-bits/errno.h',
- 'include/abi-bits/fcntl.h',
- 'include/abi-bits/in.h',
- 'include/abi-bits/reboot.h',
- 'include/abi-bits/resource.h',
- 'include/abi-bits/stat.h',
- 'include/abi-bits/signal.h',
- 'include/abi-bits/socket.h',
- 'include/abi-bits/termios.h',
- 'include/abi-bits/time.h',
- 'include/abi-bits/blkcnt_t.h',
- 'include/abi-bits/blksize_t.h',
- 'include/abi-bits/dev_t.h',
- 'include/abi-bits/gid_t.h',
- 'include/abi-bits/ino_t.h',
- 'include/abi-bits/mode_t.h',
- 'include/abi-bits/nlink_t.h',
- 'include/abi-bits/pid_t.h',
- 'include/abi-bits/uid_t.h',
- 'include/abi-bits/access.h',
- 'include/abi-bits/wait.h',
- 'include/abi-bits/limits.h',
- 'include/abi-bits/utsname.h',
- 'include/abi-bits/ptrace.h',
- 'include/abi-bits/poll.h',
- 'include/abi-bits/epoll.h',
- 'include/abi-bits/packet.h',
- 'include/abi-bits/inotify.h',
- 'include/abi-bits/clockid_t.h',
- 'include/abi-bits/shm.h',
- 'include/abi-bits/mqueue.h',
- 'include/abi-bits/suseconds_t.h',
- 'include/abi-bits/fsfilcnt_t.h',
- 'include/abi-bits/fsblkcnt_t.h',
- 'include/abi-bits/socklen_t.h',
- 'include/abi-bits/statfs.h',
- 'include/abi-bits/statvfs.h',
- 'include/abi-bits/ioctls.h',
- 'include/abi-bits/xattr.h',
- subdir: 'abi-bits',
- follow_symlinks: true
- )
-
- install_headers(
- 'include/keyronex/syscall.h',
- subdir: 'keyronex',
- )
-endif
-
-if not headers_only
- crt = custom_target('crt0',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: host_machine.cpu_family() / 'crt-src/crt0.S',
- output: 'crt0.o',
- install: true,
- install_dir: get_option('libdir')
- )
-
- custom_target('crti',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: host_machine.cpu_family() / 'crt-src/crti.S',
- output: 'crti.o',
- install: true,
- install_dir: get_option('libdir')
- )
-
- custom_target('crtn',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: host_machine.cpu_family() / 'crt-src/crtn.S',
- output: 'crtn.o',
- install: true,
- install_dir: get_option('libdir')
- )
-endif
-
diff --git a/lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crt0.S b/lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crt0.S
deleted file mode 100644
index d16a46f..0000000
--- a/lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crt0.S
+++ /dev/null
@@ -1,7 +0,0 @@
-.section .text
-.global _start
-_start:
- mov $main, %rdi
- call __mlibc_entry
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crti.S b/lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crti.S
deleted file mode 100644
index 911b078..0000000
--- a/lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crti.S
+++ /dev/null
@@ -1,11 +0,0 @@
-.section .init
-.global _init
-_init:
- push %rax
-
-.section .fini
-.global _fini
-_fini:
- push %rax
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crtn.S b/lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crtn.S
deleted file mode 100644
index 0187e50..0000000
--- a/lib/mlibc/sysdeps/keyronex/x86_64/crt-src/crtn.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .init
- pop %rax
- ret
-
-.section .fini
- pop %rax
- ret
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/lemon/crt-x86_64/crt0.S b/lib/mlibc/sysdeps/lemon/crt-x86_64/crt0.S
deleted file mode 100755
index 62298e3..0000000
--- a/lib/mlibc/sysdeps/lemon/crt-x86_64/crt0.S
+++ /dev/null
@@ -1,10 +0,0 @@
-.section .text
-
-.global _start
-_start:
- mov $main, %rdi
- call __mlibc_entry
-
-.size _start, . - _start
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/lemon/generic/entry.cpp b/lib/mlibc/sysdeps/lemon/generic/entry.cpp
deleted file mode 100644
index f4cf144..0000000
--- a/lib/mlibc/sysdeps/lemon/generic/entry.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <stdint.h>
-#include <stdlib.h>
-#include <bits/ensure.h>
-#include <mlibc/elf/startup.h>
-
-// defined by the POSIX library
-void __mlibc_initLocale();
-
-extern "C" uintptr_t *__dlapi_entrystack();
-
-extern char **environ;
-static mlibc::exec_stack_data __mlibc_stack_data;
-
-struct LibraryGuard {
- LibraryGuard();
-};
-
-static LibraryGuard guard;
-
-LibraryGuard::LibraryGuard() {
- __mlibc_initLocale();
-
- // Parse the exec() stack.
- mlibc::parse_exec_stack(__dlapi_entrystack(), &__mlibc_stack_data);
- mlibc::set_startup_data(__mlibc_stack_data.argc, __mlibc_stack_data.argv,
- __mlibc_stack_data.envp);
-}
-
-extern "C" void __mlibc_entry(int (*main_fn)(int argc, char *argv[], char *env[])) {
- // TODO: call __dlapi_enter, otherwise static builds will break (see Linux sysdeps)
- auto result = main_fn(__mlibc_stack_data.argc, __mlibc_stack_data.argv, environ);
- exit(result);
-}
diff --git a/lib/mlibc/sysdeps/lemon/generic/filesystem.cpp b/lib/mlibc/sysdeps/lemon/generic/filesystem.cpp
deleted file mode 100755
index 4a7d780..0000000
--- a/lib/mlibc/sysdeps/lemon/generic/filesystem.cpp
+++ /dev/null
@@ -1,406 +0,0 @@
-#include <lemon/syscall.h>
-
-#include <asm/ioctls.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <dirent.h>
-#include <limits.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <bits/ensure.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/debug.hpp>
-
-namespace mlibc{
-
-typedef struct {
- dev_t st_dev;
- ino_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- uid_t st_gid;
- dev_t st_rdev;
- off_t st_size;
- int64_t st_blksize;
- int64_t st_blocks;
-} lemon_stat_t;
-
-int sys_write(int fd, const void* buffer, size_t count, ssize_t* written){
- long ret = syscall(SYS_WRITE, fd, (uintptr_t)buffer, count);
-
- if(ret < 0)
- return -ret;
-
- *written = ret;
- return 0;
-}
-
-int sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read) {
- long ret = syscall(SYS_READ, fd, (uintptr_t)buf, count);
-
- if(ret < 0){
- *bytes_read = 0;
- return -ret;
- }
-
- *bytes_read = ret;
- return 0;
-}
-
-int sys_pwrite(int fd, const void* buffer, size_t count, off_t off, ssize_t* written){
- int ret = syscall(SYS_PWRITE, fd, (uintptr_t)buffer, count, 0, off);
-
-
- if(ret < 0){
- return -ret;
- }
-
- *written = ret;
- return 0;
-}
-
-int sys_pread(int fd, void *buf, size_t count, off_t off, ssize_t *bytes_read) {
- int ret = syscall(SYS_PREAD, fd, (uintptr_t)buf, count, 0, off);
-
- if(ret < 0){
- return -ret;
- }
-
- *bytes_read = ret;
- return 0;
-}
-
-int sys_seek(int fd, off_t offset, int whence, off_t *new_offset) {
- long ret = syscall(SYS_LSEEK, fd, offset, whence);
-
- if(ret < 0){
- return -ret;
- }
-
- *new_offset = ret;
- return 0;
-}
-
-
-int sys_open(const char* filename, int flags, mode_t mode, int* fd){
- long ret = syscall(SYS_OPEN, (uintptr_t)filename, flags);
-
- if(ret < 0)
- return -ret;
-
- *fd = ret;
-
- return 0;
-}
-
-int sys_close(int fd){
- syscall(SYS_CLOSE, fd);
- return 0;
-}
-
-int sys_access(const char* filename, int mode){
- int fd;
- if(int e = sys_open(filename, O_RDONLY, 0, &fd)){
- return e;
- }
-
- sys_close(fd);
- return 0;
-}
-
-int sys_stat(fsfd_target fsfdt, int fd, const char *path, int flags, struct stat *statbuf){
- long ret = 0;
-
- lemon_stat_t lemonStat;
- switch(fsfdt){
- case fsfd_target::fd:
- ret = syscall(SYS_FSTAT, &lemonStat, fd);
- break;
- case fsfd_target::path:
- ret = syscall(SYS_STAT, &lemonStat, path);
- break;
- default:
- mlibc::infoLogger() << "mlibc warning: sys_stat: unsupported fsfd target" << frg::endlog;
- return EINVAL;
- }
-
- statbuf->st_dev = lemonStat.st_dev;
- statbuf->st_ino = lemonStat.st_ino;
- statbuf->st_mode = lemonStat.st_mode;
- statbuf->st_nlink = lemonStat.st_nlink;
- statbuf->st_uid = lemonStat.st_uid;
- statbuf->st_gid = lemonStat.st_gid;
- statbuf->st_rdev = lemonStat.st_rdev;
- statbuf->st_size = lemonStat.st_size;
- statbuf->st_blksize = lemonStat.st_blksize;
- statbuf->st_blocks = lemonStat.st_blocks;
-
- return -ret;
-}
-
-int sys_ioctl(int fd, unsigned long request, void *arg, int *result){
- long ret = syscall(SYS_IOCTL, fd, request, arg, result);
-
- if(ret < 0)
- return -ret;
-
- return 0;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-int sys_poll(struct pollfd *fds, nfds_t count, int timeout, int *num_events){
- long ret = syscall(SYS_POLL, fds, count, timeout);
-
- if(ret < 0){
- return -ret;
- }
-
- *num_events = ret;
-
- return 0;
-}
-
-int sys_mkdir(const char* path, mode_t){
- long ret = syscall(SYS_MKDIR, path);
-
- if(ret < 0){
- return -ret;
- }
-
- return 0;
-}
-
-int sys_rmdir(const char* path){
- long ret = syscall(SYS_RMDIR, path);
-
- if(ret < 0){
- return -ret;
- }
-
- return 0;
-}
-
-int sys_link(const char* srcpath, const char* destpath){
- long ret = syscall(SYS_LINK, srcpath, destpath);
-
- if(ret < 0){
- return -ret;
- }
-
- return 0;
-}
-
-int sys_unlinkat(int fd, const char *path, int flags) {
- long ret = syscall(SYS_UNLINK, fd, path, flags);
-
- if(ret < 0) {
- return -ret;
- }
-
- return 0;
-}
-
-typedef struct lemon_dirent {
- uint32_t inode; // Inode number
- uint32_t type;
- char name[NAME_MAX]; // Filename
-} lemon_dirent_t;
-
-int sys_read_entries(int handle, void *buffer, size_t max_size, size_t *bytes_read){
- lemon_dirent_t lemonDirent;
- long ret = syscall(SYS_READDIR_NEXT, handle, &lemonDirent);
-
- if(!ret){
- *bytes_read = 0;
- return 0;
- } else if(ret > 0){
- dirent* dir = (dirent*)buffer;
- strcpy(dir->d_name, lemonDirent.name);
- dir->d_ino = lemonDirent.inode;
- dir->d_off = 0;
- dir->d_reclen = sizeof(dirent);
- dir->d_type = lemonDirent.type;
-
- *bytes_read = sizeof(dirent);
- return 0;
- } else {
- return -ret;
- }
-}
-
-int sys_open_dir(const char* path, int* handle){
- return sys_open(path, O_DIRECTORY, 0, handle);
-}
-
-int sys_rename(const char* path, const char* new_path){
- return -syscall(SYS_RENAME, path, new_path);
-}
-
-int sys_readlink(const char *path, void *buffer, size_t max_size, ssize_t *length){
- long ret = syscall(SYS_READLINK, path, buffer, max_size);
- if(ret < 0){
- return -ret;
- }
-
- *length = ret;
- return 0;
-}
-
-int sys_dup(int fd, int flags, int* newfd){
- int ret = syscall(SYS_DUP, fd, flags, -1);
- if(ret < 0){
- return -ret;
- }
-
- *newfd = ret;
- return 0;
-}
-
-int sys_dup2(int fd, int flags, int newfd){
- int ret = syscall(SYS_DUP, fd, flags, newfd);
- if(ret < 0){
- return -ret;
- }
-
- return 0;
-}
-
-int sys_fcntl(int fd, int request, va_list args, int* result){
- if(request == F_DUPFD){
- return sys_dup(fd, 0, result);
- } else if (request == F_DUPFD_CLOEXEC) {
- return sys_dup(fd, O_CLOEXEC, result);
- } else if(request == F_GETFD){
- *result = 0;
- return 0;
- } else if(request == F_SETFD){
- if(va_arg(args, int) & FD_CLOEXEC) {
- return sys_ioctl(fd, FIOCLEX, NULL, result);
- } else {
- return sys_ioctl(fd, FIONCLEX, NULL, result);
- }
- } else if(request == F_GETFL){
- int ret = syscall(SYS_GET_FILE_STATUS_FLAGS, fd);
- if(ret < 0){
- return -ret;
- }
-
- *result = ret;
- return 0;
- } else if(request == F_SETFL){
- int ret = syscall(SYS_SET_FILE_STATUS_FLAGS, fd, va_arg(args, int));
- return -ret;
- } else {
- infoLogger() << "mlibc: sys_fcntl unsupported request (" << request << ")" << frg::endlog;
- return EINVAL;
- }
-}
-
-int sys_pselect(int nfds, fd_set* readfds, fd_set* writefds,
- fd_set *exceptfds, const struct timespec* timeout, const sigset_t* sigmask, int *num_events){
- int ret = syscall(SYS_SELECT, nfds, readfds, writefds, exceptfds, timeout);
- if(ret < 0){
- return -ret;
- }
-
- *num_events = ret;
- return 0;
-}
-
-int sys_chmod(const char *pathname, mode_t mode){
- int ret = syscall(SYS_CHMOD, pathname, mode);
-
- if(ret < 0){
- return -ret;
- }
-
- return 0;
-}
-
-int sys_pipe(int *fds, int flags){
- return -syscall(SYS_PIPE, fds, flags);
-}
-
-int sys_epoll_create(int flags, int *fd) {
- int ret = syscall(SYS_EPOLL_CREATE, flags);
-
- if(ret < 0){
- return -ret;
- }
-
- *fd = ret;
-
- return 0;
-}
-
-int sys_epoll_ctl(int epfd, int mode, int fd, struct epoll_event *ev) {
- int ret = syscall(SYS_EPOLL_CTL, epfd, mode, fd, ev);
-
- if(ret < 0) {
- return -ret;
- }
-
- return 0;
-}
-
-int sys_epoll_pwait(int epfd, struct epoll_event *ev, int n,
- int timeout, const sigset_t *sigmask, int *raised) {
- int ret = syscall(SYS_EPOLL_WAIT, epfd, ev, n, timeout, sigmask);
-
- if(ret < 0) {
- return -ret;
- }
-
- *raised = ret;
-
- return 0;
-}
-
-int sys_ttyname(int tty, char *buf, size_t size) {
- char path[PATH_MAX] = {"/dev/pts/"};
-
- struct stat stat;
- if(int e = sys_stat(fsfd_target::fd, tty, nullptr, 0, &stat)) {
- return e;
- }
-
- if(!S_ISCHR(stat.st_mode)) {
- return ENOTTY; // Not a char device, isn't a tty
- }
-
- if(sys_isatty(tty)) {
- return ENOTTY;
- }
-
- // Look for tty in /dev/pts
- int ptDir = open("/dev/pts", O_DIRECTORY);
- __ensure(ptDir >= 0);
-
- struct dirent dirent;
- size_t direntBytesRead;
- while(!sys_read_entries(ptDir, &dirent, sizeof(dirent), &direntBytesRead) && direntBytesRead) {
- // Compare the inodes
- if(dirent.d_ino == stat.st_ino) {
- __ensure(strlen(path) + strlen(dirent.d_name) < PATH_MAX);
- strcat(path, dirent.d_name);
-
- strncpy(buf, path, size);
- return 0;
- }
- }
-
- // Could not find corresponding TTY in /dev/pts
- return ENODEV;
-}
-
-int sys_fchdir(int fd) {
- return syscall(SYS_FCHDIR, fd);
-}
-#endif
-
-}
diff --git a/lib/mlibc/sysdeps/lemon/generic/lemon.cpp b/lib/mlibc/sysdeps/lemon/generic/lemon.cpp
deleted file mode 100644
index 8f15ff1..0000000
--- a/lib/mlibc/sysdeps/lemon/generic/lemon.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-#include <lemon/syscall.h>
-#include <stddef.h>
-#include <bits/ensure.h>
-#include <abi-bits/pid_t.h>
-#include <mlibc/debug.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/thread-entry.hpp>
-#include <errno.h>
-#include <sys/resource.h>
-
-namespace mlibc{
-
-int sys_futex_tid(){
- return syscall(SYS_GETTID);
-}
-
-int sys_futex_wait(int *pointer, int expected, const struct timespec *time){
- return syscall(SYS_FUTEX_WAIT, pointer, expected);
-}
-
-int sys_futex_wake(int *pointer) {
- return syscall(SYS_FUTEX_WAKE, pointer);
-}
-
-int sys_tcb_set(void* pointer){
- syscall(SYS_SET_FS_BASE, (uintptr_t)pointer);
- return 0;
-}
-
-int sys_vm_map(void *hint, size_t size, int prot, int flags, int fd, off_t offset, void **window) {
- __ensure(flags & MAP_ANONYMOUS);
-
- return syscall(SYS_MMAP, (uintptr_t)window, (size + 0xFFF) & ~static_cast<size_t>(0xFFF), (uintptr_t)hint, flags);
-}
-
-int sys_vm_unmap(void* address, size_t size) {
- __ensure(!(size & 0xFFF));
-
- long ret = syscall(SYS_MUNMAP, (uintptr_t)address, (size + 0xFFF) & ~static_cast<size_t>(0xFFF));
-
- return ret;
-}
-
-int sys_anon_allocate(size_t size, void **pointer) {
- return sys_vm_map(nullptr, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, -1, 0, pointer);
-}
-
-int sys_anon_free(void *pointer, size_t size) {
- return sys_vm_unmap(pointer, size);
-}
-
-void sys_libc_panic(){
- sys_libc_log("libc panic!");
- __builtin_trap();
- for(;;);
-}
-
-void sys_libc_log(const char* msg){
- syscall(0, (uintptr_t)msg);
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-void sys_exit(int status){
- syscall(SYS_EXIT, status);
-
- __builtin_unreachable();
-}
-
-pid_t sys_getpid(){
- uint64_t _pid;
- syscall(SYS_GETPID, (uintptr_t)&_pid);
-
- pid_t pid = _pid;
- return pid;
-}
-
-pid_t sys_getppid(){
- return syscall(SYS_GETPPID);
-}
-
-int sys_clock_get(int clock, time_t *secs, long *nanos) {
- syscall(SYS_UPTIME, nanos);
-
- *secs = (*nanos) / 1000000000;
- *nanos = (*nanos) - (*secs) * 1000000000;
-
- return 0;
-}
-
-int sys_getcwd(char *buffer, size_t size){
- return syscall(SYS_GET_CWD, buffer, size);
-}
-
-int sys_chdir(const char *path){
- syscall(SYS_CHDIR, path);
- return 0;
-}
-
-int sys_sleep(time_t* sec, long* nanosec){
- syscall(SYS_NANO_SLEEP, (*sec) * 1000000000 + (*nanosec));
- return 0;
-}
-
-uid_t sys_getuid(){
- return syscall(SYS_GETUID);
-}
-
-uid_t sys_geteuid(){
- return syscall(SYS_GETEUID);
-}
-
-int sys_setuid(uid_t uid){
- return -syscall(SYS_SETUID, uid);
-}
-
-int sys_seteuid(uid_t euid){
- return -syscall(SYS_SETEUID, euid);
-}
-
-gid_t sys_getgid(){
- return syscall(SYS_GETGID);
-}
-
-gid_t sys_getegid(){
- return syscall(SYS_GETEGID);
-}
-
-int sys_setgid(gid_t gid){
- mlibc::infoLogger() << "mlibc: sys_setgid is a stub" << frg::endlog;
- return 0;
-}
-
-int sys_setegid(gid_t egid){
- mlibc::infoLogger() << "mlibc: sys_setegid is a stub" << frg::endlog;
- return 0;
-}
-
-void sys_yield(){
- syscall(SYS_YIELD);
-}
-
-int sys_clone(void *tcb, pid_t *tid_out, void *stack){
- pid_t tid = syscall(SYS_SPAWN_THREAD, __mlibc_start_thread, stack);
-
- if(tid < 0){
- errno = tid;
- return -1;
- }
-
- *tid_out = tid;
-
- return 0;
-}
-
-void sys_thread_exit(){
- syscall(SYS_EXIT_THREAD);
-
- __builtin_unreachable();
-}
-
-int sys_waitpid(pid_t pid, int *status, int flags, struct rusage *ru, pid_t *ret_pid){
- if(ru) {
- mlibc::infoLogger() << "mlibc: struct rusage in sys_waitpid is unsupported" << frg::endlog;
- return ENOSYS;
- }
-
- pid_t ret = syscall(SYS_WAIT_PID, pid, status, flags);
-
- if(ret < 0){
- return -ret;
- }
-
- *ret_pid = ret;
-
- return 0;
-}
-
-int sys_fork(pid_t *child){
- long pid = syscall(SYS_FORK, 0);
- if(pid < 0){
- errno = pid;
- return -1;
- }
-
- *child = pid;
- return 0;
-}
-
-int sys_execve(const char *path, char *const argv[], char *const envp[]){
- return -syscall(SYS_EXECVE, path, argv, envp);
-}
-
-int sys_getentropy(void *buffer, size_t length){
- return -syscall(SYS_GETENTROPY, buffer, length);
-}
-#endif
-
-}
diff --git a/lib/mlibc/sysdeps/lemon/generic/pty.cpp b/lib/mlibc/sysdeps/lemon/generic/pty.cpp
deleted file mode 100644
index 794f74f..0000000
--- a/lib/mlibc/sysdeps/lemon/generic/pty.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <asm/ioctls.h>
-#include <sys/ioctl.h>
-
-#include <errno.h>
-
-#include <bits/ensure.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/debug.hpp>
-
-#include <stdio.h>
-
-namespace mlibc {
-
-int sys_isatty(int fd) {
- struct winsize ws;
- long ret = sys_ioctl(fd, TIOCGWINSZ, &ws, 0);
-
- if(!ret) return 0;
-
- return ENOTTY;
-}
-
-int sys_tcgetattr(int fd, struct termios *attr) {
- if(int e = sys_isatty(fd))
- return e;
-
- int ret;
- sys_ioctl(fd, TCGETS, attr, &ret);
-
- if(ret)
- return -ret;
-
- return 0;
-}
-
-int sys_tcsetattr(int fd, int optional_action, const struct termios *attr) {
- if(int e = sys_isatty(fd))
- return e;
-
- if(optional_action){
- mlibc::infoLogger() << "mlibc warning: sys_tcsetattr ignores optional_action" << frg::endlog;
- }
-
- int ret;
- sys_ioctl(fd, TCSETS, const_cast<struct termios*>(attr), &ret);
-
- if(ret)
- return -ret;
-
- return 0;
-}
-
-int sys_ptsname(int fd, char *buffer, size_t length) {
- int index;
- if(int e = sys_ioctl(fd, TIOCGPTN, &index, NULL); e)
- return e;
- if((size_t)snprintf(buffer, length, "/dev/pts/%d", index) >= length) {
- return ERANGE;
- }
- return 0;
-}
-
-}
diff --git a/lib/mlibc/sysdeps/lemon/generic/signals.cpp b/lib/mlibc/sysdeps/lemon/generic/signals.cpp
deleted file mode 100644
index 46b4714..0000000
--- a/lib/mlibc/sysdeps/lemon/generic/signals.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <lemon/syscall.h>
-
-#include <sys/types.h>
-
-#include <mlibc/ansi-sysdeps.hpp>
-
-namespace mlibc{
-
-int sys_sigprocmask(int how, const sigset_t *__restrict set,
- sigset_t *__restrict retrieve){
- int ret = syscall(SYS_SIGPROCMASK, how, set, retrieve);
- if(ret < 0){
- return -ret;
- }
-
- return 0;
-}
-
-int sys_sigaction(int signal, const struct sigaction *__restrict action,
- struct sigaction *__restrict oldAction) {
- int ret = syscall(SYS_SIGNAL_ACTION, signal, action, oldAction);
- if(ret < 0){
- return -ret;
- }
-
- return 0;
-}
-
-int sys_kill(int pid, int signal){
- int ret = syscall(SYS_KILL, pid, signal);
- if(ret < 0){
- return -ret;
- }
-
- return 0;
-}
-
-} \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/generic/sockets.cpp b/lib/mlibc/sysdeps/lemon/generic/sockets.cpp
deleted file mode 100755
index 7244218..0000000
--- a/lib/mlibc/sysdeps/lemon/generic/sockets.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-#include <lemon/syscall.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-
-#include <mlibc/all-sysdeps.hpp>
-
-namespace {
-
-int fcntl_helper(int fd, int request, int *result, ...) {
- va_list args;
- va_start(args, result);
- if(!mlibc::sys_fcntl) {
- return ENOSYS;
- }
- int ret = mlibc::sys_fcntl(fd, request, args, result);
- va_end(args);
- return ret;
-}
-
-}
-
-namespace mlibc{
-
-int sys_socket(int domain, int type, int protocol, int *fd){
- long ret = syscall(SYS_SOCKET, domain, type, protocol);
-
- if(ret < 0){
- return -ret;
- }
-
- *fd = ret;
-
- return 0;
-}
-
-int sys_bind(int sockfd, const struct sockaddr *addr_ptr, socklen_t addrlen){
- return syscall(SYS_BIND, sockfd, addr_ptr, addrlen);
-}
-
-int sys_connect(int sockfd, const struct sockaddr *addr_ptr, socklen_t addrlen){
- return syscall(SYS_CONNECT, sockfd, addr_ptr, addrlen);
-}
-
-int sys_accept(int fd, int *newfd, struct sockaddr *addr_ptr, socklen_t *addr_length, int flags){
- long ret = syscall(SYS_ACCEPT, fd);
-
- if(ret < 0){
- return -ret;
- }
-
- *newfd = ret;
-
- if(flags & SOCK_NONBLOCK) {
- int fcntl_ret = 0;
- fcntl_helper(*newfd, F_GETFL, &fcntl_ret);
- fcntl_helper(*newfd, F_SETFL, &fcntl_ret, fcntl_ret | O_NONBLOCK);
- }
-
- if(flags & SOCK_CLOEXEC) {
- int fcntl_ret = 0;
- fcntl_helper(*newfd, F_GETFD, &fcntl_ret);
- fcntl_helper(*newfd, F_SETFD, &fcntl_ret, fcntl_ret | FD_CLOEXEC);
- }
-
- return 0;
-}
-
-int sys_listen(int fd, int backlog){
- return syscall(SYS_LISTEN, fd, backlog);
-}
-
-int sys_msg_recv(int sockfd, struct msghdr *hdr, int flags, ssize_t *length){
- long ret = syscall(SYS_RECVMSG, sockfd, hdr, flags);
-
- if(ret < 0){
- return -ret;
- }
-
- *length = ret;
-
- return 0;
-}
-
-int sys_msg_send(int sockfd, const struct msghdr *hdr, int flags, ssize_t *length){
- long ret = syscall(SYS_SENDMSG, sockfd, hdr, flags);
-
- if(ret < 0){
- return -ret;
- }
-
- *length = ret;
-
- return 0;
-}
-
-int sys_setsockopt(int fd, int layer, int number, const void *buffer, socklen_t size){
- long ret = syscall(SYS_SET_SOCKET_OPTIONS, fd, layer, number, buffer, size);
-
- if(ret < 0){
- return -ret;
- }
-
- return 0;
-}
-
-int sys_getsockopt(int fd, int layer, int number, void *__restrict buffer, socklen_t *__restrict size){
- long ret = syscall(SYS_GET_SOCKET_OPTIONS, fd, layer, number, buffer, size);
-
- if(ret < 0){
- return -ret;
- }
-
- return 0;
-}
-
-int sys_socketpair(int domain, int type_and_flags, int proto, int *fds){
- return -syscall(SYS_SOCKETPAIR, domain, type_and_flags, proto, fds);
-}
-
-int sys_sockname(int fd, struct sockaddr *addr_ptr, socklen_t max_addr_length,
- socklen_t *actual_length) {
- return -syscall(SYS_SOCKNAME, fd, addr_ptr, max_addr_length);
-}
-
-int sys_peername(int fd, struct sockaddr *addr_ptr, socklen_t max_addr_length,
- socklen_t *actual_length) {
- return -syscall(SYS_PEERNAME, fd, addr_ptr, max_addr_length);
-}
-
-}
diff --git a/lib/mlibc/sysdeps/lemon/generic/thread.cpp b/lib/mlibc/sysdeps/lemon/generic/thread.cpp
deleted file mode 100644
index 42cd758..0000000
--- a/lib/mlibc/sysdeps/lemon/generic/thread.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <mlibc/thread-entry.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/tcb.hpp>
-#include <bits/ensure.h>
-#include <sys/mman.h>
-#include <stdint.h>
-#include <stddef.h>
-
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg, Tcb *tcb) {
- // Wait until our parent sets up the TID.
- while(!__atomic_load_n(&tcb->tid, __ATOMIC_RELAXED))
- mlibc::sys_futex_wait(&tcb->tid, 0, nullptr);
-
- if(mlibc::sys_tcb_set(tcb))
- __ensure(!"sys_tcb_set() failed");
-
- tcb->invokeThreadFunc(entry, user_arg);
-
- auto self = reinterpret_cast<Tcb *>(tcb);
-
- __atomic_store_n(&self->didExit, 1, __ATOMIC_RELEASE);
- mlibc::sys_futex_wake(&self->didExit);
-
- mlibc::sys_thread_exit();
-}
-
-namespace mlibc {
-
-static constexpr size_t default_stacksize = 0x200000;
-
-int sys_prepare_stack(void **stack, void *entry, void *user_arg, void *tcb, size_t *stack_size, size_t *guard_size, void **stack_base) {
- if (!*stack_size)
- *stack_size = default_stacksize;
- *guard_size = 0;
-
- if (*stack) {
- *stack_base = *stack;
- } else {
- *stack_base = mmap(nullptr, *stack_size,
- PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- }
-
- uintptr_t *sp = reinterpret_cast<uintptr_t *>(reinterpret_cast<uintptr_t>(*stack_base) + *stack_size);
-
- *--sp = reinterpret_cast<uintptr_t>(tcb);
- *--sp = reinterpret_cast<uintptr_t>(user_arg);
- *--sp = reinterpret_cast<uintptr_t>(entry);
- *stack = reinterpret_cast<void*>(sp);
- return 0;
-}
-
-} //namespace mlibc
diff --git a/lib/mlibc/sysdeps/lemon/generic/thread_entry.S b/lib/mlibc/sysdeps/lemon/generic/thread_entry.S
deleted file mode 100644
index 51e703b..0000000
--- a/lib/mlibc/sysdeps/lemon/generic/thread_entry.S
+++ /dev/null
@@ -1,11 +0,0 @@
-
-.section .text
-.global __mlibc_start_thread
-__mlibc_start_thread:
- pop %rdi
- pop %rsi
- pop %rdx
- call __mlibc_enter_thread
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/access.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/access.h
deleted file mode 120000
index 171f75f..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/access.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/access.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/auxv.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/auxv.h
deleted file mode 120000
index 0f14415..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/auxv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/lemon/auxv.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/blkcnt_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/blkcnt_t.h
deleted file mode 120000
index e9d9f1b..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/blkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/blkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/blksize_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/blksize_t.h
deleted file mode 120000
index c6dfb6e..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/blksize_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/blksize_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/clockid_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/clockid_t.h
deleted file mode 120000
index 71f37bb..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/clockid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/clockid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/dev_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/dev_t.h
deleted file mode 120000
index 0c1143b..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/dev_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/dev_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/epoll.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/epoll.h
deleted file mode 120000
index 9efc3a0..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/epoll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/epoll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/errno.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/errno.h
deleted file mode 120000
index 589859f..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/errno.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/errno.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/fcntl.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/fcntl.h
deleted file mode 120000
index ea5323a..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/fcntl.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/fsblkcnt_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/fsblkcnt_t.h
deleted file mode 120000
index 898dfb2..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/fsblkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsblkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/fsfilcnt_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/fsfilcnt_t.h
deleted file mode 120000
index 791755c..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/fsfilcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsfilcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/gid_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/gid_t.h
deleted file mode 120000
index 6a77218..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/gid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/gid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/in.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/in.h
deleted file mode 120000
index b58c683..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/in.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/in.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/ino_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/ino_t.h
deleted file mode 120000
index 10d644e..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/ino_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/ino_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/inotify.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/inotify.h
deleted file mode 120000
index 3f19ef6..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/inotify.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/inotify.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/ioctls.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/ioctls.h
deleted file mode 120000
index 595106b..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/ioctls.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ioctls.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/limits.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/limits.h
deleted file mode 120000
index 1aa5894..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/limits.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/limits.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/mode_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/mode_t.h
deleted file mode 120000
index 29d7733..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/mode_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/mode_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/mqueue.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/mqueue.h
deleted file mode 120000
index fa87b07..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/mqueue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mqueue.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/msg.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/msg.h
deleted file mode 120000
index f402b49..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/msg.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/msg.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/nlink_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/nlink_t.h
deleted file mode 120000
index 7618c27..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/nlink_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/nlink_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/packet.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/packet.h
deleted file mode 120000
index 47067e2..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/packet.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/packet.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/pid_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/pid_t.h
deleted file mode 120000
index 3fd26a7..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/pid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/pid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/poll.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/poll.h
deleted file mode 120000
index ab989c7..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/poll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/poll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/ptrace.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/ptrace.h
deleted file mode 120000
index f391fb7..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/ptrace.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/ptrace.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/reboot.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/reboot.h
deleted file mode 120000
index 77013a4..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/reboot.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/reboot.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/resource.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/resource.h
deleted file mode 120000
index 3e59c75..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/resource.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/seek-whence.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/seek-whence.h
deleted file mode 120000
index df7bccf..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/seek-whence.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/seek-whence.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/shm.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/shm.h
deleted file mode 120000
index 067d8c4..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/shm.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/shm.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/signal.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/signal.h
deleted file mode 120000
index 4dcb0b7..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/signal.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/signal.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/socket.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/socket.h
deleted file mode 120000
index f1dc016..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/socket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socket.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/socklen_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/socklen_t.h
deleted file mode 120000
index 41f3b11..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/socklen_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socklen_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/stat.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/stat.h
deleted file mode 120000
index 82642c3..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/stat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/stat.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/statfs.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/statfs.h
deleted file mode 120000
index e3d202f..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/statfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/statvfs.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/statvfs.h
deleted file mode 120000
index 1fc80c2..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/statvfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statvfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/suseconds_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/suseconds_t.h
deleted file mode 120000
index 9ed6597..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/suseconds_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/suseconds_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/termios.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/termios.h
deleted file mode 120000
index ee8f0b0..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/termios.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/termios.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/time.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/time.h
deleted file mode 120000
index 97f3d52..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/time.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/time.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/uid_t.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/uid_t.h
deleted file mode 120000
index 1113eba..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/uid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/uid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/utsname.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/utsname.h
deleted file mode 120000
index 17b993f..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/utsname.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/utsname.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/vm-flags.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/vm-flags.h
deleted file mode 120000
index f1a985e..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/vm-flags.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/mlibc/vm-flags.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/wait.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/wait.h
deleted file mode 120000
index feb2840..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/wait.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/wait.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/abi-bits/xattr.h b/lib/mlibc/sysdeps/lemon/include/abi-bits/xattr.h
deleted file mode 120000
index 66412d7..0000000
--- a/lib/mlibc/sysdeps/lemon/include/abi-bits/xattr.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/xattr.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lemon/include/lemon/syscall.h b/lib/mlibc/sysdeps/lemon/include/lemon/syscall.h
deleted file mode 100755
index 98db45d..0000000
--- a/lib/mlibc/sysdeps/lemon/include/lemon/syscall.h
+++ /dev/null
@@ -1,194 +0,0 @@
-#ifndef SYSCALL_H
-#define SYSCALL_H
-
-#include <stdint.h>
-
-#define SYS_EXIT 1
-#define SYS_EXEC 2
-#define SYS_READ 3
-#define SYS_WRITE 4
-#define SYS_OPEN 5
-#define SYS_CLOSE 6
-#define SYS_SLEEP 7
-#define SYS_CREATE 8
-#define SYS_LINK 9
-#define SYS_UNLINK 10
-#define SYS_EXECVE 11
-#define SYS_CHDIR 12
-#define SYS_TIME 13
-#define SYS_MAP_FB 14
-#define SYS_GETTID 15
-#define SYS_CHMOD 16
-#define SYS_FSTAT 17
-#define SYS_STAT 18
-#define SYS_LSEEK 19
-#define SYS_GETPID 20
-#define SYS_MOUNT 21
-#define SYS_MKDIR 22
-#define SYS_RMDIR 23
-#define SYS_RENAME 24
-#define SYS_YIELD 25
-#define SYS_READDIR_NEXT 26
-#define SYS_SEND_MESSAGE 28
-#define SYS_RECEIVE_MESSAGE 29
-#define SYS_UPTIME 30
-#define SYS_GET_VIDEO_MODE 31
-#define SYS_UNAME 32
-#define SYS_READDIR 33
-#define SYS_SET_FS_BASE 34
-#define SYS_MMAP 35
-#define SYS_GET_CWD 37
-#define SYS_WAIT_PID 38
-#define SYS_NANO_SLEEP 39
-#define SYS_PREAD 40
-#define SYS_PWRITE 41
-#define SYS_IOCTL 42
-#define SYS_INFO 43
-#define SYS_MUNMAP 44
-#define SYS_CREATE_SHARED_MEMORY 45
-#define SYS_MAP_SHARED_MEMORY 46
-#define SYS_UNMAP_SHARED_MEMORY 47
-#define SYS_DESTROY_SHARED_MEMORY 48
-#define SYS_SOCKET 49
-#define SYS_BIND 50
-#define SYS_LISTEN 51
-#define SYS_ACCEPT 52
-#define SYS_CONNECT 53
-#define SYS_SEND 54
-#define SYS_SENDTO 55
-#define SYS_RECEIVE 56
-#define SYS_RECEIVEFROM 57
-#define SYS_GETUID 58
-#define SYS_SETUID 59
-#define SYS_POLL 60
-#define SYS_SENDMSG 61
-#define SYS_RECVMSG 62
-#define SYS_GETEUID 63
-#define SYS_SETEUID 64
-#define SYS_GET_PROCESS_INFO 65
-#define SYS_GET_NEXT_PROCESS_INFO 66
-#define SYS_READLINK 67
-#define SYS_SPAWN_THREAD 68
-#define SYS_EXIT_THREAD 69
-#define SYS_FUTEX_WAKE 70
-#define SYS_FUTEX_WAIT 71
-#define SYS_DUP 72
-#define SYS_GET_FILE_STATUS_FLAGS 73
-#define SYS_SET_FILE_STATUS_FLAGS 74
-#define SYS_SELECT 75
-#define SYS_CREATE_SERVICE 76
-#define SYS_CREATE_INTERFACE 77
-#define SYS_INTERFACE_ACCEPT 78
-#define SYS_INTERFACE_CONNECT 79
-#define SYS_ENDPOINT_QUEUE 80
-#define SYS_ENDPOINT_DEQUEUE 81
-#define SYS_ENDPOINT_CALL 82
-#define SYS_ENDPOINT_INFO 83
-#define SYS_KERNELOBJECT_WAIT_ONE 84
-#define SYS_KERNELOBJECT_WAIT 85
-#define SYS_KERNELOBJECT_DESTROY 86
-#define SYS_SET_SOCKET_OPTIONS 87
-#define SYS_GET_SOCKET_OPTIONS 88
-#define SYS_DEVICE_MANAGEMENT 89
-#define SYS_INTERRUPT_THREAD 90
-#define SYS_LOAD_KERNEL_MODULE 91
-#define SYS_UNLOAD_KERNEL_MODULE 92
-#define SYS_FORK 93
-#define SYS_GETGID 94
-#define SYS_GETEGID 95
-#define SYS_GETPPID 96
-#define SYS_PIPE 97
-#define SYS_GETENTROPY 98
-#define SYS_SOCKETPAIR 99
-#define SYS_PEERNAME 100
-#define SYS_SOCKNAME 101
-#define SYS_SIGNAL_ACTION 102
-#define SYS_SIGPROCMASK 103
-#define SYS_KILL 104
-#define SYS_SIGNAL_RETURN 105
-#define SYS_ALARM 106
-#define SYS_GET_RESOURCE_LIMIT 107
-#define SYS_EPOLL_CREATE 108
-#define SYS_EPOLL_CTL 109
-#define SYS_EPOLL_WAIT 110
-#define SYS_FCHDIR 111
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-__attribute__((__always_inline__))
-static inline long syscalln0(uint64_t call) {
- volatile long ret;
- asm volatile("int $0x69" : "=a"(ret) : "a"(call));
- return ret;
-}
-
-__attribute__((__always_inline__))
-static long syscalln1(uint64_t call, uint64_t arg0) {
- volatile long ret;
- asm volatile("int $0x69" : "=a"(ret) : "a"(call), "D"(arg0) : "memory");
- return ret;
-}
-
-__attribute__((__always_inline__))
-static long syscalln2(uint64_t call, uint64_t arg0, uint64_t arg1) {
- volatile long ret;
- asm volatile("int $0x69" : "=a"(ret) : "a"(call), "D"(arg0), "S"(arg1) : "memory");
- return ret;
-}
-
-__attribute__((__always_inline__))
-static long syscalln3(uint64_t call, uint64_t arg0, uint64_t arg1, uint64_t arg2) {
- volatile long ret;
- asm volatile("int $0x69" : "=a"(ret) : "a"(call), "D"(arg0), "S"(arg1), "d"(arg2) : "memory");
- return ret;
-}
-
-__attribute__((__always_inline__))
-static long syscalln4(uint64_t call, uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3) {
- volatile long ret;
- register uint64_t arg3r asm("r10") = arg3; // put arg3 in r10
- asm volatile("int $0x69" : "=a"(ret) : "a"(call), "D"(arg0), "S"(arg1), "d"(arg2), "r"(arg3r) : "memory");
- return ret;
-}
-
-__attribute__((__always_inline__))
-static long syscalln5(uint64_t call, uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4) {
- volatile long ret;
- register uint64_t arg3r asm("r10") = arg3; // put arg3 in r10
- register uint64_t arg4r asm("r9") = arg4; // put arg4 in r9
- asm volatile("int $0x69" : "=a"(ret) : "a"(call), "D"(arg0), "S"(arg1), "d"(arg2), "r"(arg3r), "r"(arg4r) : "memory");
- return ret;
-}
-
-__attribute__((__always_inline__))
-static long syscalln6(uint64_t call, uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4, uint64_t arg5) {
- volatile long ret;
- register uint64_t arg3r asm("r10") = arg3; // put arg3 in r10
- register uint64_t arg4r asm("r9") = arg4; // put arg4 in r9
- register uint64_t arg5r asm("r8") = arg5; // put arg5 in r8
- asm volatile("int $0x69" : "=a"(ret) : "a"(call), "D"(arg0), "S"(arg1), "d"(arg2), "r"(arg3r), "r"(arg4r), "r"(arg5r) : "memory");
- return ret;
-}
-
-#ifdef __cplusplus
-}
- __attribute__((__always_inline__)) static inline long _syscall(uint64_t call) { return syscalln0(call); }
- __attribute__((__always_inline__)) static inline long _syscall(uint64_t call, uint64_t arg0) { return syscalln1(call, arg0); }
- __attribute__((__always_inline__)) static inline long _syscall(uint64_t call, uint64_t arg0, uint64_t arg1) { return syscalln2(call, arg0, arg1); }
- __attribute__((__always_inline__)) static inline long _syscall(uint64_t call, uint64_t arg0, uint64_t arg1, uint64_t arg2) { return syscalln3(call, arg0, arg1, arg2); }
- __attribute__((__always_inline__)) static inline long _syscall(uint64_t call, uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3) { return syscalln4(call, arg0, arg1, arg2, arg3); }
- __attribute__((__always_inline__)) static inline long _syscall(uint64_t call, uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4) { return syscalln5(call, arg0, arg1, arg2, arg3, arg4); }
- __attribute__((__always_inline__)) static inline long _syscall(uint64_t call, uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4, uint64_t arg5) { return syscalln6(call, arg0, arg1, arg2, arg3, arg4, arg5); }
-
- template<typename... T>
- __attribute__((__always_inline__)) static inline long syscall(uint64_t call, T... args){
- return _syscall(call, (uint64_t)(args)...);
- }
-#else
- #define GET_SYSCALL(a0, a1, a2, a3, a4, a5, a6, name, ...) name
- #define syscall(...) GET_SYSCALL(__VA_ARGS__, syscalln6, syscalln5, syscalln4, syscalln3, syscalln2, syscalln1, syscalln0)(__VA_ARGS__)
-#endif
-
-#endif
diff --git a/lib/mlibc/sysdeps/lemon/include/mlibc/thread-entry.hpp b/lib/mlibc/sysdeps/lemon/include/mlibc/thread-entry.hpp
deleted file mode 100644
index 2dd88a6..0000000
--- a/lib/mlibc/sysdeps/lemon/include/mlibc/thread-entry.hpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#pragma once
-
-#include <mlibc/tcb.hpp>
-
-extern "C" void __mlibc_start_thread(void);
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg, Tcb *tcb);
-
-namespace mlibc {
- void *prepare_stack(void *entry, void *user_arg, void *tcb);
-}
diff --git a/lib/mlibc/sysdeps/lemon/meson.build b/lib/mlibc/sysdeps/lemon/meson.build
deleted file mode 100644
index 8704b71..0000000
--- a/lib/mlibc/sysdeps/lemon/meson.build
+++ /dev/null
@@ -1,81 +0,0 @@
-
-rtdl_sources += files(
- 'generic/filesystem.cpp',
- 'generic/lemon.cpp',
-)
-
-libc_sources += files(
- 'generic/entry.cpp',
- 'generic/filesystem.cpp',
- 'generic/lemon.cpp',
- 'generic/pty.cpp',
- 'generic/signals.cpp',
- 'generic/sockets.cpp',
- 'generic/thread_entry.S',
- 'generic/thread.cpp'
-)
-
-if not no_headers
- install_headers(
- 'include/abi-bits/auxv.h',
- 'include/abi-bits/seek-whence.h',
- 'include/abi-bits/vm-flags.h',
- 'include/abi-bits/errno.h',
- 'include/abi-bits/fcntl.h',
- 'include/abi-bits/in.h',
- 'include/abi-bits/resource.h',
- 'include/abi-bits/signal.h',
- 'include/abi-bits/stat.h',
- 'include/abi-bits/socket.h',
- 'include/abi-bits/termios.h',
- 'include/abi-bits/time.h',
- 'include/abi-bits/blkcnt_t.h',
- 'include/abi-bits/blksize_t.h',
- 'include/abi-bits/dev_t.h',
- 'include/abi-bits/gid_t.h',
- 'include/abi-bits/ino_t.h',
- 'include/abi-bits/mode_t.h',
- 'include/abi-bits/nlink_t.h',
- 'include/abi-bits/pid_t.h',
- 'include/abi-bits/uid_t.h',
- 'include/abi-bits/access.h',
- 'include/abi-bits/wait.h',
- 'include/abi-bits/limits.h',
- 'include/abi-bits/utsname.h',
- 'include/abi-bits/ptrace.h',
- 'include/abi-bits/poll.h',
- 'include/abi-bits/epoll.h',
- 'include/abi-bits/packet.h',
- 'include/abi-bits/inotify.h',
- 'include/abi-bits/clockid_t.h',
- 'include/abi-bits/shm.h',
- 'include/abi-bits/mqueue.h',
- 'include/abi-bits/suseconds_t.h',
- 'include/abi-bits/fsfilcnt_t.h',
- 'include/abi-bits/fsblkcnt_t.h',
- 'include/abi-bits/socklen_t.h',
- 'include/abi-bits/statfs.h',
- 'include/abi-bits/statvfs.h',
- 'include/abi-bits/ioctls.h',
- 'include/abi-bits/xattr.h',
- 'include/abi-bits/msg.h',
- subdir: 'abi-bits',
- follow_symlinks: true
- )
- install_headers(
- 'include/lemon/syscall.h',
- subdir: 'lemon'
- )
-endif
-
-if not headers_only
- crt = custom_target('crt0',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: 'crt-x86_64/crt0.S',
- output: 'crt0.o',
- install: true,
- install_dir: get_option('libdir')
- )
-endif
-
diff --git a/lib/mlibc/sysdeps/linux/aarch64/arch-syscall.cpp b/lib/mlibc/sysdeps/linux/aarch64/arch-syscall.cpp
deleted file mode 100644
index b178538..0000000
--- a/lib/mlibc/sysdeps/linux/aarch64/arch-syscall.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-#include <sys/syscall.h>
-#include <bits/syscall.h>
-
-using sc_word_t = __sc_word_t;
-
-sc_word_t __do_syscall0(long sc) {
- register int sc_reg asm("x8") = sc;
- register sc_word_t ret asm("x0");
- asm volatile ("svc 0" : "=r"(ret) : "r"(sc_reg) : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall1(long sc,
- sc_word_t arg1) {
- register int sc_reg asm("x8") = sc;
- register sc_word_t arg1_reg asm("x0") = arg1;
- register sc_word_t ret asm("x0");
- asm volatile ("svc 0" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall2(long sc,
- sc_word_t arg1, sc_word_t arg2) {
- register int sc_reg asm("x8") = sc;
- register sc_word_t arg1_reg asm("x0") = arg1;
- register sc_word_t arg2_reg asm("x1") = arg2;
- register sc_word_t ret asm("x0");
- asm volatile ("svc 0" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg),
- "r"(arg2_reg)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall3(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3) {
- register int sc_reg asm("x8") = sc;
- register sc_word_t arg1_reg asm("x0") = arg1;
- register sc_word_t arg2_reg asm("x1") = arg2;
- register sc_word_t arg3_reg asm("x2") = arg3;
- register sc_word_t ret asm("x0");
- asm volatile ("svc 0" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg),
- "r"(arg2_reg),
- "r"(arg3_reg)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall4(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4) {
- register int sc_reg asm("x8") = sc;
- register sc_word_t arg1_reg asm("x0") = arg1;
- register sc_word_t arg2_reg asm("x1") = arg2;
- register sc_word_t arg3_reg asm("x2") = arg3;
- register sc_word_t arg4_reg asm("x3") = arg4;
- register sc_word_t ret asm("x0");
- asm volatile ("svc 0" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg),
- "r"(arg2_reg),
- "r"(arg3_reg),
- "r"(arg4_reg)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall5(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4, sc_word_t arg5) {
- register int sc_reg asm("x8") = sc;
- register sc_word_t arg1_reg asm("x0") = arg1;
- register sc_word_t arg2_reg asm("x1") = arg2;
- register sc_word_t arg3_reg asm("x2") = arg3;
- register sc_word_t arg4_reg asm("x3") = arg4;
- register sc_word_t arg5_reg asm("x4") = arg5;
- register sc_word_t ret asm("x0");
- asm volatile ("svc 0" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg),
- "r"(arg2_reg),
- "r"(arg3_reg),
- "r"(arg4_reg),
- "r"(arg5_reg)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall6(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4, sc_word_t arg5, sc_word_t arg6) {
- register int sc_reg asm("x8") = sc;
- register sc_word_t arg1_reg asm("x0") = arg1;
- register sc_word_t arg2_reg asm("x1") = arg2;
- register sc_word_t arg3_reg asm("x2") = arg3;
- register sc_word_t arg4_reg asm("x3") = arg4;
- register sc_word_t arg5_reg asm("x4") = arg5;
- register sc_word_t arg6_reg asm("x5") = arg6;
- register sc_word_t ret asm("x0");
- asm volatile ("svc 0" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg),
- "r"(arg2_reg),
- "r"(arg3_reg),
- "r"(arg4_reg),
- "r"(arg5_reg),
- "r"(arg6_reg)
- : "memory"
- );
- return ret;
-}
diff --git a/lib/mlibc/sysdeps/linux/aarch64/cp_syscall.S b/lib/mlibc/sysdeps/linux/aarch64/cp_syscall.S
deleted file mode 100644
index 98690c7..0000000
--- a/lib/mlibc/sysdeps/linux/aarch64/cp_syscall.S
+++ /dev/null
@@ -1,31 +0,0 @@
-.section .text
-.global __mlibc_do_asm_cp_syscall
-.global __mlibc_syscall_begin
-.global __mlibc_syscall_end
-.type __mlibc_do_asm_cp_syscall, "function"
-__mlibc_do_asm_cp_syscall:
- mov x8, x0
- mov x0, x1
- mov x1, x2
- mov x2, x3
- mov x3, x4
- mov x4, x5
- mov x5, x6
-
- mrs x7, tpidr_el0
- ldr w7, [x7, #-80] // Tcb::cancelBits. See asserts in tcb.hpp.
-__mlibc_syscall_begin:
- // tcbCancelEnableBit && tcbCancelTriggerBit
- mov x9, #((1 << 0) | (1 << 2))
- and x7, x7, x9
- cmp x7, x9
- b.eq cancel
- svc 0
-__mlibc_syscall_end:
- ret
-
-cancel:
- bl __mlibc_do_cancel
- brk #0
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/aarch64/crt-src/Scrt1.S b/lib/mlibc/sysdeps/linux/aarch64/crt-src/Scrt1.S
deleted file mode 100644
index 547499e..0000000
--- a/lib/mlibc/sysdeps/linux/aarch64/crt-src/Scrt1.S
+++ /dev/null
@@ -1,11 +0,0 @@
-.section .text
-.global _start
-_start:
- mov x0, sp
- adr x1, main
-
- bl __mlibc_entry
- brk #0
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/aarch64/crt-src/crt1.S b/lib/mlibc/sysdeps/linux/aarch64/crt-src/crt1.S
deleted file mode 100644
index 6550612..0000000
--- a/lib/mlibc/sysdeps/linux/aarch64/crt-src/crt1.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .text
-.global _start
-_start:
- mov x0, sp
- adrp x1, main
- add x1, x1, :lo12:main
- bl __mlibc_entry
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/aarch64/crt-src/crti.S b/lib/mlibc/sysdeps/linux/aarch64/crt-src/crti.S
deleted file mode 100644
index 0f5ca0f..0000000
--- a/lib/mlibc/sysdeps/linux/aarch64/crt-src/crti.S
+++ /dev/null
@@ -1,13 +0,0 @@
-.section .init
-.global _init
-_init:
- stp x29, x30, [sp, -16]!
- mov x29, sp
-
-.section .fini
-.global _fini
-_fini:
- stp x29, x30, [sp, -16]!
- mov x29, sp
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/aarch64/crt-src/crtn.S b/lib/mlibc/sysdeps/linux/aarch64/crt-src/crtn.S
deleted file mode 100644
index cd95321..0000000
--- a/lib/mlibc/sysdeps/linux/aarch64/crt-src/crtn.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .init
- ldp x29, x30, [sp], #16
- ret
-
-.section .fini
- ldp x29, x30, [sp], #16
- ret
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/aarch64/signals.S b/lib/mlibc/sysdeps/linux/aarch64/signals.S
deleted file mode 100644
index 923d8d7..0000000
--- a/lib/mlibc/sysdeps/linux/aarch64/signals.S
+++ /dev/null
@@ -1,12 +0,0 @@
-.section .text
-
-.global __mlibc_signal_restore
-.type __mlibc_signal_restore, @function
-__mlibc_signal_restore:
-.global __mlibc_signal_restore_rt
-.type __mlibc_signal_restore_rt, @function
-__mlibc_signal_restore_rt:
- mov x8,#139 // SYS_rt_sigreturn
- svc 0
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/aarch64/syscallnos.h b/lib/mlibc/sysdeps/linux/aarch64/syscallnos.h
deleted file mode 100644
index 9df2598..0000000
--- a/lib/mlibc/sysdeps/linux/aarch64/syscallnos.h
+++ /dev/null
@@ -1,313 +0,0 @@
-#ifndef __MLIBC_SYSCALLNOS_h
-#define __MLIBC_SYSCALLNOS_h
-/* This file is autogenerated. Don't bother. */
-/* Generator script: sysdeps/linux/update-syscall-list.py. */
-#define __NR_io_setup 0
-#define __NR_io_destroy 1
-#define __NR_io_submit 2
-#define __NR_io_cancel 3
-#define __NR_io_getevents 4
-#define __NR_setxattr 5
-#define __NR_lsetxattr 6
-#define __NR_fsetxattr 7
-#define __NR_getxattr 8
-#define __NR_lgetxattr 9
-#define __NR_fgetxattr 10
-#define __NR_listxattr 11
-#define __NR_llistxattr 12
-#define __NR_flistxattr 13
-#define __NR_removexattr 14
-#define __NR_lremovexattr 15
-#define __NR_fremovexattr 16
-#define __NR_getcwd 17
-#define __NR_lookup_dcookie 18
-#define __NR_eventfd2 19
-#define __NR_epoll_create1 20
-#define __NR_epoll_ctl 21
-#define __NR_epoll_pwait 22
-#define __NR_dup 23
-#define __NR_dup3 24
-#define __NR_fcntl 25
-#define __NR_inotify_init1 26
-#define __NR_inotify_add_watch 27
-#define __NR_inotify_rm_watch 28
-#define __NR_ioctl 29
-#define __NR_ioprio_set 30
-#define __NR_ioprio_get 31
-#define __NR_flock 32
-#define __NR_mknodat 33
-#define __NR_mkdirat 34
-#define __NR_unlinkat 35
-#define __NR_symlinkat 36
-#define __NR_linkat 37
-#define __NR_renameat 38
-#define __NR_umount2 39
-#define __NR_mount 40
-#define __NR_pivot_root 41
-#define __NR_nfsservctl 42
-#define __NR_statfs 43
-#define __NR_fstatfs 44
-#define __NR_truncate 45
-#define __NR_ftruncate 46
-#define __NR_fallocate 47
-#define __NR_faccessat 48
-#define __NR_chdir 49
-#define __NR_fchdir 50
-#define __NR_chroot 51
-#define __NR_fchmod 52
-#define __NR_fchmodat 53
-#define __NR_fchownat 54
-#define __NR_fchown 55
-#define __NR_openat 56
-#define __NR_close 57
-#define __NR_vhangup 58
-#define __NR_pipe2 59
-#define __NR_quotactl 60
-#define __NR_getdents64 61
-#define __NR_lseek 62
-#define __NR_read 63
-#define __NR_write 64
-#define __NR_readv 65
-#define __NR_writev 66
-#define __NR_pread64 67
-#define __NR_pwrite64 68
-#define __NR_preadv 69
-#define __NR_pwritev 70
-#define __NR_sendfile 71
-#define __NR_pselect6 72
-#define __NR_ppoll 73
-#define __NR_signalfd4 74
-#define __NR_vmsplice 75
-#define __NR_splice 76
-#define __NR_tee 77
-#define __NR_readlinkat 78
-#define __NR_newfstatat 79
-#define __NR_fstat 80
-#define __NR_sync 81
-#define __NR_fsync 82
-#define __NR_fdatasync 83
-#define __NR_sync_file_range 84
-#define __NR_timerfd_create 85
-#define __NR_timerfd_settime 86
-#define __NR_timerfd_gettime 87
-#define __NR_utimensat 88
-#define __NR_acct 89
-#define __NR_capget 90
-#define __NR_capset 91
-#define __NR_personality 92
-#define __NR_exit 93
-#define __NR_exit_group 94
-#define __NR_waitid 95
-#define __NR_set_tid_address 96
-#define __NR_unshare 97
-#define __NR_futex 98
-#define __NR_set_robust_list 99
-#define __NR_get_robust_list 100
-#define __NR_nanosleep 101
-#define __NR_getitimer 102
-#define __NR_setitimer 103
-#define __NR_kexec_load 104
-#define __NR_init_module 105
-#define __NR_delete_module 106
-#define __NR_timer_create 107
-#define __NR_timer_gettime 108
-#define __NR_timer_getoverrun 109
-#define __NR_timer_settime 110
-#define __NR_timer_delete 111
-#define __NR_clock_settime 112
-#define __NR_clock_gettime 113
-#define __NR_clock_getres 114
-#define __NR_clock_nanosleep 115
-#define __NR_syslog 116
-#define __NR_ptrace 117
-#define __NR_sched_setparam 118
-#define __NR_sched_setscheduler 119
-#define __NR_sched_getscheduler 120
-#define __NR_sched_getparam 121
-#define __NR_sched_setaffinity 122
-#define __NR_sched_getaffinity 123
-#define __NR_sched_yield 124
-#define __NR_sched_get_priority_max 125
-#define __NR_sched_get_priority_min 126
-#define __NR_sched_rr_get_interval 127
-#define __NR_restart_syscall 128
-#define __NR_kill 129
-#define __NR_tkill 130
-#define __NR_tgkill 131
-#define __NR_sigaltstack 132
-#define __NR_rt_sigsuspend 133
-#define __NR_rt_sigaction 134
-#define __NR_rt_sigprocmask 135
-#define __NR_rt_sigpending 136
-#define __NR_rt_sigtimedwait 137
-#define __NR_rt_sigqueueinfo 138
-#define __NR_rt_sigreturn 139
-#define __NR_setpriority 140
-#define __NR_getpriority 141
-#define __NR_reboot 142
-#define __NR_setregid 143
-#define __NR_setgid 144
-#define __NR_setreuid 145
-#define __NR_setuid 146
-#define __NR_setresuid 147
-#define __NR_getresuid 148
-#define __NR_setresgid 149
-#define __NR_getresgid 150
-#define __NR_setfsuid 151
-#define __NR_setfsgid 152
-#define __NR_times 153
-#define __NR_setpgid 154
-#define __NR_getpgid 155
-#define __NR_getsid 156
-#define __NR_setsid 157
-#define __NR_getgroups 158
-#define __NR_setgroups 159
-#define __NR_uname 160
-#define __NR_sethostname 161
-#define __NR_setdomainname 162
-#define __NR_getrlimit 163
-#define __NR_setrlimit 164
-#define __NR_getrusage 165
-#define __NR_umask 166
-#define __NR_prctl 167
-#define __NR_getcpu 168
-#define __NR_gettimeofday 169
-#define __NR_settimeofday 170
-#define __NR_adjtimex 171
-#define __NR_getpid 172
-#define __NR_getppid 173
-#define __NR_getuid 174
-#define __NR_geteuid 175
-#define __NR_getgid 176
-#define __NR_getegid 177
-#define __NR_gettid 178
-#define __NR_sysinfo 179
-#define __NR_mq_open 180
-#define __NR_mq_unlink 181
-#define __NR_mq_timedsend 182
-#define __NR_mq_timedreceive 183
-#define __NR_mq_notify 184
-#define __NR_mq_getsetattr 185
-#define __NR_msgget 186
-#define __NR_msgctl 187
-#define __NR_msgrcv 188
-#define __NR_msgsnd 189
-#define __NR_semget 190
-#define __NR_semctl 191
-#define __NR_semtimedop 192
-#define __NR_semop 193
-#define __NR_shmget 194
-#define __NR_shmctl 195
-#define __NR_shmat 196
-#define __NR_shmdt 197
-#define __NR_socket 198
-#define __NR_socketpair 199
-#define __NR_bind 200
-#define __NR_listen 201
-#define __NR_accept 202
-#define __NR_connect 203
-#define __NR_getsockname 204
-#define __NR_getpeername 205
-#define __NR_sendto 206
-#define __NR_recvfrom 207
-#define __NR_setsockopt 208
-#define __NR_getsockopt 209
-#define __NR_shutdown 210
-#define __NR_sendmsg 211
-#define __NR_recvmsg 212
-#define __NR_readahead 213
-#define __NR_brk 214
-#define __NR_munmap 215
-#define __NR_mremap 216
-#define __NR_add_key 217
-#define __NR_request_key 218
-#define __NR_keyctl 219
-#define __NR_clone 220
-#define __NR_execve 221
-#define __NR_mmap 222
-#define __NR_fadvise64 223
-#define __NR_swapon 224
-#define __NR_swapoff 225
-#define __NR_mprotect 226
-#define __NR_msync 227
-#define __NR_mlock 228
-#define __NR_munlock 229
-#define __NR_mlockall 230
-#define __NR_munlockall 231
-#define __NR_mincore 232
-#define __NR_madvise 233
-#define __NR_remap_file_pages 234
-#define __NR_mbind 235
-#define __NR_get_mempolicy 236
-#define __NR_set_mempolicy 237
-#define __NR_migrate_pages 238
-#define __NR_move_pages 239
-#define __NR_rt_tgsigqueueinfo 240
-#define __NR_perf_event_open 241
-#define __NR_accept4 242
-#define __NR_recvmmsg 243
-#define __NR_arch_specific_syscall 244
-#define __NR_wait4 260
-#define __NR_prlimit64 261
-#define __NR_fanotify_init 262
-#define __NR_fanotify_mark 263
-#define __NR_name_to_handle_at 264
-#define __NR_open_by_handle_at 265
-#define __NR_clock_adjtime 266
-#define __NR_syncfs 267
-#define __NR_setns 268
-#define __NR_sendmmsg 269
-#define __NR_process_vm_readv 270
-#define __NR_process_vm_writev 271
-#define __NR_kcmp 272
-#define __NR_finit_module 273
-#define __NR_sched_setattr 274
-#define __NR_sched_getattr 275
-#define __NR_renameat2 276
-#define __NR_seccomp 277
-#define __NR_getrandom 278
-#define __NR_memfd_create 279
-#define __NR_bpf 280
-#define __NR_execveat 281
-#define __NR_userfaultfd 282
-#define __NR_membarrier 283
-#define __NR_mlock2 284
-#define __NR_copy_file_range 285
-#define __NR_preadv2 286
-#define __NR_pwritev2 287
-#define __NR_pkey_mprotect 288
-#define __NR_pkey_alloc 289
-#define __NR_pkey_free 290
-#define __NR_statx 291
-#define __NR_io_pgetevents 292
-#define __NR_rseq 293
-#define __NR_kexec_file_load 294
-#define __NR_pidfd_send_signal 424
-#define __NR_io_uring_setup 425
-#define __NR_io_uring_enter 426
-#define __NR_io_uring_register 427
-#define __NR_open_tree 428
-#define __NR_move_mount 429
-#define __NR_fsopen 430
-#define __NR_fsconfig 431
-#define __NR_fsmount 432
-#define __NR_fspick 433
-#define __NR_pidfd_open 434
-#define __NR_clone3 435
-#define __NR_close_range 436
-#define __NR_openat2 437
-#define __NR_pidfd_getfd 438
-#define __NR_faccessat2 439
-#define __NR_process_madvise 440
-#define __NR_epoll_pwait2 441
-#define __NR_mount_setattr 442
-#define __NR_quotactl_fd 443
-#define __NR_landlock_create_ruleset 444
-#define __NR_landlock_add_rule 445
-#define __NR_landlock_restrict_self 446
-#define __NR_memfd_secret 447
-#define __NR_process_mrelease 448
-#define __NR_futex_waitv 449
-#define __NR_set_mempolicy_home_node 450
-#define __NR_syscalls 451
-#endif /* __MLIBC_SYSCALLNOS_h */
diff --git a/lib/mlibc/sysdeps/linux/aarch64/thread_entry.S b/lib/mlibc/sysdeps/linux/aarch64/thread_entry.S
deleted file mode 100644
index a47a048..0000000
--- a/lib/mlibc/sysdeps/linux/aarch64/thread_entry.S
+++ /dev/null
@@ -1,27 +0,0 @@
-.section .text
-.global __mlibc_spawn_thread
-.type __mlibc_spawn_thread, "function"
-__mlibc_spawn_thread:
- // __mlibc_spawn_thread(flags, stack, pid_out, child_tid, tls)
- // x0, x1, x2, x3, x4
- // syscall(NR_clone, flags, stack, ptid, tls, ctid)
- // x8, x0, x1, x2, x3, x4
-
- // Swap x3 <-> x4
- mov x5, x4
- mov x4, x3
- mov x3, x5
-
- mov x8, 220 // NR_clone
- svc 0
- cbnz x0, .parent
-
- ldp x0, x1, [sp], #16
-
- bl __mlibc_enter_thread
- brk #0
-
-.parent:
- ret
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/generic/cxx-syscall.hpp b/lib/mlibc/sysdeps/linux/generic/cxx-syscall.hpp
deleted file mode 100644
index aa7d17c..0000000
--- a/lib/mlibc/sysdeps/linux/generic/cxx-syscall.hpp
+++ /dev/null
@@ -1,118 +0,0 @@
-#pragma once
-
-#include <errno.h>
-#include <mlibc/tcb.hpp>
-#include <mlibc/thread.hpp>
-#include <mlibc-config.h>
-#include <utility>
-
-#include <sys/syscall.h>
-#include <bits/syscall.h>
-
-using sc_word_t = __sc_word_t;
-
-extern "C" {
- extern sc_word_t __mlibc_do_asm_cp_syscall(int sc, sc_word_t arg1, sc_word_t arg2,
- sc_word_t arg3, sc_word_t arg4, sc_word_t arg5, sc_word_t arg6);
-
- extern void __mlibc_do_cancel();
-}
-
-namespace mlibc {
- // C++ wrappers for the extern "C" functions.
- inline sc_word_t do_nargs_syscall(int sc) {
- return __do_syscall0(sc);
- }
- inline sc_word_t do_nargs_syscall(int sc, sc_word_t arg1) {
- return __do_syscall1(sc, arg1);
- }
- inline sc_word_t do_nargs_syscall(int sc, sc_word_t arg1, sc_word_t arg2) {
- return __do_syscall2(sc, arg1, arg2);
- }
- inline sc_word_t do_nargs_syscall(int sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3) {
- return __do_syscall3(sc, arg1, arg2, arg3);
- }
- inline sc_word_t do_nargs_syscall(int sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4) {
- return __do_syscall4(sc, arg1, arg2, arg3, arg4);
- }
- inline sc_word_t do_nargs_syscall(int sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4, sc_word_t arg5) {
- return __do_syscall5(sc, arg1, arg2, arg3, arg4, arg5);
- }
- inline sc_word_t do_nargs_syscall(int sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4, sc_word_t arg5, sc_word_t arg6) {
- return __do_syscall6(sc, arg1, arg2, arg3, arg4, arg5, arg6);
- }
-
- inline sc_word_t do_nargs_cp_syscall(int sc, sc_word_t arg1) {
- return __mlibc_do_asm_cp_syscall(sc, arg1, 0, 0, 0, 0, 0);
- }
- inline sc_word_t do_nargs_cp_syscall(int sc, sc_word_t arg1, sc_word_t arg2) {
- return __mlibc_do_asm_cp_syscall(sc, arg1, arg2, 0, 0, 0, 0);
- }
- inline sc_word_t do_nargs_cp_syscall(int sc, sc_word_t arg1, sc_word_t arg2,
- sc_word_t arg3) {
- return __mlibc_do_asm_cp_syscall(sc, arg1, arg2, arg3, 0, 0, 0);
- }
- inline sc_word_t do_nargs_cp_syscall(int sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4) {
- return __mlibc_do_asm_cp_syscall(sc, arg1, arg2, arg3, arg4, 0, 0);
- }
- inline sc_word_t do_nargs_cp_syscall(int sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4, sc_word_t arg5) {
- return __mlibc_do_asm_cp_syscall(sc, arg1, arg2, arg3, arg4, arg5, 0);
- }
- inline sc_word_t do_nargs_cp_syscall(int sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4, sc_word_t arg5, sc_word_t arg6) {
- return __mlibc_do_asm_cp_syscall(sc, arg1, arg2, arg3, arg4, arg5, arg6);
- }
-
- // Type-safe syscall result type.
- enum class sc_result_t : sc_word_t { };
-
- // Cast to the argument type of the extern "C" functions.
- inline sc_word_t sc_cast(long x) { return x; }
- inline sc_word_t sc_cast(const void *x) { return reinterpret_cast<sc_word_t>(x); }
-
- template<typename... T>
- sc_result_t do_syscall(int sc, T... args) {
- return static_cast<sc_result_t>(do_nargs_syscall(sc, sc_cast(args)...));
- }
-
- inline int sc_error(sc_result_t ret) {
- auto v = static_cast<sc_word_t>(ret);
- if(static_cast<unsigned long>(v) > -4096UL)
- return -v;
- return 0;
- }
-
- template<typename... T>
- sc_result_t do_cp_syscall(int sc, T... args) {
-#if __MLIBC_POSIX_OPTION && !MLIBC_BUILDING_RTDL
- auto result = static_cast<sc_result_t>(do_nargs_cp_syscall(sc, sc_cast(args)...));
- if (int e = sc_error(result); e) {
- auto tcb = reinterpret_cast<Tcb*>(get_current_tcb());
- if (tcb_cancelled(tcb->cancelBits) && e == EINTR) {
- __mlibc_do_cancel();
- __builtin_unreachable();
- }
- }
- return result;
-#else
- return do_syscall(sc, std::forward<T>(args)...);
-#endif // __MLIBC_POSIX_OPTION || !MLIBC_BUILDING_RTDL
- }
- // Cast from the syscall result type.
- template<typename T>
- T sc_int_result(sc_result_t ret) {
- auto v = static_cast<sc_word_t>(ret);
- return v;
- }
-
- template<typename T>
- T *sc_ptr_result(sc_result_t ret) {
- auto v = static_cast<sc_word_t>(ret);
- return reinterpret_cast<T *>(v);
- }
-}
diff --git a/lib/mlibc/sysdeps/linux/generic/entry.cpp b/lib/mlibc/sysdeps/linux/generic/entry.cpp
deleted file mode 100644
index aa049ce..0000000
--- a/lib/mlibc/sysdeps/linux/generic/entry.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <stdint.h>
-#include <stdlib.h>
-#include <bits/ensure.h>
-#include <mlibc/elf/startup.h>
-#include <sys/auxv.h>
-
-// defined by the POSIX library
-void __mlibc_initLocale();
-
-extern "C" uintptr_t *__dlapi_entrystack();
-extern "C" void __dlapi_enter(uintptr_t *);
-
-extern char **environ;
-static mlibc::exec_stack_data __mlibc_stack_data;
-
-size_t __hwcap;
-
-struct LibraryGuard {
- LibraryGuard();
-};
-
-static LibraryGuard guard;
-
-LibraryGuard::LibraryGuard() {
- __mlibc_initLocale();
-
- // Parse the exec() stack.
- mlibc::parse_exec_stack(__dlapi_entrystack(), &__mlibc_stack_data);
- mlibc::set_startup_data(__mlibc_stack_data.argc, __mlibc_stack_data.argv,
- __mlibc_stack_data.envp);
-}
-
-extern "C" void __mlibc_entry(uintptr_t *entry_stack, int (*main_fn)(int argc, char *argv[], char *env[])) {
- __dlapi_enter(entry_stack);
- __hwcap = getauxval(AT_HWCAP);
- auto result = main_fn(__mlibc_stack_data.argc, __mlibc_stack_data.argv, environ);
- exit(result);
-}
diff --git a/lib/mlibc/sysdeps/linux/generic/sysdeps.cpp b/lib/mlibc/sysdeps/linux/generic/sysdeps.cpp
deleted file mode 100644
index bc33a9e..0000000
--- a/lib/mlibc/sysdeps/linux/generic/sysdeps.cpp
+++ /dev/null
@@ -1,2002 +0,0 @@
-#include <asm/ioctls.h>
-#include <errno.h>
-#include <limits.h>
-
-#include <type_traits>
-
-#include <mlibc-config.h>
-#include <bits/ensure.h>
-#include <abi-bits/fcntl.h>
-#include <abi-bits/socklen_t.h>
-#include <mlibc/allocator.hpp>
-#include <mlibc/debug.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/thread-entry.hpp>
-#include <limits.h>
-#include <sys/syscall.h>
-#include "cxx-syscall.hpp"
-
-#define STUB_ONLY { __ensure(!"STUB_ONLY function was called"); __builtin_unreachable(); }
-#define UNUSED(x) (void)(x);
-
-#ifndef MLIBC_BUILDING_RTDL
-extern "C" long __do_syscall_ret(unsigned long ret) {
- if(ret > -4096UL) {
- errno = -ret;
- return -1;
- }
- return ret;
-}
-#endif
-
-namespace mlibc {
-
-void sys_libc_log(const char *message) {
- size_t n = 0;
- while(message[n])
- n++;
- do_syscall(SYS_write, 2, message, n);
- char lf = '\n';
- do_syscall(SYS_write, 2, &lf, 1);
-}
-
-void sys_libc_panic() {
- __builtin_trap();
-}
-
-#if defined(__i386__)
-
-struct user_desc {
- unsigned int entry_number;
- unsigned long base_addr;
- unsigned int limit;
- unsigned int seg_32bit: 1;
- unsigned int contents: 2;
- unsigned int read_exec_only: 1;
- unsigned int limit_in_pages: 1;
- unsigned int seg_not_present: 1;
- unsigned int useable: 1;
-};
-
-#endif
-
-int sys_tcb_set(void *pointer) {
-#if defined(__x86_64__)
- auto ret = do_syscall(SYS_arch_prctl, 0x1002 /* ARCH_SET_FS */, pointer);
- if(int e = sc_error(ret); e)
- return e;
-#elif defined(__i386__)
- struct user_desc desc = {
- .entry_number = static_cast<unsigned int>(-1),
- .base_addr = uintptr_t(pointer),
- .limit = 0xfffff,
- .seg_32bit = 1,
- .contents = 0,
- .read_exec_only = 0,
- .limit_in_pages = 1,
- .seg_not_present = 0,
- .useable = 1,
- };
- auto ret = do_syscall(SYS_set_thread_area, &desc);
- __ensure(!sc_error(ret));
- asm volatile ("movw %w0, %%gs" : : "q"(desc.entry_number * 8 + 3) :);
-#elif defined(__riscv)
- uintptr_t thread_data = reinterpret_cast<uintptr_t>(pointer) + sizeof(Tcb);
- asm volatile ("mv tp, %0" :: "r"(thread_data));
-#elif defined (__aarch64__)
- uintptr_t thread_data = reinterpret_cast<uintptr_t>(pointer) + sizeof(Tcb) - 0x10;
- asm volatile ("msr tpidr_el0, %0" :: "r"(thread_data));
-#else
-#error "Missing architecture specific code."
-#endif
- return 0;
-}
-
-int sys_anon_allocate(size_t size, void **pointer) {
- return sys_vm_map(nullptr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS,
- -1, 0, pointer);
-}
-int sys_anon_free(void *pointer, size_t size) {
- return sys_vm_unmap(pointer, size);
-}
-
-int sys_fadvise(int fd, off_t offset, off_t length, int advice) {
- auto ret = do_syscall(SYS_fadvise64, fd, offset, length, advice);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_open(const char *path, int flags, mode_t mode, int *fd) {
- auto ret = do_cp_syscall(SYS_openat, AT_FDCWD, path, flags, mode);
- if(int e = sc_error(ret); e)
- return e;
- *fd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_openat(int dirfd, const char *path, int flags, mode_t mode, int *fd) {
- auto ret = do_syscall(SYS_openat, dirfd, path, flags, mode);
- if (int e = sc_error(ret); e)
- return e;
- *fd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_close(int fd) {
- auto ret = do_cp_syscall(SYS_close, fd);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_dup2(int fd, int flags, int newfd) {
- auto ret = do_cp_syscall(SYS_dup3, fd, newfd, flags);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_read(int fd, void *buffer, size_t size, ssize_t *bytes_read) {
- auto ret = do_cp_syscall(SYS_read, fd, buffer, size);
- if(int e = sc_error(ret); e)
- return e;
- *bytes_read = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_readv(int fd, const struct iovec *iovs, int iovc, ssize_t *bytes_read) {
- auto ret = do_cp_syscall(SYS_readv, fd, iovs, iovc);
- if(int e = sc_error(ret); e)
- return e;
- *bytes_read = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_write(int fd, const void *buffer, size_t size, ssize_t *bytes_written) {
- auto ret = do_cp_syscall(SYS_write, fd, buffer, size);
- if(int e = sc_error(ret); e)
- return e;
- if(bytes_written)
- *bytes_written = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_seek(int fd, off_t offset, int whence, off_t *new_offset) {
- auto ret = do_syscall(SYS_lseek, fd, offset, whence);
- if(int e = sc_error(ret); e)
- return e;
- *new_offset = sc_int_result<off_t>(ret);
- return 0;
-}
-
-int sys_chmod(const char *pathname, mode_t mode) {
- auto ret = do_cp_syscall(SYS_fchmodat, AT_FDCWD, pathname, mode);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_fchmod(int fd, mode_t mode) {
- auto ret = do_cp_syscall(SYS_fchmod, fd, mode);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_fchmodat(int fd, const char *pathname, mode_t mode, int flags) {
- auto ret = do_cp_syscall(SYS_fchmodat, fd, pathname, mode, flags);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_fchownat(int dirfd, const char *pathname, uid_t owner, gid_t group, int flags) {
- auto ret = do_cp_syscall(SYS_fchownat, dirfd, pathname, owner, group, flags);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_utimensat(int dirfd, const char *pathname, const struct timespec times[2], int flags) {
- auto ret = do_cp_syscall(SYS_utimensat, dirfd, pathname, times, flags);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_vm_map(void *hint, size_t size, int prot, int flags,
- int fd, off_t offset, void **window) {
- if(offset % 4096)
- return EINVAL;
- if(size >= PTRDIFF_MAX)
- return ENOMEM;
-#if defined(SYS_mmap2)
- auto ret = do_syscall(SYS_mmap2, hint, size, prot, flags, fd, offset/4096);
-#else
- auto ret = do_syscall(SYS_mmap, hint, size, prot, flags, fd, offset);
-#endif
- // TODO: musl fixes up EPERM errors from the kernel.
- if(int e = sc_error(ret); e)
- return e;
- *window = sc_ptr_result<void>(ret);
- return 0;
-}
-
-int sys_vm_unmap(void *pointer, size_t size) {
- auto ret = do_syscall(SYS_munmap, pointer, size);
- if(int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-// All remaining functions are disabled in ldso.
-#ifndef MLIBC_BUILDING_RTDL
-
-int sys_clock_get(int clock, time_t *secs, long *nanos) {
- struct timespec tp = {};
- auto ret = do_syscall(SYS_clock_gettime, clock, &tp);
- if (int e = sc_error(ret); e)
- return e;
- *secs = tp.tv_sec;
- *nanos = tp.tv_nsec;
- return 0;
-}
-
-int sys_clock_getres(int clock, time_t *secs, long *nanos) {
- struct timespec tp = {};
- auto ret = do_syscall(SYS_clock_getres, clock, &tp);
- if (int e = sc_error(ret); e)
- return e;
- *secs = tp.tv_sec;
- *nanos = tp.tv_nsec;
- return 0;
-}
-
-int sys_stat(fsfd_target fsfdt, int fd, const char *path, int flags, struct stat *statbuf) {
- if (fsfdt == fsfd_target::path)
- fd = AT_FDCWD;
- else if (fsfdt == fsfd_target::fd)
- flags |= AT_EMPTY_PATH;
- else
- __ensure(fsfdt == fsfd_target::fd_path);
-
-#if defined(SYS_newfstatat)
- auto ret = do_cp_syscall(SYS_newfstatat, fd, path, statbuf, flags);
-#else
- auto ret = do_cp_syscall(SYS_fstatat64, fd, path, statbuf, flags);
-#endif
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_statfs(const char *path, struct statfs *buf) {
- auto ret = do_cp_syscall(SYS_statfs, path, buf);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_fstatfs(int fd, struct statfs *buf) {
- auto ret = do_cp_syscall(SYS_fstatfs, fd, buf);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-extern "C" void __mlibc_signal_restore(void);
-extern "C" void __mlibc_signal_restore_rt(void);
-
-int sys_sigaction(int signum, const struct sigaction *act,
- struct sigaction *oldact) {
- struct ksigaction {
- void (*handler)(int);
- unsigned long flags;
- void (*restorer)(void);
- sigset_t mask;
- };
-
- struct ksigaction kernel_act, kernel_oldact;
- if (act) {
- kernel_act.handler = act->sa_handler;
- kernel_act.flags = act->sa_flags | SA_RESTORER;
- kernel_act.restorer = (act->sa_flags & SA_SIGINFO) ? __mlibc_signal_restore_rt : __mlibc_signal_restore;
- kernel_act.mask = act->sa_mask;
- }
-
- static_assert(sizeof(sigset_t) == 8);
-
- auto ret = do_syscall(SYS_rt_sigaction, signum, act ?
- &kernel_act : NULL, oldact ?
- &kernel_oldact : NULL, sizeof(sigset_t));
- if (int e = sc_error(ret); e)
- return e;
-
- if (oldact) {
- oldact->sa_handler = kernel_oldact.handler;
- oldact->sa_flags = kernel_oldact.flags;
- oldact->sa_restorer = kernel_oldact.restorer;
- oldact->sa_mask = kernel_oldact.mask;
- }
- return 0;
-}
-
-int sys_socket(int domain, int type, int protocol, int *fd) {
- auto ret = do_syscall(SYS_socket, domain, type, protocol);
- if (int e = sc_error(ret); e)
- return e;
- *fd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_msg_send(int sockfd, const struct msghdr *msg, int flags, ssize_t *length) {
- auto ret = do_cp_syscall(SYS_sendmsg, sockfd, msg, flags);
- if (int e = sc_error(ret); e)
- return e;
- *length = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-ssize_t sys_sendto(int fd, const void *buffer, size_t size, int flags, const struct sockaddr *sock_addr, socklen_t addr_length, ssize_t *length) {
- auto ret = do_cp_syscall(SYS_sendto, fd, buffer, size, flags, sock_addr, addr_length);
- if(int e = sc_error(ret); e) {
- return e;
- }
- *length = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-ssize_t sys_recvfrom(int fd, void *buffer, size_t size, int flags, struct sockaddr *sock_addr, socklen_t *addr_length, ssize_t *length) {
- auto ret = do_cp_syscall(SYS_recvfrom, fd, buffer, size, flags, sock_addr, addr_length);
- if(int e = sc_error(ret); e) {
- return e;
- }
- *length = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_msg_recv(int sockfd, struct msghdr *msg, int flags, ssize_t *length) {
- auto ret = do_cp_syscall(SYS_recvmsg, sockfd, msg, flags);
- if (int e = sc_error(ret); e)
- return e;
- *length = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_fcntl(int fd, int cmd, va_list args, int *result) {
- auto arg = va_arg(args, unsigned long);
- // TODO: the api for linux differs for each command so fcntl()s might fail with -EINVAL
- // we should implement all the different fcntl()s
- // TODO(geert): only some fcntl()s can fail with -EINTR, making do_cp_syscall useless
- // on most fcntls(). Another reason to handle different fcntl()s seperately.
- auto ret = do_cp_syscall(SYS_fcntl, fd, cmd, arg);
- if (int e = sc_error(ret); e)
- return e;
- *result = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_getcwd(char *buf, size_t size) {
- auto ret = do_syscall(SYS_getcwd, buf, size);
- if (int e = sc_error(ret); e) {
- return e;
- }
- return 0;
-}
-
-int sys_unlinkat(int dfd, const char *path, int flags) {
- auto ret = do_syscall(SYS_unlinkat, dfd, path, flags);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_sleep(time_t *secs, long *nanos) {
- struct timespec req = {
- .tv_sec = *secs,
- .tv_nsec = *nanos
- };
- struct timespec rem = {};
-
- auto ret = do_cp_syscall(SYS_nanosleep, &req, &rem);
- if (int e = sc_error(ret); e)
- return e;
-
- *secs = rem.tv_sec;
- *nanos = rem.tv_nsec;
- return 0;
-}
-
-int sys_isatty(int fd) {
- unsigned short winsizeHack[4];
- auto ret = do_syscall(SYS_ioctl, fd, 0x5413 /* TIOCGWINSZ */, &winsizeHack);
- if (int e = sc_error(ret); e)
- return e;
- auto res = sc_int_result<unsigned long>(ret);
- if(!res) return 0;
- return 1;
-}
-
-#if __MLIBC_POSIX_OPTION
-
-#include <net/if.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/user.h>
-#include <sys/utsname.h>
-#include <sys/stat.h>
-#include <sys/sysinfo.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sched.h>
-#include <fcntl.h>
-#include <pthread.h>
-
-int sys_ioctl(int fd, unsigned long request, void *arg, int *result) {
- auto ret = do_syscall(SYS_ioctl, fd, request, arg);
- if (int e = sc_error(ret); e)
- return e;
- if (result)
- *result = sc_int_result<unsigned long>(ret);
- return 0;
-}
-
-int sys_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) {
- auto ret = do_cp_syscall(SYS_connect, sockfd, addr, addrlen);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_pselect(int nfds, fd_set *readfds, fd_set *writefds,
- fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask, int *num_events) {
- // The Linux kernel really wants 7 arguments, even tho this is not supported
- // To fix that issue, they use a struct as the last argument.
- // See the man page of pselect and the glibc source code
- struct {
- sigset_t ss;
- size_t ss_len;
- } data;
- data.ss = (uintptr_t)sigmask;
- data.ss_len = NSIG / 8;
-
- auto ret = do_cp_syscall(SYS_pselect6, nfds, readfds, writefds,
- exceptfds, timeout, &data);
- if (int e = sc_error(ret); e)
- return e;
- *num_events = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_pipe(int *fds, int flags) {
- if(flags) {
- auto ret = do_syscall(SYS_pipe2, fds, flags);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
- } else {
- auto ret = do_syscall(SYS_pipe2, fds, 0);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
- }
-}
-
-int sys_fork(pid_t *child) {
- auto ret = do_syscall(SYS_clone, SIGCHLD, 0);
- if (int e = sc_error(ret); e)
- return e;
- *child = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_waitpid(pid_t pid, int *status, int flags, struct rusage *ru, pid_t *ret_pid) {
- auto ret = do_syscall(SYS_wait4, pid, status, flags, ru);
- if (int e = sc_error(ret); e)
- return e;
- *ret_pid = sc_int_result<pid_t>(ret);
- return 0;
-}
-
-int sys_execve(const char *path, char *const argv[], char *const envp[]) {
- auto ret = do_syscall(SYS_execve, path, argv, envp);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_sigprocmask(int how, const sigset_t *set, sigset_t *old) {
- auto ret = do_syscall(SYS_rt_sigprocmask, how, set, old, NSIG / 8);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid) {
- auto ret = do_syscall(SYS_setresuid, ruid, euid, suid);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid) {
- auto ret = do_syscall(SYS_setresgid, rgid, egid, sgid);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid) {
- auto ret = do_syscall(SYS_getresuid, &ruid, &euid, &suid);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid) {
- auto ret = do_syscall(SYS_getresgid, &rgid, &egid, &sgid);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_setreuid(uid_t ruid, uid_t euid) {
- auto ret = do_syscall(SYS_setreuid, ruid, euid);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_setregid(gid_t rgid, gid_t egid) {
- auto ret = do_syscall(SYS_setregid, rgid, egid);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_sysinfo(struct sysinfo *info) {
- auto ret = do_syscall(SYS_sysinfo, info);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-void sys_yield() {
- do_syscall(SYS_sched_yield);
-}
-
-int sys_clone(void *tcb, pid_t *pid_out, void *stack) {
- unsigned long flags = CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND
- | CLONE_THREAD | CLONE_SYSVSEM | CLONE_SETTLS
- | CLONE_PARENT_SETTID;
-
-#if defined(__riscv)
- // TP should point to the address immediately after the TCB.
- // TODO: We should change the sysdep so that we don't need to do this.
- auto tls = reinterpret_cast<char *>(tcb) + sizeof(Tcb);
- tcb = reinterpret_cast<void *>(tls);
-#elif defined(__aarch64__)
- // TP should point to the address 16 bytes before the end of the TCB.
- // TODO: We should change the sysdep so that we don't need to do this.
- auto tp = reinterpret_cast<char *>(tcb) + sizeof(Tcb) - 0x10;
- tcb = reinterpret_cast<void *>(tp);
-#elif defined(__i386__)
- /* get the entry number, as we don't request a new one here */
- uint32_t gs;
- asm volatile("movw %%gs, %w0" : "=q"(gs));
-
- auto user_desc = reinterpret_cast<struct user_desc *>(getAllocator().allocate(sizeof(struct user_desc)));
-
- user_desc->entry_number = (gs & 0xffff) >> 3;
- user_desc->base_addr = uintptr_t(tcb);
- user_desc->limit = 0xfffff;
- user_desc->seg_32bit = 1;
- user_desc->contents = 0;
- user_desc->read_exec_only = 0;
- user_desc->limit_in_pages = 1;
- user_desc->seg_not_present = 0;
- user_desc->useable = 1;
-
- tcb = reinterpret_cast<void *>(user_desc);
-#endif
-
- auto ret = __mlibc_spawn_thread(flags, stack, pid_out, NULL, tcb);
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
-extern "C" const char __mlibc_syscall_begin[1];
-extern "C" const char __mlibc_syscall_end[1];
-
-#if defined(__riscv)
-// Disable UBSan here to work around qemu-user misaligning ucontext_t.
-// https://github.com/qemu/qemu/blob/2bf40d0841b942e7ba12953d515e62a436f0af84/linux-user/riscv/signal.c#L68-L69
-[[gnu::no_sanitize("undefined")]]
-#endif
-int sys_before_cancellable_syscall(ucontext_t *uct) {
-#if defined(__x86_64__)
- auto pc = reinterpret_cast<void*>(uct->uc_mcontext.gregs[REG_RIP]);
-#elif defined(__i386__)
- auto pc = reinterpret_cast<void*>(uct->uc_mcontext.gregs[REG_EIP]);
-#elif defined(__riscv)
- auto pc = reinterpret_cast<void*>(uct->uc_mcontext.gregs[REG_PC]);
-#elif defined(__aarch64__)
- auto pc = reinterpret_cast<void*>(uct->uc_mcontext.pc);
-#else
-#error "Missing architecture specific code."
-#endif
- if (pc < __mlibc_syscall_begin || pc > __mlibc_syscall_end)
- return 0;
- return 1;
-}
-
-int sys_tgkill(int tgid, int tid, int sig) {
- auto ret = do_syscall(SYS_tgkill, tgid, tid, sig);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_tcgetattr(int fd, struct termios *attr) {
- auto ret = do_syscall(SYS_ioctl, fd, TCGETS, attr);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_tcsetattr(int fd, int optional_action, const struct termios *attr) {
- int req;
-
- switch (optional_action) {
- case TCSANOW: req = TCSETS; break;
- case TCSADRAIN: req = TCSETSW; break;
- case TCSAFLUSH: req = TCSETSF; break;
- default: return EINVAL;
- }
-
- auto ret = do_syscall(SYS_ioctl, fd, req, attr);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_tcflush(int fd, int queue) {
- auto ret = do_syscall(SYS_ioctl, fd, TCFLSH, queue);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_tcdrain(int fd) {
- auto ret = do_syscall(SYS_ioctl, fd, TCSBRK, 1);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_tcflow(int fd, int action) {
- auto ret = do_syscall(SYS_ioctl, fd, TCXONC, action);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_access(const char *path, int mode) {
- auto ret = do_syscall(SYS_faccessat, AT_FDCWD, path, mode, 0);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_faccessat(int dirfd, const char *pathname, int mode, int flags) {
- auto ret = do_syscall(SYS_faccessat, dirfd, pathname, mode, flags);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_accept(int fd, int *newfd, struct sockaddr *addr_ptr, socklen_t *addr_length, int flags) {
- auto ret = do_syscall(SYS_accept4, fd, addr_ptr, addr_length, flags);
- if (int e = sc_error(ret); e)
- return e;
- *newfd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_bind(int fd, const struct sockaddr *addr_ptr, socklen_t addr_length) {
- auto ret = do_syscall(SYS_bind, fd, addr_ptr, addr_length, 0, 0, 0);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_setsockopt(int fd, int layer, int number, const void *buffer, socklen_t size) {
- auto ret = do_syscall(SYS_setsockopt, fd, layer, number, buffer, size, 0);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_sockname(int fd, struct sockaddr *addr_ptr, socklen_t max_addr_length,
- socklen_t *actual_length) {
- auto ret = do_syscall(SYS_getsockname, fd, addr_ptr, &max_addr_length);
- if (int e = sc_error(ret); e)
- return e;
- *actual_length = max_addr_length;
- return 0;
-}
-
-int sys_peername(int fd, struct sockaddr *addr_ptr, socklen_t max_addr_length,
- socklen_t *actual_length) {
- auto ret = do_syscall(SYS_getpeername, fd, addr_ptr, &max_addr_length);
- if (int e = sc_error(ret); e)
- return e;
- *actual_length = max_addr_length;
- return 0;
-}
-
-int sys_listen(int fd, int backlog) {
- auto ret = do_syscall(SYS_listen, fd, backlog, 0, 0, 0, 0);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_shutdown(int sockfd, int how) {
- auto ret = do_syscall(SYS_shutdown, sockfd, how);
- if (int e = sc_error(ret); e) {
- return e;
- }
- return 0;
-}
-
-int sys_getpriority(int which, id_t who, int *value) {
- auto ret = do_syscall(SYS_getpriority, which, who);
- if (int e = sc_error(ret); e) {
- return e;
- }
- *value = 20 - sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_setpriority(int which, id_t who, int prio) {
- auto ret = do_syscall(SYS_setpriority, which, who, prio);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value) {
- auto ret = do_syscall(SYS_setitimer, which, new_value, old_value);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-/* Linux' uapi does some weird union stuff in place of `sigev_tid`, which we conveniently ignore */
-struct linux_uapi_sigevent {
- union sigval sigev_value;
- int sigev_signo;
- int sigev_notify;
- int sigev_tid;
-};
-
-int sys_timer_create(clockid_t clk, struct sigevent *__restrict evp, timer_t *__restrict res) {
- struct linux_uapi_sigevent ksev;
- struct linux_uapi_sigevent *ksevp = 0;
- int timer_id;
-
- switch(evp ? evp->sigev_notify : SIGEV_SIGNAL) {
- case SIGEV_NONE:
- case SIGEV_SIGNAL: {
- if(evp) {
- ksev.sigev_value = evp->sigev_value;
- ksev.sigev_signo = evp->sigev_signo;
- ksev.sigev_notify = evp->sigev_notify;
- ksev.sigev_tid = 0;
- ksevp = &ksev;
- }
-
- auto ret = do_syscall(SYS_timer_create, clk, ksevp, &timer_id);
- if (int e = sc_error(ret); e) {
- return e;
- }
- *res = (void *) (intptr_t) timer_id;
- break;
- }
- case SIGEV_THREAD:
- __ensure(!"sys_timer_create with evp->sigev_notify == SIGEV_THREAD is unimplemented");
- [[fallthrough]];
- default:
- return EINVAL;
- }
-
- return 0;
-}
-
-int sys_timer_settime(timer_t t, int flags, const struct itimerspec *__restrict val, struct itimerspec *__restrict old) {
- auto ret = do_syscall(SYS_timer_settime, t, flags, val, old);
- if (int e = sc_error(ret); e) {
- return e;
- }
- return 0;
-}
-
-int sys_timer_delete(timer_t t) {
- __ensure((intptr_t) t >= 0);
- auto ret = do_syscall(SYS_timer_delete, t);
- if (int e = sc_error(ret); e) {
- return e;
- }
- return 0;
-}
-
-int sys_ptrace(long req, pid_t pid, void *addr, void *data, long *out) {
- auto ret = do_syscall(SYS_ptrace, req, pid, addr, data);
- if (int e = sc_error(ret); e)
- return e;
- *out = sc_int_result<long>(ret);
- return 0;
-}
-
-int sys_open_dir(const char *path, int *fd) {
- return sys_open(path, O_DIRECTORY, 0, fd);
-}
-
-int sys_read_entries(int handle, void *buffer, size_t max_size, size_t *bytes_read) {
- auto ret = do_syscall(SYS_getdents64, handle, buffer, max_size);
- if(int e = sc_error(ret); e)
- return e;
- *bytes_read = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_prctl(int op, va_list ap, int *out) {
- unsigned long x[4];
- for(int i = 0; i < 4; i++)
- x[i] = va_arg(ap, unsigned long);
-
- auto ret = do_syscall(SYS_prctl, op, x[0], x[1], x[2], x[3]);
- if (int e = sc_error(ret); e)
- return e;
- *out = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_uname(struct utsname *buf) {
- auto ret = do_syscall(SYS_uname, buf);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_gethostname(char *buf, size_t bufsize) {
- struct utsname uname_buf;
- if (auto e = sys_uname(&uname_buf); e)
- return e;
-
- auto node_len = strlen(uname_buf.nodename);
- if (node_len >= bufsize)
- return ENAMETOOLONG;
-
- memcpy(buf, uname_buf.nodename, node_len);
- buf[node_len] = '\0';
- return 0;
-}
-
-int sys_pread(int fd, void *buf, size_t n, off_t off, ssize_t *bytes_read) {
- auto ret = do_syscall(SYS_pread64, fd, buf, n, off);
- if (int e = sc_error(ret); e)
- return e;
- *bytes_read = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_pwrite(int fd, const void *buf, size_t n, off_t off, ssize_t *bytes_written) {
- auto ret = do_syscall(SYS_pwrite64, fd, buf, n, off);
- if (int e = sc_error(ret); e)
- return e;
- *bytes_written = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_poll(struct pollfd *fds, nfds_t count, int timeout, int *num_events) {
- struct timespec tm;
- tm.tv_sec = timeout / 1000;
- tm.tv_nsec = timeout % 1000 * 1000000;
- auto ret = do_syscall(SYS_ppoll, fds, count, timeout >= 0 ? &tm : nullptr, 0, NSIG / 8);
- if (int e = sc_error(ret); e)
- return e;
- *num_events = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_getrusage(int scope, struct rusage *usage) {
- auto ret = do_syscall(SYS_getrusage, scope, usage);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_madvise(void *addr, size_t length, int advice) {
- auto ret = do_syscall(SYS_madvise, addr, length, advice);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_msync(void *addr, size_t length, int flags) {
- auto ret = do_syscall(SYS_msync, addr, length, flags);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_swapon(const char *path, int flags) {
- auto ret = do_syscall(SYS_swapon, path, flags);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_swapoff(const char *path) {
- auto ret = do_syscall(SYS_swapoff, path);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask) {
- auto ret = do_syscall(SYS_sched_getaffinity, pid, cpusetsize, mask);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_mount(const char *source, const char *target,
- const char *fstype, unsigned long flags, const void *data) {
- auto ret = do_syscall(SYS_mount, source, target, fstype, flags, data);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_umount2(const char *target, int flags) {
- auto ret = do_syscall(SYS_umount2, target, flags);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_sethostname(const char *buffer, size_t bufsize) {
- auto ret = do_syscall(SYS_sethostname, buffer, bufsize);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_epoll_create(int flags, int *fd) {
- auto ret = do_syscall(SYS_epoll_create1, flags);
- if (int e = sc_error(ret); e)
- return e;
- *fd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_epoll_ctl(int epfd, int mode, int fd, struct epoll_event *ev) {
- auto ret = do_syscall(SYS_epoll_ctl, epfd, mode, fd, ev);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_epoll_pwait(int epfd, struct epoll_event *ev, int n, int timeout, const sigset_t *sigmask, int *raised) {
- auto ret = do_syscall(SYS_epoll_pwait, epfd, ev, n, timeout, sigmask, NSIG / 8);
- if (int e = sc_error(ret); e)
- return e;
- *raised = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_eventfd_create(unsigned int initval, int flags, int *fd) {
- auto ret = do_syscall(SYS_eventfd2, initval, flags);
- if (int e = sc_error(ret); e)
- return e;
- *fd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_signalfd_create(const sigset_t *masks, int flags, int *fd) {
- auto ret = do_syscall(SYS_signalfd4, *fd, masks, sizeof(sigset_t), flags);
- if (int e = sc_error(ret); e)
- return e;
- *fd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_timerfd_create(int clockid, int flags, int *fd) {
- auto ret = do_syscall(SYS_timerfd_create, clockid, flags);
- if (int e = sc_error(ret); e)
- return e;
- *fd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_timerfd_settime(int fd, int flags, const struct itimerspec *value, struct itimerspec *oldvalue) {
- auto ret = do_syscall(SYS_timerfd_settime, fd, flags, value, oldvalue);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_inotify_create(int flags, int *fd) {
- auto ret = do_syscall(SYS_inotify_init1, flags);
- if (int e = sc_error(ret); e)
- return e;
- *fd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_init_module(void *module, unsigned long length, const char *args) {
- auto ret = do_syscall(SYS_init_module, module, length, args);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_delete_module(const char *name, unsigned flags) {
- auto ret = do_syscall(SYS_delete_module, name, flags);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_klogctl(int type, char *bufp, int len, int *out) {
- auto ret = do_syscall(SYS_syslog, type, bufp, len);
- if (int e = sc_error(ret); e)
- return e;
- *out = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_getcpu(int *cpu) {
- auto ret = do_syscall(SYS_getcpu, cpu, NULL, NULL);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_socketpair(int domain, int type_and_flags, int proto, int *fds) {
- auto ret = do_syscall(SYS_socketpair, domain, type_and_flags, proto, fds, 0, 0);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_getsockopt(int fd, int layer, int number, void *__restrict buffer, socklen_t *__restrict size) {
- auto ret = do_syscall(SYS_getsockopt, fd, layer, number, buffer, size, 0);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_inotify_add_watch(int ifd, const char *path, uint32_t mask, int *wd) {
- auto ret = do_syscall(SYS_inotify_add_watch, ifd, path, mask);
- if (int e = sc_error(ret); e)
- return e;
- *wd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_inotify_rm_watch(int ifd, int wd) {
- auto ret = do_syscall(SYS_inotify_rm_watch, ifd, wd);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_ttyname(int fd, char *buf, size_t size) {
- if (!isatty(fd))
- return errno;
-
- char *procname;
- if(int e = asprintf(&procname, "/proc/self/fd/%i", fd); e)
- return ENOMEM;
- __ensure(procname);
-
- ssize_t l = readlink(procname, buf, size);
- free(procname);
-
- if (l < 0)
- return errno;
- else if ((size_t)l >= size)
- return ERANGE;
-
- buf[l] = '\0';
- struct stat st1;
- struct stat st2;
-
- if (stat(buf, &st1) || fstat(fd, &st2))
- return errno;
- if (st1.st_dev != st2.st_dev || st1.st_ino != st2.st_ino)
- return ENODEV;
-
- return 0;
-}
-
-int sys_pause() {
-#ifdef SYS_pause
- auto ret = do_syscall(SYS_pause);
-#else
- auto ret = do_syscall(SYS_ppoll, 0, 0, 0, 0);
-#endif
- if (int e = sc_error(ret); e)
- return e;
- return EINTR;
-}
-
-int sys_mlockall(int flags) {
- auto ret = do_syscall(SYS_mlockall, flags);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_get_min_priority(int policy, int *out) {
- auto ret = do_syscall(SYS_sched_get_priority_min, policy);
- if (int e = sc_error(ret); e)
- return e;
- *out = sc_int_result<int>(ret);
-
- return 0;
-}
-
-int sys_getschedparam(void *tcb, int *policy, struct sched_param *param) {
- auto t = reinterpret_cast<Tcb *>(tcb);
-
- if(!t->tid) {
- return ESRCH;
- }
-
- auto ret_param = do_syscall(SYS_sched_getparam, t->tid, param);
- if (int e = sc_error(ret_param); e)
- return e;
-
- auto ret_sched = do_syscall(SYS_sched_getscheduler, t->tid, param);
- if (int e = sc_error(ret_sched); e)
- return e;
- *policy = sc_int_result<int>(ret_sched);
-
- return 0;
-}
-
-int sys_setschedparam(void *tcb, int policy, const struct sched_param *param) {
- auto t = reinterpret_cast<Tcb *>(tcb);
-
- if(!t->tid) {
- return ESRCH;
- }
-
- auto ret = do_syscall(SYS_sched_setscheduler, t->tid, policy, param);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_if_indextoname(unsigned int index, char *name) {
- int fd = 0;
- int r = sys_socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, AF_UNSPEC, &fd);
-
- if(r)
- return r;
-
- struct ifreq ifr;
- ifr.ifr_ifindex = index;
-
- int ret = sys_ioctl(fd, SIOCGIFNAME, &ifr, NULL);
- close(fd);
-
- if(ret) {
- if(ret == ENODEV)
- return ENXIO;
- return ret;
- }
-
- strncpy(name, ifr.ifr_name, IF_NAMESIZE);
-
- return 0;
-}
-
-int sys_if_nametoindex(const char *name, unsigned int *ret) {
- int fd = 0;
- int r = sys_socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, AF_UNSPEC, &fd);
-
- if(r)
- return r;
-
- struct ifreq ifr;
- strncpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
-
- r = sys_ioctl(fd, SIOCGIFINDEX, &ifr, NULL);
- close(fd);
-
- if(r) {
- return r;
- }
-
- *ret = ifr.ifr_ifindex;
-
- return 0;
-}
-
-int sys_ptsname(int fd, char *buffer, size_t length) {
- int index;
- if(int e = sys_ioctl(fd, TIOCGPTN, &index, NULL); e)
- return e;
- if((size_t)snprintf(buffer, length, "/dev/pts/%d", index) >= length) {
- return ERANGE;
- }
- return 0;
-}
-
-int sys_unlockpt(int fd) {
- int unlock = 0;
-
- if(int e = sys_ioctl(fd, TIOCSPTLCK, &unlock, NULL); e)
- return e;
-
- return 0;
-}
-
-int sys_thread_setname(void *tcb, const char *name) {
- if(strlen(name) > 15) {
- return ERANGE;
- }
-
- auto t = reinterpret_cast<Tcb *>(tcb);
- char *path;
- int cs = 0;
-
- if(asprintf(&path, "/proc/self/task/%d/comm", t->tid) < 0) {
- return ENOMEM;
- }
-
- pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
-
- int fd;
- if(int e = sys_open(path, O_WRONLY, 0, &fd); e) {
- return e;
- }
-
- if(int e = sys_write(fd, name, strlen(name) + 1, NULL)) {
- return e;
- }
-
- sys_close(fd);
-
- pthread_setcancelstate(cs, 0);
-
- return 0;
-}
-
-int sys_thread_getname(void *tcb, char *name, size_t size) {
- auto t = reinterpret_cast<Tcb *>(tcb);
- char *path;
- int cs = 0;
- ssize_t real_size = 0;
-
- if(asprintf(&path, "/proc/self/task/%d/comm", t->tid) < 0) {
- return ENOMEM;
- }
-
- pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
-
- int fd;
- if(int e = sys_open(path, O_RDONLY | O_CLOEXEC, 0, &fd); e) {
- return e;
- }
-
- if(int e = sys_read(fd, name, size, &real_size)) {
- return e;
- }
-
- name[real_size - 1] = 0;
- sys_close(fd);
-
- pthread_setcancelstate(cs, 0);
-
- if(static_cast<ssize_t>(size) <= real_size) {
- return ERANGE;
- }
-
- return 0;
-}
-
-int sys_mlock(const void *addr, size_t length) {
- auto ret = do_syscall(SYS_mlock, addr, length);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_munlock(const void *addr, size_t length) {
- auto ret = do_syscall(SYS_munlock, addr, length);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_munlockall(void) {
- auto ret = do_syscall(SYS_munlockall);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_mincore(void *addr, size_t length, unsigned char *vec) {
- auto ret = do_syscall(SYS_mincore, addr, length, vec);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_memfd_create(const char *name, int flags, int *fd) {
- auto ret = do_syscall(SYS_memfd_create, name, flags);
- if (int e = sc_error(ret); e)
- return e;
- *fd = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_fallocate(int fd, off_t offset, size_t size) {
- auto ret = do_syscall(SYS_fallocate, fd, 0, offset, size);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_flock(int fd, int options) {
- auto ret = do_syscall(SYS_flock, fd, options);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_seteuid(uid_t euid) {
- return sys_setresuid(-1, euid, -1);
-}
-
-int sys_vm_remap(void *pointer, size_t size, size_t new_size, void **window) {
- auto ret = do_syscall(SYS_mremap, pointer, size, new_size, MREMAP_MAYMOVE);
- // TODO: musl fixes up EPERM errors from the kernel.
- if(int e = sc_error(ret); e)
- return e;
- *window = sc_ptr_result<void>(ret);
- return 0;
-}
-
-int sys_link(const char *old_path, const char *new_path) {
-#ifdef SYS_link
- auto ret = do_syscall(SYS_link, old_path, new_path);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-#else
- auto ret = do_syscall(SYS_linkat, AT_FDCWD, old_path, AT_FDCWD, new_path, 0);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-#endif
-}
-
-// Inspired by musl (src/stat/statvfs.c:28 fixup function)
-static void statfs_to_statvfs(struct statfs *from, struct statvfs *to) {
- *to = {
- .f_bsize = from->f_bsize,
- .f_frsize = from->f_frsize ? from->f_frsize : from->f_bsize,
- .f_blocks = from->f_blocks,
- .f_bfree = from->f_bfree,
- .f_bavail = from->f_bavail,
- .f_files = from->f_files,
- .f_ffree = from->f_ffree,
- .f_favail = from->f_ffree,
- .f_fsid = (unsigned long) from->f_fsid.__val[0],
- .f_flag = from->f_flags,
- .f_namemax = from->f_namelen,
- };
-}
-
-int sys_statvfs(const char *path, struct statvfs *out) {
- struct statfs buf;
- if(auto ret = sys_statfs(path, &buf); ret != 0) {
- return ret;
- }
- statfs_to_statvfs(&buf, out);
- return 0;
-}
-
-int sys_fstatvfs(int fd, struct statvfs *out) {
- struct statfs buf;
- if(auto ret = sys_fstatfs(fd, &buf); ret != 0) {
- return ret;
- }
- statfs_to_statvfs(&buf, out);
- return 0;
-}
-
-int sys_sysconf(int num, long *ret) {
- switch(num) {
- case _SC_OPEN_MAX: {
- struct rlimit ru;
- if(int e = sys_getrlimit(RLIMIT_NOFILE, &ru); e) {
- return e;
- }
- *ret = (ru.rlim_cur == RLIM_INFINITY) ? -1 : ru.rlim_cur;
- break;
- }
- case _SC_NPROCESSORS_ONLN: {
- cpu_set_t set;
- CPU_ZERO(&set);
- if(int e = sys_getaffinity(0, sizeof(set), &set); e) {
- return e;
- }
- *ret = CPU_COUNT(&set);
- break;
- }
- case _SC_PHYS_PAGES: {
- struct sysinfo info;
- if(int e = sys_sysinfo(&info); e) {
- return e;
- }
- unsigned unit = (info.mem_unit) ? info.mem_unit : 1;
- *ret = std::min(long((info.totalram * unit) / PAGE_SIZE), LONG_MAX);
- break;
- }
- case _SC_CHILD_MAX: {
- struct rlimit ru;
- if(int e = sys_getrlimit(RLIMIT_NPROC, &ru); e) {
- return e;
- }
- *ret = (ru.rlim_cur == RLIM_INFINITY) ? -1 : ru.rlim_cur;
- break;
- }
- case _SC_LINE_MAX: {
- *ret = -1;
- break;
- }
- default: {
- return EINVAL;
- }
- }
-
- return 0;
-}
-
-int sys_semget(key_t key, int n, int fl, int *id) {
- auto ret = do_syscall(SYS_semget, key, n, fl);
- if(int e = sc_error(ret); e)
- return e;
- *id = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_semctl(int semid, int semnum, int cmd, void *semun, int *out) {
- auto ret = do_syscall(SYS_semctl, semid, semnum, cmd | IPC_64, semun);
- if(int e = sc_error(ret); e)
- return e;
- *out = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_waitid(idtype_t idtype, id_t id, siginfo_t *info, int options) {
- auto ret = do_syscall(SYS_waitid, idtype, id, info, options, 0);
- if(int e = sc_error(ret); e)
- return e;
- return sc_int_result<int>(ret);
-}
-
-#endif // __MLIBC_POSIX_OPTION
-
-#if __MLIBC_LINUX_OPTION
-
-#include <linux/reboot.h>
-
-int sys_reboot(int cmd) {
- auto ret = do_syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, nullptr);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-#endif // __MLIBC_LINUX_OPTION
-
-int sys_times(struct tms *tms, clock_t *out) {
- auto ret = do_syscall(SYS_times, tms);
- if (int e = sc_error(ret); e)
- return e;
- *out = sc_int_result<long>(ret);
- return 0;
-}
-
-pid_t sys_getpid() {
- auto ret = do_syscall(SYS_getpid);
- // getpid() always succeeds.
- return sc_int_result<pid_t>(ret);
-}
-
-pid_t sys_gettid() {
- auto ret = do_syscall(SYS_gettid);
- // gettid() always succeeds.
- return sc_int_result<pid_t>(ret);
-}
-
-uid_t sys_getuid() {
- auto ret = do_syscall(SYS_getuid);
- // getuid() always succeeds.
- return sc_int_result<pid_t>(ret);
-}
-
-uid_t sys_geteuid() {
- auto ret = do_syscall(SYS_geteuid);
- // geteuid() always succeeds.
- return sc_int_result<pid_t>(ret);
-}
-
-gid_t sys_getgid() {
- auto ret = do_syscall(SYS_getgid);
- // getgid() always succeeds.
- return sc_int_result<pid_t>(ret);
-}
-
-gid_t sys_getegid() {
- auto ret = do_syscall(SYS_getegid);
- // getegid() always succeeds.
- return sc_int_result<pid_t>(ret);
-}
-
-int sys_kill(int pid, int sig) {
- auto ret = do_syscall(SYS_kill, pid, sig);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_vm_protect(void *pointer, size_t size, int prot) {
- auto ret = do_syscall(SYS_mprotect, pointer, size, prot);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-void sys_thread_exit() {
- do_syscall(SYS_exit, 0);
- __builtin_trap();
-}
-
-void sys_exit(int status) {
- do_syscall(SYS_exit_group, status);
- __builtin_trap();
-}
-
-#endif // MLIBC_BUILDING_RTDL
-
-#define FUTEX_WAIT 0
-#define FUTEX_WAKE 1
-
-int sys_futex_tid() {
- auto ret = do_syscall(SYS_gettid);
- // gettid() always succeeds.
- return sc_int_result<pid_t>(ret);
-}
-
-int sys_futex_wait(int *pointer, int expected, const struct timespec *time) {
- auto ret = do_cp_syscall(SYS_futex, pointer, FUTEX_WAIT, expected, time);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_futex_wake(int *pointer) {
- auto ret = do_syscall(SYS_futex, pointer, FUTEX_WAKE, INT_MAX);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_sigsuspend(const sigset_t *set) {
- auto ret = do_syscall(SYS_rt_sigsuspend, set, NSIG / 8);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_sigaltstack(const stack_t *ss, stack_t *oss) {
- auto ret = do_syscall(SYS_sigaltstack, ss, oss);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_mkdir(const char *path, mode_t mode) {
- auto ret = do_syscall(SYS_mkdirat, AT_FDCWD, path, mode);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-
-int sys_mkdirat(int dirfd, const char *path, mode_t mode) {
- auto ret = do_syscall(SYS_mkdirat, dirfd, path, mode);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_mknodat(int dirfd, const char *path, int mode, int dev) {
- auto ret = do_syscall(SYS_mknodat, dirfd, path, mode, dev);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_mkfifoat(int dirfd, const char *path, int mode) {
- return sys_mknodat(dirfd, path, mode | S_IFIFO, 0);
-}
-
-int sys_symlink(const char *target_path, const char *link_path) {
- auto ret = do_syscall(SYS_symlinkat, target_path, AT_FDCWD, link_path);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_symlinkat(const char *target_path, int dirfd, const char *link_path) {
- auto ret = do_syscall(SYS_symlinkat, target_path, dirfd, link_path);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_umask(mode_t mode, mode_t *old) {
- auto ret = do_syscall(SYS_umask, mode);
- if (int e = sc_error(ret); e)
- return e;
- *old = sc_int_result<mode_t>(ret);
- return 0;
-}
-
-int sys_chdir(const char *path) {
- auto ret = do_syscall(SYS_chdir, path);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_fchdir(int fd) {
- auto ret = do_syscall(SYS_fchdir, fd);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_rename(const char *old_path, const char *new_path) {
- return sys_renameat(AT_FDCWD, old_path, AT_FDCWD, new_path);
-}
-
-int sys_renameat(int old_dirfd, const char *old_path, int new_dirfd, const char *new_path) {
-#ifdef SYS_renameat2
- auto ret = do_syscall(SYS_renameat2, old_dirfd, old_path, new_dirfd, new_path, 0);
-#else
- auto ret = do_syscall(SYS_renameat, old_dirfd, old_path, new_dirfd, new_path);
-#endif /* defined(SYS_renameat2) */
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_rmdir(const char *path) {
- auto ret = do_syscall(SYS_unlinkat, AT_FDCWD, path, AT_REMOVEDIR);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_ftruncate(int fd, size_t size) {
- auto ret = do_syscall(SYS_ftruncate, fd, size);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_readlink(const char *path, void *buf, size_t bufsiz, ssize_t *len) {
- auto ret = do_syscall(SYS_readlinkat, AT_FDCWD, path, buf, bufsiz);
- if (int e = sc_error(ret); e)
- return e;
- *len = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_getrlimit(int resource, struct rlimit *limit) {
- auto ret = do_syscall(SYS_getrlimit, resource, limit);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_setrlimit(int resource, const struct rlimit *limit) {
- auto ret = do_syscall(SYS_setrlimit, resource, limit);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-pid_t sys_getppid() {
- auto ret = do_syscall(SYS_getppid);
- // getppid() always succeeds.
- return sc_int_result<pid_t>(ret);
-}
-
-int sys_setpgid(pid_t pid, pid_t pgid) {
- auto ret = do_syscall(SYS_setpgid, pid, pgid);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_getsid(pid_t pid, pid_t *sid) {
- auto ret = do_syscall(SYS_getsid, pid);
- if (int e = sc_error(ret); e)
- return e;
- *sid = sc_int_result<pid_t>(ret);
- return 0;
-}
-
-int sys_setsid(pid_t *sid) {
- auto ret = do_syscall(SYS_setsid);
- if (int e = sc_error(ret); e)
- return e;
- *sid = sc_int_result<pid_t>(ret);
- return 0;
-}
-
-int sys_setuid(uid_t uid) {
- auto ret = do_syscall(SYS_setuid, uid);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_setgid(gid_t gid) {
- auto ret = do_syscall(SYS_setgid, gid);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_getpgid(pid_t pid, pid_t *out) {
- auto ret = do_syscall(SYS_getpgid, pid);
- if (int e = sc_error(ret); e)
- return e;
- *out = sc_int_result<pid_t>(ret);
- return 0;
-}
-
-int sys_getgroups(size_t size, const gid_t *list, int *retval) {
- auto ret = do_syscall(SYS_getgroups, size, list);
- if (int e = sc_error(ret); e)
- return e;
- *retval = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_dup(int fd, int flags, int *newfd) {
- __ensure(!flags);
- auto ret = do_cp_syscall(SYS_dup, fd);
- if (int e = sc_error(ret); e)
- return e;
- *newfd = sc_int_result<int>(ret);
- return 0;
-}
-
-void sys_sync() {
- do_syscall(SYS_sync);
-}
-
-int sys_fsync(int fd) {
- auto ret = do_syscall(SYS_fsync, fd);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_fdatasync(int fd) {
- auto ret = do_syscall(SYS_fdatasync, fd);
- if (int e = sc_error(ret); e)
- return e;
- return 0;
-}
-
-int sys_getrandom(void *buffer, size_t length, int flags, ssize_t *bytes_written) {
- auto ret = do_syscall(SYS_getrandom, buffer, length, flags);
- if (int e = sc_error(ret); e)
- return e;
- *bytes_written = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_getentropy(void *buffer, size_t length) {
- ssize_t written;
- return sys_getrandom(buffer, length, 0, &written);
-}
-
-int sys_setxattr(const char *path, const char *name, const void *val,
- size_t size, int flags) {
- auto ret = do_syscall(SYS_setxattr, path, name, val, size, flags);
- return sc_error(ret);
-}
-
-int sys_lsetxattr(const char *path, const char *name, const void *val,
- size_t size, int flags) {
- auto ret = do_syscall(SYS_lsetxattr, path, name, val, size, flags);
- return sc_error(ret);
-}
-
-int sys_fsetxattr(int fd, const char *name, const void *val,
- size_t size, int flags) {
- auto ret = do_syscall(SYS_fsetxattr, fd, name, val, size, flags);
- return sc_error(ret);
-}
-
-int sys_getxattr(const char *path, const char *name, void *val, size_t size,
- ssize_t *nread) {
- auto ret = do_syscall(SYS_getxattr, path, name, val, size);
- if (int e = sc_error(ret); e) {
- return e;
- }
-
- *nread = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_lgetxattr(const char *path, const char *name, void *val, size_t size,
- ssize_t *nread) {
- auto ret = do_syscall(SYS_lgetxattr, path, name, val, size);
- if (int e = sc_error(ret); e) {
- return e;
- }
-
- *nread = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_fgetxattr(int fd, const char *name, void *val, size_t size,
- ssize_t *nread) {
- auto ret = do_syscall(SYS_fgetxattr, fd, name, val, size);
- if (int e = sc_error(ret); e) {
- return e;
- }
-
- *nread = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_removexattr(const char *path, const char *name) {
- auto ret = do_syscall(SYS_removexattr, path, name);
- return sc_error(ret);
-}
-
-int sys_lremovexattr(const char *path, const char *name) {
- auto ret = do_syscall(SYS_lremovexattr, path, name);
- return sc_error(ret);
-}
-
-int sys_fremovexattr(int fd, const char *name) {
- auto ret = do_syscall(SYS_fremovexattr, fd, name);
- return sc_error(ret);
-}
-
-int sys_listxattr(const char *path, char *list, size_t size, ssize_t *nread) {
- auto ret = do_syscall(SYS_listxattr, path, list, size);
- if (int e = sc_error(ret); e) {
- return e;
- }
-
- *nread = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_llistxattr(const char *path, char *list, size_t size, ssize_t *nread) {
- auto ret = do_syscall(SYS_llistxattr, path, list, size);
- if (int e = sc_error(ret); e) {
- return e;
- }
-
- *nread = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_flistxattr(int fd, char *list, size_t size, ssize_t *nread) {
- auto ret = do_syscall(SYS_flistxattr, fd, list, size);
- if (int e = sc_error(ret); e) {
- return e;
- }
-
- *nread = sc_int_result<ssize_t>(ret);
- return 0;
-}
-
-int sys_sigtimedwait(const sigset_t *__restrict set, siginfo_t *__restrict info, const struct timespec *__restrict timeout, int *out_signal) {
- auto ret = do_syscall(SYS_rt_sigtimedwait, set, info, timeout, NSIG / 8);
-
- if (int e = sc_error(ret); e)
- return e;
-
- *out_signal = sc_int_result<int>(ret);
-
- return 0;
-}
-
-#if __MLIBC_BSD_OPTION
-int sys_brk(void **out) {
- auto ret = do_syscall(SYS_brk, 0);
- if(int e = sc_error(ret); e) {
- return e;
- }
-
- *out = (void *) sc_int_result<uintptr_t>(ret);
- return 0;
-}
-#endif // __MLIBC_BSD_OPTION
-
-#if __MLIBC_GLIBC_OPTION
-
-int sys_personality(unsigned long persona, int *out) {
- auto ret = do_syscall(SYS_personality, persona);
-
- if(int e = sc_error(ret); e) {
- return e;
- }
-
- *out = sc_int_result<int>(ret);
- return 0;
-}
-
-int sys_ioperm(unsigned long int from, unsigned long int num, int turn_on) {
-#if defined(SYS_ioperm)
- auto ret = do_syscall(SYS_ioperm, from, num, turn_on);
-
- if(int e = sc_error(ret); e) {
- return e;
- }
-
- return 0;
-#else
- (void) from;
- (void) num;
- (void) turn_on;
- return ENOSYS;
-#endif
-}
-
-int sys_iopl(int level) {
-#if defined(SYS_iopl)
- auto ret = do_syscall(SYS_iopl, level);
-
- if(int e = sc_error(ret); e) {
- return e;
- }
-
- return 0;
-#else
- (void) level;
- return ENOSYS;
-#endif
-}
-
-#endif // __MLIBC_GLIBC_OPTION
-
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/linux/generic/thread.cpp b/lib/mlibc/sysdeps/linux/generic/thread.cpp
deleted file mode 100644
index e413e4f..0000000
--- a/lib/mlibc/sysdeps/linux/generic/thread.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <mlibc/thread-entry.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/thread.hpp>
-#include <bits/ensure.h>
-#include <sys/mman.h>
-#include <stdint.h>
-#include <stddef.h>
-#include <errno.h>
-
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg) {
- // The linux kernel already sets the TCB in sys_clone().
- auto tcb = mlibc::get_current_tcb();
-
- // Wait until our parent sets up the TID.
- while(!__atomic_load_n(&tcb->tid, __ATOMIC_RELAXED))
- mlibc::sys_futex_wait(&tcb->tid, 0, nullptr);
-
- tcb->invokeThreadFunc(entry, user_arg);
-
- __atomic_store_n(&tcb->didExit, 1, __ATOMIC_RELEASE);
- mlibc::sys_futex_wake(&tcb->didExit);
-
- mlibc::sys_thread_exit();
-}
-
-namespace mlibc {
-
-static constexpr size_t default_stacksize = 0x200000;
-
-int sys_prepare_stack(void **stack, void *entry, void *user_arg, void *tcb, size_t *stack_size, size_t *guard_size, void **stack_base) {
- (void)tcb;
- if (!*stack_size)
- *stack_size = default_stacksize;
-
- uintptr_t map;
- if (*stack) {
- map = reinterpret_cast<uintptr_t>(*stack);
- *guard_size = 0;
- } else {
- map = reinterpret_cast<uintptr_t>(
- mmap(nullptr, *stack_size + *guard_size,
- PROT_NONE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)
- );
- if (reinterpret_cast<void*>(map) == MAP_FAILED)
- return EAGAIN;
- int ret = mprotect(reinterpret_cast<void*>(map + *guard_size), *stack_size,
- PROT_READ | PROT_WRITE);
- if(ret)
- return EAGAIN;
- }
-
- *stack_base = reinterpret_cast<void*>(map);
- auto sp = reinterpret_cast<uintptr_t*>(map + *guard_size + *stack_size);
- *--sp = reinterpret_cast<uintptr_t>(user_arg);
- *--sp = reinterpret_cast<uintptr_t>(entry);
- *stack = reinterpret_cast<void*>(sp);
- return 0;
-}
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/linux/include-internal/linux/unistd.h b/lib/mlibc/sysdeps/linux/include-internal/linux/unistd.h
deleted file mode 100644
index 6a8020e..0000000
--- a/lib/mlibc/sysdeps/linux/include-internal/linux/unistd.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* stub header not present in practice, redirects to our internal syscallnos */
-#include <syscallnos.h>
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/access.h b/lib/mlibc/sysdeps/linux/include/abi-bits/access.h
deleted file mode 120000
index cb83931..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/access.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/access.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/auxv.h b/lib/mlibc/sysdeps/linux/include/abi-bits/auxv.h
deleted file mode 120000
index c43f878..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/auxv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/auxv.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/blkcnt_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/blkcnt_t.h
deleted file mode 120000
index 0b0ec27..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/blkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/blkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/blksize_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/blksize_t.h
deleted file mode 120000
index 7dc8d7c..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/blksize_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/blksize_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/clockid_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/clockid_t.h
deleted file mode 120000
index 6a42da5..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/clockid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/clockid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/dev_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/dev_t.h
deleted file mode 120000
index bca881e..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/dev_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/dev_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/epoll.h b/lib/mlibc/sysdeps/linux/include/abi-bits/epoll.h
deleted file mode 120000
index eb4b76d..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/epoll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/epoll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/errno.h b/lib/mlibc/sysdeps/linux/include/abi-bits/errno.h
deleted file mode 120000
index 6e507de..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/errno.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/errno.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/fcntl.h b/lib/mlibc/sysdeps/linux/include/abi-bits/fcntl.h
deleted file mode 120000
index 463e2c9..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fcntl.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/fsblkcnt_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/fsblkcnt_t.h
deleted file mode 120000
index 898dfb2..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/fsblkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsblkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/fsfilcnt_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/fsfilcnt_t.h
deleted file mode 120000
index 791755c..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/fsfilcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsfilcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/gid_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/gid_t.h
deleted file mode 120000
index abce6d6..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/gid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/gid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/in.h b/lib/mlibc/sysdeps/linux/include/abi-bits/in.h
deleted file mode 120000
index 418d1d5..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/in.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/in.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/ino_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/ino_t.h
deleted file mode 120000
index 4c20aca..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/ino_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ino_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/inotify.h b/lib/mlibc/sysdeps/linux/include/abi-bits/inotify.h
deleted file mode 120000
index b5cb282..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/inotify.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/inotify.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/ioctls.h b/lib/mlibc/sysdeps/linux/include/abi-bits/ioctls.h
deleted file mode 120000
index 595106b..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/ioctls.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ioctls.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/limits.h b/lib/mlibc/sysdeps/linux/include/abi-bits/limits.h
deleted file mode 120000
index 6c88db2..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/limits.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/limits.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/mode_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/mode_t.h
deleted file mode 120000
index 5d78fdf..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/mode_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mode_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/mqueue.h b/lib/mlibc/sysdeps/linux/include/abi-bits/mqueue.h
deleted file mode 120000
index fa87b07..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/mqueue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mqueue.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/msg.h b/lib/mlibc/sysdeps/linux/include/abi-bits/msg.h
deleted file mode 120000
index f402b49..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/msg.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/msg.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/nlink_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/nlink_t.h
deleted file mode 120000
index bb3b625..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/nlink_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/nlink_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/packet.h b/lib/mlibc/sysdeps/linux/include/abi-bits/packet.h
deleted file mode 120000
index 998ef1a..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/packet.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/packet.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/pid_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/pid_t.h
deleted file mode 120000
index baa90f6..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/pid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/pid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/poll.h b/lib/mlibc/sysdeps/linux/include/abi-bits/poll.h
deleted file mode 120000
index 8ea6a0a..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/poll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/poll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/ptrace.h b/lib/mlibc/sysdeps/linux/include/abi-bits/ptrace.h
deleted file mode 120000
index b2517b2..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/ptrace.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ptrace.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/reboot.h b/lib/mlibc/sysdeps/linux/include/abi-bits/reboot.h
deleted file mode 120000
index 77013a4..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/reboot.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/reboot.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/resource.h b/lib/mlibc/sysdeps/linux/include/abi-bits/resource.h
deleted file mode 120000
index 88d7402..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/resource.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/seek-whence.h b/lib/mlibc/sysdeps/linux/include/abi-bits/seek-whence.h
deleted file mode 120000
index df7bccf..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/seek-whence.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/seek-whence.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/shm.h b/lib/mlibc/sysdeps/linux/include/abi-bits/shm.h
deleted file mode 120000
index 067d8c4..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/shm.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/shm.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/signal.h b/lib/mlibc/sysdeps/linux/include/abi-bits/signal.h
deleted file mode 120000
index 4dcb0b7..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/signal.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/signal.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/socket.h b/lib/mlibc/sysdeps/linux/include/abi-bits/socket.h
deleted file mode 120000
index f1dc016..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/socket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socket.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/socklen_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/socklen_t.h
deleted file mode 120000
index 41f3b11..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/socklen_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socklen_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/stat.h b/lib/mlibc/sysdeps/linux/include/abi-bits/stat.h
deleted file mode 120000
index 1f63b41..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/stat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/stat.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/statfs.h b/lib/mlibc/sysdeps/linux/include/abi-bits/statfs.h
deleted file mode 120000
index e3d202f..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/statfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/statvfs.h b/lib/mlibc/sysdeps/linux/include/abi-bits/statvfs.h
deleted file mode 120000
index 1fc80c2..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/statvfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statvfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/suseconds_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/suseconds_t.h
deleted file mode 120000
index 9ed6597..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/suseconds_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/suseconds_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/termios.h b/lib/mlibc/sysdeps/linux/include/abi-bits/termios.h
deleted file mode 120000
index ee8f0b0..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/termios.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/termios.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/time.h b/lib/mlibc/sysdeps/linux/include/abi-bits/time.h
deleted file mode 120000
index 2a02625..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/time.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/time.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/uid_t.h b/lib/mlibc/sysdeps/linux/include/abi-bits/uid_t.h
deleted file mode 120000
index b306777..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/uid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/uid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/utsname.h b/lib/mlibc/sysdeps/linux/include/abi-bits/utsname.h
deleted file mode 120000
index b285754..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/utsname.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/utsname.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/vm-flags.h b/lib/mlibc/sysdeps/linux/include/abi-bits/vm-flags.h
deleted file mode 120000
index bbe258c..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/vm-flags.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/vm-flags.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/vt.h b/lib/mlibc/sysdeps/linux/include/abi-bits/vt.h
deleted file mode 120000
index 5798a4a..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/vt.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/vt.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/wait.h b/lib/mlibc/sysdeps/linux/include/abi-bits/wait.h
deleted file mode 120000
index feb2840..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/wait.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/wait.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/abi-bits/xattr.h b/lib/mlibc/sysdeps/linux/include/abi-bits/xattr.h
deleted file mode 120000
index 66412d7..0000000
--- a/lib/mlibc/sysdeps/linux/include/abi-bits/xattr.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/xattr.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/linux/include/bits/syscall.h b/lib/mlibc/sysdeps/linux/include/bits/syscall.h
deleted file mode 100644
index 3023a3b..0000000
--- a/lib/mlibc/sysdeps/linux/include/bits/syscall.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef _MLIBC_SYSCALL_H
-#define _MLIBC_SYSCALL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef long __sc_word_t;
-
-/* These functions are implemented in arch-syscall.cpp. */
-__sc_word_t __do_syscall0(long);
-__sc_word_t __do_syscall1(long, __sc_word_t);
-__sc_word_t __do_syscall2(long, __sc_word_t, __sc_word_t);
-__sc_word_t __do_syscall3(long, __sc_word_t, __sc_word_t, __sc_word_t);
-__sc_word_t __do_syscall4(long, __sc_word_t, __sc_word_t, __sc_word_t, __sc_word_t);
-__sc_word_t __do_syscall5(long, __sc_word_t, __sc_word_t, __sc_word_t, __sc_word_t,
- __sc_word_t);
-__sc_word_t __do_syscall6(long, __sc_word_t, __sc_word_t, __sc_word_t, __sc_word_t,
- __sc_word_t, __sc_word_t);
-__sc_word_t __do_syscall7(long, __sc_word_t, __sc_word_t, __sc_word_t, __sc_word_t,
- __sc_word_t, __sc_word_t, __sc_word_t);
-long __do_syscall_ret(unsigned long);
-
-#ifdef __cplusplus
-extern "C++" {
-
-/* Defining a syscall as a macro is more problematic in C++, since there's a high chance of
- * a name collision e.g foo.syscall() or foo::syscall.
- */
-template<typename Arg0>
-long syscall(long n) {
- return __do_syscall_ret(__do_syscall0(n));
-}
-template<typename Arg0>
-long syscall(long n, Arg0 a0) {
- return __do_syscall_ret(__do_syscall1(n, (long)a0));
-}
-template<typename Arg0, typename Arg1>
-long syscall(long n, Arg0 a0, Arg1 a1) {
- return __do_syscall_ret(__do_syscall2(n, (long)a0, (long)a1));
-}
-template<typename Arg0, typename Arg1, typename Arg2>
-long syscall(long n, Arg0 a0, Arg1 a1, Arg2 a2) {
- return __do_syscall_ret(__do_syscall3(n, (long)a0, (long)a1, (long)a2));
-}
-template<typename Arg0, typename Arg1, typename Arg2, typename Arg3>
-long syscall(long n, Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3) {
- return __do_syscall_ret(__do_syscall4(n, (long)a0, (long)a1, (long)a2, (long)a3));
-}
-template<typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
-long syscall(long n, Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) {
- return __do_syscall_ret(__do_syscall5(n, (long)a0, (long)a1, (long)a2, (long)a3, (long)a4));
-}
-template<typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
-long syscall(long n, Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) {
- return __do_syscall_ret(__do_syscall6(n, (long)a0, (long)a1, (long)a2, (long)a3, (long)a4, (long)a5));
-}
-template<typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6>
-long syscall(long n, Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) {
- return __do_syscall_ret(__do_syscall7(n, (long)a0, (long)a1, (long)a2, (long)a3, (long)a4, (long)a5, (long)a6));
-}
-
-} /* extern C++ */
-#else
-
-/* These syscall macros were copied from musl. */
-#define __scc(x) ((__sc_word_t)(x))
-#define __syscall0(n) __do_syscall0(n)
-#define __syscall1(n,a) __do_syscall1(n,__scc(a))
-#define __syscall2(n,a,b) __do_syscall2(n,__scc(a),__scc(b))
-#define __syscall3(n,a,b,c) __do_syscall3(n,__scc(a),__scc(b),__scc(c))
-#define __syscall4(n,a,b,c,d) __do_syscall4(n,__scc(a),__scc(b),__scc(c),__scc(d))
-#define __syscall5(n,a,b,c,d,e) __do_syscall5(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e))
-#define __syscall6(n,a,b,c,d,e,f) __do_syscall6(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e),__scc(f))
-#define __syscall7(n,a,b,c,d,e,f,g) __do_syscall7(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e),__scc(f),__scc(g))
-#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n
-#define __SYSCALL_NARGS(...) __SYSCALL_NARGS_X(__VA_ARGS__,7,6,5,4,3,2,1,0,)
-#define __SYSCALL_CONCAT_X(a,b) a##b
-#define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X(a,b)
-#define __SYSCALL_DISP(b,...) __SYSCALL_CONCAT(b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__)
-#define __syscall(...) __SYSCALL_DISP(__syscall,__VA_ARGS__)
-#define syscall(...) __do_syscall_ret(__syscall(__VA_ARGS__))
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _MLIBC_SYSCALL_H
diff --git a/lib/mlibc/sysdeps/linux/include/bits/syscall_aliases.h b/lib/mlibc/sysdeps/linux/include/bits/syscall_aliases.h
deleted file mode 100644
index b929efc..0000000
--- a/lib/mlibc/sysdeps/linux/include/bits/syscall_aliases.h
+++ /dev/null
@@ -1,1823 +0,0 @@
-#ifndef __MLIBC_SYSCALL_ALIAS_BIT
-#define __MLIBC_SYSCALL_ALIAS_BIT
-/* This file is autogenerated. Don't bother. */
-/* Generator script: sysdeps/linux/update-syscall-list.py. */
-#ifdef __NR__llseek
-# define SYS__llseek __NR__llseek
-#endif
-#ifdef __NR__newselect
-# define SYS__newselect __NR__newselect
-#endif
-#ifdef __NR__sysctl
-# define SYS__sysctl __NR__sysctl
-#endif
-#ifdef __NR_accept
-# define SYS_accept __NR_accept
-#endif
-#ifdef __NR_accept4
-# define SYS_accept4 __NR_accept4
-#endif
-#ifdef __NR_access
-# define SYS_access __NR_access
-#endif
-#ifdef __NR_acct
-# define SYS_acct __NR_acct
-#endif
-#ifdef __NR_add_key
-# define SYS_add_key __NR_add_key
-#endif
-#ifdef __NR_adjtimex
-# define SYS_adjtimex __NR_adjtimex
-#endif
-#ifdef __NR_alarm
-# define SYS_alarm __NR_alarm
-#endif
-#ifdef __NR_arc_gettls
-# define SYS_arc_gettls __NR_arc_gettls
-#endif
-#ifdef __NR_arc_settls
-# define SYS_arc_settls __NR_arc_settls
-#endif
-#ifdef __NR_arc_usr_cmpxchg
-# define SYS_arc_usr_cmpxchg __NR_arc_usr_cmpxchg
-#endif
-#ifdef __NR_arch_prctl
-# define SYS_arch_prctl __NR_arch_prctl
-#endif
-#ifdef __NR_arch_specific_syscall
-# define SYS_arch_specific_syscall __NR_arch_specific_syscall
-#endif
-#ifdef __NR_arm_fadvise64_64
-# define SYS_arm_fadvise64_64 __NR_arm_fadvise64_64
-#endif
-#ifdef __NR_atomic_barrier
-# define SYS_atomic_barrier __NR_atomic_barrier
-#endif
-#ifdef __NR_atomic_cmpxchg_32
-# define SYS_atomic_cmpxchg_32 __NR_atomic_cmpxchg_32
-#endif
-#ifdef __NR_bdflush
-# define SYS_bdflush __NR_bdflush
-#endif
-#ifdef __NR_bind
-# define SYS_bind __NR_bind
-#endif
-#ifdef __NR_bpf
-# define SYS_bpf __NR_bpf
-#endif
-#ifdef __NR_brk
-# define SYS_brk __NR_brk
-#endif
-#ifdef __NR_cachectl
-# define SYS_cachectl __NR_cachectl
-#endif
-#ifdef __NR_cacheflush
-# define SYS_cacheflush __NR_cacheflush
-#endif
-#ifdef __NR_capget
-# define SYS_capget __NR_capget
-#endif
-#ifdef __NR_capset
-# define SYS_capset __NR_capset
-#endif
-#ifdef __NR_chdir
-# define SYS_chdir __NR_chdir
-#endif
-#ifdef __NR_chmod
-# define SYS_chmod __NR_chmod
-#endif
-#ifdef __NR_chown
-# define SYS_chown __NR_chown
-#endif
-#ifdef __NR_chown32
-# define SYS_chown32 __NR_chown32
-#endif
-#ifdef __NR_chroot
-# define SYS_chroot __NR_chroot
-#endif
-#ifdef __NR_clock_adjtime
-# define SYS_clock_adjtime __NR_clock_adjtime
-#endif
-#ifdef __NR_clock_adjtime64
-# define SYS_clock_adjtime64 __NR_clock_adjtime64
-#endif
-#ifdef __NR_clock_getres
-# define SYS_clock_getres __NR_clock_getres
-#endif
-#ifdef __NR_clock_getres_time64
-# define SYS_clock_getres_time64 __NR_clock_getres_time64
-#endif
-#ifdef __NR_clock_gettime
-# define SYS_clock_gettime __NR_clock_gettime
-#endif
-#ifdef __NR_clock_gettime64
-# define SYS_clock_gettime64 __NR_clock_gettime64
-#endif
-#ifdef __NR_clock_nanosleep
-# define SYS_clock_nanosleep __NR_clock_nanosleep
-#endif
-#ifdef __NR_clock_nanosleep_time64
-# define SYS_clock_nanosleep_time64 __NR_clock_nanosleep_time64
-#endif
-#ifdef __NR_clock_settime
-# define SYS_clock_settime __NR_clock_settime
-#endif
-#ifdef __NR_clock_settime64
-# define SYS_clock_settime64 __NR_clock_settime64
-#endif
-#ifdef __NR_clone
-# define SYS_clone __NR_clone
-#endif
-#ifdef __NR_clone2
-# define SYS_clone2 __NR_clone2
-#endif
-#ifdef __NR_clone3
-# define SYS_clone3 __NR_clone3
-#endif
-#ifdef __NR_close
-# define SYS_close __NR_close
-#endif
-#ifdef __NR_close_range
-# define SYS_close_range __NR_close_range
-#endif
-#ifdef __NR_connect
-# define SYS_connect __NR_connect
-#endif
-#ifdef __NR_copy_file_range
-# define SYS_copy_file_range __NR_copy_file_range
-#endif
-#ifdef __NR_creat
-# define SYS_creat __NR_creat
-#endif
-#ifdef __NR_create_module
-# define SYS_create_module __NR_create_module
-#endif
-#ifdef __NR_delete_module
-# define SYS_delete_module __NR_delete_module
-#endif
-#ifdef __NR_dipc
-# define SYS_dipc __NR_dipc
-#endif
-#ifdef __NR_dup
-# define SYS_dup __NR_dup
-#endif
-#ifdef __NR_dup2
-# define SYS_dup2 __NR_dup2
-#endif
-#ifdef __NR_dup3
-# define SYS_dup3 __NR_dup3
-#endif
-#ifdef __NR_epoll_create
-# define SYS_epoll_create __NR_epoll_create
-#endif
-#ifdef __NR_epoll_create1
-# define SYS_epoll_create1 __NR_epoll_create1
-#endif
-#ifdef __NR_epoll_ctl
-# define SYS_epoll_ctl __NR_epoll_ctl
-#endif
-#ifdef __NR_epoll_ctl_old
-# define SYS_epoll_ctl_old __NR_epoll_ctl_old
-#endif
-#ifdef __NR_epoll_pwait
-# define SYS_epoll_pwait __NR_epoll_pwait
-#endif
-#ifdef __NR_epoll_pwait2
-# define SYS_epoll_pwait2 __NR_epoll_pwait2
-#endif
-#ifdef __NR_epoll_wait
-# define SYS_epoll_wait __NR_epoll_wait
-#endif
-#ifdef __NR_epoll_wait_old
-# define SYS_epoll_wait_old __NR_epoll_wait_old
-#endif
-#ifdef __NR_eventfd
-# define SYS_eventfd __NR_eventfd
-#endif
-#ifdef __NR_eventfd2
-# define SYS_eventfd2 __NR_eventfd2
-#endif
-#ifdef __NR_exec_with_loader
-# define SYS_exec_with_loader __NR_exec_with_loader
-#endif
-#ifdef __NR_execv
-# define SYS_execv __NR_execv
-#endif
-#ifdef __NR_execve
-# define SYS_execve __NR_execve
-#endif
-#ifdef __NR_execveat
-# define SYS_execveat __NR_execveat
-#endif
-#ifdef __NR_exit
-# define SYS_exit __NR_exit
-#endif
-#ifdef __NR_exit_group
-# define SYS_exit_group __NR_exit_group
-#endif
-#ifdef __NR_faccessat
-# define SYS_faccessat __NR_faccessat
-#endif
-#ifdef __NR_faccessat2
-# define SYS_faccessat2 __NR_faccessat2
-#endif
-#ifdef __NR_fadvise64
-# define SYS_fadvise64 __NR_fadvise64
-#endif
-#ifdef __NR_fadvise64_64
-# define SYS_fadvise64_64 __NR_fadvise64_64
-#endif
-#ifdef __NR_fallocate
-# define SYS_fallocate __NR_fallocate
-#endif
-#ifdef __NR_fanotify_init
-# define SYS_fanotify_init __NR_fanotify_init
-#endif
-#ifdef __NR_fanotify_mark
-# define SYS_fanotify_mark __NR_fanotify_mark
-#endif
-#ifdef __NR_fchdir
-# define SYS_fchdir __NR_fchdir
-#endif
-#ifdef __NR_fchmod
-# define SYS_fchmod __NR_fchmod
-#endif
-#ifdef __NR_fchmodat
-# define SYS_fchmodat __NR_fchmodat
-#endif
-#ifdef __NR_fchown
-# define SYS_fchown __NR_fchown
-#endif
-#ifdef __NR_fchown32
-# define SYS_fchown32 __NR_fchown32
-#endif
-#ifdef __NR_fchownat
-# define SYS_fchownat __NR_fchownat
-#endif
-#ifdef __NR_fcntl
-# define SYS_fcntl __NR_fcntl
-#endif
-#ifdef __NR_fcntl64
-# define SYS_fcntl64 __NR_fcntl64
-#endif
-#ifdef __NR_fdatasync
-# define SYS_fdatasync __NR_fdatasync
-#endif
-#ifdef __NR_fgetxattr
-# define SYS_fgetxattr __NR_fgetxattr
-#endif
-#ifdef __NR_finit_module
-# define SYS_finit_module __NR_finit_module
-#endif
-#ifdef __NR_flistxattr
-# define SYS_flistxattr __NR_flistxattr
-#endif
-#ifdef __NR_flock
-# define SYS_flock __NR_flock
-#endif
-#ifdef __NR_fork
-# define SYS_fork __NR_fork
-#endif
-#ifdef __NR_fremovexattr
-# define SYS_fremovexattr __NR_fremovexattr
-#endif
-#ifdef __NR_fsconfig
-# define SYS_fsconfig __NR_fsconfig
-#endif
-#ifdef __NR_fsetxattr
-# define SYS_fsetxattr __NR_fsetxattr
-#endif
-#ifdef __NR_fsmount
-# define SYS_fsmount __NR_fsmount
-#endif
-#ifdef __NR_fsopen
-# define SYS_fsopen __NR_fsopen
-#endif
-#ifdef __NR_fspick
-# define SYS_fspick __NR_fspick
-#endif
-#ifdef __NR_fstat
-# define SYS_fstat __NR_fstat
-#endif
-#ifdef __NR_fstat64
-# define SYS_fstat64 __NR_fstat64
-#endif
-#ifdef __NR_fstatat64
-# define SYS_fstatat64 __NR_fstatat64
-#endif
-#ifdef __NR_fstatfs
-# define SYS_fstatfs __NR_fstatfs
-#endif
-#ifdef __NR_fstatfs64
-# define SYS_fstatfs64 __NR_fstatfs64
-#endif
-#ifdef __NR_fsync
-# define SYS_fsync __NR_fsync
-#endif
-#ifdef __NR_ftruncate
-# define SYS_ftruncate __NR_ftruncate
-#endif
-#ifdef __NR_ftruncate64
-# define SYS_ftruncate64 __NR_ftruncate64
-#endif
-#ifdef __NR_futex
-# define SYS_futex __NR_futex
-#endif
-#ifdef __NR_futex_time64
-# define SYS_futex_time64 __NR_futex_time64
-#endif
-#ifdef __NR_futex_waitv
-# define SYS_futex_waitv __NR_futex_waitv
-#endif
-#ifdef __NR_futimesat
-# define SYS_futimesat __NR_futimesat
-#endif
-#ifdef __NR_get_kernel_syms
-# define SYS_get_kernel_syms __NR_get_kernel_syms
-#endif
-#ifdef __NR_get_mempolicy
-# define SYS_get_mempolicy __NR_get_mempolicy
-#endif
-#ifdef __NR_get_robust_list
-# define SYS_get_robust_list __NR_get_robust_list
-#endif
-#ifdef __NR_get_thread_area
-# define SYS_get_thread_area __NR_get_thread_area
-#endif
-#ifdef __NR_getcpu
-# define SYS_getcpu __NR_getcpu
-#endif
-#ifdef __NR_getcwd
-# define SYS_getcwd __NR_getcwd
-#endif
-#ifdef __NR_getdents
-# define SYS_getdents __NR_getdents
-#endif
-#ifdef __NR_getdents64
-# define SYS_getdents64 __NR_getdents64
-#endif
-#ifdef __NR_getdomainname
-# define SYS_getdomainname __NR_getdomainname
-#endif
-#ifdef __NR_getdtablesize
-# define SYS_getdtablesize __NR_getdtablesize
-#endif
-#ifdef __NR_getegid
-# define SYS_getegid __NR_getegid
-#endif
-#ifdef __NR_getegid32
-# define SYS_getegid32 __NR_getegid32
-#endif
-#ifdef __NR_geteuid
-# define SYS_geteuid __NR_geteuid
-#endif
-#ifdef __NR_geteuid32
-# define SYS_geteuid32 __NR_geteuid32
-#endif
-#ifdef __NR_getgid
-# define SYS_getgid __NR_getgid
-#endif
-#ifdef __NR_getgid32
-# define SYS_getgid32 __NR_getgid32
-#endif
-#ifdef __NR_getgroups
-# define SYS_getgroups __NR_getgroups
-#endif
-#ifdef __NR_getgroups32
-# define SYS_getgroups32 __NR_getgroups32
-#endif
-#ifdef __NR_gethostname
-# define SYS_gethostname __NR_gethostname
-#endif
-#ifdef __NR_getitimer
-# define SYS_getitimer __NR_getitimer
-#endif
-#ifdef __NR_getpagesize
-# define SYS_getpagesize __NR_getpagesize
-#endif
-#ifdef __NR_getpeername
-# define SYS_getpeername __NR_getpeername
-#endif
-#ifdef __NR_getpgid
-# define SYS_getpgid __NR_getpgid
-#endif
-#ifdef __NR_getpgrp
-# define SYS_getpgrp __NR_getpgrp
-#endif
-#ifdef __NR_getpid
-# define SYS_getpid __NR_getpid
-#endif
-#ifdef __NR_getpmsg
-# define SYS_getpmsg __NR_getpmsg
-#endif
-#ifdef __NR_getppid
-# define SYS_getppid __NR_getppid
-#endif
-#ifdef __NR_getpriority
-# define SYS_getpriority __NR_getpriority
-#endif
-#ifdef __NR_getrandom
-# define SYS_getrandom __NR_getrandom
-#endif
-#ifdef __NR_getresgid
-# define SYS_getresgid __NR_getresgid
-#endif
-#ifdef __NR_getresgid32
-# define SYS_getresgid32 __NR_getresgid32
-#endif
-#ifdef __NR_getresuid
-# define SYS_getresuid __NR_getresuid
-#endif
-#ifdef __NR_getresuid32
-# define SYS_getresuid32 __NR_getresuid32
-#endif
-#ifdef __NR_getrlimit
-# define SYS_getrlimit __NR_getrlimit
-#endif
-#ifdef __NR_getrusage
-# define SYS_getrusage __NR_getrusage
-#endif
-#ifdef __NR_getsid
-# define SYS_getsid __NR_getsid
-#endif
-#ifdef __NR_getsockname
-# define SYS_getsockname __NR_getsockname
-#endif
-#ifdef __NR_getsockopt
-# define SYS_getsockopt __NR_getsockopt
-#endif
-#ifdef __NR_gettid
-# define SYS_gettid __NR_gettid
-#endif
-#ifdef __NR_gettimeofday
-# define SYS_gettimeofday __NR_gettimeofday
-#endif
-#ifdef __NR_getuid
-# define SYS_getuid __NR_getuid
-#endif
-#ifdef __NR_getuid32
-# define SYS_getuid32 __NR_getuid32
-#endif
-#ifdef __NR_getunwind
-# define SYS_getunwind __NR_getunwind
-#endif
-#ifdef __NR_getxattr
-# define SYS_getxattr __NR_getxattr
-#endif
-#ifdef __NR_getxgid
-# define SYS_getxgid __NR_getxgid
-#endif
-#ifdef __NR_getxpid
-# define SYS_getxpid __NR_getxpid
-#endif
-#ifdef __NR_getxuid
-# define SYS_getxuid __NR_getxuid
-#endif
-#ifdef __NR_idle
-# define SYS_idle __NR_idle
-#endif
-#ifdef __NR_init_module
-# define SYS_init_module __NR_init_module
-#endif
-#ifdef __NR_inotify_add_watch
-# define SYS_inotify_add_watch __NR_inotify_add_watch
-#endif
-#ifdef __NR_inotify_init
-# define SYS_inotify_init __NR_inotify_init
-#endif
-#ifdef __NR_inotify_init1
-# define SYS_inotify_init1 __NR_inotify_init1
-#endif
-#ifdef __NR_inotify_rm_watch
-# define SYS_inotify_rm_watch __NR_inotify_rm_watch
-#endif
-#ifdef __NR_io_cancel
-# define SYS_io_cancel __NR_io_cancel
-#endif
-#ifdef __NR_io_destroy
-# define SYS_io_destroy __NR_io_destroy
-#endif
-#ifdef __NR_io_getevents
-# define SYS_io_getevents __NR_io_getevents
-#endif
-#ifdef __NR_io_pgetevents
-# define SYS_io_pgetevents __NR_io_pgetevents
-#endif
-#ifdef __NR_io_pgetevents_time64
-# define SYS_io_pgetevents_time64 __NR_io_pgetevents_time64
-#endif
-#ifdef __NR_io_setup
-# define SYS_io_setup __NR_io_setup
-#endif
-#ifdef __NR_io_submit
-# define SYS_io_submit __NR_io_submit
-#endif
-#ifdef __NR_io_uring_enter
-# define SYS_io_uring_enter __NR_io_uring_enter
-#endif
-#ifdef __NR_io_uring_register
-# define SYS_io_uring_register __NR_io_uring_register
-#endif
-#ifdef __NR_io_uring_setup
-# define SYS_io_uring_setup __NR_io_uring_setup
-#endif
-#ifdef __NR_ioctl
-# define SYS_ioctl __NR_ioctl
-#endif
-#ifdef __NR_ioperm
-# define SYS_ioperm __NR_ioperm
-#endif
-#ifdef __NR_iopl
-# define SYS_iopl __NR_iopl
-#endif
-#ifdef __NR_ioprio_get
-# define SYS_ioprio_get __NR_ioprio_get
-#endif
-#ifdef __NR_ioprio_set
-# define SYS_ioprio_set __NR_ioprio_set
-#endif
-#ifdef __NR_ipc
-# define SYS_ipc __NR_ipc
-#endif
-#ifdef __NR_kcmp
-# define SYS_kcmp __NR_kcmp
-#endif
-#ifdef __NR_kern_features
-# define SYS_kern_features __NR_kern_features
-#endif
-#ifdef __NR_kexec_file_load
-# define SYS_kexec_file_load __NR_kexec_file_load
-#endif
-#ifdef __NR_kexec_load
-# define SYS_kexec_load __NR_kexec_load
-#endif
-#ifdef __NR_keyctl
-# define SYS_keyctl __NR_keyctl
-#endif
-#ifdef __NR_kill
-# define SYS_kill __NR_kill
-#endif
-#ifdef __NR_landlock_add_rule
-# define SYS_landlock_add_rule __NR_landlock_add_rule
-#endif
-#ifdef __NR_landlock_create_ruleset
-# define SYS_landlock_create_ruleset __NR_landlock_create_ruleset
-#endif
-#ifdef __NR_landlock_restrict_self
-# define SYS_landlock_restrict_self __NR_landlock_restrict_self
-#endif
-#ifdef __NR_lchown
-# define SYS_lchown __NR_lchown
-#endif
-#ifdef __NR_lchown32
-# define SYS_lchown32 __NR_lchown32
-#endif
-#ifdef __NR_lgetxattr
-# define SYS_lgetxattr __NR_lgetxattr
-#endif
-#ifdef __NR_link
-# define SYS_link __NR_link
-#endif
-#ifdef __NR_linkat
-# define SYS_linkat __NR_linkat
-#endif
-#ifdef __NR_listen
-# define SYS_listen __NR_listen
-#endif
-#ifdef __NR_listxattr
-# define SYS_listxattr __NR_listxattr
-#endif
-#ifdef __NR_llistxattr
-# define SYS_llistxattr __NR_llistxattr
-#endif
-#ifdef __NR_llseek
-# define SYS_llseek __NR_llseek
-#endif
-#ifdef __NR_lookup_dcookie
-# define SYS_lookup_dcookie __NR_lookup_dcookie
-#endif
-#ifdef __NR_lremovexattr
-# define SYS_lremovexattr __NR_lremovexattr
-#endif
-#ifdef __NR_lseek
-# define SYS_lseek __NR_lseek
-#endif
-#ifdef __NR_lsetxattr
-# define SYS_lsetxattr __NR_lsetxattr
-#endif
-#ifdef __NR_lstat
-# define SYS_lstat __NR_lstat
-#endif
-#ifdef __NR_lstat64
-# define SYS_lstat64 __NR_lstat64
-#endif
-#ifdef __NR_madvise
-# define SYS_madvise __NR_madvise
-#endif
-#ifdef __NR_mbind
-# define SYS_mbind __NR_mbind
-#endif
-#ifdef __NR_membarrier
-# define SYS_membarrier __NR_membarrier
-#endif
-#ifdef __NR_memfd_create
-# define SYS_memfd_create __NR_memfd_create
-#endif
-#ifdef __NR_memfd_secret
-# define SYS_memfd_secret __NR_memfd_secret
-#endif
-#ifdef __NR_memory_ordering
-# define SYS_memory_ordering __NR_memory_ordering
-#endif
-#ifdef __NR_migrate_pages
-# define SYS_migrate_pages __NR_migrate_pages
-#endif
-#ifdef __NR_mincore
-# define SYS_mincore __NR_mincore
-#endif
-#ifdef __NR_mkdir
-# define SYS_mkdir __NR_mkdir
-#endif
-#ifdef __NR_mkdirat
-# define SYS_mkdirat __NR_mkdirat
-#endif
-#ifdef __NR_mknod
-# define SYS_mknod __NR_mknod
-#endif
-#ifdef __NR_mknodat
-# define SYS_mknodat __NR_mknodat
-#endif
-#ifdef __NR_mlock
-# define SYS_mlock __NR_mlock
-#endif
-#ifdef __NR_mlock2
-# define SYS_mlock2 __NR_mlock2
-#endif
-#ifdef __NR_mlockall
-# define SYS_mlockall __NR_mlockall
-#endif
-#ifdef __NR_mmap
-# define SYS_mmap __NR_mmap
-#endif
-#ifdef __NR_mmap2
-# define SYS_mmap2 __NR_mmap2
-#endif
-#ifdef __NR_modify_ldt
-# define SYS_modify_ldt __NR_modify_ldt
-#endif
-#ifdef __NR_mount
-# define SYS_mount __NR_mount
-#endif
-#ifdef __NR_mount_setattr
-# define SYS_mount_setattr __NR_mount_setattr
-#endif
-#ifdef __NR_move_mount
-# define SYS_move_mount __NR_move_mount
-#endif
-#ifdef __NR_move_pages
-# define SYS_move_pages __NR_move_pages
-#endif
-#ifdef __NR_mprotect
-# define SYS_mprotect __NR_mprotect
-#endif
-#ifdef __NR_mq_getsetattr
-# define SYS_mq_getsetattr __NR_mq_getsetattr
-#endif
-#ifdef __NR_mq_notify
-# define SYS_mq_notify __NR_mq_notify
-#endif
-#ifdef __NR_mq_open
-# define SYS_mq_open __NR_mq_open
-#endif
-#ifdef __NR_mq_timedreceive
-# define SYS_mq_timedreceive __NR_mq_timedreceive
-#endif
-#ifdef __NR_mq_timedreceive_time64
-# define SYS_mq_timedreceive_time64 __NR_mq_timedreceive_time64
-#endif
-#ifdef __NR_mq_timedsend
-# define SYS_mq_timedsend __NR_mq_timedsend
-#endif
-#ifdef __NR_mq_timedsend_time64
-# define SYS_mq_timedsend_time64 __NR_mq_timedsend_time64
-#endif
-#ifdef __NR_mq_unlink
-# define SYS_mq_unlink __NR_mq_unlink
-#endif
-#ifdef __NR_mremap
-# define SYS_mremap __NR_mremap
-#endif
-#ifdef __NR_msgctl
-# define SYS_msgctl __NR_msgctl
-#endif
-#ifdef __NR_msgget
-# define SYS_msgget __NR_msgget
-#endif
-#ifdef __NR_msgrcv
-# define SYS_msgrcv __NR_msgrcv
-#endif
-#ifdef __NR_msgsnd
-# define SYS_msgsnd __NR_msgsnd
-#endif
-#ifdef __NR_msync
-# define SYS_msync __NR_msync
-#endif
-#ifdef __NR_multiplexer
-# define SYS_multiplexer __NR_multiplexer
-#endif
-#ifdef __NR_munlock
-# define SYS_munlock __NR_munlock
-#endif
-#ifdef __NR_munlockall
-# define SYS_munlockall __NR_munlockall
-#endif
-#ifdef __NR_munmap
-# define SYS_munmap __NR_munmap
-#endif
-#ifdef __NR_name_to_handle_at
-# define SYS_name_to_handle_at __NR_name_to_handle_at
-#endif
-#ifdef __NR_nanosleep
-# define SYS_nanosleep __NR_nanosleep
-#endif
-#ifdef __NR_newfstatat
-# define SYS_newfstatat __NR_newfstatat
-#endif
-#ifdef __NR_nfsservctl
-# define SYS_nfsservctl __NR_nfsservctl
-#endif
-#ifdef __NR_nice
-# define SYS_nice __NR_nice
-#endif
-#ifdef __NR_old_adjtimex
-# define SYS_old_adjtimex __NR_old_adjtimex
-#endif
-#ifdef __NR_old_getpagesize
-# define SYS_old_getpagesize __NR_old_getpagesize
-#endif
-#ifdef __NR_oldfstat
-# define SYS_oldfstat __NR_oldfstat
-#endif
-#ifdef __NR_oldlstat
-# define SYS_oldlstat __NR_oldlstat
-#endif
-#ifdef __NR_oldolduname
-# define SYS_oldolduname __NR_oldolduname
-#endif
-#ifdef __NR_oldstat
-# define SYS_oldstat __NR_oldstat
-#endif
-#ifdef __NR_oldumount
-# define SYS_oldumount __NR_oldumount
-#endif
-#ifdef __NR_olduname
-# define SYS_olduname __NR_olduname
-#endif
-#ifdef __NR_open
-# define SYS_open __NR_open
-#endif
-#ifdef __NR_open_by_handle_at
-# define SYS_open_by_handle_at __NR_open_by_handle_at
-#endif
-#ifdef __NR_open_tree
-# define SYS_open_tree __NR_open_tree
-#endif
-#ifdef __NR_openat
-# define SYS_openat __NR_openat
-#endif
-#ifdef __NR_openat2
-# define SYS_openat2 __NR_openat2
-#endif
-#ifdef __NR_or1k_atomic
-# define SYS_or1k_atomic __NR_or1k_atomic
-#endif
-#ifdef __NR_osf_adjtime
-# define SYS_osf_adjtime __NR_osf_adjtime
-#endif
-#ifdef __NR_osf_afs_syscall
-# define SYS_osf_afs_syscall __NR_osf_afs_syscall
-#endif
-#ifdef __NR_osf_alt_plock
-# define SYS_osf_alt_plock __NR_osf_alt_plock
-#endif
-#ifdef __NR_osf_alt_setsid
-# define SYS_osf_alt_setsid __NR_osf_alt_setsid
-#endif
-#ifdef __NR_osf_alt_sigpending
-# define SYS_osf_alt_sigpending __NR_osf_alt_sigpending
-#endif
-#ifdef __NR_osf_asynch_daemon
-# define SYS_osf_asynch_daemon __NR_osf_asynch_daemon
-#endif
-#ifdef __NR_osf_audcntl
-# define SYS_osf_audcntl __NR_osf_audcntl
-#endif
-#ifdef __NR_osf_audgen
-# define SYS_osf_audgen __NR_osf_audgen
-#endif
-#ifdef __NR_osf_chflags
-# define SYS_osf_chflags __NR_osf_chflags
-#endif
-#ifdef __NR_osf_execve
-# define SYS_osf_execve __NR_osf_execve
-#endif
-#ifdef __NR_osf_exportfs
-# define SYS_osf_exportfs __NR_osf_exportfs
-#endif
-#ifdef __NR_osf_fchflags
-# define SYS_osf_fchflags __NR_osf_fchflags
-#endif
-#ifdef __NR_osf_fdatasync
-# define SYS_osf_fdatasync __NR_osf_fdatasync
-#endif
-#ifdef __NR_osf_fpathconf
-# define SYS_osf_fpathconf __NR_osf_fpathconf
-#endif
-#ifdef __NR_osf_fstat
-# define SYS_osf_fstat __NR_osf_fstat
-#endif
-#ifdef __NR_osf_fstatfs
-# define SYS_osf_fstatfs __NR_osf_fstatfs
-#endif
-#ifdef __NR_osf_fstatfs64
-# define SYS_osf_fstatfs64 __NR_osf_fstatfs64
-#endif
-#ifdef __NR_osf_fuser
-# define SYS_osf_fuser __NR_osf_fuser
-#endif
-#ifdef __NR_osf_getaddressconf
-# define SYS_osf_getaddressconf __NR_osf_getaddressconf
-#endif
-#ifdef __NR_osf_getdirentries
-# define SYS_osf_getdirentries __NR_osf_getdirentries
-#endif
-#ifdef __NR_osf_getdomainname
-# define SYS_osf_getdomainname __NR_osf_getdomainname
-#endif
-#ifdef __NR_osf_getfh
-# define SYS_osf_getfh __NR_osf_getfh
-#endif
-#ifdef __NR_osf_getfsstat
-# define SYS_osf_getfsstat __NR_osf_getfsstat
-#endif
-#ifdef __NR_osf_gethostid
-# define SYS_osf_gethostid __NR_osf_gethostid
-#endif
-#ifdef __NR_osf_getitimer
-# define SYS_osf_getitimer __NR_osf_getitimer
-#endif
-#ifdef __NR_osf_getlogin
-# define SYS_osf_getlogin __NR_osf_getlogin
-#endif
-#ifdef __NR_osf_getmnt
-# define SYS_osf_getmnt __NR_osf_getmnt
-#endif
-#ifdef __NR_osf_getrusage
-# define SYS_osf_getrusage __NR_osf_getrusage
-#endif
-#ifdef __NR_osf_getsysinfo
-# define SYS_osf_getsysinfo __NR_osf_getsysinfo
-#endif
-#ifdef __NR_osf_gettimeofday
-# define SYS_osf_gettimeofday __NR_osf_gettimeofday
-#endif
-#ifdef __NR_osf_kloadcall
-# define SYS_osf_kloadcall __NR_osf_kloadcall
-#endif
-#ifdef __NR_osf_kmodcall
-# define SYS_osf_kmodcall __NR_osf_kmodcall
-#endif
-#ifdef __NR_osf_lstat
-# define SYS_osf_lstat __NR_osf_lstat
-#endif
-#ifdef __NR_osf_memcntl
-# define SYS_osf_memcntl __NR_osf_memcntl
-#endif
-#ifdef __NR_osf_mincore
-# define SYS_osf_mincore __NR_osf_mincore
-#endif
-#ifdef __NR_osf_mount
-# define SYS_osf_mount __NR_osf_mount
-#endif
-#ifdef __NR_osf_mremap
-# define SYS_osf_mremap __NR_osf_mremap
-#endif
-#ifdef __NR_osf_msfs_syscall
-# define SYS_osf_msfs_syscall __NR_osf_msfs_syscall
-#endif
-#ifdef __NR_osf_msleep
-# define SYS_osf_msleep __NR_osf_msleep
-#endif
-#ifdef __NR_osf_mvalid
-# define SYS_osf_mvalid __NR_osf_mvalid
-#endif
-#ifdef __NR_osf_mwakeup
-# define SYS_osf_mwakeup __NR_osf_mwakeup
-#endif
-#ifdef __NR_osf_naccept
-# define SYS_osf_naccept __NR_osf_naccept
-#endif
-#ifdef __NR_osf_nfssvc
-# define SYS_osf_nfssvc __NR_osf_nfssvc
-#endif
-#ifdef __NR_osf_ngetpeername
-# define SYS_osf_ngetpeername __NR_osf_ngetpeername
-#endif
-#ifdef __NR_osf_ngetsockname
-# define SYS_osf_ngetsockname __NR_osf_ngetsockname
-#endif
-#ifdef __NR_osf_nrecvfrom
-# define SYS_osf_nrecvfrom __NR_osf_nrecvfrom
-#endif
-#ifdef __NR_osf_nrecvmsg
-# define SYS_osf_nrecvmsg __NR_osf_nrecvmsg
-#endif
-#ifdef __NR_osf_nsendmsg
-# define SYS_osf_nsendmsg __NR_osf_nsendmsg
-#endif
-#ifdef __NR_osf_ntp_adjtime
-# define SYS_osf_ntp_adjtime __NR_osf_ntp_adjtime
-#endif
-#ifdef __NR_osf_ntp_gettime
-# define SYS_osf_ntp_gettime __NR_osf_ntp_gettime
-#endif
-#ifdef __NR_osf_old_creat
-# define SYS_osf_old_creat __NR_osf_old_creat
-#endif
-#ifdef __NR_osf_old_fstat
-# define SYS_osf_old_fstat __NR_osf_old_fstat
-#endif
-#ifdef __NR_osf_old_getpgrp
-# define SYS_osf_old_getpgrp __NR_osf_old_getpgrp
-#endif
-#ifdef __NR_osf_old_killpg
-# define SYS_osf_old_killpg __NR_osf_old_killpg
-#endif
-#ifdef __NR_osf_old_lstat
-# define SYS_osf_old_lstat __NR_osf_old_lstat
-#endif
-#ifdef __NR_osf_old_open
-# define SYS_osf_old_open __NR_osf_old_open
-#endif
-#ifdef __NR_osf_old_sigaction
-# define SYS_osf_old_sigaction __NR_osf_old_sigaction
-#endif
-#ifdef __NR_osf_old_sigblock
-# define SYS_osf_old_sigblock __NR_osf_old_sigblock
-#endif
-#ifdef __NR_osf_old_sigreturn
-# define SYS_osf_old_sigreturn __NR_osf_old_sigreturn
-#endif
-#ifdef __NR_osf_old_sigsetmask
-# define SYS_osf_old_sigsetmask __NR_osf_old_sigsetmask
-#endif
-#ifdef __NR_osf_old_sigvec
-# define SYS_osf_old_sigvec __NR_osf_old_sigvec
-#endif
-#ifdef __NR_osf_old_stat
-# define SYS_osf_old_stat __NR_osf_old_stat
-#endif
-#ifdef __NR_osf_old_vadvise
-# define SYS_osf_old_vadvise __NR_osf_old_vadvise
-#endif
-#ifdef __NR_osf_old_vtrace
-# define SYS_osf_old_vtrace __NR_osf_old_vtrace
-#endif
-#ifdef __NR_osf_old_wait
-# define SYS_osf_old_wait __NR_osf_old_wait
-#endif
-#ifdef __NR_osf_oldquota
-# define SYS_osf_oldquota __NR_osf_oldquota
-#endif
-#ifdef __NR_osf_pathconf
-# define SYS_osf_pathconf __NR_osf_pathconf
-#endif
-#ifdef __NR_osf_pid_block
-# define SYS_osf_pid_block __NR_osf_pid_block
-#endif
-#ifdef __NR_osf_pid_unblock
-# define SYS_osf_pid_unblock __NR_osf_pid_unblock
-#endif
-#ifdef __NR_osf_plock
-# define SYS_osf_plock __NR_osf_plock
-#endif
-#ifdef __NR_osf_priocntlset
-# define SYS_osf_priocntlset __NR_osf_priocntlset
-#endif
-#ifdef __NR_osf_profil
-# define SYS_osf_profil __NR_osf_profil
-#endif
-#ifdef __NR_osf_proplist_syscall
-# define SYS_osf_proplist_syscall __NR_osf_proplist_syscall
-#endif
-#ifdef __NR_osf_reboot
-# define SYS_osf_reboot __NR_osf_reboot
-#endif
-#ifdef __NR_osf_revoke
-# define SYS_osf_revoke __NR_osf_revoke
-#endif
-#ifdef __NR_osf_sbrk
-# define SYS_osf_sbrk __NR_osf_sbrk
-#endif
-#ifdef __NR_osf_security
-# define SYS_osf_security __NR_osf_security
-#endif
-#ifdef __NR_osf_select
-# define SYS_osf_select __NR_osf_select
-#endif
-#ifdef __NR_osf_set_program_attributes
-# define SYS_osf_set_program_attributes __NR_osf_set_program_attributes
-#endif
-#ifdef __NR_osf_set_speculative
-# define SYS_osf_set_speculative __NR_osf_set_speculative
-#endif
-#ifdef __NR_osf_sethostid
-# define SYS_osf_sethostid __NR_osf_sethostid
-#endif
-#ifdef __NR_osf_setitimer
-# define SYS_osf_setitimer __NR_osf_setitimer
-#endif
-#ifdef __NR_osf_setlogin
-# define SYS_osf_setlogin __NR_osf_setlogin
-#endif
-#ifdef __NR_osf_setsysinfo
-# define SYS_osf_setsysinfo __NR_osf_setsysinfo
-#endif
-#ifdef __NR_osf_settimeofday
-# define SYS_osf_settimeofday __NR_osf_settimeofday
-#endif
-#ifdef __NR_osf_shmat
-# define SYS_osf_shmat __NR_osf_shmat
-#endif
-#ifdef __NR_osf_signal
-# define SYS_osf_signal __NR_osf_signal
-#endif
-#ifdef __NR_osf_sigprocmask
-# define SYS_osf_sigprocmask __NR_osf_sigprocmask
-#endif
-#ifdef __NR_osf_sigsendset
-# define SYS_osf_sigsendset __NR_osf_sigsendset
-#endif
-#ifdef __NR_osf_sigstack
-# define SYS_osf_sigstack __NR_osf_sigstack
-#endif
-#ifdef __NR_osf_sigwaitprim
-# define SYS_osf_sigwaitprim __NR_osf_sigwaitprim
-#endif
-#ifdef __NR_osf_sstk
-# define SYS_osf_sstk __NR_osf_sstk
-#endif
-#ifdef __NR_osf_stat
-# define SYS_osf_stat __NR_osf_stat
-#endif
-#ifdef __NR_osf_statfs
-# define SYS_osf_statfs __NR_osf_statfs
-#endif
-#ifdef __NR_osf_statfs64
-# define SYS_osf_statfs64 __NR_osf_statfs64
-#endif
-#ifdef __NR_osf_subsys_info
-# define SYS_osf_subsys_info __NR_osf_subsys_info
-#endif
-#ifdef __NR_osf_swapctl
-# define SYS_osf_swapctl __NR_osf_swapctl
-#endif
-#ifdef __NR_osf_swapon
-# define SYS_osf_swapon __NR_osf_swapon
-#endif
-#ifdef __NR_osf_syscall
-# define SYS_osf_syscall __NR_osf_syscall
-#endif
-#ifdef __NR_osf_sysinfo
-# define SYS_osf_sysinfo __NR_osf_sysinfo
-#endif
-#ifdef __NR_osf_table
-# define SYS_osf_table __NR_osf_table
-#endif
-#ifdef __NR_osf_uadmin
-# define SYS_osf_uadmin __NR_osf_uadmin
-#endif
-#ifdef __NR_osf_usleep_thread
-# define SYS_osf_usleep_thread __NR_osf_usleep_thread
-#endif
-#ifdef __NR_osf_uswitch
-# define SYS_osf_uswitch __NR_osf_uswitch
-#endif
-#ifdef __NR_osf_utc_adjtime
-# define SYS_osf_utc_adjtime __NR_osf_utc_adjtime
-#endif
-#ifdef __NR_osf_utc_gettime
-# define SYS_osf_utc_gettime __NR_osf_utc_gettime
-#endif
-#ifdef __NR_osf_utimes
-# define SYS_osf_utimes __NR_osf_utimes
-#endif
-#ifdef __NR_osf_utsname
-# define SYS_osf_utsname __NR_osf_utsname
-#endif
-#ifdef __NR_osf_wait4
-# define SYS_osf_wait4 __NR_osf_wait4
-#endif
-#ifdef __NR_osf_waitid
-# define SYS_osf_waitid __NR_osf_waitid
-#endif
-#ifdef __NR_pause
-# define SYS_pause __NR_pause
-#endif
-#ifdef __NR_pciconfig_iobase
-# define SYS_pciconfig_iobase __NR_pciconfig_iobase
-#endif
-#ifdef __NR_pciconfig_read
-# define SYS_pciconfig_read __NR_pciconfig_read
-#endif
-#ifdef __NR_pciconfig_write
-# define SYS_pciconfig_write __NR_pciconfig_write
-#endif
-#ifdef __NR_perf_event_open
-# define SYS_perf_event_open __NR_perf_event_open
-#endif
-#ifdef __NR_perfctr
-# define SYS_perfctr __NR_perfctr
-#endif
-#ifdef __NR_perfmonctl
-# define SYS_perfmonctl __NR_perfmonctl
-#endif
-#ifdef __NR_personality
-# define SYS_personality __NR_personality
-#endif
-#ifdef __NR_pidfd_getfd
-# define SYS_pidfd_getfd __NR_pidfd_getfd
-#endif
-#ifdef __NR_pidfd_open
-# define SYS_pidfd_open __NR_pidfd_open
-#endif
-#ifdef __NR_pidfd_send_signal
-# define SYS_pidfd_send_signal __NR_pidfd_send_signal
-#endif
-#ifdef __NR_pipe
-# define SYS_pipe __NR_pipe
-#endif
-#ifdef __NR_pipe2
-# define SYS_pipe2 __NR_pipe2
-#endif
-#ifdef __NR_pivot_root
-# define SYS_pivot_root __NR_pivot_root
-#endif
-#ifdef __NR_pkey_alloc
-# define SYS_pkey_alloc __NR_pkey_alloc
-#endif
-#ifdef __NR_pkey_free
-# define SYS_pkey_free __NR_pkey_free
-#endif
-#ifdef __NR_pkey_mprotect
-# define SYS_pkey_mprotect __NR_pkey_mprotect
-#endif
-#ifdef __NR_poll
-# define SYS_poll __NR_poll
-#endif
-#ifdef __NR_ppoll
-# define SYS_ppoll __NR_ppoll
-#endif
-#ifdef __NR_ppoll_time64
-# define SYS_ppoll_time64 __NR_ppoll_time64
-#endif
-#ifdef __NR_prctl
-# define SYS_prctl __NR_prctl
-#endif
-#ifdef __NR_pread64
-# define SYS_pread64 __NR_pread64
-#endif
-#ifdef __NR_preadv
-# define SYS_preadv __NR_preadv
-#endif
-#ifdef __NR_preadv2
-# define SYS_preadv2 __NR_preadv2
-#endif
-#ifdef __NR_prlimit64
-# define SYS_prlimit64 __NR_prlimit64
-#endif
-#ifdef __NR_process_madvise
-# define SYS_process_madvise __NR_process_madvise
-#endif
-#ifdef __NR_process_mrelease
-# define SYS_process_mrelease __NR_process_mrelease
-#endif
-#ifdef __NR_process_vm_readv
-# define SYS_process_vm_readv __NR_process_vm_readv
-#endif
-#ifdef __NR_process_vm_writev
-# define SYS_process_vm_writev __NR_process_vm_writev
-#endif
-#ifdef __NR_pselect6
-# define SYS_pselect6 __NR_pselect6
-#endif
-#ifdef __NR_pselect6_time64
-# define SYS_pselect6_time64 __NR_pselect6_time64
-#endif
-#ifdef __NR_ptrace
-# define SYS_ptrace __NR_ptrace
-#endif
-#ifdef __NR_pwrite64
-# define SYS_pwrite64 __NR_pwrite64
-#endif
-#ifdef __NR_pwritev
-# define SYS_pwritev __NR_pwritev
-#endif
-#ifdef __NR_pwritev2
-# define SYS_pwritev2 __NR_pwritev2
-#endif
-#ifdef __NR_query_module
-# define SYS_query_module __NR_query_module
-#endif
-#ifdef __NR_quotactl
-# define SYS_quotactl __NR_quotactl
-#endif
-#ifdef __NR_quotactl_fd
-# define SYS_quotactl_fd __NR_quotactl_fd
-#endif
-#ifdef __NR_read
-# define SYS_read __NR_read
-#endif
-#ifdef __NR_readahead
-# define SYS_readahead __NR_readahead
-#endif
-#ifdef __NR_readdir
-# define SYS_readdir __NR_readdir
-#endif
-#ifdef __NR_readlink
-# define SYS_readlink __NR_readlink
-#endif
-#ifdef __NR_readlinkat
-# define SYS_readlinkat __NR_readlinkat
-#endif
-#ifdef __NR_readv
-# define SYS_readv __NR_readv
-#endif
-#ifdef __NR_reboot
-# define SYS_reboot __NR_reboot
-#endif
-#ifdef __NR_recv
-# define SYS_recv __NR_recv
-#endif
-#ifdef __NR_recvfrom
-# define SYS_recvfrom __NR_recvfrom
-#endif
-#ifdef __NR_recvmmsg
-# define SYS_recvmmsg __NR_recvmmsg
-#endif
-#ifdef __NR_recvmmsg_time64
-# define SYS_recvmmsg_time64 __NR_recvmmsg_time64
-#endif
-#ifdef __NR_recvmsg
-# define SYS_recvmsg __NR_recvmsg
-#endif
-#ifdef __NR_remap_file_pages
-# define SYS_remap_file_pages __NR_remap_file_pages
-#endif
-#ifdef __NR_removexattr
-# define SYS_removexattr __NR_removexattr
-#endif
-#ifdef __NR_rename
-# define SYS_rename __NR_rename
-#endif
-#ifdef __NR_renameat
-# define SYS_renameat __NR_renameat
-#endif
-#ifdef __NR_renameat2
-# define SYS_renameat2 __NR_renameat2
-#endif
-#ifdef __NR_request_key
-# define SYS_request_key __NR_request_key
-#endif
-#ifdef __NR_restart_syscall
-# define SYS_restart_syscall __NR_restart_syscall
-#endif
-#ifdef __NR_riscv_flush_icache
-# define SYS_riscv_flush_icache __NR_riscv_flush_icache
-#endif
-#ifdef __NR_riscv_hwprobe
-# define SYS_riscv_hwprobe __NR_riscv_hwprobe
-#endif
-#ifdef __NR_rmdir
-# define SYS_rmdir __NR_rmdir
-#endif
-#ifdef __NR_rseq
-# define SYS_rseq __NR_rseq
-#endif
-#ifdef __NR_rt_sigaction
-# define SYS_rt_sigaction __NR_rt_sigaction
-#endif
-#ifdef __NR_rt_sigpending
-# define SYS_rt_sigpending __NR_rt_sigpending
-#endif
-#ifdef __NR_rt_sigprocmask
-# define SYS_rt_sigprocmask __NR_rt_sigprocmask
-#endif
-#ifdef __NR_rt_sigqueueinfo
-# define SYS_rt_sigqueueinfo __NR_rt_sigqueueinfo
-#endif
-#ifdef __NR_rt_sigreturn
-# define SYS_rt_sigreturn __NR_rt_sigreturn
-#endif
-#ifdef __NR_rt_sigsuspend
-# define SYS_rt_sigsuspend __NR_rt_sigsuspend
-#endif
-#ifdef __NR_rt_sigtimedwait
-# define SYS_rt_sigtimedwait __NR_rt_sigtimedwait
-#endif
-#ifdef __NR_rt_sigtimedwait_time64
-# define SYS_rt_sigtimedwait_time64 __NR_rt_sigtimedwait_time64
-#endif
-#ifdef __NR_rt_tgsigqueueinfo
-# define SYS_rt_tgsigqueueinfo __NR_rt_tgsigqueueinfo
-#endif
-#ifdef __NR_rtas
-# define SYS_rtas __NR_rtas
-#endif
-#ifdef __NR_s390_guarded_storage
-# define SYS_s390_guarded_storage __NR_s390_guarded_storage
-#endif
-#ifdef __NR_s390_pci_mmio_read
-# define SYS_s390_pci_mmio_read __NR_s390_pci_mmio_read
-#endif
-#ifdef __NR_s390_pci_mmio_write
-# define SYS_s390_pci_mmio_write __NR_s390_pci_mmio_write
-#endif
-#ifdef __NR_s390_runtime_instr
-# define SYS_s390_runtime_instr __NR_s390_runtime_instr
-#endif
-#ifdef __NR_s390_sthyi
-# define SYS_s390_sthyi __NR_s390_sthyi
-#endif
-#ifdef __NR_sched_get_affinity
-# define SYS_sched_get_affinity __NR_sched_get_affinity
-#endif
-#ifdef __NR_sched_get_priority_max
-# define SYS_sched_get_priority_max __NR_sched_get_priority_max
-#endif
-#ifdef __NR_sched_get_priority_min
-# define SYS_sched_get_priority_min __NR_sched_get_priority_min
-#endif
-#ifdef __NR_sched_getaffinity
-# define SYS_sched_getaffinity __NR_sched_getaffinity
-#endif
-#ifdef __NR_sched_getattr
-# define SYS_sched_getattr __NR_sched_getattr
-#endif
-#ifdef __NR_sched_getparam
-# define SYS_sched_getparam __NR_sched_getparam
-#endif
-#ifdef __NR_sched_getscheduler
-# define SYS_sched_getscheduler __NR_sched_getscheduler
-#endif
-#ifdef __NR_sched_rr_get_interval
-# define SYS_sched_rr_get_interval __NR_sched_rr_get_interval
-#endif
-#ifdef __NR_sched_rr_get_interval_time64
-# define SYS_sched_rr_get_interval_time64 __NR_sched_rr_get_interval_time64
-#endif
-#ifdef __NR_sched_set_affinity
-# define SYS_sched_set_affinity __NR_sched_set_affinity
-#endif
-#ifdef __NR_sched_setaffinity
-# define SYS_sched_setaffinity __NR_sched_setaffinity
-#endif
-#ifdef __NR_sched_setattr
-# define SYS_sched_setattr __NR_sched_setattr
-#endif
-#ifdef __NR_sched_setparam
-# define SYS_sched_setparam __NR_sched_setparam
-#endif
-#ifdef __NR_sched_setscheduler
-# define SYS_sched_setscheduler __NR_sched_setscheduler
-#endif
-#ifdef __NR_sched_yield
-# define SYS_sched_yield __NR_sched_yield
-#endif
-#ifdef __NR_seccomp
-# define SYS_seccomp __NR_seccomp
-#endif
-#ifdef __NR_select
-# define SYS_select __NR_select
-#endif
-#ifdef __NR_semctl
-# define SYS_semctl __NR_semctl
-#endif
-#ifdef __NR_semget
-# define SYS_semget __NR_semget
-#endif
-#ifdef __NR_semop
-# define SYS_semop __NR_semop
-#endif
-#ifdef __NR_semtimedop
-# define SYS_semtimedop __NR_semtimedop
-#endif
-#ifdef __NR_semtimedop_time64
-# define SYS_semtimedop_time64 __NR_semtimedop_time64
-#endif
-#ifdef __NR_send
-# define SYS_send __NR_send
-#endif
-#ifdef __NR_sendfile
-# define SYS_sendfile __NR_sendfile
-#endif
-#ifdef __NR_sendfile64
-# define SYS_sendfile64 __NR_sendfile64
-#endif
-#ifdef __NR_sendmmsg
-# define SYS_sendmmsg __NR_sendmmsg
-#endif
-#ifdef __NR_sendmsg
-# define SYS_sendmsg __NR_sendmsg
-#endif
-#ifdef __NR_sendto
-# define SYS_sendto __NR_sendto
-#endif
-#ifdef __NR_set_mempolicy
-# define SYS_set_mempolicy __NR_set_mempolicy
-#endif
-#ifdef __NR_set_mempolicy_home_node
-# define SYS_set_mempolicy_home_node __NR_set_mempolicy_home_node
-#endif
-#ifdef __NR_set_robust_list
-# define SYS_set_robust_list __NR_set_robust_list
-#endif
-#ifdef __NR_set_thread_area
-# define SYS_set_thread_area __NR_set_thread_area
-#endif
-#ifdef __NR_set_tid_address
-# define SYS_set_tid_address __NR_set_tid_address
-#endif
-#ifdef __NR_setdomainname
-# define SYS_setdomainname __NR_setdomainname
-#endif
-#ifdef __NR_setfsgid
-# define SYS_setfsgid __NR_setfsgid
-#endif
-#ifdef __NR_setfsgid32
-# define SYS_setfsgid32 __NR_setfsgid32
-#endif
-#ifdef __NR_setfsuid
-# define SYS_setfsuid __NR_setfsuid
-#endif
-#ifdef __NR_setfsuid32
-# define SYS_setfsuid32 __NR_setfsuid32
-#endif
-#ifdef __NR_setgid
-# define SYS_setgid __NR_setgid
-#endif
-#ifdef __NR_setgid32
-# define SYS_setgid32 __NR_setgid32
-#endif
-#ifdef __NR_setgroups
-# define SYS_setgroups __NR_setgroups
-#endif
-#ifdef __NR_setgroups32
-# define SYS_setgroups32 __NR_setgroups32
-#endif
-#ifdef __NR_sethae
-# define SYS_sethae __NR_sethae
-#endif
-#ifdef __NR_sethostname
-# define SYS_sethostname __NR_sethostname
-#endif
-#ifdef __NR_setitimer
-# define SYS_setitimer __NR_setitimer
-#endif
-#ifdef __NR_setns
-# define SYS_setns __NR_setns
-#endif
-#ifdef __NR_setpgid
-# define SYS_setpgid __NR_setpgid
-#endif
-#ifdef __NR_setpgrp
-# define SYS_setpgrp __NR_setpgrp
-#endif
-#ifdef __NR_setpriority
-# define SYS_setpriority __NR_setpriority
-#endif
-#ifdef __NR_setregid
-# define SYS_setregid __NR_setregid
-#endif
-#ifdef __NR_setregid32
-# define SYS_setregid32 __NR_setregid32
-#endif
-#ifdef __NR_setresgid
-# define SYS_setresgid __NR_setresgid
-#endif
-#ifdef __NR_setresgid32
-# define SYS_setresgid32 __NR_setresgid32
-#endif
-#ifdef __NR_setresuid
-# define SYS_setresuid __NR_setresuid
-#endif
-#ifdef __NR_setresuid32
-# define SYS_setresuid32 __NR_setresuid32
-#endif
-#ifdef __NR_setreuid
-# define SYS_setreuid __NR_setreuid
-#endif
-#ifdef __NR_setreuid32
-# define SYS_setreuid32 __NR_setreuid32
-#endif
-#ifdef __NR_setrlimit
-# define SYS_setrlimit __NR_setrlimit
-#endif
-#ifdef __NR_setsid
-# define SYS_setsid __NR_setsid
-#endif
-#ifdef __NR_setsockopt
-# define SYS_setsockopt __NR_setsockopt
-#endif
-#ifdef __NR_settimeofday
-# define SYS_settimeofday __NR_settimeofday
-#endif
-#ifdef __NR_setuid
-# define SYS_setuid __NR_setuid
-#endif
-#ifdef __NR_setuid32
-# define SYS_setuid32 __NR_setuid32
-#endif
-#ifdef __NR_setxattr
-# define SYS_setxattr __NR_setxattr
-#endif
-#ifdef __NR_sgetmask
-# define SYS_sgetmask __NR_sgetmask
-#endif
-#ifdef __NR_shmat
-# define SYS_shmat __NR_shmat
-#endif
-#ifdef __NR_shmctl
-# define SYS_shmctl __NR_shmctl
-#endif
-#ifdef __NR_shmdt
-# define SYS_shmdt __NR_shmdt
-#endif
-#ifdef __NR_shmget
-# define SYS_shmget __NR_shmget
-#endif
-#ifdef __NR_shutdown
-# define SYS_shutdown __NR_shutdown
-#endif
-#ifdef __NR_sigaction
-# define SYS_sigaction __NR_sigaction
-#endif
-#ifdef __NR_sigaltstack
-# define SYS_sigaltstack __NR_sigaltstack
-#endif
-#ifdef __NR_signal
-# define SYS_signal __NR_signal
-#endif
-#ifdef __NR_signalfd
-# define SYS_signalfd __NR_signalfd
-#endif
-#ifdef __NR_signalfd4
-# define SYS_signalfd4 __NR_signalfd4
-#endif
-#ifdef __NR_sigpending
-# define SYS_sigpending __NR_sigpending
-#endif
-#ifdef __NR_sigprocmask
-# define SYS_sigprocmask __NR_sigprocmask
-#endif
-#ifdef __NR_sigreturn
-# define SYS_sigreturn __NR_sigreturn
-#endif
-#ifdef __NR_sigsuspend
-# define SYS_sigsuspend __NR_sigsuspend
-#endif
-#ifdef __NR_socket
-# define SYS_socket __NR_socket
-#endif
-#ifdef __NR_socketcall
-# define SYS_socketcall __NR_socketcall
-#endif
-#ifdef __NR_socketpair
-# define SYS_socketpair __NR_socketpair
-#endif
-#ifdef __NR_spill
-# define SYS_spill __NR_spill
-#endif
-#ifdef __NR_splice
-# define SYS_splice __NR_splice
-#endif
-#ifdef __NR_spu_create
-# define SYS_spu_create __NR_spu_create
-#endif
-#ifdef __NR_spu_run
-# define SYS_spu_run __NR_spu_run
-#endif
-#ifdef __NR_ssetmask
-# define SYS_ssetmask __NR_ssetmask
-#endif
-#ifdef __NR_stat
-# define SYS_stat __NR_stat
-#endif
-#ifdef __NR_stat64
-# define SYS_stat64 __NR_stat64
-#endif
-#ifdef __NR_statfs
-# define SYS_statfs __NR_statfs
-#endif
-#ifdef __NR_statfs64
-# define SYS_statfs64 __NR_statfs64
-#endif
-#ifdef __NR_statx
-# define SYS_statx __NR_statx
-#endif
-#ifdef __NR_stime
-# define SYS_stime __NR_stime
-#endif
-#ifdef __NR_subpage_prot
-# define SYS_subpage_prot __NR_subpage_prot
-#endif
-#ifdef __NR_swapcontext
-# define SYS_swapcontext __NR_swapcontext
-#endif
-#ifdef __NR_swapoff
-# define SYS_swapoff __NR_swapoff
-#endif
-#ifdef __NR_swapon
-# define SYS_swapon __NR_swapon
-#endif
-#ifdef __NR_switch_endian
-# define SYS_switch_endian __NR_switch_endian
-#endif
-#ifdef __NR_symlink
-# define SYS_symlink __NR_symlink
-#endif
-#ifdef __NR_symlinkat
-# define SYS_symlinkat __NR_symlinkat
-#endif
-#ifdef __NR_sync
-# define SYS_sync __NR_sync
-#endif
-#ifdef __NR_sync_file_range
-# define SYS_sync_file_range __NR_sync_file_range
-#endif
-#ifdef __NR_sync_file_range2
-# define SYS_sync_file_range2 __NR_sync_file_range2
-#endif
-#ifdef __NR_syncfs
-# define SYS_syncfs __NR_syncfs
-#endif
-#ifdef __NR_sys_debug_setcontext
-# define SYS_sys_debug_setcontext __NR_sys_debug_setcontext
-#endif
-#ifdef __NR_syscall
-# define SYS_syscall __NR_syscall
-#endif
-#ifdef __NR_syscalls
-# define SYS_syscalls __NR_syscalls
-#endif
-#ifdef __NR_sysfs
-# define SYS_sysfs __NR_sysfs
-#endif
-#ifdef __NR_sysinfo
-# define SYS_sysinfo __NR_sysinfo
-#endif
-#ifdef __NR_syslog
-# define SYS_syslog __NR_syslog
-#endif
-#ifdef __NR_sysmips
-# define SYS_sysmips __NR_sysmips
-#endif
-#ifdef __NR_tee
-# define SYS_tee __NR_tee
-#endif
-#ifdef __NR_tgkill
-# define SYS_tgkill __NR_tgkill
-#endif
-#ifdef __NR_time
-# define SYS_time __NR_time
-#endif
-#ifdef __NR_timer_create
-# define SYS_timer_create __NR_timer_create
-#endif
-#ifdef __NR_timer_delete
-# define SYS_timer_delete __NR_timer_delete
-#endif
-#ifdef __NR_timer_getoverrun
-# define SYS_timer_getoverrun __NR_timer_getoverrun
-#endif
-#ifdef __NR_timer_gettime
-# define SYS_timer_gettime __NR_timer_gettime
-#endif
-#ifdef __NR_timer_gettime64
-# define SYS_timer_gettime64 __NR_timer_gettime64
-#endif
-#ifdef __NR_timer_settime
-# define SYS_timer_settime __NR_timer_settime
-#endif
-#ifdef __NR_timer_settime64
-# define SYS_timer_settime64 __NR_timer_settime64
-#endif
-#ifdef __NR_timerfd
-# define SYS_timerfd __NR_timerfd
-#endif
-#ifdef __NR_timerfd_create
-# define SYS_timerfd_create __NR_timerfd_create
-#endif
-#ifdef __NR_timerfd_gettime
-# define SYS_timerfd_gettime __NR_timerfd_gettime
-#endif
-#ifdef __NR_timerfd_gettime64
-# define SYS_timerfd_gettime64 __NR_timerfd_gettime64
-#endif
-#ifdef __NR_timerfd_settime
-# define SYS_timerfd_settime __NR_timerfd_settime
-#endif
-#ifdef __NR_timerfd_settime64
-# define SYS_timerfd_settime64 __NR_timerfd_settime64
-#endif
-#ifdef __NR_times
-# define SYS_times __NR_times
-#endif
-#ifdef __NR_tkill
-# define SYS_tkill __NR_tkill
-#endif
-#ifdef __NR_truncate
-# define SYS_truncate __NR_truncate
-#endif
-#ifdef __NR_truncate64
-# define SYS_truncate64 __NR_truncate64
-#endif
-#ifdef __NR_ugetrlimit
-# define SYS_ugetrlimit __NR_ugetrlimit
-#endif
-#ifdef __NR_umask
-# define SYS_umask __NR_umask
-#endif
-#ifdef __NR_umount
-# define SYS_umount __NR_umount
-#endif
-#ifdef __NR_umount2
-# define SYS_umount2 __NR_umount2
-#endif
-#ifdef __NR_uname
-# define SYS_uname __NR_uname
-#endif
-#ifdef __NR_unlink
-# define SYS_unlink __NR_unlink
-#endif
-#ifdef __NR_unlinkat
-# define SYS_unlinkat __NR_unlinkat
-#endif
-#ifdef __NR_unshare
-# define SYS_unshare __NR_unshare
-#endif
-#ifdef __NR_uselib
-# define SYS_uselib __NR_uselib
-#endif
-#ifdef __NR_userfaultfd
-# define SYS_userfaultfd __NR_userfaultfd
-#endif
-#ifdef __NR_ustat
-# define SYS_ustat __NR_ustat
-#endif
-#ifdef __NR_utime
-# define SYS_utime __NR_utime
-#endif
-#ifdef __NR_utimensat
-# define SYS_utimensat __NR_utimensat
-#endif
-#ifdef __NR_utimensat_time64
-# define SYS_utimensat_time64 __NR_utimensat_time64
-#endif
-#ifdef __NR_utimes
-# define SYS_utimes __NR_utimes
-#endif
-#ifdef __NR_utrap_install
-# define SYS_utrap_install __NR_utrap_install
-#endif
-#ifdef __NR_vfork
-# define SYS_vfork __NR_vfork
-#endif
-#ifdef __NR_vhangup
-# define SYS_vhangup __NR_vhangup
-#endif
-#ifdef __NR_vm86
-# define SYS_vm86 __NR_vm86
-#endif
-#ifdef __NR_vm86old
-# define SYS_vm86old __NR_vm86old
-#endif
-#ifdef __NR_vmsplice
-# define SYS_vmsplice __NR_vmsplice
-#endif
-#ifdef __NR_wait4
-# define SYS_wait4 __NR_wait4
-#endif
-#ifdef __NR_waitid
-# define SYS_waitid __NR_waitid
-#endif
-#ifdef __NR_waitpid
-# define SYS_waitpid __NR_waitpid
-#endif
-#ifdef __NR_write
-# define SYS_write __NR_write
-#endif
-#ifdef __NR_writev
-# define SYS_writev __NR_writev
-#endif
-#endif /* __MLIBC_SYSCALL_ALIAS_BIT */
diff --git a/lib/mlibc/sysdeps/linux/include/mlibc/thread-entry.hpp b/lib/mlibc/sysdeps/linux/include/mlibc/thread-entry.hpp
deleted file mode 100644
index a20cab5..0000000
--- a/lib/mlibc/sysdeps/linux/include/mlibc/thread-entry.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef MLIBC_THREAD_ENTRY
-
-#include <mlibc/tcb.hpp>
-
-extern "C" int __mlibc_spawn_thread(int flags, void *stack, void *pid_out, void *child_tid, void *tcb);
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg);
-
-namespace mlibc {
- void *prepare_stack(void *entry, void *user_arg);
-}
-
-#endif // MLIBC_THREAD_ENTRY
diff --git a/lib/mlibc/sysdeps/linux/include/sys/syscall.h b/lib/mlibc/sysdeps/linux/include/sys/syscall.h
deleted file mode 100644
index 2084103..0000000
--- a/lib/mlibc/sysdeps/linux/include/sys/syscall.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef _SYS_SYSCALL_H
-#define _SYS_SYSCALL_H
-
-/* On GNU/Linux, this header provides includes __NR_-prefixed syscall numbers,
- * and their SYS_ aliases. We defer to kernel headers for the numbers
- * (linux-headers, or an autogenerated stub while building), and an
- * autogenerated file containing SYS_ defines.
- */
-#include <linux/unistd.h>
-#include <bits/syscall_aliases.h>
-
-#endif // _SYS_SYSCALL_H
diff --git a/lib/mlibc/sysdeps/linux/include/syscall.h b/lib/mlibc/sysdeps/linux/include/syscall.h
deleted file mode 100644
index 4c30578..0000000
--- a/lib/mlibc/sysdeps/linux/include/syscall.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <sys/syscall.h>
diff --git a/lib/mlibc/sysdeps/linux/meson.build b/lib/mlibc/sysdeps/linux/meson.build
deleted file mode 100644
index 0809237..0000000
--- a/lib/mlibc/sysdeps/linux/meson.build
+++ /dev/null
@@ -1,143 +0,0 @@
-rtdl_dso_sources += files(
- host_machine.cpu_family() / 'arch-syscall.cpp',
- 'generic/sysdeps.cpp',
-)
-
-linux_include_dirs = [
- include_directories(host_machine.cpu_family()),
- include_directories('include-internal/'),
-]
-
-rtdl_include_dirs += linux_include_dirs
-libc_include_dirs += linux_include_dirs
-libc_sources += files(
- host_machine.cpu_family() / 'signals.S',
- host_machine.cpu_family() / 'arch-syscall.cpp',
- 'generic/entry.cpp',
- 'generic/sysdeps.cpp',
-)
-
-if not disable_posix_option
- libc_sources += files(
- 'generic/thread.cpp',
- host_machine.cpu_family() / 'cp_syscall.S',
- host_machine.cpu_family() / 'thread_entry.S'
- )
-endif
-
-if not no_headers
- install_headers(
- 'include/abi-bits/auxv.h',
- 'include/abi-bits/seek-whence.h',
- 'include/abi-bits/vm-flags.h',
- 'include/abi-bits/errno.h',
- 'include/abi-bits/fcntl.h',
- 'include/abi-bits/in.h',
- 'include/abi-bits/stat.h',
- 'include/abi-bits/signal.h',
- 'include/abi-bits/reboot.h',
- 'include/abi-bits/resource.h',
- 'include/abi-bits/socket.h',
- 'include/abi-bits/termios.h',
- 'include/abi-bits/time.h',
- 'include/abi-bits/blkcnt_t.h',
- 'include/abi-bits/blksize_t.h',
- 'include/abi-bits/dev_t.h',
- 'include/abi-bits/gid_t.h',
- 'include/abi-bits/ino_t.h',
- 'include/abi-bits/mode_t.h',
- 'include/abi-bits/nlink_t.h',
- 'include/abi-bits/pid_t.h',
- 'include/abi-bits/uid_t.h',
- 'include/abi-bits/access.h',
- 'include/abi-bits/wait.h',
- 'include/abi-bits/limits.h',
- 'include/abi-bits/utsname.h',
- 'include/abi-bits/ptrace.h',
- 'include/abi-bits/vt.h',
- 'include/abi-bits/ptrace.h',
- 'include/abi-bits/poll.h',
- 'include/abi-bits/epoll.h',
- 'include/abi-bits/packet.h',
- 'include/abi-bits/inotify.h',
- 'include/abi-bits/clockid_t.h',
- 'include/abi-bits/shm.h',
- 'include/abi-bits/mqueue.h',
- 'include/abi-bits/suseconds_t.h',
- 'include/abi-bits/fsfilcnt_t.h',
- 'include/abi-bits/fsblkcnt_t.h',
- 'include/abi-bits/socklen_t.h',
- 'include/abi-bits/statfs.h',
- 'include/abi-bits/statvfs.h',
- 'include/abi-bits/ioctls.h',
- 'include/abi-bits/xattr.h',
- 'include/abi-bits/msg.h',
- subdir: 'abi-bits',
- follow_symlinks: true
- )
-
- install_headers('include/syscall.h')
- install_headers('include/sys/syscall.h', subdir: 'sys')
- install_headers(
- 'include/bits/syscall.h',
- 'include/bits/syscall_aliases.h',
- subdir: 'bits'
- )
-endif
-
-if not headers_only
- crt = custom_target('crt1',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: host_machine.cpu_family() / 'crt-src/crt1.S',
- output: 'crt1.o',
- install: true,
- install_dir: get_option('libdir')
- )
-
- crt_pie = custom_target('Scrt1',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-fPIE', '-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: host_machine.cpu_family() / 'crt-src/Scrt1.S',
- output: 'Scrt1.o',
- install: true,
- install_dir: get_option('libdir')
- )
-
- custom_target('crti',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: host_machine.cpu_family() / 'crt-src/crti.S',
- output: 'crti.o',
- install: true,
- install_dir: get_option('libdir')
- )
-
- custom_target('crtn',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: host_machine.cpu_family() / 'crt-src/crtn.S',
- output: 'crtn.o',
- install: true,
- install_dir: get_option('libdir')
- )
-
- wrapper_conf = configuration_data()
- wrapper_conf.set('LIBDIR', get_option('libdir'))
- wrapper_conf.set('PREFIX', get_option('prefix'))
- specs = configure_file(input: 'mlibc-gcc.specs.in',
- output: 'mlibc-gcc.specs',
- configuration: wrapper_conf)
-
- wrapper_script = configure_file(input: 'mlibc-gcc.in',
- output: 'mlibc-gcc',
- configuration: wrapper_conf)
-
- install_data(specs,
- install_dir: get_option('libdir')
- )
-
- install_data(wrapper_script,
- install_dir: get_option('bindir')
- )
-endif
diff --git a/lib/mlibc/sysdeps/linux/mlibc-gcc.in b/lib/mlibc/sysdeps/linux/mlibc-gcc.in
deleted file mode 100755
index 6236bd6..0000000
--- a/lib/mlibc/sysdeps/linux/mlibc-gcc.in
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-exec "${REALGCC:-gcc}" "$@" -specs "@PREFIX@/@LIBDIR@/mlibc-gcc.specs"
diff --git a/lib/mlibc/sysdeps/linux/mlibc-gcc.specs.in b/lib/mlibc/sysdeps/linux/mlibc-gcc.specs.in
deleted file mode 100644
index 4304c4d..0000000
--- a/lib/mlibc/sysdeps/linux/mlibc-gcc.specs.in
+++ /dev/null
@@ -1,32 +0,0 @@
-%rename cpp_options old_cpp_options
-
-*cpp_options:
--nostdinc -isystem @PREFIX@/include -isystem include%s %(old_cpp_options)
-
-*cc1:
-%(cc1_cpu) -nostdinc -isystem @PREFIX@/include -isystem include%s
-
-*link_libgcc:
--L@PREFIX@/@LIBDIR@ -L .%s
-
-*libgcc:
-libgcc.a%s %:if-exists(libgcc_eh.a%s)
-
-*startfile:
-%{!shared: @PREFIX@/@LIBDIR@/Scrt1.o} @PREFIX@/@LIBDIR@/crti.o crtbeginS.o%s
-
-*endfile:
-crtendS.o%s @PREFIX@/@LIBDIR@/crtn.o
-
-*link:
--dynamic-linker @PREFIX@/@LIBDIR@/ld.so -rpath @PREFIX@/@LIBDIR@ -nostdlib %{shared:-shared} %{static:-static} %{rdynamic:-export-dynamic}
-
-*esp_link:
-
-
-*esp_options:
-
-
-*esp_cpp_options:
-
-
diff --git a/lib/mlibc/sysdeps/linux/riscv64/arch-syscall.cpp b/lib/mlibc/sysdeps/linux/riscv64/arch-syscall.cpp
deleted file mode 100644
index 18ac6b0..0000000
--- a/lib/mlibc/sysdeps/linux/riscv64/arch-syscall.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-#include <sys/syscall.h>
-#include <bits/syscall.h>
-
-using sc_word_t = __sc_word_t;
-
-sc_word_t __do_syscall0(long sc) {
- register int sc_reg asm("a7") = sc;
- register sc_word_t ret asm("a0");
- asm volatile ("ecall" : "=r"(ret) : "r"(sc_reg) : "memory", "a1");
- return ret;
-}
-
-sc_word_t __do_syscall1(long sc,
- sc_word_t arg1) {
- register int sc_reg asm("a7") = sc;
- register sc_word_t arg1_reg asm("a0") = arg1;
- register sc_word_t ret asm("a0");
- asm volatile ("ecall" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg)
- : "memory", "a1");
- return ret;
-}
-
-sc_word_t __do_syscall2(long sc,
- sc_word_t arg1, sc_word_t arg2) {
- register int sc_reg asm("a7") = sc;
- register sc_word_t arg1_reg asm("a0") = arg1;
- register sc_word_t arg2_reg asm("a1") = arg2;
- register sc_word_t ret asm("a0");
- asm volatile ("ecall" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg),
- "r"(arg2_reg)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall3(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3) {
- register int sc_reg asm("a7") = sc;
- register sc_word_t arg1_reg asm("a0") = arg1;
- register sc_word_t arg2_reg asm("a1") = arg2;
- register sc_word_t arg3_reg asm("a2") = arg3;
- register sc_word_t ret asm("a0");
- asm volatile ("ecall" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg),
- "r"(arg2_reg),
- "r"(arg3_reg)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall4(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4) {
- register int sc_reg asm("a7") = sc;
- register sc_word_t arg1_reg asm("a0") = arg1;
- register sc_word_t arg2_reg asm("a1") = arg2;
- register sc_word_t arg3_reg asm("a2") = arg3;
- register sc_word_t arg4_reg asm("a3") = arg4;
- register sc_word_t ret asm("a0");
- asm volatile ("ecall" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg),
- "r"(arg2_reg),
- "r"(arg3_reg),
- "r"(arg4_reg)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall5(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4, sc_word_t arg5) {
- register int sc_reg asm("a7") = sc;
- register sc_word_t arg1_reg asm("a0") = arg1;
- register sc_word_t arg2_reg asm("a1") = arg2;
- register sc_word_t arg3_reg asm("a2") = arg3;
- register sc_word_t arg4_reg asm("a3") = arg4;
- register sc_word_t arg5_reg asm("a4") = arg5;
- register sc_word_t ret asm("a0");
- asm volatile ("ecall" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg),
- "r"(arg2_reg),
- "r"(arg3_reg),
- "r"(arg4_reg),
- "r"(arg5_reg)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall6(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4, sc_word_t arg5, sc_word_t arg6) {
- register int sc_reg asm("a7") = sc;
- register sc_word_t arg1_reg asm("a0") = arg1;
- register sc_word_t arg2_reg asm("a1") = arg2;
- register sc_word_t arg3_reg asm("a2") = arg3;
- register sc_word_t arg4_reg asm("a3") = arg4;
- register sc_word_t arg5_reg asm("a4") = arg5;
- register sc_word_t arg6_reg asm("a5") = arg6;
- register sc_word_t ret asm("a0");
- asm volatile ("ecall" : "=r"(ret) :
- "r"(sc_reg),
- "r"(arg1_reg),
- "r"(arg2_reg),
- "r"(arg3_reg),
- "r"(arg4_reg),
- "r"(arg5_reg),
- "r"(arg6_reg)
- : "memory"
- );
- return ret;
-}
diff --git a/lib/mlibc/sysdeps/linux/riscv64/cp_syscall.S b/lib/mlibc/sysdeps/linux/riscv64/cp_syscall.S
deleted file mode 100644
index 8d3175d..0000000
--- a/lib/mlibc/sysdeps/linux/riscv64/cp_syscall.S
+++ /dev/null
@@ -1,30 +0,0 @@
-.section .text
-.global __mlibc_do_asm_cp_syscall
-.global __mlibc_syscall_begin
-.global __mlibc_syscall_end
-.type __mlibc_do_asm_cp_syscall, "function"
-__mlibc_do_asm_cp_syscall:
- sd a7, -8(sp)
- mv a7, a0
- mv a0, a1
- mv a1, a2
- mv a2, a3
- mv a3, a4
- mv a4, a5
- mv a5, a6
- ld a6, -8(sp) // a7
- lw t0, -96(tp) // Tcb::cancelBits. See asserts in tcb.hpp.
-__mlibc_syscall_begin:
- // tcbCancelEnableBit && tcbCancelTriggerBit
- li t1, (1 << 0) | (1 << 2)
- and t0, t0, t1
- beq t0, t1, cancel
- ecall
-__mlibc_syscall_end:
- ret
-
-cancel:
- call __mlibc_do_cancel
- unimp
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/riscv64/crt-src/Scrt1.S b/lib/mlibc/sysdeps/linux/riscv64/crt-src/Scrt1.S
deleted file mode 100644
index 9ee8625..0000000
--- a/lib/mlibc/sysdeps/linux/riscv64/crt-src/Scrt1.S
+++ /dev/null
@@ -1,18 +0,0 @@
-.section .text
-.global _start
-_start:
- .weak __global_pointer$
- .hidden __global_pointer$
- .option push
- .option norelax
- lla gp, __global_pointer$
- .option pop
-
- mv a0, sp
- la a1, main
- call __mlibc_entry@plt
- unimp
-
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/riscv64/crt-src/crt1.S b/lib/mlibc/sysdeps/linux/riscv64/crt-src/crt1.S
deleted file mode 100644
index 16c79d6..0000000
--- a/lib/mlibc/sysdeps/linux/riscv64/crt-src/crt1.S
+++ /dev/null
@@ -1,15 +0,0 @@
-.section .text
-.global _start
-_start:
- .weak __global_pointer$
- .hidden __global_pointer$
- .option push
- .option norelax
- lla gp, __global_pointer$
- .option pop
-
- mv a0, sp
- la a1, main
- call __mlibc_entry
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/riscv64/crt-src/crti.S b/lib/mlibc/sysdeps/linux/riscv64/crt-src/crti.S
deleted file mode 100644
index 69f23ea..0000000
--- a/lib/mlibc/sysdeps/linux/riscv64/crt-src/crti.S
+++ /dev/null
@@ -1,11 +0,0 @@
-.section .init
-.global _init
-_init:
- unimp
-
-.section .fini
-.global _fini
-_fini:
- unimp
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/riscv64/crt-src/crtn.S b/lib/mlibc/sysdeps/linux/riscv64/crt-src/crtn.S
deleted file mode 100644
index 525efd6..0000000
--- a/lib/mlibc/sysdeps/linux/riscv64/crt-src/crtn.S
+++ /dev/null
@@ -1,7 +0,0 @@
-.section .init
- unimp
-
-.section .fini
- unimp
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/riscv64/signals.S b/lib/mlibc/sysdeps/linux/riscv64/signals.S
deleted file mode 100644
index 7769043..0000000
--- a/lib/mlibc/sysdeps/linux/riscv64/signals.S
+++ /dev/null
@@ -1,12 +0,0 @@
-.section .text
-
-.global __mlibc_signal_restore
-.type __mlibc_signal_restore, @function
-__mlibc_signal_restore:
-.global __mlibc_signal_restore_rt
-.type __mlibc_signal_restore_rt, @function
-__mlibc_signal_restore_rt:
- li a7, 139
- ecall
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/riscv64/syscallnos.h b/lib/mlibc/sysdeps/linux/riscv64/syscallnos.h
deleted file mode 100644
index a5a11bb..0000000
--- a/lib/mlibc/sysdeps/linux/riscv64/syscallnos.h
+++ /dev/null
@@ -1,314 +0,0 @@
-#ifndef __MLIBC_SYSCALLNOS_h
-#define __MLIBC_SYSCALLNOS_h
-/* This file is autogenerated. Don't bother. */
-/* Generator script: sysdeps/linux/update-syscall-list.py. */
-#define __NR_io_setup 0
-#define __NR_io_destroy 1
-#define __NR_io_submit 2
-#define __NR_io_cancel 3
-#define __NR_io_getevents 4
-#define __NR_setxattr 5
-#define __NR_lsetxattr 6
-#define __NR_fsetxattr 7
-#define __NR_getxattr 8
-#define __NR_lgetxattr 9
-#define __NR_fgetxattr 10
-#define __NR_listxattr 11
-#define __NR_llistxattr 12
-#define __NR_flistxattr 13
-#define __NR_removexattr 14
-#define __NR_lremovexattr 15
-#define __NR_fremovexattr 16
-#define __NR_getcwd 17
-#define __NR_lookup_dcookie 18
-#define __NR_eventfd2 19
-#define __NR_epoll_create1 20
-#define __NR_epoll_ctl 21
-#define __NR_epoll_pwait 22
-#define __NR_dup 23
-#define __NR_dup3 24
-#define __NR_fcntl 25
-#define __NR_inotify_init1 26
-#define __NR_inotify_add_watch 27
-#define __NR_inotify_rm_watch 28
-#define __NR_ioctl 29
-#define __NR_ioprio_set 30
-#define __NR_ioprio_get 31
-#define __NR_flock 32
-#define __NR_mknodat 33
-#define __NR_mkdirat 34
-#define __NR_unlinkat 35
-#define __NR_symlinkat 36
-#define __NR_linkat 37
-#define __NR_umount2 39
-#define __NR_mount 40
-#define __NR_pivot_root 41
-#define __NR_nfsservctl 42
-#define __NR_statfs 43
-#define __NR_fstatfs 44
-#define __NR_truncate 45
-#define __NR_ftruncate 46
-#define __NR_fallocate 47
-#define __NR_faccessat 48
-#define __NR_chdir 49
-#define __NR_fchdir 50
-#define __NR_chroot 51
-#define __NR_fchmod 52
-#define __NR_fchmodat 53
-#define __NR_fchownat 54
-#define __NR_fchown 55
-#define __NR_openat 56
-#define __NR_close 57
-#define __NR_vhangup 58
-#define __NR_pipe2 59
-#define __NR_quotactl 60
-#define __NR_getdents64 61
-#define __NR_lseek 62
-#define __NR_read 63
-#define __NR_write 64
-#define __NR_readv 65
-#define __NR_writev 66
-#define __NR_pread64 67
-#define __NR_pwrite64 68
-#define __NR_preadv 69
-#define __NR_pwritev 70
-#define __NR_sendfile 71
-#define __NR_pselect6 72
-#define __NR_ppoll 73
-#define __NR_signalfd4 74
-#define __NR_vmsplice 75
-#define __NR_splice 76
-#define __NR_tee 77
-#define __NR_readlinkat 78
-#define __NR_newfstatat 79
-#define __NR_fstat 80
-#define __NR_sync 81
-#define __NR_fsync 82
-#define __NR_fdatasync 83
-#define __NR_sync_file_range 84
-#define __NR_timerfd_create 85
-#define __NR_timerfd_settime 86
-#define __NR_timerfd_gettime 87
-#define __NR_utimensat 88
-#define __NR_acct 89
-#define __NR_capget 90
-#define __NR_capset 91
-#define __NR_personality 92
-#define __NR_exit 93
-#define __NR_exit_group 94
-#define __NR_waitid 95
-#define __NR_set_tid_address 96
-#define __NR_unshare 97
-#define __NR_futex 98
-#define __NR_set_robust_list 99
-#define __NR_get_robust_list 100
-#define __NR_nanosleep 101
-#define __NR_getitimer 102
-#define __NR_setitimer 103
-#define __NR_kexec_load 104
-#define __NR_init_module 105
-#define __NR_delete_module 106
-#define __NR_timer_create 107
-#define __NR_timer_gettime 108
-#define __NR_timer_getoverrun 109
-#define __NR_timer_settime 110
-#define __NR_timer_delete 111
-#define __NR_clock_settime 112
-#define __NR_clock_gettime 113
-#define __NR_clock_getres 114
-#define __NR_clock_nanosleep 115
-#define __NR_syslog 116
-#define __NR_ptrace 117
-#define __NR_sched_setparam 118
-#define __NR_sched_setscheduler 119
-#define __NR_sched_getscheduler 120
-#define __NR_sched_getparam 121
-#define __NR_sched_setaffinity 122
-#define __NR_sched_getaffinity 123
-#define __NR_sched_yield 124
-#define __NR_sched_get_priority_max 125
-#define __NR_sched_get_priority_min 126
-#define __NR_sched_rr_get_interval 127
-#define __NR_restart_syscall 128
-#define __NR_kill 129
-#define __NR_tkill 130
-#define __NR_tgkill 131
-#define __NR_sigaltstack 132
-#define __NR_rt_sigsuspend 133
-#define __NR_rt_sigaction 134
-#define __NR_rt_sigprocmask 135
-#define __NR_rt_sigpending 136
-#define __NR_rt_sigtimedwait 137
-#define __NR_rt_sigqueueinfo 138
-#define __NR_rt_sigreturn 139
-#define __NR_setpriority 140
-#define __NR_getpriority 141
-#define __NR_reboot 142
-#define __NR_setregid 143
-#define __NR_setgid 144
-#define __NR_setreuid 145
-#define __NR_setuid 146
-#define __NR_setresuid 147
-#define __NR_getresuid 148
-#define __NR_setresgid 149
-#define __NR_getresgid 150
-#define __NR_setfsuid 151
-#define __NR_setfsgid 152
-#define __NR_times 153
-#define __NR_setpgid 154
-#define __NR_getpgid 155
-#define __NR_getsid 156
-#define __NR_setsid 157
-#define __NR_getgroups 158
-#define __NR_setgroups 159
-#define __NR_uname 160
-#define __NR_sethostname 161
-#define __NR_setdomainname 162
-#define __NR_getrlimit 163
-#define __NR_setrlimit 164
-#define __NR_getrusage 165
-#define __NR_umask 166
-#define __NR_prctl 167
-#define __NR_getcpu 168
-#define __NR_gettimeofday 169
-#define __NR_settimeofday 170
-#define __NR_adjtimex 171
-#define __NR_getpid 172
-#define __NR_getppid 173
-#define __NR_getuid 174
-#define __NR_geteuid 175
-#define __NR_getgid 176
-#define __NR_getegid 177
-#define __NR_gettid 178
-#define __NR_sysinfo 179
-#define __NR_mq_open 180
-#define __NR_mq_unlink 181
-#define __NR_mq_timedsend 182
-#define __NR_mq_timedreceive 183
-#define __NR_mq_notify 184
-#define __NR_mq_getsetattr 185
-#define __NR_msgget 186
-#define __NR_msgctl 187
-#define __NR_msgrcv 188
-#define __NR_msgsnd 189
-#define __NR_semget 190
-#define __NR_semctl 191
-#define __NR_semtimedop 192
-#define __NR_semop 193
-#define __NR_shmget 194
-#define __NR_shmctl 195
-#define __NR_shmat 196
-#define __NR_shmdt 197
-#define __NR_socket 198
-#define __NR_socketpair 199
-#define __NR_bind 200
-#define __NR_listen 201
-#define __NR_accept 202
-#define __NR_connect 203
-#define __NR_getsockname 204
-#define __NR_getpeername 205
-#define __NR_sendto 206
-#define __NR_recvfrom 207
-#define __NR_setsockopt 208
-#define __NR_getsockopt 209
-#define __NR_shutdown 210
-#define __NR_sendmsg 211
-#define __NR_recvmsg 212
-#define __NR_readahead 213
-#define __NR_brk 214
-#define __NR_munmap 215
-#define __NR_mremap 216
-#define __NR_add_key 217
-#define __NR_request_key 218
-#define __NR_keyctl 219
-#define __NR_clone 220
-#define __NR_execve 221
-#define __NR_mmap 222
-#define __NR_fadvise64 223
-#define __NR_swapon 224
-#define __NR_swapoff 225
-#define __NR_mprotect 226
-#define __NR_msync 227
-#define __NR_mlock 228
-#define __NR_munlock 229
-#define __NR_mlockall 230
-#define __NR_munlockall 231
-#define __NR_mincore 232
-#define __NR_madvise 233
-#define __NR_remap_file_pages 234
-#define __NR_mbind 235
-#define __NR_get_mempolicy 236
-#define __NR_set_mempolicy 237
-#define __NR_migrate_pages 238
-#define __NR_move_pages 239
-#define __NR_rt_tgsigqueueinfo 240
-#define __NR_perf_event_open 241
-#define __NR_accept4 242
-#define __NR_recvmmsg 243
-#define __NR_arch_specific_syscall 244
-#define __NR_riscv_hwprobe 258
-#define __NR_riscv_flush_icache 259
-#define __NR_wait4 260
-#define __NR_prlimit64 261
-#define __NR_fanotify_init 262
-#define __NR_fanotify_mark 263
-#define __NR_name_to_handle_at 264
-#define __NR_open_by_handle_at 265
-#define __NR_clock_adjtime 266
-#define __NR_syncfs 267
-#define __NR_setns 268
-#define __NR_sendmmsg 269
-#define __NR_process_vm_readv 270
-#define __NR_process_vm_writev 271
-#define __NR_kcmp 272
-#define __NR_finit_module 273
-#define __NR_sched_setattr 274
-#define __NR_sched_getattr 275
-#define __NR_renameat2 276
-#define __NR_seccomp 277
-#define __NR_getrandom 278
-#define __NR_memfd_create 279
-#define __NR_bpf 280
-#define __NR_execveat 281
-#define __NR_userfaultfd 282
-#define __NR_membarrier 283
-#define __NR_mlock2 284
-#define __NR_copy_file_range 285
-#define __NR_preadv2 286
-#define __NR_pwritev2 287
-#define __NR_pkey_mprotect 288
-#define __NR_pkey_alloc 289
-#define __NR_pkey_free 290
-#define __NR_statx 291
-#define __NR_io_pgetevents 292
-#define __NR_rseq 293
-#define __NR_kexec_file_load 294
-#define __NR_pidfd_send_signal 424
-#define __NR_io_uring_setup 425
-#define __NR_io_uring_enter 426
-#define __NR_io_uring_register 427
-#define __NR_open_tree 428
-#define __NR_move_mount 429
-#define __NR_fsopen 430
-#define __NR_fsconfig 431
-#define __NR_fsmount 432
-#define __NR_fspick 433
-#define __NR_pidfd_open 434
-#define __NR_clone3 435
-#define __NR_close_range 436
-#define __NR_openat2 437
-#define __NR_pidfd_getfd 438
-#define __NR_faccessat2 439
-#define __NR_process_madvise 440
-#define __NR_epoll_pwait2 441
-#define __NR_mount_setattr 442
-#define __NR_quotactl_fd 443
-#define __NR_landlock_create_ruleset 444
-#define __NR_landlock_add_rule 445
-#define __NR_landlock_restrict_self 446
-#define __NR_memfd_secret 447
-#define __NR_process_mrelease 448
-#define __NR_futex_waitv 449
-#define __NR_set_mempolicy_home_node 450
-#define __NR_syscalls 451
-#endif /* __MLIBC_SYSCALLNOS_h */
diff --git a/lib/mlibc/sysdeps/linux/riscv64/thread_entry.S b/lib/mlibc/sysdeps/linux/riscv64/thread_entry.S
deleted file mode 100644
index fe170fa..0000000
--- a/lib/mlibc/sysdeps/linux/riscv64/thread_entry.S
+++ /dev/null
@@ -1,29 +0,0 @@
-.section .text
-.global __mlibc_spawn_thread
-.type __mlibc_spawn_thread, "function"
-__mlibc_spawn_thread:
- // __mlibc_spawn_thread(flags, stack, pid_out, child_tid, tls)
- // a0, a1, a2, a3, a4
- // syscall(NR_clone, flags, stack, ptid, tls, ctid)
- // a7, a0, a1, a2, a3, a4
-
- // Swap a3 <-> a4
- mv a5, a4
- mv a4, a3
- mv a3, a5
-
- li a7, 220 // NR_clone
- ecall
- bnez a0, .parent
-
- ld a0, 0(sp)
- ld a1, 8(sp)
- addi sp, sp, 8
- andi sp, sp, -16
- call __mlibc_enter_thread
- unimp
-
-.parent:
- ret
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/update-syscall-list.py b/lib/mlibc/sysdeps/linux/update-syscall-list.py
deleted file mode 100755
index 58825f7..0000000
--- a/lib/mlibc/sysdeps/linux/update-syscall-list.py
+++ /dev/null
@@ -1,332 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: MIT
-
-import argparse
-import hashlib
-import io
-import json
-import logging
-import os
-import os.path as path
-import pathlib
-import subprocess
-import tarfile
-import tempfile
-import urllib.request as urr
-from dataclasses import dataclass
-
-KERNEL_RELEASES = "https://www.kernel.org/releases.json"
-NR_PREFIX = "__NR_"
-logging.basicConfig(level=logging.DEBUG)
-LOGGER = logging.getLogger(__name__)
-
-# ADD NEW ARCHITECTURES HERE: these should match directory names in Linuxes arch/
-# directory or the second element of one of the harnesses below
-WANTED_ARCHES = ["riscv64", "x86_64", "arm64", "i386"]
-# How to translate from Linux arch directory names to gnutools architecture fields
-LINUX_GNU_TRANSLATION = {
- "arm64": "aarch64",
- "i386": "x86",
-}
-
-argp = argparse.ArgumentParser()
-argp.add_argument("kver", help="Kernel version to download", default="latest")
-
-
-@dataclass
-class Kernel:
- version: str
- srchash: str
- srcdir: pathlib.Path
-
-
-@dataclass
-class Context:
- dirpath: pathlib.Path
-
-
-def run(args: list[str], **kwargs):
- LOGGER.debug("running %s", args)
- subprocess.check_call(args, **kwargs)
-
-
-def collect(args: list[str], **kwargs):
- LOGGER.debug("running %s (kw: %s)", args, kwargs)
- kwargs.setdefault("text", True)
- return subprocess.check_output(args, **kwargs)
-
-
-def fetch_kernel(ctx: Context, kver: str) -> Kernel:
- LOGGER.debug("fetching %s", KERNEL_RELEASES)
- with urr.urlopen(KERNEL_RELEASES) as f:
- if f.status != 200:
- LOGGER.error("meta fetch failed: %s", f)
- raise RuntimeError("failed to get kernel meta")
- metadata = json.load(f)
-
- if kver == "latest":
- kver = metadata["latest_stable"]["version"]
-
- LOGGER.debug("figured out kernel version: %s", kver)
-
- for rel in metadata["releases"]:
- if rel["version"] == kver:
- kernel_release = rel
- break
- else:
- raise RuntimeError("failed to find kver " + kver)
-
- kurl = kernel_release["source"]
- LOGGER.debug("kernel src url: %s", kurl)
- source_path = ctx.dirpath / ("source.tar" + path.splitext(kurl)[1])
-
- with urr.urlopen(kurl) as f, open(source_path, "wb") as g:
- if f.status != 200:
- LOGGER.error("ksrc fetch failed: %s", f)
- raise RuntimeError("failed to get kernel source")
-
- hasher = hashlib.blake2b()
- while buf := f.read(16 * 1024):
- hasher.update(buf)
- g.write(buf)
-
- srchash = hasher.hexdigest()
- srcpath = ctx.dirpath / "src"
-
- with tarfile.open(source_path) as srctar:
- memb: tarfile.TarInfo
- for memb in srctar:
- if not memb.name.startswith("linux-"):
- raise RuntimeError(
- "malformed tar member in %s (%s): %s has bad prefix".format(
- kurl, srchash, memb.name
- )
- )
- memb.name = "./" + memb.name[memb.name.find("/") + 1 :]
- srctar.extract(memb, path=srcpath)
-
- return Kernel(
- version=kver,
- srchash=srchash,
- srcdir=srcpath,
- )
-
-
-def run_harness(ctx: Context, kernel: Kernel, harness: (str, str)) -> dict[str, int]:
- LOGGER.debug("running harness %s", harness)
- (archdir, arch, defines) = harness
- flags = [f"-D{x}" for x in defines]
- archout = ctx.dirpath / "headers" / archdir
- if not archout.exists():
- run(
- [
- "make",
- "-sC",
- kernel.srcdir,
- f"ARCH={archdir}",
- f"O={archout}",
- "headers_install",
- ]
- )
-
- hdrdir = archout / "usr/include"
- callset = set()
- for x in collect(
- ["gcc", "-E", "-dM", "-I", hdrdir, *flags, "-"], input="#include <asm/unistd.h>"
- ).splitlines():
- x = x.split(maxsplit=2)
- if len(x) < 2 or x[0] != "#define":
- # skip invalid lines
- continue
-
- defname = x[1]
- if not defname.startswith(NR_PREFIX):
- # not a syscall
- continue
-
- defname = defname[len(NR_PREFIX) :]
-
- if (
- "SYSCALL" in defname
- or defname.startswith("available")
- or defname.startswith("reserved")
- or defname.startswith("unused")
- ):
- continue
-
- # dead syscalls
- if defname in [
- "Linux",
- "afs_syscall",
- "break",
- "ftime",
- "gtty",
- "lock",
- "mpx",
- "oldwait4",
- "prof",
- "profil",
- "putpmsg",
- "security",
- "stty",
- "tuxcall",
- "ulimit",
- "vserver",
- "arm_sync_file_range",
- "utimesat",
- "ni_syscall",
- "xtensa",
- ]:
- continue
- callset.add(defname)
-
- # alright, we have the set of all syscalls, time to produce their numbers
- syscall_dumper = """
-/* my sincerest apologies */
-#include <stdio.h>
-"""
-
- for x in defines:
- syscall_dumper += "#define {}\n".format(x.replace("=", " "))
-
- syscall_dumper += """
-#include <asm/unistd.h>
-
-int main() {
- puts("{");
- """
-
- comma = ""
- for x in callset:
- syscall_dumper += 'printf("{comma}\\"{sc}\\": %d\\n", {pfx}{sc});\n '.format(
- sc=x, comma=comma, pfx=NR_PREFIX
- )
- comma = ","
-
- syscall_dumper += """
- puts("}");
-}
-"""
-
- dumper = archout / "dumper"
- with tempfile.NamedTemporaryFile(suffix=".c") as src:
- src.write(syscall_dumper.encode())
- run(["gcc", "-o", dumper, "-I", hdrdir, src.name])
- return json.loads(collect([dumper]))
-
-
-def main(ctx: Context):
- args = argp.parse_args()
- kernel = fetch_kernel(ctx, args.kver)
-
- LOGGER.info("got kernel version %s (%s)", kernel.version, kernel.srchash)
-
- archlist = os.listdir(kernel.srcdir / "arch")
- archlist.remove("Kconfig")
- archlist.remove("um")
-
- # harnesses converted from
- # https://github.com/hrw/syscalls-table/blob/c638834d9b5d71bb40a555755ea07735cace58f2/do_all_tables.sh
- # (arch_dirname, archname, list[defines])
- harnesses: (str, str, list[str])
- harnesses = [
- (arch,) + x
- for arch in archlist
- if not arch.startswith(".")
- for x in {
- # arch specific overrides
- # format: (archname, list[defines]), gets prefixed with archdir outside
- "arm": [
- ("armoabi", []),
- ("arm", ["__ARM_EABI_"]),
- ],
- "loongarch": [
- ("loongarch64", ["_LOONGARCH_SZLONG=64"]),
- ],
- "mips": [
- ("mipso32", ["_MIPS_SIM=_MIPS_SIM_ABI32"]),
- ("mips64n32", ["_MIPS_SIM=_MIPS_SIM_NABI32"]),
- ("mips64", ["_MIPS_SIM=_MIPS_SIM_ABI64"]),
- ],
- "powerpc": [
- ("powerpc", []),
- ("powerpc64", []),
- ],
- "riscv": [
- ("riscv32", ["__SIZEOF_POINTER__=4"]),
- ("riscv64", ["__LP64__"]),
- ],
- "s390": [
- ("s390", []),
- ("s390x", []),
- ],
- "sparc": [
- ("sparc", ["__32bit_syscall_numbers__"]),
- ("sparc64", ["__arch64__"]),
- ],
- "tile": [
- ("tile", []),
- ("tile64", ["__LP64__", "__tilegx__"]),
- ],
- "x86": [
- ("i386", ["__i386__"]),
- ("x32", ["__ILP32__"]),
- ("x86_64", ["__LP64__"]),
- ],
- }.get(arch, [(arch, [])])
- ]
-
- syscall_set = set()
-
- for x in harnesses:
- syscalls = run_harness(ctx, kernel, x)
- syscall_set |= syscalls.keys()
-
- wanted_arch = x[1]
- if wanted_arch not in WANTED_ARCHES:
- continue
-
- wanted_arch = LINUX_GNU_TRANSLATION.get(wanted_arch, wanted_arch)
-
- pathlib.Path(wanted_arch).mkdir(exist_ok=True)
-
- with open(wanted_arch + "/syscallnos.h", "w") as f:
- print("#ifndef __MLIBC_SYSCALLNOS_h", file=f)
- print("#define __MLIBC_SYSCALLNOS_h", file=f)
- print("/* This file is autogenerated. Don't bother. */", file=f)
- print(
- "/* Generator script: sysdeps/linux/update-syscall-list.py. */", file=f
- )
-
- for name, num in sorted(syscalls.items(), key=lambda x: x[1]):
- print("#define {p}{sc} {n}".format(p=NR_PREFIX, sc=name, n=num), file=f)
-
- print("#endif /* __MLIBC_SYSCALLNOS_h */", file=f)
-
- with open("include/bits/syscall_aliases.h", "w") as f:
- print("#ifndef __MLIBC_SYSCALL_ALIAS_BIT", file=f)
- print("#define __MLIBC_SYSCALL_ALIAS_BIT", file=f)
- print("/* This file is autogenerated. Don't bother. */", file=f)
- print("/* Generator script: sysdeps/linux/update-syscall-list.py. */", file=f)
-
- for x in sorted(list(syscall_set)):
- print(
- f"""\
-#ifdef\t{NR_PREFIX}{x}
-#\tdefine SYS_{x} {NR_PREFIX}{x}
-#endif
-""",
- end="",
- file=f,
- )
-
- print("#endif /* __MLIBC_SYSCALL_ALIAS_BIT */", file=f)
-
-
-if __name__ == "__main__":
- with tempfile.TemporaryDirectory() as td:
- main(
- Context(
- dirpath=pathlib.Path(td),
- )
- )
diff --git a/lib/mlibc/sysdeps/linux/x86/arch-syscall.cpp b/lib/mlibc/sysdeps/linux/x86/arch-syscall.cpp
deleted file mode 100644
index 35fc8aa..0000000
--- a/lib/mlibc/sysdeps/linux/x86/arch-syscall.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <bits/syscall.h>
-#include <sys/syscall.h>
-
-using sc_word_t = __sc_word_t;
-
-// Note: ebx is used for PIC (it holds a reference to the GOT), so we can't clobber it with gcc apparently,
-// and also need to make sure to restore it after a syscall
-
-sc_word_t __do_syscall0(long sc) {
- sc_word_t ret;
- asm volatile("int $0x80" : "=a"(ret) : "a"(sc) : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall1(long sc, sc_word_t arg1) {
- sc_word_t ret;
- asm volatile("xchg %%ebx, %%edi;"
- "int $0x80;"
- "xchg %%edi, %%ebx;"
- : "=a"(ret)
- : "a"(sc), "D"(arg1)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall2(long sc, sc_word_t arg1, sc_word_t arg2) {
- sc_word_t ret;
- asm volatile("xchg %%ebx, %%edi;"
- "int $0x80;"
- "xchg %%edi, %%ebx;"
- : "=a"(ret)
- : "a"(sc), "D"(arg1), "c"(arg2)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall3(long sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3) {
- sc_word_t ret;
- asm volatile("xchg %%ebx, %%edi;"
- "int $0x80;"
- "xchg %%edi, %%ebx;"
- : "=a"(ret)
- : "a"(sc), "D"(arg1), "c"(arg2), "d"(arg3)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall4(long sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3, sc_word_t arg4) {
- sc_word_t ret;
- asm volatile("xchg %%ebx, %%edi;"
- "int $0x80;"
- "xchg %%edi, %%ebx;"
- : "=a"(ret)
- : "a"(sc), "D"(arg1), "c"(arg2), "d"(arg3), "S"(arg4)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall5(long sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3, sc_word_t arg4,
- sc_word_t arg5) {
- sc_word_t ret;
- asm volatile("pushl %2;"
- "push %%ebx;"
- "mov 4(%%esp), %%ebx;"
- "int $0x80;"
- "pop %%ebx;"
- "add $4, %%esp;"
- : "=a"(ret)
- : "a"(sc), "g"(arg1), "c"(arg2), "d"(arg3), "S"(arg4), "D"(arg5)
- : "memory");
- return ret;
-}
-
-sc_word_t __do_syscall6(long sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3, sc_word_t arg4,
- sc_word_t arg5, sc_word_t arg6) {
- sc_word_t ret;
- sc_word_t a1a6[2] = { arg1, arg6 };
- asm volatile ("pushl %1;"
- "push %%ebx;"
- "push %%ebp;"
- "mov 8(%%esp),%%ebx;"
- "mov 4(%%ebx),%%ebp;"
- "mov (%%ebx),%%ebx;"
- "int $0x80;"
- "pop %%ebp;"
- "pop %%ebx;"
- "add $4,%%esp;"
- : "=a"(ret) : "g"(&a1a6), "a"(sc), "c"(arg2), "d"(arg3), "S"(arg4), "D"(arg5) : "memory");
- return ret;
-}
diff --git a/lib/mlibc/sysdeps/linux/x86/cp_syscall.S b/lib/mlibc/sysdeps/linux/x86/cp_syscall.S
deleted file mode 100644
index b89e1f4..0000000
--- a/lib/mlibc/sysdeps/linux/x86/cp_syscall.S
+++ /dev/null
@@ -1,42 +0,0 @@
-
-.section .text
-.global __mlibc_do_asm_cp_syscall
-.global __mlibc_syscall_begin
-.global __mlibc_syscall_end
-.type __mlibc_do_asm_cp_syscall, "function"
-__mlibc_do_asm_cp_syscall:
- push %ebx
- push %esi
- push %edi
- push %ebp
- ; mov 16(%esp), %eax
- mov 24(%esp), %ebx
- mov 28(%esp), %ecx
- mov 32(%esp), %edx
- mov 36(%esp), %esi
- mov 40(%esp), %edi
- mov 44(%esp), %ebp
- mov %gs:0x18, %al
-__mlibc_syscall_begin:
- /* tcbCancelEnableBit && tcbCancelTriggerBit */
- and $((1 << 0) | (1 << 2)), %al
- cmp $((1 << 0) | (1 << 2)), %al
- je cancel
- mov 20(%esp), %eax
- int $0x80
-__mlibc_syscall_end:
- pop %ebp
- pop %edi
- pop %esi
- pop %ebx
- ret
-
-cancel:
- pop %ebp
- pop %edi
- pop %esi
- pop %ebx
- call __mlibc_do_cancel@PLT
- hlt
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/linux/x86/crt-src/Scrt1.S b/lib/mlibc/sysdeps/linux/x86/crt-src/Scrt1.S
deleted file mode 100644
index a62b127..0000000
--- a/lib/mlibc/sysdeps/linux/x86/crt-src/Scrt1.S
+++ /dev/null
@@ -1,29 +0,0 @@
-.section .text
-
-.type __stack_chk_fail_local, %function
-.weak __stack_chk_fail_local
-__stack_chk_fail_local:
- call __stack_chk_fail@plt
-
-.global _start
-
-.type _start, %function
-.type main, %function
-.type __mlibc_entry, %function
-
-.cfi_startproc
-_start:
-.cfi_undefined eip
- xor %ebp, %ebp
- mov %esp, %edi
- call 1f
-
-1:
- pop %ebx
- addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
- push main@GOT(%ebx)
- push %edi
- call __mlibc_entry@plt
-.cfi_endproc
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/linux/x86/crt-src/crt1.S b/lib/mlibc/sysdeps/linux/x86/crt-src/crt1.S
deleted file mode 100644
index ed45da3..0000000
--- a/lib/mlibc/sysdeps/linux/x86/crt-src/crt1.S
+++ /dev/null
@@ -1,18 +0,0 @@
-.section .text
-.global _start
-
-.type _start, %function
-.type main, %function
-.type __mlibc_entry, %function
-
-.cfi_startproc
-_start:
-.cfi_undefined eip
- xor %ebp, %ebp
- mov %esp, %ecx
- push $main
- push %ecx
- call __mlibc_entry
-.cfi_endproc
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/linux/x86/crt-src/crti.S b/lib/mlibc/sysdeps/linux/x86/crt-src/crti.S
deleted file mode 100644
index e232557..0000000
--- a/lib/mlibc/sysdeps/linux/x86/crt-src/crti.S
+++ /dev/null
@@ -1,11 +0,0 @@
-.section .init
-.global _init
-_init:
- pushl %eax
-
-.section .fini
-.global _fini
-_fini:
- pushl %eax
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/linux/x86/crt-src/crtn.S b/lib/mlibc/sysdeps/linux/x86/crt-src/crtn.S
deleted file mode 100644
index d890289..0000000
--- a/lib/mlibc/sysdeps/linux/x86/crt-src/crtn.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .init
- popl %eax
- ret
-
-.section .fini
- popl %eax
- ret
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/linux/x86/signals.S b/lib/mlibc/sysdeps/linux/x86/signals.S
deleted file mode 100644
index 8127ee4..0000000
--- a/lib/mlibc/sysdeps/linux/x86/signals.S
+++ /dev/null
@@ -1,18 +0,0 @@
-.section .text
-
-.global __mlibc_signal_restore
-.type __mlibc_signal_restore, @function
-__mlibc_signal_restore:
- popl %eax
- mov $119, %eax
- int $0x80
- ud2
-
-.global __mlibc_signal_restore_rt
-.type __mlibc_signal_restore_rt, @function
-__mlibc_signal_restore_rt:
- mov $173, %eax
- int $0x80
- ud2
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/linux/x86/syscallnos.h b/lib/mlibc/sysdeps/linux/x86/syscallnos.h
deleted file mode 100644
index f75eb0a..0000000
--- a/lib/mlibc/sysdeps/linux/x86/syscallnos.h
+++ /dev/null
@@ -1,433 +0,0 @@
-#ifndef __MLIBC_SYSCALLNOS_h
-#define __MLIBC_SYSCALLNOS_h
-/* This file is autogenerated. Don't bother. */
-/* Generator script: sysdeps/linux/update-syscall-list.py. */
-#define __NR_restart_syscall 0
-#define __NR_exit 1
-#define __NR_fork 2
-#define __NR_read 3
-#define __NR_write 4
-#define __NR_open 5
-#define __NR_close 6
-#define __NR_waitpid 7
-#define __NR_creat 8
-#define __NR_link 9
-#define __NR_unlink 10
-#define __NR_execve 11
-#define __NR_chdir 12
-#define __NR_time 13
-#define __NR_mknod 14
-#define __NR_chmod 15
-#define __NR_lchown 16
-#define __NR_oldstat 18
-#define __NR_lseek 19
-#define __NR_getpid 20
-#define __NR_mount 21
-#define __NR_umount 22
-#define __NR_setuid 23
-#define __NR_getuid 24
-#define __NR_stime 25
-#define __NR_ptrace 26
-#define __NR_alarm 27
-#define __NR_oldfstat 28
-#define __NR_pause 29
-#define __NR_utime 30
-#define __NR_access 33
-#define __NR_nice 34
-#define __NR_sync 36
-#define __NR_kill 37
-#define __NR_rename 38
-#define __NR_mkdir 39
-#define __NR_rmdir 40
-#define __NR_dup 41
-#define __NR_pipe 42
-#define __NR_times 43
-#define __NR_brk 45
-#define __NR_setgid 46
-#define __NR_getgid 47
-#define __NR_signal 48
-#define __NR_geteuid 49
-#define __NR_getegid 50
-#define __NR_acct 51
-#define __NR_umount2 52
-#define __NR_ioctl 54
-#define __NR_fcntl 55
-#define __NR_setpgid 57
-#define __NR_oldolduname 59
-#define __NR_umask 60
-#define __NR_chroot 61
-#define __NR_ustat 62
-#define __NR_dup2 63
-#define __NR_getppid 64
-#define __NR_getpgrp 65
-#define __NR_setsid 66
-#define __NR_sigaction 67
-#define __NR_sgetmask 68
-#define __NR_ssetmask 69
-#define __NR_setreuid 70
-#define __NR_setregid 71
-#define __NR_sigsuspend 72
-#define __NR_sigpending 73
-#define __NR_sethostname 74
-#define __NR_setrlimit 75
-#define __NR_getrlimit 76
-#define __NR_getrusage 77
-#define __NR_gettimeofday 78
-#define __NR_settimeofday 79
-#define __NR_getgroups 80
-#define __NR_setgroups 81
-#define __NR_select 82
-#define __NR_symlink 83
-#define __NR_oldlstat 84
-#define __NR_readlink 85
-#define __NR_uselib 86
-#define __NR_swapon 87
-#define __NR_reboot 88
-#define __NR_readdir 89
-#define __NR_mmap 90
-#define __NR_munmap 91
-#define __NR_truncate 92
-#define __NR_ftruncate 93
-#define __NR_fchmod 94
-#define __NR_fchown 95
-#define __NR_getpriority 96
-#define __NR_setpriority 97
-#define __NR_statfs 99
-#define __NR_fstatfs 100
-#define __NR_ioperm 101
-#define __NR_socketcall 102
-#define __NR_syslog 103
-#define __NR_setitimer 104
-#define __NR_getitimer 105
-#define __NR_stat 106
-#define __NR_lstat 107
-#define __NR_fstat 108
-#define __NR_olduname 109
-#define __NR_iopl 110
-#define __NR_vhangup 111
-#define __NR_idle 112
-#define __NR_vm86old 113
-#define __NR_wait4 114
-#define __NR_swapoff 115
-#define __NR_sysinfo 116
-#define __NR_ipc 117
-#define __NR_fsync 118
-#define __NR_sigreturn 119
-#define __NR_clone 120
-#define __NR_setdomainname 121
-#define __NR_uname 122
-#define __NR_modify_ldt 123
-#define __NR_adjtimex 124
-#define __NR_mprotect 125
-#define __NR_sigprocmask 126
-#define __NR_create_module 127
-#define __NR_init_module 128
-#define __NR_delete_module 129
-#define __NR_get_kernel_syms 130
-#define __NR_quotactl 131
-#define __NR_getpgid 132
-#define __NR_fchdir 133
-#define __NR_bdflush 134
-#define __NR_sysfs 135
-#define __NR_personality 136
-#define __NR_setfsuid 138
-#define __NR_setfsgid 139
-#define __NR__llseek 140
-#define __NR_getdents 141
-#define __NR__newselect 142
-#define __NR_flock 143
-#define __NR_msync 144
-#define __NR_readv 145
-#define __NR_writev 146
-#define __NR_getsid 147
-#define __NR_fdatasync 148
-#define __NR__sysctl 149
-#define __NR_mlock 150
-#define __NR_munlock 151
-#define __NR_mlockall 152
-#define __NR_munlockall 153
-#define __NR_sched_setparam 154
-#define __NR_sched_getparam 155
-#define __NR_sched_setscheduler 156
-#define __NR_sched_getscheduler 157
-#define __NR_sched_yield 158
-#define __NR_sched_get_priority_max 159
-#define __NR_sched_get_priority_min 160
-#define __NR_sched_rr_get_interval 161
-#define __NR_nanosleep 162
-#define __NR_mremap 163
-#define __NR_setresuid 164
-#define __NR_getresuid 165
-#define __NR_vm86 166
-#define __NR_query_module 167
-#define __NR_poll 168
-#define __NR_nfsservctl 169
-#define __NR_setresgid 170
-#define __NR_getresgid 171
-#define __NR_prctl 172
-#define __NR_rt_sigreturn 173
-#define __NR_rt_sigaction 174
-#define __NR_rt_sigprocmask 175
-#define __NR_rt_sigpending 176
-#define __NR_rt_sigtimedwait 177
-#define __NR_rt_sigqueueinfo 178
-#define __NR_rt_sigsuspend 179
-#define __NR_pread64 180
-#define __NR_pwrite64 181
-#define __NR_chown 182
-#define __NR_getcwd 183
-#define __NR_capget 184
-#define __NR_capset 185
-#define __NR_sigaltstack 186
-#define __NR_sendfile 187
-#define __NR_getpmsg 188
-#define __NR_vfork 190
-#define __NR_ugetrlimit 191
-#define __NR_mmap2 192
-#define __NR_truncate64 193
-#define __NR_ftruncate64 194
-#define __NR_stat64 195
-#define __NR_lstat64 196
-#define __NR_fstat64 197
-#define __NR_lchown32 198
-#define __NR_getuid32 199
-#define __NR_getgid32 200
-#define __NR_geteuid32 201
-#define __NR_getegid32 202
-#define __NR_setreuid32 203
-#define __NR_setregid32 204
-#define __NR_getgroups32 205
-#define __NR_setgroups32 206
-#define __NR_fchown32 207
-#define __NR_setresuid32 208
-#define __NR_getresuid32 209
-#define __NR_setresgid32 210
-#define __NR_getresgid32 211
-#define __NR_chown32 212
-#define __NR_setuid32 213
-#define __NR_setgid32 214
-#define __NR_setfsuid32 215
-#define __NR_setfsgid32 216
-#define __NR_pivot_root 217
-#define __NR_mincore 218
-#define __NR_madvise 219
-#define __NR_getdents64 220
-#define __NR_fcntl64 221
-#define __NR_gettid 224
-#define __NR_readahead 225
-#define __NR_setxattr 226
-#define __NR_lsetxattr 227
-#define __NR_fsetxattr 228
-#define __NR_getxattr 229
-#define __NR_lgetxattr 230
-#define __NR_fgetxattr 231
-#define __NR_listxattr 232
-#define __NR_llistxattr 233
-#define __NR_flistxattr 234
-#define __NR_removexattr 235
-#define __NR_lremovexattr 236
-#define __NR_fremovexattr 237
-#define __NR_tkill 238
-#define __NR_sendfile64 239
-#define __NR_futex 240
-#define __NR_sched_setaffinity 241
-#define __NR_sched_getaffinity 242
-#define __NR_set_thread_area 243
-#define __NR_get_thread_area 244
-#define __NR_io_setup 245
-#define __NR_io_destroy 246
-#define __NR_io_getevents 247
-#define __NR_io_submit 248
-#define __NR_io_cancel 249
-#define __NR_fadvise64 250
-#define __NR_exit_group 252
-#define __NR_lookup_dcookie 253
-#define __NR_epoll_create 254
-#define __NR_epoll_ctl 255
-#define __NR_epoll_wait 256
-#define __NR_remap_file_pages 257
-#define __NR_set_tid_address 258
-#define __NR_timer_create 259
-#define __NR_timer_settime 260
-#define __NR_timer_gettime 261
-#define __NR_timer_getoverrun 262
-#define __NR_timer_delete 263
-#define __NR_clock_settime 264
-#define __NR_clock_gettime 265
-#define __NR_clock_getres 266
-#define __NR_clock_nanosleep 267
-#define __NR_statfs64 268
-#define __NR_fstatfs64 269
-#define __NR_tgkill 270
-#define __NR_utimes 271
-#define __NR_fadvise64_64 272
-#define __NR_mbind 274
-#define __NR_get_mempolicy 275
-#define __NR_set_mempolicy 276
-#define __NR_mq_open 277
-#define __NR_mq_unlink 278
-#define __NR_mq_timedsend 279
-#define __NR_mq_timedreceive 280
-#define __NR_mq_notify 281
-#define __NR_mq_getsetattr 282
-#define __NR_kexec_load 283
-#define __NR_waitid 284
-#define __NR_add_key 286
-#define __NR_request_key 287
-#define __NR_keyctl 288
-#define __NR_ioprio_set 289
-#define __NR_ioprio_get 290
-#define __NR_inotify_init 291
-#define __NR_inotify_add_watch 292
-#define __NR_inotify_rm_watch 293
-#define __NR_migrate_pages 294
-#define __NR_openat 295
-#define __NR_mkdirat 296
-#define __NR_mknodat 297
-#define __NR_fchownat 298
-#define __NR_futimesat 299
-#define __NR_fstatat64 300
-#define __NR_unlinkat 301
-#define __NR_renameat 302
-#define __NR_linkat 303
-#define __NR_symlinkat 304
-#define __NR_readlinkat 305
-#define __NR_fchmodat 306
-#define __NR_faccessat 307
-#define __NR_pselect6 308
-#define __NR_ppoll 309
-#define __NR_unshare 310
-#define __NR_set_robust_list 311
-#define __NR_get_robust_list 312
-#define __NR_splice 313
-#define __NR_sync_file_range 314
-#define __NR_tee 315
-#define __NR_vmsplice 316
-#define __NR_move_pages 317
-#define __NR_getcpu 318
-#define __NR_epoll_pwait 319
-#define __NR_utimensat 320
-#define __NR_signalfd 321
-#define __NR_timerfd_create 322
-#define __NR_eventfd 323
-#define __NR_fallocate 324
-#define __NR_timerfd_settime 325
-#define __NR_timerfd_gettime 326
-#define __NR_signalfd4 327
-#define __NR_eventfd2 328
-#define __NR_epoll_create1 329
-#define __NR_dup3 330
-#define __NR_pipe2 331
-#define __NR_inotify_init1 332
-#define __NR_preadv 333
-#define __NR_pwritev 334
-#define __NR_rt_tgsigqueueinfo 335
-#define __NR_perf_event_open 336
-#define __NR_recvmmsg 337
-#define __NR_fanotify_init 338
-#define __NR_fanotify_mark 339
-#define __NR_prlimit64 340
-#define __NR_name_to_handle_at 341
-#define __NR_open_by_handle_at 342
-#define __NR_clock_adjtime 343
-#define __NR_syncfs 344
-#define __NR_sendmmsg 345
-#define __NR_setns 346
-#define __NR_process_vm_readv 347
-#define __NR_process_vm_writev 348
-#define __NR_kcmp 349
-#define __NR_finit_module 350
-#define __NR_sched_setattr 351
-#define __NR_sched_getattr 352
-#define __NR_renameat2 353
-#define __NR_seccomp 354
-#define __NR_getrandom 355
-#define __NR_memfd_create 356
-#define __NR_bpf 357
-#define __NR_execveat 358
-#define __NR_socket 359
-#define __NR_socketpair 360
-#define __NR_bind 361
-#define __NR_connect 362
-#define __NR_listen 363
-#define __NR_accept4 364
-#define __NR_getsockopt 365
-#define __NR_setsockopt 366
-#define __NR_getsockname 367
-#define __NR_getpeername 368
-#define __NR_sendto 369
-#define __NR_sendmsg 370
-#define __NR_recvfrom 371
-#define __NR_recvmsg 372
-#define __NR_shutdown 373
-#define __NR_userfaultfd 374
-#define __NR_membarrier 375
-#define __NR_mlock2 376
-#define __NR_copy_file_range 377
-#define __NR_preadv2 378
-#define __NR_pwritev2 379
-#define __NR_pkey_mprotect 380
-#define __NR_pkey_alloc 381
-#define __NR_pkey_free 382
-#define __NR_statx 383
-#define __NR_arch_prctl 384
-#define __NR_io_pgetevents 385
-#define __NR_rseq 386
-#define __NR_semget 393
-#define __NR_semctl 394
-#define __NR_shmget 395
-#define __NR_shmctl 396
-#define __NR_shmat 397
-#define __NR_shmdt 398
-#define __NR_msgget 399
-#define __NR_msgsnd 400
-#define __NR_msgrcv 401
-#define __NR_msgctl 402
-#define __NR_clock_gettime64 403
-#define __NR_clock_settime64 404
-#define __NR_clock_adjtime64 405
-#define __NR_clock_getres_time64 406
-#define __NR_clock_nanosleep_time64 407
-#define __NR_timer_gettime64 408
-#define __NR_timer_settime64 409
-#define __NR_timerfd_gettime64 410
-#define __NR_timerfd_settime64 411
-#define __NR_utimensat_time64 412
-#define __NR_pselect6_time64 413
-#define __NR_ppoll_time64 414
-#define __NR_io_pgetevents_time64 416
-#define __NR_recvmmsg_time64 417
-#define __NR_mq_timedsend_time64 418
-#define __NR_mq_timedreceive_time64 419
-#define __NR_semtimedop_time64 420
-#define __NR_rt_sigtimedwait_time64 421
-#define __NR_futex_time64 422
-#define __NR_sched_rr_get_interval_time64 423
-#define __NR_pidfd_send_signal 424
-#define __NR_io_uring_setup 425
-#define __NR_io_uring_enter 426
-#define __NR_io_uring_register 427
-#define __NR_open_tree 428
-#define __NR_move_mount 429
-#define __NR_fsopen 430
-#define __NR_fsconfig 431
-#define __NR_fsmount 432
-#define __NR_fspick 433
-#define __NR_pidfd_open 434
-#define __NR_clone3 435
-#define __NR_close_range 436
-#define __NR_openat2 437
-#define __NR_pidfd_getfd 438
-#define __NR_faccessat2 439
-#define __NR_process_madvise 440
-#define __NR_epoll_pwait2 441
-#define __NR_mount_setattr 442
-#define __NR_quotactl_fd 443
-#define __NR_landlock_create_ruleset 444
-#define __NR_landlock_add_rule 445
-#define __NR_landlock_restrict_self 446
-#define __NR_memfd_secret 447
-#define __NR_process_mrelease 448
-#define __NR_futex_waitv 449
-#define __NR_set_mempolicy_home_node 450
-#endif /* __MLIBC_SYSCALLNOS_h */
diff --git a/lib/mlibc/sysdeps/linux/x86/thread_entry.S b/lib/mlibc/sysdeps/linux/x86/thread_entry.S
deleted file mode 100644
index 031a6aa..0000000
--- a/lib/mlibc/sysdeps/linux/x86/thread_entry.S
+++ /dev/null
@@ -1,61 +0,0 @@
-#define FLAGS 4
-#define STACK FLAGS+4
-#define PTID STACK+4
-#define CTID PTID+4
-#define TLS CTID+4
-
-.section .text
-.global __mlibc_spawn_thread
-.type __mlibc_spawn_thread, "function"
-.cfi_startproc
-__mlibc_spawn_thread:
- push %ebx
- .cfi_adjust_cfa_offset 4
- .cfi_rel_offset ebx, 0
- push %esi
- .cfi_adjust_cfa_offset 4
- .cfi_rel_offset esi, 0
- push %edi
- .cfi_adjust_cfa_offset 4
- .cfi_rel_offset edi, 0
-
- xor %eax, %eax
- mov 12+FLAGS(%esp), %ebx
- mov 12+STACK(%esp), %ecx
- mov 12+PTID(%esp), %edx
- /* On x86-32 tls and child_tid have to be reversed */
- mov 12+TLS(%esp), %esi
- mov 12+CTID(%esp), %edi
- mov $120, %al
-
- int $0x80
-
- test %eax, %eax
- jnz .parent_exit
-
- xor %ebp, %ebp
- .cfi_undefined %eip
- .cfi_undefined %ebp
-
- call 1f
-1:
- pop %ebx
- addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
-
- call __mlibc_enter_thread@plt
- hlt
-
-.parent_exit:
- pop %edi
- .cfi_adjust_cfa_offset -4
- .cfi_restore edi
- pop %esi
- .cfi_adjust_cfa_offset -4
- .cfi_restore esi
- pop %ebx
- .cfi_adjust_cfa_offset -4
- .cfi_restore ebx
- ret
-.cfi_endproc
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/linux/x86_64/arch-syscall.cpp b/lib/mlibc/sysdeps/linux/x86_64/arch-syscall.cpp
deleted file mode 100644
index d2ebbe7..0000000
--- a/lib/mlibc/sysdeps/linux/x86_64/arch-syscall.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-#include <sys/syscall.h>
-#include <bits/syscall.h>
-
-using sc_word_t = __sc_word_t;
-
-sc_word_t __do_syscall0(long sc) {
- sc_word_t ret;
- asm volatile ("syscall" : "=a"(ret)
- : "a"(sc)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-sc_word_t __do_syscall1(long sc,
- sc_word_t arg1) {
- sc_word_t ret;
- asm volatile ("syscall" : "=a"(ret)
- : "a"(sc), "D"(arg1)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-sc_word_t __do_syscall2(long sc,
- sc_word_t arg1, sc_word_t arg2) {
- sc_word_t ret;
- asm volatile ("syscall" : "=a"(ret)
- : "a"(sc), "D"(arg1), "S"(arg2)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-sc_word_t __do_syscall3(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3) {
- sc_word_t ret;
- asm volatile ("syscall" : "=a"(ret)
- : "a"(sc), "D"(arg1), "S"(arg2), "d"(arg3)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-sc_word_t __do_syscall4(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4) {
- sc_word_t ret;
- register sc_word_t arg4_reg asm("r10") = arg4;
- asm volatile ("syscall" : "=a"(ret)
- : "a"(sc), "D"(arg1), "S"(arg2), "d"(arg3),
- "r"(arg4_reg)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-sc_word_t __do_syscall5(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4, sc_word_t arg5) {
- sc_word_t ret;
- register sc_word_t arg4_reg asm("r10") = arg4;
- register sc_word_t arg5_reg asm("r8") = arg5;
- asm volatile ("syscall" : "=a"(ret)
- : "a"(sc), "D"(arg1), "S"(arg2), "d"(arg3),
- "r"(arg4_reg), "r"(arg5_reg)
- : "rcx", "r11", "memory");
- return ret;
-}
-
-sc_word_t __do_syscall6(long sc,
- sc_word_t arg1, sc_word_t arg2, sc_word_t arg3,
- sc_word_t arg4, sc_word_t arg5, sc_word_t arg6) {
- sc_word_t ret;
- register sc_word_t arg4_reg asm("r10") = arg4;
- register sc_word_t arg5_reg asm("r8") = arg5;
- register sc_word_t arg6_reg asm("r9") = arg6;
- asm volatile ("syscall" : "=a"(ret)
- : "a"(sc), "D"(arg1), "S"(arg2), "d"(arg3),
- "r"(arg4_reg), "r"(arg5_reg), "r"(arg6_reg)
- : "rcx", "r11", "memory");
- return ret;
-}
diff --git a/lib/mlibc/sysdeps/linux/x86_64/cp_syscall.S b/lib/mlibc/sysdeps/linux/x86_64/cp_syscall.S
deleted file mode 100644
index 5db1f1d..0000000
--- a/lib/mlibc/sysdeps/linux/x86_64/cp_syscall.S
+++ /dev/null
@@ -1,29 +0,0 @@
-
-.section .text
-.global __mlibc_do_asm_cp_syscall
-.global __mlibc_syscall_begin
-.global __mlibc_syscall_end
-.type __mlibc_do_asm_cp_syscall, "function"
-__mlibc_do_asm_cp_syscall:
- mov %rdi, %rax
- mov %rsi, %rdi
- mov %rdx, %rsi
- mov %rcx, %rdx
- mov %r8, %r10
- mov %r9, %r8
- mov 8(%rsp), %r9
- mov %fs:0x30, %r11
-__mlibc_syscall_begin:
- /* tcbCancelEnableBit && tcbCancelTriggerBit */
- and $((1 << 0) | (1 << 2)), %r11
- cmp $((1 << 0) | (1 << 2)), %r11
- je cancel
- syscall
-__mlibc_syscall_end:
- ret
-
-cancel:
- call __mlibc_do_cancel
- hlt
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/x86_64/crt-src/Scrt1.S b/lib/mlibc/sysdeps/linux/x86_64/crt-src/Scrt1.S
deleted file mode 100644
index d0e8213..0000000
--- a/lib/mlibc/sysdeps/linux/x86_64/crt-src/Scrt1.S
+++ /dev/null
@@ -1,8 +0,0 @@
-.section .text
-.global _start
-_start:
- mov %rsp, %rdi
- lea main(%rip), %rsi
- call __mlibc_entry
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/x86_64/crt-src/crt1.S b/lib/mlibc/sysdeps/linux/x86_64/crt-src/crt1.S
deleted file mode 100644
index 9b77ee7..0000000
--- a/lib/mlibc/sysdeps/linux/x86_64/crt-src/crt1.S
+++ /dev/null
@@ -1,8 +0,0 @@
-.section .text
-.global _start
-_start:
- mov %rsp, %rdi
- mov $main, %rsi
- call __mlibc_entry
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/x86_64/crt-src/crti.S b/lib/mlibc/sysdeps/linux/x86_64/crt-src/crti.S
deleted file mode 100644
index 911b078..0000000
--- a/lib/mlibc/sysdeps/linux/x86_64/crt-src/crti.S
+++ /dev/null
@@ -1,11 +0,0 @@
-.section .init
-.global _init
-_init:
- push %rax
-
-.section .fini
-.global _fini
-_fini:
- push %rax
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/x86_64/crt-src/crtn.S b/lib/mlibc/sysdeps/linux/x86_64/crt-src/crtn.S
deleted file mode 100644
index 0187e50..0000000
--- a/lib/mlibc/sysdeps/linux/x86_64/crt-src/crtn.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .init
- pop %rax
- ret
-
-.section .fini
- pop %rax
- ret
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/x86_64/signals.S b/lib/mlibc/sysdeps/linux/x86_64/signals.S
deleted file mode 100644
index 09b4387..0000000
--- a/lib/mlibc/sysdeps/linux/x86_64/signals.S
+++ /dev/null
@@ -1,14 +0,0 @@
-
-.section .text
-
-.global __mlibc_signal_restore
-.type __mlibc_signal_restore, @function
-__mlibc_signal_restore:
-.global __mlibc_signal_restore_rt
-.type __mlibc_signal_restore_rt, @function
-__mlibc_signal_restore_rt:
- mov $15, %rax
- syscall
- ud2
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/linux/x86_64/syscallnos.h b/lib/mlibc/sysdeps/linux/x86_64/syscallnos.h
deleted file mode 100644
index 6c07e69..0000000
--- a/lib/mlibc/sysdeps/linux/x86_64/syscallnos.h
+++ /dev/null
@@ -1,362 +0,0 @@
-#ifndef __MLIBC_SYSCALLNOS_h
-#define __MLIBC_SYSCALLNOS_h
-/* This file is autogenerated. Don't bother. */
-/* Generator script: sysdeps/linux/update-syscall-list.py. */
-#define __NR_read 0
-#define __NR_write 1
-#define __NR_open 2
-#define __NR_close 3
-#define __NR_stat 4
-#define __NR_fstat 5
-#define __NR_lstat 6
-#define __NR_poll 7
-#define __NR_lseek 8
-#define __NR_mmap 9
-#define __NR_mprotect 10
-#define __NR_munmap 11
-#define __NR_brk 12
-#define __NR_rt_sigaction 13
-#define __NR_rt_sigprocmask 14
-#define __NR_rt_sigreturn 15
-#define __NR_ioctl 16
-#define __NR_pread64 17
-#define __NR_pwrite64 18
-#define __NR_readv 19
-#define __NR_writev 20
-#define __NR_access 21
-#define __NR_pipe 22
-#define __NR_select 23
-#define __NR_sched_yield 24
-#define __NR_mremap 25
-#define __NR_msync 26
-#define __NR_mincore 27
-#define __NR_madvise 28
-#define __NR_shmget 29
-#define __NR_shmat 30
-#define __NR_shmctl 31
-#define __NR_dup 32
-#define __NR_dup2 33
-#define __NR_pause 34
-#define __NR_nanosleep 35
-#define __NR_getitimer 36
-#define __NR_alarm 37
-#define __NR_setitimer 38
-#define __NR_getpid 39
-#define __NR_sendfile 40
-#define __NR_socket 41
-#define __NR_connect 42
-#define __NR_accept 43
-#define __NR_sendto 44
-#define __NR_recvfrom 45
-#define __NR_sendmsg 46
-#define __NR_recvmsg 47
-#define __NR_shutdown 48
-#define __NR_bind 49
-#define __NR_listen 50
-#define __NR_getsockname 51
-#define __NR_getpeername 52
-#define __NR_socketpair 53
-#define __NR_setsockopt 54
-#define __NR_getsockopt 55
-#define __NR_clone 56
-#define __NR_fork 57
-#define __NR_vfork 58
-#define __NR_execve 59
-#define __NR_exit 60
-#define __NR_wait4 61
-#define __NR_kill 62
-#define __NR_uname 63
-#define __NR_semget 64
-#define __NR_semop 65
-#define __NR_semctl 66
-#define __NR_shmdt 67
-#define __NR_msgget 68
-#define __NR_msgsnd 69
-#define __NR_msgrcv 70
-#define __NR_msgctl 71
-#define __NR_fcntl 72
-#define __NR_flock 73
-#define __NR_fsync 74
-#define __NR_fdatasync 75
-#define __NR_truncate 76
-#define __NR_ftruncate 77
-#define __NR_getdents 78
-#define __NR_getcwd 79
-#define __NR_chdir 80
-#define __NR_fchdir 81
-#define __NR_rename 82
-#define __NR_mkdir 83
-#define __NR_rmdir 84
-#define __NR_creat 85
-#define __NR_link 86
-#define __NR_unlink 87
-#define __NR_symlink 88
-#define __NR_readlink 89
-#define __NR_chmod 90
-#define __NR_fchmod 91
-#define __NR_chown 92
-#define __NR_fchown 93
-#define __NR_lchown 94
-#define __NR_umask 95
-#define __NR_gettimeofday 96
-#define __NR_getrlimit 97
-#define __NR_getrusage 98
-#define __NR_sysinfo 99
-#define __NR_times 100
-#define __NR_ptrace 101
-#define __NR_getuid 102
-#define __NR_syslog 103
-#define __NR_getgid 104
-#define __NR_setuid 105
-#define __NR_setgid 106
-#define __NR_geteuid 107
-#define __NR_getegid 108
-#define __NR_setpgid 109
-#define __NR_getppid 110
-#define __NR_getpgrp 111
-#define __NR_setsid 112
-#define __NR_setreuid 113
-#define __NR_setregid 114
-#define __NR_getgroups 115
-#define __NR_setgroups 116
-#define __NR_setresuid 117
-#define __NR_getresuid 118
-#define __NR_setresgid 119
-#define __NR_getresgid 120
-#define __NR_getpgid 121
-#define __NR_setfsuid 122
-#define __NR_setfsgid 123
-#define __NR_getsid 124
-#define __NR_capget 125
-#define __NR_capset 126
-#define __NR_rt_sigpending 127
-#define __NR_rt_sigtimedwait 128
-#define __NR_rt_sigqueueinfo 129
-#define __NR_rt_sigsuspend 130
-#define __NR_sigaltstack 131
-#define __NR_utime 132
-#define __NR_mknod 133
-#define __NR_uselib 134
-#define __NR_personality 135
-#define __NR_ustat 136
-#define __NR_statfs 137
-#define __NR_fstatfs 138
-#define __NR_sysfs 139
-#define __NR_getpriority 140
-#define __NR_setpriority 141
-#define __NR_sched_setparam 142
-#define __NR_sched_getparam 143
-#define __NR_sched_setscheduler 144
-#define __NR_sched_getscheduler 145
-#define __NR_sched_get_priority_max 146
-#define __NR_sched_get_priority_min 147
-#define __NR_sched_rr_get_interval 148
-#define __NR_mlock 149
-#define __NR_munlock 150
-#define __NR_mlockall 151
-#define __NR_munlockall 152
-#define __NR_vhangup 153
-#define __NR_modify_ldt 154
-#define __NR_pivot_root 155
-#define __NR__sysctl 156
-#define __NR_prctl 157
-#define __NR_arch_prctl 158
-#define __NR_adjtimex 159
-#define __NR_setrlimit 160
-#define __NR_chroot 161
-#define __NR_sync 162
-#define __NR_acct 163
-#define __NR_settimeofday 164
-#define __NR_mount 165
-#define __NR_umount2 166
-#define __NR_swapon 167
-#define __NR_swapoff 168
-#define __NR_reboot 169
-#define __NR_sethostname 170
-#define __NR_setdomainname 171
-#define __NR_iopl 172
-#define __NR_ioperm 173
-#define __NR_create_module 174
-#define __NR_init_module 175
-#define __NR_delete_module 176
-#define __NR_get_kernel_syms 177
-#define __NR_query_module 178
-#define __NR_quotactl 179
-#define __NR_nfsservctl 180
-#define __NR_getpmsg 181
-#define __NR_gettid 186
-#define __NR_readahead 187
-#define __NR_setxattr 188
-#define __NR_lsetxattr 189
-#define __NR_fsetxattr 190
-#define __NR_getxattr 191
-#define __NR_lgetxattr 192
-#define __NR_fgetxattr 193
-#define __NR_listxattr 194
-#define __NR_llistxattr 195
-#define __NR_flistxattr 196
-#define __NR_removexattr 197
-#define __NR_lremovexattr 198
-#define __NR_fremovexattr 199
-#define __NR_tkill 200
-#define __NR_time 201
-#define __NR_futex 202
-#define __NR_sched_setaffinity 203
-#define __NR_sched_getaffinity 204
-#define __NR_set_thread_area 205
-#define __NR_io_setup 206
-#define __NR_io_destroy 207
-#define __NR_io_getevents 208
-#define __NR_io_submit 209
-#define __NR_io_cancel 210
-#define __NR_get_thread_area 211
-#define __NR_lookup_dcookie 212
-#define __NR_epoll_create 213
-#define __NR_epoll_ctl_old 214
-#define __NR_epoll_wait_old 215
-#define __NR_remap_file_pages 216
-#define __NR_getdents64 217
-#define __NR_set_tid_address 218
-#define __NR_restart_syscall 219
-#define __NR_semtimedop 220
-#define __NR_fadvise64 221
-#define __NR_timer_create 222
-#define __NR_timer_settime 223
-#define __NR_timer_gettime 224
-#define __NR_timer_getoverrun 225
-#define __NR_timer_delete 226
-#define __NR_clock_settime 227
-#define __NR_clock_gettime 228
-#define __NR_clock_getres 229
-#define __NR_clock_nanosleep 230
-#define __NR_exit_group 231
-#define __NR_epoll_wait 232
-#define __NR_epoll_ctl 233
-#define __NR_tgkill 234
-#define __NR_utimes 235
-#define __NR_mbind 237
-#define __NR_set_mempolicy 238
-#define __NR_get_mempolicy 239
-#define __NR_mq_open 240
-#define __NR_mq_unlink 241
-#define __NR_mq_timedsend 242
-#define __NR_mq_timedreceive 243
-#define __NR_mq_notify 244
-#define __NR_mq_getsetattr 245
-#define __NR_kexec_load 246
-#define __NR_waitid 247
-#define __NR_add_key 248
-#define __NR_request_key 249
-#define __NR_keyctl 250
-#define __NR_ioprio_set 251
-#define __NR_ioprio_get 252
-#define __NR_inotify_init 253
-#define __NR_inotify_add_watch 254
-#define __NR_inotify_rm_watch 255
-#define __NR_migrate_pages 256
-#define __NR_openat 257
-#define __NR_mkdirat 258
-#define __NR_mknodat 259
-#define __NR_fchownat 260
-#define __NR_futimesat 261
-#define __NR_newfstatat 262
-#define __NR_unlinkat 263
-#define __NR_renameat 264
-#define __NR_linkat 265
-#define __NR_symlinkat 266
-#define __NR_readlinkat 267
-#define __NR_fchmodat 268
-#define __NR_faccessat 269
-#define __NR_pselect6 270
-#define __NR_ppoll 271
-#define __NR_unshare 272
-#define __NR_set_robust_list 273
-#define __NR_get_robust_list 274
-#define __NR_splice 275
-#define __NR_tee 276
-#define __NR_sync_file_range 277
-#define __NR_vmsplice 278
-#define __NR_move_pages 279
-#define __NR_utimensat 280
-#define __NR_epoll_pwait 281
-#define __NR_signalfd 282
-#define __NR_timerfd_create 283
-#define __NR_eventfd 284
-#define __NR_fallocate 285
-#define __NR_timerfd_settime 286
-#define __NR_timerfd_gettime 287
-#define __NR_accept4 288
-#define __NR_signalfd4 289
-#define __NR_eventfd2 290
-#define __NR_epoll_create1 291
-#define __NR_dup3 292
-#define __NR_pipe2 293
-#define __NR_inotify_init1 294
-#define __NR_preadv 295
-#define __NR_pwritev 296
-#define __NR_rt_tgsigqueueinfo 297
-#define __NR_perf_event_open 298
-#define __NR_recvmmsg 299
-#define __NR_fanotify_init 300
-#define __NR_fanotify_mark 301
-#define __NR_prlimit64 302
-#define __NR_name_to_handle_at 303
-#define __NR_open_by_handle_at 304
-#define __NR_clock_adjtime 305
-#define __NR_syncfs 306
-#define __NR_sendmmsg 307
-#define __NR_setns 308
-#define __NR_getcpu 309
-#define __NR_process_vm_readv 310
-#define __NR_process_vm_writev 311
-#define __NR_kcmp 312
-#define __NR_finit_module 313
-#define __NR_sched_setattr 314
-#define __NR_sched_getattr 315
-#define __NR_renameat2 316
-#define __NR_seccomp 317
-#define __NR_getrandom 318
-#define __NR_memfd_create 319
-#define __NR_kexec_file_load 320
-#define __NR_bpf 321
-#define __NR_execveat 322
-#define __NR_userfaultfd 323
-#define __NR_membarrier 324
-#define __NR_mlock2 325
-#define __NR_copy_file_range 326
-#define __NR_preadv2 327
-#define __NR_pwritev2 328
-#define __NR_pkey_mprotect 329
-#define __NR_pkey_alloc 330
-#define __NR_pkey_free 331
-#define __NR_statx 332
-#define __NR_io_pgetevents 333
-#define __NR_rseq 334
-#define __NR_pidfd_send_signal 424
-#define __NR_io_uring_setup 425
-#define __NR_io_uring_enter 426
-#define __NR_io_uring_register 427
-#define __NR_open_tree 428
-#define __NR_move_mount 429
-#define __NR_fsopen 430
-#define __NR_fsconfig 431
-#define __NR_fsmount 432
-#define __NR_fspick 433
-#define __NR_pidfd_open 434
-#define __NR_clone3 435
-#define __NR_close_range 436
-#define __NR_openat2 437
-#define __NR_pidfd_getfd 438
-#define __NR_faccessat2 439
-#define __NR_process_madvise 440
-#define __NR_epoll_pwait2 441
-#define __NR_mount_setattr 442
-#define __NR_quotactl_fd 443
-#define __NR_landlock_create_ruleset 444
-#define __NR_landlock_add_rule 445
-#define __NR_landlock_restrict_self 446
-#define __NR_memfd_secret 447
-#define __NR_process_mrelease 448
-#define __NR_futex_waitv 449
-#define __NR_set_mempolicy_home_node 450
-#endif /* __MLIBC_SYSCALLNOS_h */
diff --git a/lib/mlibc/sysdeps/linux/x86_64/thread_entry.S b/lib/mlibc/sysdeps/linux/x86_64/thread_entry.S
deleted file mode 100644
index 954c6dd..0000000
--- a/lib/mlibc/sysdeps/linux/x86_64/thread_entry.S
+++ /dev/null
@@ -1,23 +0,0 @@
-
-.section .text
-.global __mlibc_spawn_thread
-.type __mlibc_spawn_thread, "function"
-__mlibc_spawn_thread:
- xor %eax, %eax
- /* The rest of the args are already in the right registers,
- * only need to fixup rcx to r10
- */
- mov %rcx, %r10
- mov $56, %al
- syscall
- test %eax, %eax
- jnz 1f
- xor %ebp, %ebp
- pop %rdi
- pop %rsi
- call __mlibc_enter_thread
- hlt
-1:
- ret
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/lyre/generic/entry.cpp b/lib/mlibc/sysdeps/lyre/generic/entry.cpp
deleted file mode 100644
index 4fb0179..0000000
--- a/lib/mlibc/sysdeps/lyre/generic/entry.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-#include <stdint.h>
-#include <stdlib.h>
-#include <bits/ensure.h>
-#include <mlibc/debug.hpp>
-#include <mlibc/elf/startup.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <bits/posix/posix_signal.h>
-#include <lyre/syscall.h>
-
-// defined by the POSIX library
-void __mlibc_initLocale();
-
-extern "C" uintptr_t *__dlapi_entrystack();
-
-extern char **environ;
-static mlibc::exec_stack_data __mlibc_stack_data;
-
-struct LibraryGuard {
- LibraryGuard();
-};
-
-static LibraryGuard guard;
-
-LibraryGuard::LibraryGuard() {
- __mlibc_initLocale();
-
- // Parse the exec() stack.
- mlibc::parse_exec_stack(__dlapi_entrystack(), &__mlibc_stack_data);
- mlibc::set_startup_data(__mlibc_stack_data.argc, __mlibc_stack_data.argv,
- __mlibc_stack_data.envp);
-}
-
-struct GPRState {
- uint64_t ds;
- uint64_t es;
- uint64_t rax;
- uint64_t rbx;
- uint64_t rcx;
- uint64_t rdx;
- uint64_t rsi;
- uint64_t rdi;
- uint64_t rbp;
- uint64_t r8;
- uint64_t r9;
- uint64_t r10;
- uint64_t r11;
- uint64_t r12;
- uint64_t r13;
- uint64_t r14;
- uint64_t r15;
- uint64_t err;
- uint64_t rip;
- uint64_t cs;
- uint64_t rflags;
- uint64_t rsp;
- uint64_t ss;
-};
-
-namespace mlibc {
- int sys_sigentry(void *sigentry) {
- __syscall_ret ret = __syscall(27, sigentry);
- if (ret.errno != 0)
- return ret.errno;
- return 0;
- }
-
- [[noreturn]] int sys_sigreturn(void *context, sigset_t old_mask) {
- __syscall(30, context, old_mask);
- __builtin_unreachable();
- }
-}
-
-static void __mlibc_sigentry(int which, siginfo_t *siginfo,
- void (*sa)(int, siginfo_t *, void *),
- GPRState *ret_context, sigset_t prev_mask) {
-
-/*
- size_t *base_ptr = (size_t *)ret_context->rbp;
-
- mlibc::infoLogger() << "Stacktrace:" << frg::endlog;
- mlibc::infoLogger() << " [" << (void *)ret_context->rip << "]" << frg::endlog;
- for (;;) {
- size_t old_bp = base_ptr[0];
- size_t ret_addr = base_ptr[1];
- if (!ret_addr)
- break;
- size_t off;
- mlibc::infoLogger() << " [" << (void *)ret_addr << "]" << frg::endlog;
- if (!old_bp)
- break;
- base_ptr = (size_t *)old_bp;
- }
-*/
-
- switch ((uintptr_t)sa) {
- // DFL
- case (uintptr_t)(-2):
- mlibc::infoLogger() << "mlibc: Unhandled signal " << which << frg::endlog;
- mlibc::sys_exit(128 + which);
- // IGN
- case (uintptr_t)(-3):
- break;
- default:
- sa(which, siginfo, NULL);
- break;
- }
-
- mlibc::sys_sigreturn(ret_context, prev_mask);
-
- __builtin_unreachable();
-}
-
-extern "C" void __mlibc_entry(int (*main_fn)(int argc, char *argv[], char *env[])) {
- //mlibc::sys_sigentry((void *)__mlibc_sigentry);
-
- // TODO: call __dlapi_enter, otherwise static builds will break (see Linux sysdeps)
- auto result = main_fn(__mlibc_stack_data.argc, __mlibc_stack_data.argv, environ);
- exit(result);
-}
-
diff --git a/lib/mlibc/sysdeps/lyre/generic/generic.cpp b/lib/mlibc/sysdeps/lyre/generic/generic.cpp
deleted file mode 100644
index 549e9f0..0000000
--- a/lib/mlibc/sysdeps/lyre/generic/generic.cpp
+++ /dev/null
@@ -1,860 +0,0 @@
-#include <bits/ensure.h>
-#include <mlibc/allocator.hpp>
-#include <mlibc/debug.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <errno.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <asm/ioctls.h>
-#include <stdlib.h>
-#include <abi-bits/fcntl.h>
-#include <lyre/syscall.h>
-#include <frg/hash.hpp>
-#include <frg/hash_map.hpp>
-
-#define STRINGIFY_(X) #X
-#define STRINGIFY(X) STRINGIFY_(X)
-#define STUB_ONLY { \
- sys_libc_log("STUB_ONLY function on line " STRINGIFY(__LINE__) " was called"); \
- sys_libc_panic(); \
-}
-
-namespace {
-
-int fcntl_helper(int fd, int request, int *result, ...) {
- va_list args;
- va_start(args, result);
- if(!mlibc::sys_fcntl) {
- return ENOSYS;
- }
- int ret = mlibc::sys_fcntl(fd, request, args, result);
- va_end(args);
- return ret;
-}
-
-}
-
-namespace mlibc {
-
-void sys_libc_log(const char *message) {
- __syscall(SYS_debug, message);
-}
-
-void sys_libc_panic() {
- sys_libc_log("\nMLIBC PANIC\n");
- sys_exit(1);
- __builtin_unreachable();
-}
-
-void sys_exit(int status) {
- __syscall(SYS_exit, status);
- __builtin_unreachable();
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-[[noreturn]] void sys_thread_exit() {
- __syscall(SYS_exit_thread);
- __builtin_unreachable();
-}
-
-extern "C" void __mlibc_thread_entry();
-
-int sys_clone(void *tcb, pid_t *pid_out, void *stack) {
- (void)tcb;
-
- __syscall_ret ret = __syscall(SYS_new_thread, (uintptr_t)__mlibc_thread_entry, (uintptr_t)stack);
- int ret_value = (int)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
-
- *pid_out = ret_value;
- return 0;
-}
-
-int sys_kill(pid_t, int) STUB_ONLY
-
-int sys_tcgetattr(int fd, struct termios *attr) {
- int ret;
- if (int r = sys_ioctl(fd, TCGETS, attr, &ret) != 0) {
- return r;
- }
- return 0;
-}
-
-int sys_tcsetattr(int fd, int optional_action, const struct termios *attr) {
- int ret;
- switch (optional_action) {
- case TCSANOW:
- optional_action = TCSETS; break;
- case TCSADRAIN:
- optional_action = TCSETSW; break;
- case TCSAFLUSH:
- optional_action = TCSETSF; break;
- default:
- __ensure(!"Unsupported tcsetattr");
- }
-
- if (int r = sys_ioctl(fd, optional_action, (void *)attr, &ret) != 0) {
- return r;
- }
-
- return 0;
-}
-
-#endif
-
-int sys_tcb_set(void *pointer) {
- __syscall(SYS_set_fs_base, pointer);
- return 0;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-int sys_ppoll(struct pollfd *fds, int nfds, const struct timespec *timeout, const sigset_t *sigmask, int *num_events) {
- __syscall_ret ret = __syscall(SYS_ppoll, fds, nfds, timeout, sigmask);
- int ret_value = (int)ret.ret;
-
- if (ret_value == -1)
- return ret.errno;
-
- *num_events = ret_value;
- return 0;
-}
-
-int sys_poll(struct pollfd *fds, nfds_t count, int timeout, int *num_events) {
- struct timespec ts;
- ts.tv_sec = timeout / 1000;
- ts.tv_nsec = (timeout % 1000) * 1000000;
- return sys_ppoll(fds, count, timeout < 0 ? NULL : &ts, NULL, num_events);
-}
-
-int sys_epoll_pwait(int, struct epoll_event *, int,
- int, const sigset_t *, int *) STUB_ONLY
-
-int sys_epoll_create(int, int *) STUB_ONLY
-
-int sys_epoll_ctl(int, int, int, struct epoll_event *) STUB_ONLY
-
-int sys_pselect(int nfds, fd_set *read_set, fd_set *write_set,
- fd_set *except_set, const struct timespec *timeout,
- const sigset_t *sigmask, int *num_events) {
- struct pollfd *fds = (struct pollfd *)calloc(nfds, sizeof(struct pollfd));
- if (fds == NULL) {
- return ENOMEM;
- }
-
- for (int i = 0; i < nfds; i++) {
- struct pollfd *fd = &fds[i];
-
- if (read_set && FD_ISSET(i, read_set)) {
- fd->events |= POLLIN;
- }
- if (write_set && FD_ISSET(i, write_set)) {
- fd->events |= POLLOUT;
- }
- if (except_set && FD_ISSET(i, except_set)) {
- fd->events |= POLLPRI;
- }
-
- if (!fd->events) {
- fd->fd = -1;
- continue;
- }
- fd->fd = i;
- }
-
- int ret = sys_ppoll(fds, nfds, timeout, sigmask, num_events);
- if (ret != 0) {
- free(fds);
- return ret;
- }
-
- fd_set res_read_set, res_write_set, res_except_set;
- FD_ZERO(&res_read_set);
- FD_ZERO(&res_write_set);
- FD_ZERO(&res_except_set);
-
- for (int i = 0; i < nfds; i++) {
- struct pollfd *fd = &fds[i];
-
- if (read_set && FD_ISSET(i, read_set) && (fd->revents & (POLLIN | POLLERR | POLLHUP)) != 0) {
- FD_SET(i, &res_read_set);
- }
- if (write_set && FD_ISSET(i, write_set) && (fd->revents & (POLLOUT | POLLERR | POLLHUP)) != 0) {
- FD_SET(i, &res_write_set);
- }
- if (except_set && FD_ISSET(i, except_set) && (fd->revents & POLLPRI) != 0) {
- FD_SET(i, &res_except_set);
- }
- }
-
- free(fds);
- if (read_set) {
- *read_set = res_read_set;
- }
- if (write_set) {
- *write_set = res_write_set;
- }
- if (except_set) {
- *except_set = res_except_set;
- }
-
- return 0;
-}
-
-#endif
-
-int sys_futex_wait(int *pointer, int expected, const struct timespec *time) {
- __syscall_ret ret = __syscall(SYS_futex_wait, pointer, expected, time);
-
- if ((int)ret.ret == -1)
- return ret.errno;
-
- return 0;
-}
-
-int sys_futex_wake(int *pointer) {
- __syscall_ret ret = __syscall(SYS_futex_wake, pointer);
-
- if ((int)ret.ret == -1)
- return ret.errno;
-
- int num_woken = ret.ret;
-
- __ensure(num_woken >= 0 && num_woken <= 1);
- return num_woken;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-int sys_timerfd_create(int, int *) STUB_ONLY
-
-int sys_ioctl(int fd, unsigned long request, void *arg, int *result) {
- __syscall_ret ret = __syscall(SYS_ioctl, fd, request, arg);
-
- if ((int)ret.ret == -1)
- return ret.errno;
-
- *result = (int)ret.ret;
- return 0;
-}
-
-int sys_isatty(int fd) {
- struct winsize ws;
- int ret;
-
- if (!sys_ioctl(fd, TIOCGWINSZ, &ws, &ret))
- return 0;
-
- return ENOTTY;
-}
-
-int sys_getcwd(char *buffer, size_t size) {
- __syscall_ret ret = __syscall(SYS_getcwd, buffer, size);
-
- if ((int)ret.ret == -1)
- return ret.errno;
-
- return 0;
-}
-
-#endif
-
-int sys_openat(int dirfd, const char *path, int flags, mode_t mode, int *fd) {
- __syscall_ret ret = __syscall(SYS_openat, dirfd, path, flags, mode);
-
- if ((int)ret.ret == -1)
- return ret.errno;
-
- *fd = (int)ret.ret;
- return 0;
-}
-
-int sys_open(const char *path, int flags, mode_t mode, int *fd) {
- return sys_openat(AT_FDCWD, path, flags, mode, fd);
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-int sys_open_dir(const char *path, int *handle) {
- return sys_openat(AT_FDCWD, path, O_DIRECTORY, 0, handle);
-}
-
-struct ReadDirState {
- size_t offset;
- size_t capacity;
- void *buffer;
-};
-
-static frg::hash_map<int, ReadDirState *, frg::hash<int>, MemoryAllocator> open_dirs{frg::hash<int>{}, getAllocator()};
-
-static ReadDirState *get_dir_state(int fdnum) {
- ReadDirState *result;
- if (auto value = open_dirs.get(fdnum)) {
- result = *value;
- } else {
- result = (ReadDirState *)malloc(sizeof(ReadDirState));
- result->offset = 0;
- result->capacity = 1024;
- result->buffer = malloc(result->capacity);
- open_dirs.insert(fdnum, result);
- }
- return result;
-}
-
-int sys_read_entries(int fdnum, void *buffer, size_t max_size, size_t *bytes_read) {
- ReadDirState *state = get_dir_state(fdnum);
-
-retry:
- __syscall_ret ret = __syscall(SYS_readdir, fdnum, state->buffer, &state->capacity);
- if ((int)ret.ret == -1) {
- if (ret.errno == ENOBUFS) {
- state->buffer = realloc(state->buffer, state->capacity);
- goto retry;
- } else {
- return ret.errno;
- }
- }
-
- size_t offset = 0;
- while (offset < max_size) {
- struct dirent *ent = (struct dirent *)((char *)state->buffer + state->offset);
- if (ent->d_reclen == 0) {
- break;
- }
-
- if (offset + ent->d_reclen >= max_size) {
- break;
- }
-
- memcpy((char *)buffer + offset, ent, ent->d_reclen);
- offset += ent->d_reclen;
- state->offset += ent->d_reclen;
- }
-
- *bytes_read = offset;
- return 0;
-}
-
-#endif
-
-int sys_close(int fd) {
- __syscall_ret ret = __syscall(SYS_close, fd);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
-#ifndef MLIBC_BUILDING_RTDL
- open_dirs.remove(fd);
-#endif
- return 0;
-}
-
-int sys_seek(int fd, off_t offset, int whence, off_t *new_offset) {
- __syscall_ret ret = __syscall(SYS_seek, fd, offset, whence);
- off_t ret_value = (off_t)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *new_offset = ret_value;
- return 0;
-}
-
-int sys_read(int fd, void *buf, size_t count, ssize_t *bytes_read) {
- __syscall_ret ret = __syscall(SYS_read, fd, buf, count);
- ssize_t ret_value = (ssize_t)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *bytes_read = ret_value;
- return 0;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-int sys_write(int fd, const void *buf, size_t count, ssize_t *bytes_written) {
- __syscall_ret ret = __syscall(SYS_write, fd, buf, count);
- ssize_t ret_value = (ssize_t)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *bytes_written = ret_value;
- return 0;
-}
-
-int sys_readlink(const char *path, void *data, size_t max_size, ssize_t *length) {
- __syscall_ret ret = __syscall(SYS_readlinkat, AT_FDCWD, path, data, max_size);
- ssize_t ret_value = (ssize_t)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *length = ret_value;
- return 0;
-}
-
-int sys_link(const char *old_path, const char *new_path) {
- return sys_linkat(AT_FDCWD, old_path, AT_FDCWD, new_path, 0);
-}
-
-int sys_linkat(int olddirfd, const char *old_path, int newdirfd, const char *new_path, int flags) {
- __syscall_ret ret = __syscall(SYS_linkat, olddirfd, old_path, newdirfd, new_path, flags);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_unlinkat(int fd, const char *path, int flags) {
- __syscall_ret ret = __syscall(SYS_unlinkat, fd, path, flags);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_fchmodat(int fd, const char *pathname, mode_t mode, int flags) {
- __syscall_ret ret = __syscall(SYS_fchmodat, fd, pathname, mode, flags);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_fchmod(int fd, mode_t mode) {
- return sys_fchmodat(fd, "", mode, AT_EMPTY_PATH);
-}
-
-int sys_chmod(const char *pathname, mode_t mode) {
- return sys_fchmodat(AT_FDCWD, pathname, mode, 0);
-}
-
-int sys_rmdir(const char *) STUB_ONLY
-
-#endif
-
-int sys_vm_map(void *hint, size_t size, int prot, int flags,
- int fd, off_t offset, void **window) {
- __syscall_ret ret = __syscall(SYS_mmap, hint, size, (uint64_t)prot << 32 | flags, fd, offset);
- void *ret_value = (void *)ret.ret;
- if (ret_value == MAP_FAILED) {
- return ret.errno;
- }
- *window = ret_value;
- return 0;
-}
-
-int sys_vm_unmap(void *pointer, size_t size) {
- __syscall_ret ret = __syscall(SYS_unmmap, pointer, size);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-int sys_vm_protect(void *pointer, size_t size, int prot) {
- __syscall_ret ret = __syscall(SYS_mprotect, pointer, size, prot);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-#endif
-
-int sys_anon_allocate(size_t size, void **pointer) {
- return sys_vm_map(NULL, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, -1, 0, pointer);
-}
-
-int sys_anon_free(void *pointer, size_t size) {
- return sys_vm_unmap(pointer, size);
-}
-
-#ifndef MLIBC_BUILDING_RTDL
-
-pid_t sys_getpid() {
- __syscall_ret ret = __syscall(SYS_getpid);
- return (pid_t)ret.ret;
-}
-
-pid_t sys_getppid() {
- return 0;
-}
-
-uid_t sys_getuid() {
- return 0;
-}
-
-uid_t sys_geteuid() {
- return 0;
-}
-
-gid_t sys_getgid() {
- return 0;
-}
-
-int sys_setgid(gid_t) {
- return 0;
-}
-
-int sys_getpgid(pid_t, pid_t *) {
- return 0;
-}
-
-gid_t sys_getegid() {
- return 0;
-}
-
-int sys_setpgid(pid_t, pid_t) {
- return 0;
-}
-
-int sys_ttyname(int, char *, size_t) {
- return ENOSYS;
-}
-
-int sys_clock_get(int clock, time_t *secs, long *nanos) {
- struct timespec buf;
- __syscall_ret ret = __syscall(SYS_getclock, clock, &buf);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- *secs = buf.tv_sec;
- *nanos = buf.tv_nsec;
- return 0;
-}
-
-int sys_stat(fsfd_target fsfdt, int fd, const char *path, int flags, struct stat *statbuf) {
- __syscall_ret ret;
- switch (fsfdt) {
- case fsfd_target::fd:
- ret = __syscall(SYS_stat, fd, "", flags | AT_EMPTY_PATH, statbuf);
- break;
- case fsfd_target::path:
- ret = __syscall(SYS_stat, AT_FDCWD, path, flags, statbuf);
- break;
- case fsfd_target::fd_path:
- ret = __syscall(SYS_stat, fd, path, flags, statbuf);
- break;
- default:
- __ensure(!"sys_stat: Invalid fsfdt");
- __builtin_unreachable();
- }
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_faccessat(int dirfd, const char *pathname, int mode, int flags) {
- (void)flags;
- struct stat buf;
- if (int r = sys_stat(fsfd_target::fd_path, dirfd, pathname, mode & AT_SYMLINK_FOLLOW, &buf)) {
- return r;
- }
- return 0;
-}
-
-int sys_access(const char *path, int mode) {
- return sys_faccessat(AT_FDCWD, path, mode, 0);
-}
-
-int sys_pipe(int *fds, int flags) {
- __syscall_ret ret = __syscall(SYS_pipe, fds, flags);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_chdir(const char *path) {
- __syscall_ret ret = __syscall(SYS_chdir, path);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_mkdir(const char *path, mode_t mode) {
- return sys_mkdirat(AT_FDCWD, path, mode);
-}
-
-int sys_mkdirat(int dirfd, const char *path, mode_t mode) {
- __syscall_ret ret = __syscall(SYS_mkdirat, dirfd, path, mode);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_socket(int domain, int type_and_flags, int proto, int *fd) {
- __syscall_ret ret = __syscall(SYS_socket, domain, type_and_flags, proto);
- int ret_value = (int)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *fd = ret_value;
- return 0;
-}
-
-int sys_socketpair(int domain, int type_and_flags, int proto, int *fds) {
- __syscall_ret ret = __syscall(SYS_socketpair, domain, type_and_flags, proto, fds);
- int ret_value = (int)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_bind(int fd, const struct sockaddr *addr_ptr, socklen_t addr_length) {
- __syscall_ret ret = __syscall(SYS_bind, fd, addr_ptr, addr_length);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_connect(int fd, const struct sockaddr *addr_ptr, socklen_t addr_length) {
- __syscall_ret ret = __syscall(SYS_connect, fd, addr_ptr, addr_length);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_accept(int fd, int *newfd, struct sockaddr *addr_ptr, socklen_t *addr_length, int flags) {
- __syscall_ret ret = __syscall(SYS_accept, fd, addr_ptr, addr_length);
- int ret_value = (int)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *newfd = ret_value;
-
- if(flags & SOCK_NONBLOCK) {
- int fcntl_ret = 0;
- fcntl_helper(*newfd, F_GETFL, &fcntl_ret);
- fcntl_helper(*newfd, F_SETFL, &fcntl_ret, fcntl_ret | O_NONBLOCK);
- }
-
- if(flags & SOCK_CLOEXEC) {
- int fcntl_ret = 0;
- fcntl_helper(*newfd, F_GETFD, &fcntl_ret);
- fcntl_helper(*newfd, F_SETFD, &fcntl_ret, fcntl_ret | FD_CLOEXEC);
- }
-
- return 0;
-}
-
-int sys_getsockopt(int fd, int layer, int number, void *__restrict buffer, socklen_t *__restrict size) {
- __syscall_ret ret = __syscall(SYS_getsockopt, fd, layer, number, buffer, size);
- ssize_t ret_value = (ssize_t)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_setsockopt(int fd, int layer, int number, const void *buffer, socklen_t size) {
- __syscall_ret ret = __syscall(SYS_setsockopt, fd, layer, number, buffer, size);
- ssize_t ret_value = (ssize_t)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_msg_recv(int sockfd, struct msghdr *hdr, int flags, ssize_t *length) {
- __syscall_ret ret = __syscall(SYS_recvmsg, sockfd, hdr, flags);
- ssize_t ret_value = (ssize_t)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *length = ret_value;
- return 0;
-}
-
-int sys_msg_send(int sockfd, const struct msghdr *hdr, int flags, ssize_t *length) {
- __syscall_ret ret = __syscall(SYS_sendmsg, sockfd, hdr, flags);
- ssize_t ret_value = (ssize_t)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *length = ret_value;
- return 0;
-}
-
-int sys_peername(int fd, struct sockaddr *addr_ptr, socklen_t max_addr_length, socklen_t *actual_length) {
- __syscall_ret ret = __syscall(SYS_getpeername, fd, addr_ptr, &max_addr_length);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- *actual_length = max_addr_length;
- return 0;
-}
-
-int sys_sockname(int fd, struct sockaddr *addr_ptr, socklen_t max_addr_length, socklen_t *actual_length) {
- __syscall_ret ret = __syscall(SYS_getsockname, fd, addr_ptr, &max_addr_length);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- *actual_length = max_addr_length;
- return 0;
-}
-
-int sys_listen(int fd, int backlog) {
- __syscall_ret ret = __syscall(SYS_listen, fd, backlog);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_inotify_create(int, int *) {
- mlibc::infoLogger() << "mlibc: sys_inotify_create() is unimplemented" << frg::endlog;
- return ENOSYS;
-}
-
-int sys_fork(pid_t *child) {
- __syscall_ret ret = __syscall(SYS_fork);
- pid_t ret_value = (pid_t)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *child = ret_value;
- return 0;
-}
-
-int sys_execve(const char *path, char *const argv[], char *const envp[]) {
- __syscall_ret ret = __syscall(SYS_exec, path, argv, envp);
- return ret.errno;
-}
-
-int sys_fcntl(int fd, int request, va_list args, int *result) {
- __syscall_ret ret = __syscall(SYS_fcntl, fd, request, va_arg(args, uint64_t));
- int ret_value = (int)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *result = ret_value;
- return 0;
-}
-
-int sys_dup(int fd, int flags, int *newfd) {
- (void)flags;
- __syscall_ret ret = __syscall(SYS_fcntl, fd, F_DUPFD, 0);
- int ret_value = (int)ret.ret;
- if (ret_value == -1) {
- return ret.errno;
- }
- *newfd = ret_value;
- return 0;
-}
-
-int sys_dup2(int fd, int flags, int newfd) {
- __syscall_ret ret = __syscall(SYS_dup3, fd, newfd, flags);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_sigprocmask(int, const sigset_t *__restrict, sigset_t *__restrict) {
- mlibc::infoLogger() << "mlibc: sys_sigprocmask() is a stub" << frg::endlog;
- return 0;
-}
-
-int sys_sigaction(int, const struct sigaction *, struct sigaction *) {
- mlibc::infoLogger() << "mlibc: sys_sigaction() is a stub" << frg::endlog;
- return 0;
-}
-
-int sys_signalfd_create(sigset_t, int, int *) STUB_ONLY
-
-int sys_waitpid(pid_t pid, int *status, int flags, struct rusage *ru, pid_t *ret_pid) {
- if (ru != NULL) {
- mlibc::infoLogger() << "mlibc: struct rusage in sys_waitpid is unsupported" << frg::endlog;
- return ENOSYS;
- }
-again:
- __syscall_ret ret = __syscall(SYS_waitpid, pid, status, flags);
- pid_t ret_value = (pid_t)ret.ret;
- if (ret_value == -1) {
- if (ret.errno == EINTR) {
- goto again;
- }
- return ret.errno;
- }
- *ret_pid = ret_value;
- return 0;
-}
-
-int sys_getgroups(size_t, const gid_t *, int *) {
- mlibc::infoLogger() << "mlibc: sys_getgroups() is unimplemented" << frg::endlog;
- return ENOSYS;
-}
-
-int sys_mount(const char *, const char *, const char *, unsigned long, const void *) STUB_ONLY
-
-int sys_umount2(const char *, int) STUB_ONLY
-
-int sys_gethostname(char *buffer, size_t bufsize) {
- struct utsname utsname;
- if (int err = sys_uname(&utsname)) {
- return err;
- }
- if (strlen(utsname.nodename) >= bufsize) {
- return ENAMETOOLONG;
- }
- strncpy(buffer, utsname.nodename, bufsize);
- return 0;
-}
-
-int sys_sethostname(const char *, size_t) STUB_ONLY
-
-int sys_sleep(time_t *secs, long *nanos) {
- struct timespec time = {.tv_sec = *secs, .tv_nsec = *nanos};
- struct timespec rem = {.tv_sec = 0, .tv_nsec = 0};
- __syscall_ret ret = __syscall(SYS_sleep, &time, &rem);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- *secs = rem.tv_sec;
- *nanos = rem.tv_nsec;
- return 0;
-}
-
-int sys_getitimer(int, struct itimerval *) {
- mlibc::infoLogger() << "mlibc: sys_getitimer() is unimplemented" << frg::endlog;
- return ENOSYS;
-}
-
-int sys_setitimer(int, const struct itimerval *, struct itimerval *) {
- mlibc::infoLogger() << "mlibc: sys_setitimer() is unimplemented" << frg::endlog;
- return ENOSYS;
-}
-
-int sys_umask(mode_t mode, mode_t *old) {
- __syscall_ret ret = __syscall(SYS_umask, mode);
- *old = (mode_t)ret.ret;
- return 0;
-}
-
-int sys_uname(struct utsname *buf) {
- __syscall_ret ret = __syscall(SYS_uname, buf);
- if ((int)ret.ret == -1) {
- return ret.errno;
- }
- return 0;
-}
-
-int sys_fsync(int) {
- mlibc::infoLogger() << "sys_fsync is a stub" << frg::endlog;
- return 0;
-}
-
-#endif
-
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/lyre/generic/mntent.cpp b/lib/mlibc/sysdeps/lyre/generic/mntent.cpp
deleted file mode 100644
index d064af3..0000000
--- a/lib/mlibc/sysdeps/lyre/generic/mntent.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <errno.h>
-#include <mntent.h>
-#include <stdio.h>
-#include <limits.h>
-#include <string.h>
-#include <bits/ensure.h>
-
-namespace {
-
-char *internal_buf;
-size_t internal_bufsize;
-
-}
-
-#define SENTINEL (char *)&internal_buf
-
-FILE *setmntent(const char *name, const char *mode) {
- return fopen(name, mode);
-}
-
-struct mntent *getmntent(FILE *f) {
- static struct mntent mnt;
- return getmntent_r(f, &mnt, SENTINEL, 0);
-}
-
-int addmntent(FILE *f, const struct mntent *mnt) {
- if(fseek(f, 0, SEEK_END)) {
- return 1;
- }
- return fprintf(f, "%s\t%s\t%s\t%s\t%d\t%d\n",
- mnt->mnt_fsname, mnt->mnt_dir, mnt->mnt_type, mnt->mnt_opts,
- mnt->mnt_freq, mnt->mnt_passno) < 0;
-}
-
-int endmntent(FILE *f) {
- if(f) {
- fclose(f);
- }
- return 1;
-}
-
-char *hasmntopt(const struct mntent *mnt, const char *opt) {
- return strstr(mnt->mnt_opts, opt);
-}
-
-/* Adapted from musl */
-struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int buflen) {
- int n[8];
- bool use_internal = (linebuf == SENTINEL);
- int len;
- size_t i;
-
- mnt->mnt_freq = 0;
- mnt->mnt_passno = 0;
-
- do {
- if(use_internal) {
- getline(&internal_buf, &internal_bufsize, f);
- linebuf = internal_buf;
- } else {
- fgets(linebuf, buflen, f);
- }
- if(feof(f) || ferror(f)) {
- return 0;
- }
- if(!strchr(linebuf, '\n')) {
- fscanf(f, "%*[^\n]%*[\n]");
- errno = ERANGE;
- return 0;
- }
-
- len = strlen(linebuf);
- if(len > INT_MAX) {
- continue;
- }
-
- for(i = 0; i < sizeof n / sizeof *n; i++) {
- n[i] = len;
- }
-
- sscanf(linebuf, " %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d",
- n, n + 1, n + 2, n + 3, n + 4, n + 5, n + 6, n + 7,
- &mnt->mnt_freq, &mnt->mnt_passno);
- } while(linebuf[n[0]] == '#' || n[1] == len);
-
- linebuf[n[1]] = 0;
- linebuf[n[3]] = 0;
- linebuf[n[5]] = 0;
- linebuf[n[7]] = 0;
-
- mnt->mnt_fsname = linebuf + n[0];
- mnt->mnt_dir = linebuf + n[2];
- mnt->mnt_type = linebuf + n[4];
- mnt->mnt_opts = linebuf + n[6];
-
- return mnt;
-}
diff --git a/lib/mlibc/sysdeps/lyre/generic/mount.cpp b/lib/mlibc/sysdeps/lyre/generic/mount.cpp
deleted file mode 100644
index f10254d..0000000
--- a/lib/mlibc/sysdeps/lyre/generic/mount.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <errno.h>
-#include <sys/mount.h>
-#include <bits/ensure.h>
-
-int mount(const char *source, const char *target,
- const char *fstype, unsigned long flags, const void *data) {
- return 0;
-}
-
-int umount(const char *target) {
- return umount2(target, 0);
-}
-
-int umount2(const char *target, int flags) {
- return 0;
-}
diff --git a/lib/mlibc/sysdeps/lyre/generic/reboot.cpp b/lib/mlibc/sysdeps/lyre/generic/reboot.cpp
deleted file mode 100644
index 7c86ffd..0000000
--- a/lib/mlibc/sysdeps/lyre/generic/reboot.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <errno.h>
-#include <sys/reboot.h>
-#include <bits/ensure.h>
-
-int reboot(int what) {
- return 0;
-}
diff --git a/lib/mlibc/sysdeps/lyre/generic/thread.S b/lib/mlibc/sysdeps/lyre/generic/thread.S
deleted file mode 100644
index 47ab6a9..0000000
--- a/lib/mlibc/sysdeps/lyre/generic/thread.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .text
-.global __mlibc_thread_entry
-__mlibc_thread_entry:
- pop %rdi
- pop %rsi
- pop %rdx
- call __mlibc_thread_trampoline
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/lyre/generic/thread.cpp b/lib/mlibc/sysdeps/lyre/generic/thread.cpp
deleted file mode 100644
index 5186e1f..0000000
--- a/lib/mlibc/sysdeps/lyre/generic/thread.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <sys/mman.h>
-#include <mlibc/debug.hpp>
-#include <errno.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <bits/ensure.h>
-#include <mlibc/tcb.hpp>
-
-extern "C" void __mlibc_thread_trampoline(void *(*fn)(void *), Tcb *tcb, void *arg) {
- if (mlibc::sys_tcb_set(tcb)) {
- __ensure(!"failed to set tcb for new thread");
- }
-
- while (__atomic_load_n(&tcb->tid, __ATOMIC_RELAXED) == 0) {
- mlibc::sys_futex_wait(&tcb->tid, 0, nullptr);
- }
-
- tcb->invokeThreadFunc(reinterpret_cast<void *>(fn), arg);
-
- __atomic_store_n(&tcb->didExit, 1, __ATOMIC_RELEASE);
- mlibc::sys_futex_wake(&tcb->didExit);
-
- mlibc::sys_thread_exit();
-}
-
-#define DEFAULT_STACK 0x400000
-
-namespace mlibc {
- int sys_prepare_stack(void **stack, void *entry, void *arg, void *tcb, size_t *stack_size, size_t *guard_size, void **stack_base) {
- // TODO guard
-
- mlibc::infoLogger() << "mlibc: sys_prepare_stack() does not setup a guard!" << frg::endlog;
-
- *guard_size = 0;
-
- *stack_size = *stack_size ? *stack_size : DEFAULT_STACK;
-
- if (!*stack) {
- *stack_base = mmap(NULL, *stack_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
- if (*stack_base == MAP_FAILED) {
- return errno;
- }
- } else {
- *stack_base = *stack;
- }
-
- *stack = (void *)((char *)*stack_base + *stack_size);
-
- void **stack_it = (void **)*stack;
-
- *--stack_it = arg;
- *--stack_it = tcb;
- *--stack_it = entry;
-
- *stack = (void *)stack_it;
-
- return 0;
- }
-}
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/access.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/access.h
deleted file mode 120000
index cb83931..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/access.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/access.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/auxv.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/auxv.h
deleted file mode 120000
index c43f878..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/auxv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/auxv.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/blkcnt_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/blkcnt_t.h
deleted file mode 120000
index 0b0ec27..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/blkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/blkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/blksize_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/blksize_t.h
deleted file mode 120000
index 7dc8d7c..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/blksize_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/blksize_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/clockid_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/clockid_t.h
deleted file mode 120000
index 6a42da5..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/clockid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/clockid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/dev_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/dev_t.h
deleted file mode 120000
index bca881e..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/dev_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/dev_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/epoll.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/epoll.h
deleted file mode 120000
index eb4b76d..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/epoll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/epoll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/errno.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/errno.h
deleted file mode 120000
index 6e507de..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/errno.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/errno.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/fcntl.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/fcntl.h
deleted file mode 120000
index 463e2c9..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fcntl.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/fsblkcnt_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/fsblkcnt_t.h
deleted file mode 120000
index 898dfb2..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/fsblkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsblkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/fsfilcnt_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/fsfilcnt_t.h
deleted file mode 120000
index 791755c..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/fsfilcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsfilcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/gid_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/gid_t.h
deleted file mode 120000
index abce6d6..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/gid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/gid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/in.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/in.h
deleted file mode 120000
index 418d1d5..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/in.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/in.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/ino_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/ino_t.h
deleted file mode 120000
index 4c20aca..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/ino_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ino_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/inotify.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/inotify.h
deleted file mode 120000
index b5cb282..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/inotify.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/inotify.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/ioctls.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/ioctls.h
deleted file mode 120000
index 595106b..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/ioctls.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ioctls.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/limits.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/limits.h
deleted file mode 120000
index 6c88db2..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/limits.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/limits.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/mode_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/mode_t.h
deleted file mode 120000
index 5d78fdf..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/mode_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mode_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/mqueue.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/mqueue.h
deleted file mode 120000
index fa87b07..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/mqueue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mqueue.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/msg.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/msg.h
deleted file mode 120000
index f402b49..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/msg.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/msg.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/nlink_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/nlink_t.h
deleted file mode 120000
index bb3b625..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/nlink_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/nlink_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/packet.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/packet.h
deleted file mode 120000
index 998ef1a..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/packet.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/packet.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/pid_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/pid_t.h
deleted file mode 120000
index baa90f6..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/pid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/pid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/poll.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/poll.h
deleted file mode 120000
index 8ea6a0a..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/poll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/poll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/ptrace.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/ptrace.h
deleted file mode 120000
index b2517b2..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/ptrace.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ptrace.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/reboot.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/reboot.h
deleted file mode 120000
index 77013a4..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/reboot.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/reboot.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/resource.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/resource.h
deleted file mode 120000
index 88d7402..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/resource.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/seek-whence.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/seek-whence.h
deleted file mode 120000
index df7bccf..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/seek-whence.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/seek-whence.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/shm.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/shm.h
deleted file mode 120000
index 067d8c4..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/shm.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/shm.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/signal.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/signal.h
deleted file mode 120000
index 4dcb0b7..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/signal.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/signal.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/socket.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/socket.h
deleted file mode 120000
index f1dc016..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/socket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socket.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/socklen_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/socklen_t.h
deleted file mode 120000
index 41f3b11..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/socklen_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socklen_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/stat.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/stat.h
deleted file mode 120000
index 1f63b41..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/stat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/stat.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/statfs.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/statfs.h
deleted file mode 120000
index e3d202f..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/statfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/statvfs.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/statvfs.h
deleted file mode 120000
index d0bdd40..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/statvfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/lyre/statvfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/suseconds_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/suseconds_t.h
deleted file mode 120000
index 9ed6597..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/suseconds_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/suseconds_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/termios.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/termios.h
deleted file mode 120000
index ee8f0b0..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/termios.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/termios.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/time.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/time.h
deleted file mode 120000
index 2a02625..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/time.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/time.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/uid_t.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/uid_t.h
deleted file mode 120000
index b306777..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/uid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/uid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/utsname.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/utsname.h
deleted file mode 120000
index b285754..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/utsname.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/utsname.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/vm-flags.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/vm-flags.h
deleted file mode 120000
index bbe258c..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/vm-flags.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/vm-flags.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/wait.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/wait.h
deleted file mode 120000
index feb2840..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/wait.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/wait.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/abi-bits/xattr.h b/lib/mlibc/sysdeps/lyre/include/abi-bits/xattr.h
deleted file mode 120000
index 66412d7..0000000
--- a/lib/mlibc/sysdeps/lyre/include/abi-bits/xattr.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/xattr.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/lyre/include/asm/ioctl.h b/lib/mlibc/sysdeps/lyre/include/asm/ioctl.h
deleted file mode 100644
index 8cbb364..0000000
--- a/lib/mlibc/sysdeps/lyre/include/asm/ioctl.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _ASM_GENERIC_IOCTL_H
-#define _ASM_GENERIC_IOCTL_H
-
-/* ioctl command encoding: 32 bits total, command in lower 16 bits,
- * size of the parameter structure in the lower 14 bits of the
- * upper 16 bits.
- * Encoding the size of the parameter structure in the ioctl request
- * is useful for catching programs compiled with old versions
- * and to avoid overwriting user space outside the user buffer area.
- * The highest 2 bits are reserved for indicating the ``access mode''.
- * NOTE: This limits the max parameter size to 16kB -1 !
- */
-
-/*
- * The following is for compatibility across the various Linux
- * platforms. The generic ioctl numbering scheme doesn't really enforce
- * a type field. De facto, however, the top 8 bits of the lower 16
- * bits are indeed used as a type field, so we might just as well make
- * this explicit here. Please be sure to use the decoding macros
- * below from now on.
- */
-#define _IOC_NRBITS 8
-#define _IOC_TYPEBITS 8
-
-/*
- * Let any architecture override either of the following before
- * including this file.
- */
-
-#ifndef _IOC_SIZEBITS
-# define _IOC_SIZEBITS 14
-#endif
-
-#ifndef _IOC_DIRBITS
-# define _IOC_DIRBITS 2
-#endif
-
-#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
-#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
-#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
-#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
-
-#define _IOC_NRSHIFT 0
-#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
-#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
-#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
-
-/*
- * Direction bits, which any architecture can choose to override
- * before including this file.
- *
- * NOTE: _IOC_WRITE means userland is writing and kernel is
- * reading. _IOC_READ means userland is reading and kernel is writing.
- */
-
-#ifndef _IOC_NONE
-# define _IOC_NONE 0U
-#endif
-
-#ifndef _IOC_WRITE
-# define _IOC_WRITE 1U
-#endif
-
-#ifndef _IOC_READ
-# define _IOC_READ 2U
-#endif
-
-#define _IOC(dir,type,nr,size) \
- (((dir) << _IOC_DIRSHIFT) | \
- ((type) << _IOC_TYPESHIFT) | \
- ((nr) << _IOC_NRSHIFT) | \
- ((size) << _IOC_SIZESHIFT))
-
-#define _IOC_TYPECHECK(t) (sizeof(t))
-
-/*
- * Used to create numbers.
- *
- * NOTE: _IOW means userland is writing and kernel is reading. _IOR
- * means userland is reading and kernel is writing.
- */
-#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
-#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
-#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
-#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
-#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
-#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
-#define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
-
-/* used to decode ioctl numbers.. */
-#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
-#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
-#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
-#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
-
-/* ...and for the drivers/sound files... */
-
-#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT)
-#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT)
-#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
-#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
-#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
-
-#endif /* _ASM_GENERIC_IOCTL_H */
diff --git a/lib/mlibc/sysdeps/lyre/include/asm/ioctls.h b/lib/mlibc/sysdeps/lyre/include/asm/ioctls.h
deleted file mode 100644
index bdbba9b..0000000
--- a/lib/mlibc/sysdeps/lyre/include/asm/ioctls.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef __ASM_GENERIC_IOCTLS_H
-#define __ASM_GENERIC_IOCTLS_H
-
-#include <asm/ioctl.h>
-
-/*
- * These are the most common definitions for tty ioctl numbers.
- * Most of them do not use the recommended _IOC(), but there is
- * probably some source code out there hardcoding the number,
- * so we might as well use them for all new platforms.
- *
- * The architectures that use different values here typically
- * try to be compatible with some Unix variants for the same
- * architecture.
- */
-
-/* 0x54 is just a magic number to make these relatively unique ('T') */
-
-#define TCGETS 0x5401
-#define TCSETS 0x5402
-#define TCSETSW 0x5403
-#define TCSETSF 0x5404
-#define TCGETA 0x5405
-#define TCSETA 0x5406
-#define TCSETAW 0x5407
-#define TCSETAF 0x5408
-#define TCSBRK 0x5409
-#define TCXONC 0x540A
-#define TCFLSH 0x540B
-#define TIOCEXCL 0x540C
-#define TIOCNXCL 0x540D
-#define TIOCSCTTY 0x540E
-#define TIOCGPGRP 0x540F
-#define TIOCSPGRP 0x5410
-#define TIOCOUTQ 0x5411
-#define TIOCSTI 0x5412
-#define TIOCGWINSZ 0x5413
-#define TIOCSWINSZ 0x5414
-#define TIOCMGET 0x5415
-#define TIOCMBIS 0x5416
-#define TIOCMBIC 0x5417
-#define TIOCMSET 0x5418
-#define TIOCGSOFTCAR 0x5419
-#define TIOCSSOFTCAR 0x541A
-#define FIONREAD 0x541B
-#define TIOCINQ FIONREAD
-#define TIOCLINUX 0x541C
-#define TIOCCONS 0x541D
-#define TIOCGSERIAL 0x541E
-#define TIOCSSERIAL 0x541F
-#define TIOCPKT 0x5420
-#define FIONBIO 0x5421
-#define TIOCNOTTY 0x5422
-#define TIOCSETD 0x5423
-#define TIOCGETD 0x5424
-#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */
-#define TIOCSBRK 0x5427 /* BSD compatibility */
-#define TIOCCBRK 0x5428 /* BSD compatibility */
-#define TIOCGSID 0x5429 /* Return the session ID of FD */
-#define TCGETS2 _IOR('T', 0x2A, struct termios2)
-#define TCSETS2 _IOW('T', 0x2B, struct termios2)
-#define TCSETSW2 _IOW('T', 0x2C, struct termios2)
-#define TCSETSF2 _IOW('T', 0x2D, struct termios2)
-#define TIOCGRS485 0x542E
-#ifndef TIOCSRS485
-#define TIOCSRS485 0x542F
-#endif
-#define TIOCGPTN _IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
-#define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */
-#define TIOCGDEV _IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */
-#define TCGETX 0x5432 /* SYS5 TCGETX compatibility */
-#define TCSETX 0x5433
-#define TCSETXF 0x5434
-#define TCSETXW 0x5435
-#define TIOCSIG _IOW('T', 0x36, int) /* pty: generate signal */
-#define TIOCVHANGUP 0x5437
-#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
-#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
-#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
-#define TIOCGPTPEER _IO('T', 0x41) /* Safely open the slave */
-#define TIOCGISO7816 _IOR('T', 0x42, struct serial_iso7816)
-#define TIOCSISO7816 _IOWR('T', 0x43, struct serial_iso7816)
-
-#define FIONCLEX 0x5450
-#define FIOCLEX 0x5451
-#define FIOASYNC 0x5452
-#define TIOCSERCONFIG 0x5453
-#define TIOCSERGWILD 0x5454
-#define TIOCSERSWILD 0x5455
-#define TIOCGLCKTRMIOS 0x5456
-#define TIOCSLCKTRMIOS 0x5457
-#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
-#define TIOCSERGETLSR 0x5459 /* Get line status register */
-#define TIOCSERGETMULTI 0x545A /* Get multiport config */
-#define TIOCSERSETMULTI 0x545B /* Set multiport config */
-
-#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
-#define TIOCGICOUNT 0x545D /* read serial port __inline__ interrupt counts */
-
-/*
- * Some arches already define FIOQSIZE due to a historical
- * conflict with a Hayes modem-specific ioctl value.
- */
-#ifndef FIOQSIZE
-# define FIOQSIZE 0x5460
-#endif
-
-/* Used for packet mode */
-#define TIOCPKT_DATA 0
-#define TIOCPKT_FLUSHREAD 1
-#define TIOCPKT_FLUSHWRITE 2
-#define TIOCPKT_STOP 4
-#define TIOCPKT_START 8
-#define TIOCPKT_NOSTOP 16
-#define TIOCPKT_DOSTOP 32
-#define TIOCPKT_IOCTL 64
-
-#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
-
-#endif /* __ASM_GENERIC_IOCTLS_H */
diff --git a/lib/mlibc/sysdeps/lyre/include/linux/fb.h b/lib/mlibc/sysdeps/lyre/include/linux/fb.h
deleted file mode 100644
index d5e6d88..0000000
--- a/lib/mlibc/sysdeps/lyre/include/linux/fb.h
+++ /dev/null
@@ -1,400 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _LINUX_FB_H
-#define _LINUX_FB_H
-
-#include <stddef.h>
-#include <asm/ioctl.h>
-
-/* Definitions of frame buffers */
-
-#define FB_MAX 32 /* sufficient for now */
-
-/* ioctls
- 0x46 is 'F' */
-#define FBIOGET_VSCREENINFO 0x4600
-#define FBIOPUT_VSCREENINFO 0x4601
-#define FBIOGET_FSCREENINFO 0x4602
-#define FBIOGETCMAP 0x4604
-#define FBIOPUTCMAP 0x4605
-#define FBIOPAN_DISPLAY 0x4606
-#define FBIO_CURSOR _IOWR('F', 0x08, struct fb_cursor)
-/* 0x4607-0x460B are defined below */
-/* #define FBIOGET_MONITORSPEC 0x460C */
-/* #define FBIOPUT_MONITORSPEC 0x460D */
-/* #define FBIOSWITCH_MONIBIT 0x460E */
-#define FBIOGET_CON2FBMAP 0x460F
-#define FBIOPUT_CON2FBMAP 0x4610
-#define FBIOBLANK 0x4611 /* arg: 0 or vesa level + 1 */
-#define FBIOGET_VBLANK _IOR('F', 0x12, struct fb_vblank)
-#define FBIO_ALLOC 0x4613
-#define FBIO_FREE 0x4614
-#define FBIOGET_GLYPH 0x4615
-#define FBIOGET_HWCINFO 0x4616
-#define FBIOPUT_MODEINFO 0x4617
-#define FBIOGET_DISPINFO 0x4618
-#define FBIO_WAITFORVSYNC _IOW('F', 0x20, uint32_t)
-
-#define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */
-#define FB_TYPE_PLANES 1 /* Non interleaved planes */
-#define FB_TYPE_INTERLEAVED_PLANES 2 /* Interleaved planes */
-#define FB_TYPE_TEXT 3 /* Text/attributes */
-#define FB_TYPE_VGA_PLANES 4 /* EGA/VGA planes */
-#define FB_TYPE_FOURCC 5 /* Type identified by a V4L2 FOURCC */
-
-#define FB_AUX_TEXT_MDA 0 /* Monochrome text */
-#define FB_AUX_TEXT_CGA 1 /* CGA/EGA/VGA Color text */
-#define FB_AUX_TEXT_S3_MMIO 2 /* S3 MMIO fasttext */
-#define FB_AUX_TEXT_MGA_STEP16 3 /* MGA Millenium I: text, attr, 14 reserved bytes */
-#define FB_AUX_TEXT_MGA_STEP8 4 /* other MGAs: text, attr, 6 reserved bytes */
-#define FB_AUX_TEXT_SVGA_GROUP 8 /* 8-15: SVGA tileblit compatible modes */
-#define FB_AUX_TEXT_SVGA_MASK 7 /* lower three bits says step */
-#define FB_AUX_TEXT_SVGA_STEP2 8 /* SVGA text mode: text, attr */
-#define FB_AUX_TEXT_SVGA_STEP4 9 /* SVGA text mode: text, attr, 2 reserved bytes */
-#define FB_AUX_TEXT_SVGA_STEP8 10 /* SVGA text mode: text, attr, 6 reserved bytes */
-#define FB_AUX_TEXT_SVGA_STEP16 11 /* SVGA text mode: text, attr, 14 reserved bytes */
-#define FB_AUX_TEXT_SVGA_LAST 15 /* reserved up to 15 */
-
-#define FB_AUX_VGA_PLANES_VGA4 0 /* 16 color planes (EGA/VGA) */
-#define FB_AUX_VGA_PLANES_CFB4 1 /* CFB4 in planes (VGA) */
-#define FB_AUX_VGA_PLANES_CFB8 2 /* CFB8 in planes (VGA) */
-
-#define FB_VISUAL_MONO01 0 /* Monochr. 1=Black 0=White */
-#define FB_VISUAL_MONO10 1 /* Monochr. 1=White 0=Black */
-#define FB_VISUAL_TRUECOLOR 2 /* True color */
-#define FB_VISUAL_PSEUDOCOLOR 3 /* Pseudo color (like atari) */
-#define FB_VISUAL_DIRECTCOLOR 4 /* Direct color */
-#define FB_VISUAL_STATIC_PSEUDOCOLOR 5 /* Pseudo color readonly */
-#define FB_VISUAL_FOURCC 6 /* Visual identified by a V4L2 FOURCC */
-
-#define FB_ACCEL_NONE 0 /* no hardware accelerator */
-#define FB_ACCEL_ATARIBLITT 1 /* Atari Blitter */
-#define FB_ACCEL_AMIGABLITT 2 /* Amiga Blitter */
-#define FB_ACCEL_S3_TRIO64 3 /* Cybervision64 (S3 Trio64) */
-#define FB_ACCEL_NCR_77C32BLT 4 /* RetinaZ3 (NCR 77C32BLT) */
-#define FB_ACCEL_S3_VIRGE 5 /* Cybervision64/3D (S3 ViRGE) */
-#define FB_ACCEL_ATI_MACH64GX 6 /* ATI Mach 64GX family */
-#define FB_ACCEL_DEC_TGA 7 /* DEC 21030 TGA */
-#define FB_ACCEL_ATI_MACH64CT 8 /* ATI Mach 64CT family */
-#define FB_ACCEL_ATI_MACH64VT 9 /* ATI Mach 64CT family VT class */
-#define FB_ACCEL_ATI_MACH64GT 10 /* ATI Mach 64CT family GT class */
-#define FB_ACCEL_SUN_CREATOR 11 /* Sun Creator/Creator3D */
-#define FB_ACCEL_SUN_CGSIX 12 /* Sun cg6 */
-#define FB_ACCEL_SUN_LEO 13 /* Sun leo/zx */
-#define FB_ACCEL_IMS_TWINTURBO 14 /* IMS Twin Turbo */
-#define FB_ACCEL_3DLABS_PERMEDIA2 15 /* 3Dlabs Permedia 2 */
-#define FB_ACCEL_MATROX_MGA2064W 16 /* Matrox MGA2064W (Millenium) */
-#define FB_ACCEL_MATROX_MGA1064SG 17 /* Matrox MGA1064SG (Mystique) */
-#define FB_ACCEL_MATROX_MGA2164W 18 /* Matrox MGA2164W (Millenium II) */
-#define FB_ACCEL_MATROX_MGA2164W_AGP 19 /* Matrox MGA2164W (Millenium II) */
-#define FB_ACCEL_MATROX_MGAG100 20 /* Matrox G100 (Productiva G100) */
-#define FB_ACCEL_MATROX_MGAG200 21 /* Matrox G200 (Myst, Mill, ...) */
-#define FB_ACCEL_SUN_CG14 22 /* Sun cgfourteen */
-#define FB_ACCEL_SUN_BWTWO 23 /* Sun bwtwo */
-#define FB_ACCEL_SUN_CGTHREE 24 /* Sun cgthree */
-#define FB_ACCEL_SUN_TCX 25 /* Sun tcx */
-#define FB_ACCEL_MATROX_MGAG400 26 /* Matrox G400 */
-#define FB_ACCEL_NV3 27 /* nVidia RIVA 128 */
-#define FB_ACCEL_NV4 28 /* nVidia RIVA TNT */
-#define FB_ACCEL_NV5 29 /* nVidia RIVA TNT2 */
-#define FB_ACCEL_CT_6555x 30 /* C&T 6555x */
-#define FB_ACCEL_3DFX_BANSHEE 31 /* 3Dfx Banshee */
-#define FB_ACCEL_ATI_RAGE128 32 /* ATI Rage128 family */
-#define FB_ACCEL_IGS_CYBER2000 33 /* CyberPro 2000 */
-#define FB_ACCEL_IGS_CYBER2010 34 /* CyberPro 2010 */
-#define FB_ACCEL_IGS_CYBER5000 35 /* CyberPro 5000 */
-#define FB_ACCEL_SIS_GLAMOUR 36 /* SiS 300/630/540 */
-#define FB_ACCEL_3DLABS_PERMEDIA3 37 /* 3Dlabs Permedia 3 */
-#define FB_ACCEL_ATI_RADEON 38 /* ATI Radeon family */
-#define FB_ACCEL_I810 39 /* Intel 810/815 */
-#define FB_ACCEL_SIS_GLAMOUR_2 40 /* SiS 315, 650, 740 */
-#define FB_ACCEL_SIS_XABRE 41 /* SiS 330 ("Xabre") */
-#define FB_ACCEL_I830 42 /* Intel 830M/845G/85x/865G */
-#define FB_ACCEL_NV_10 43 /* nVidia Arch 10 */
-#define FB_ACCEL_NV_20 44 /* nVidia Arch 20 */
-#define FB_ACCEL_NV_30 45 /* nVidia Arch 30 */
-#define FB_ACCEL_NV_40 46 /* nVidia Arch 40 */
-#define FB_ACCEL_XGI_VOLARI_V 47 /* XGI Volari V3XT, V5, V8 */
-#define FB_ACCEL_XGI_VOLARI_Z 48 /* XGI Volari Z7 */
-#define FB_ACCEL_OMAP1610 49 /* TI OMAP16xx */
-#define FB_ACCEL_TRIDENT_TGUI 50 /* Trident TGUI */
-#define FB_ACCEL_TRIDENT_3DIMAGE 51 /* Trident 3DImage */
-#define FB_ACCEL_TRIDENT_BLADE3D 52 /* Trident Blade3D */
-#define FB_ACCEL_TRIDENT_BLADEXP 53 /* Trident BladeXP */
-#define FB_ACCEL_CIRRUS_ALPINE 53 /* Cirrus Logic 543x/544x/5480 */
-#define FB_ACCEL_NEOMAGIC_NM2070 90 /* NeoMagic NM2070 */
-#define FB_ACCEL_NEOMAGIC_NM2090 91 /* NeoMagic NM2090 */
-#define FB_ACCEL_NEOMAGIC_NM2093 92 /* NeoMagic NM2093 */
-#define FB_ACCEL_NEOMAGIC_NM2097 93 /* NeoMagic NM2097 */
-#define FB_ACCEL_NEOMAGIC_NM2160 94 /* NeoMagic NM2160 */
-#define FB_ACCEL_NEOMAGIC_NM2200 95 /* NeoMagic NM2200 */
-#define FB_ACCEL_NEOMAGIC_NM2230 96 /* NeoMagic NM2230 */
-#define FB_ACCEL_NEOMAGIC_NM2360 97 /* NeoMagic NM2360 */
-#define FB_ACCEL_NEOMAGIC_NM2380 98 /* NeoMagic NM2380 */
-#define FB_ACCEL_PXA3XX 99 /* PXA3xx */
-
-#define FB_ACCEL_SAVAGE4 0x80 /* S3 Savage4 */
-#define FB_ACCEL_SAVAGE3D 0x81 /* S3 Savage3D */
-#define FB_ACCEL_SAVAGE3D_MV 0x82 /* S3 Savage3D-MV */
-#define FB_ACCEL_SAVAGE2000 0x83 /* S3 Savage2000 */
-#define FB_ACCEL_SAVAGE_MX_MV 0x84 /* S3 Savage/MX-MV */
-#define FB_ACCEL_SAVAGE_MX 0x85 /* S3 Savage/MX */
-#define FB_ACCEL_SAVAGE_IX_MV 0x86 /* S3 Savage/IX-MV */
-#define FB_ACCEL_SAVAGE_IX 0x87 /* S3 Savage/IX */
-#define FB_ACCEL_PROSAVAGE_PM 0x88 /* S3 ProSavage PM133 */
-#define FB_ACCEL_PROSAVAGE_KM 0x89 /* S3 ProSavage KM133 */
-#define FB_ACCEL_S3TWISTER_P 0x8a /* S3 Twister */
-#define FB_ACCEL_S3TWISTER_K 0x8b /* S3 TwisterK */
-#define FB_ACCEL_SUPERSAVAGE 0x8c /* S3 Supersavage */
-#define FB_ACCEL_PROSAVAGE_DDR 0x8d /* S3 ProSavage DDR */
-#define FB_ACCEL_PROSAVAGE_DDRK 0x8e /* S3 ProSavage DDR-K */
-
-#define FB_ACCEL_PUV3_UNIGFX 0xa0 /* PKUnity-v3 Unigfx */
-
-#define FB_CAP_FOURCC 1 /* Device supports FOURCC-based formats */
-
-struct fb_fix_screeninfo {
- char id[16]; /* identification string eg "TT Builtin" */
- unsigned long smem_start; /* Start of frame buffer mem */
- /* (physical address) */
- uint32_t smem_len; /* Length of frame buffer mem */
- uint32_t type; /* see FB_TYPE_* */
- uint32_t type_aux; /* Interleave for interleaved Planes */
- uint32_t visual; /* see FB_VISUAL_* */
- uint16_t xpanstep; /* zero if no hardware panning */
- uint16_t ypanstep; /* zero if no hardware panning */
- uint16_t ywrapstep; /* zero if no hardware ywrap */
- uint32_t line_length; /* length of a line in bytes */
- unsigned long mmio_start; /* Start of Memory Mapped I/O */
- /* (physical address) */
- uint32_t mmio_len; /* Length of Memory Mapped I/O */
- uint32_t accel; /* Indicate to driver which */
- /* specific chip/card we have */
- uint16_t capabilities; /* see FB_CAP_* */
- uint16_t reserved[2]; /* Reserved for future compatibility */
-};
-
-/* Interpretation of offset for color fields: All offsets are from the right,
- * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
- * can use the offset as right argument to <<). A pixel afterwards is a bit
- * stream and is written to video memory as that unmodified.
- *
- * For pseudocolor: offset and length should be the same for all color
- * components. Offset specifies the position of the least significant bit
- * of the palette index in a pixel value. Length indicates the number
- * of available palette entries (i.e. # of entries = 1 << length).
- */
-struct fb_bitfield {
- uint32_t offset; /* beginning of bitfield */
- uint32_t length; /* length of bitfield */
- uint32_t msb_right; /* != 0 : Most significant bit is */
- /* right */
-};
-
-#define FB_NONSTD_HAM 1 /* Hold-And-Modify (HAM) */
-#define FB_NONSTD_REV_PIX_IN_B 2 /* order of pixels in each byte is reversed */
-
-#define FB_ACTIVATE_NOW 0 /* set values immediately (or vbl)*/
-#define FB_ACTIVATE_NXTOPEN 1 /* activate on next open */
-#define FB_ACTIVATE_TEST 2 /* don't set, round up impossible */
-#define FB_ACTIVATE_MASK 15
- /* values */
-#define FB_ACTIVATE_VBL 16 /* activate values on next vbl */
-#define FB_CHANGE_CMAP_VBL 32 /* change colormap on vbl */
-#define FB_ACTIVATE_ALL 64 /* change all VCs on this fb */
-#define FB_ACTIVATE_FORCE 128 /* force apply even when no change*/
-#define FB_ACTIVATE_INV_MODE 256 /* invalidate videomode */
-#define FB_ACTIVATE_KD_TEXT 512 /* for KDSET vt ioctl */
-
-#define FB_ACCELF_TEXT 1 /* (OBSOLETE) see fb_info.flags and vc_mode */
-
-#define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */
-#define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */
-#define FB_SYNC_EXT 4 /* external sync */
-#define FB_SYNC_COMP_HIGH_ACT 8 /* composite sync high active */
-#define FB_SYNC_BROADCAST 16 /* broadcast video timings */
- /* vtotal = 144d/288n/576i => PAL */
- /* vtotal = 121d/242n/484i => NTSC */
-#define FB_SYNC_ON_GREEN 32 /* sync on green */
-
-#define FB_VMODE_NONINTERLACED 0 /* non interlaced */
-#define FB_VMODE_INTERLACED 1 /* interlaced */
-#define FB_VMODE_DOUBLE 2 /* double scan */
-#define FB_VMODE_ODD_FLD_FIRST 4 /* interlaced: top line first */
-#define FB_VMODE_MASK 255
-
-#define FB_VMODE_YWRAP 256 /* ywrap instead of panning */
-#define FB_VMODE_SMOOTH_XPAN 512 /* smooth xpan possible (internally used) */
-#define FB_VMODE_CONUPDATE 512 /* don't update x/yoffset */
-
-/*
- * Display rotation support
- */
-#define FB_ROTATE_UR 0
-#define FB_ROTATE_CW 1
-#define FB_ROTATE_UD 2
-#define FB_ROTATE_CCW 3
-
-#define PICOS2KHZ(a) (1000000000UL/(a))
-#define KHZ2PICOS(a) (1000000000UL/(a))
-
-struct fb_var_screeninfo {
- uint32_t xres; /* visible resolution */
- uint32_t yres;
- uint32_t xres_virtual; /* virtual resolution */
- uint32_t yres_virtual;
- uint32_t xoffset; /* offset from virtual to visible */
- uint32_t yoffset; /* resolution */
-
- uint32_t bits_per_pixel; /* guess what */
- uint32_t grayscale; /* 0 = color, 1 = grayscale, */
- /* >1 = FOURCC */
- struct fb_bitfield red; /* bitfield in fb mem if true color, */
- struct fb_bitfield green; /* else only length is significant */
- struct fb_bitfield blue;
- struct fb_bitfield transp; /* transparency */
-
- uint32_t nonstd; /* != 0 Non standard pixel format */
-
- uint32_t activate; /* see FB_ACTIVATE_* */
-
- uint32_t height; /* height of picture in mm */
- uint32_t width; /* width of picture in mm */
-
- uint32_t accel_flags; /* (OBSOLETE) see fb_info.flags */
-
- /* Timing: All values in pixclocks, except pixclock (of course) */
- uint32_t pixclock; /* pixel clock in ps (pico seconds) */
- uint32_t left_margin; /* time from sync to picture */
- uint32_t right_margin; /* time from picture to sync */
- uint32_t upper_margin; /* time from sync to picture */
- uint32_t lower_margin;
- uint32_t hsync_len; /* length of horizontal sync */
- uint32_t vsync_len; /* length of vertical sync */
- uint32_t sync; /* see FB_SYNC_* */
- uint32_t vmode; /* see FB_VMODE_* */
- uint32_t rotate; /* angle we rotate counter clockwise */
- uint32_t colorspace; /* colorspace for FOURCC-based modes */
- uint32_t reserved[4]; /* Reserved for future compatibility */
-};
-
-struct fb_cmap {
- uint32_t start; /* First entry */
- uint32_t len; /* Number of entries */
- uint16_t *red; /* Red values */
- uint16_t *green;
- uint16_t *blue;
- uint16_t *transp; /* transparency, can be NULL */
-};
-
-struct fb_con2fbmap {
- uint32_t console;
- uint32_t framebuffer;
-};
-
-/* VESA Blanking Levels */
-#define VESA_NO_BLANKING 0
-#define VESA_VSYNC_SUSPEND 1
-#define VESA_HSYNC_SUSPEND 2
-#define VESA_POWERDOWN 3
-
-
-enum {
- /* screen: unblanked, hsync: on, vsync: on */
- FB_BLANK_UNBLANK = VESA_NO_BLANKING,
-
- /* screen: blanked, hsync: on, vsync: on */
- FB_BLANK_NORMAL = VESA_NO_BLANKING + 1,
-
- /* screen: blanked, hsync: on, vsync: off */
- FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1,
-
- /* screen: blanked, hsync: off, vsync: on */
- FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1,
-
- /* screen: blanked, hsync: off, vsync: off */
- FB_BLANK_POWERDOWN = VESA_POWERDOWN + 1
-};
-
-#define FB_VBLANK_VBLANKING 0x001 /* currently in a vertical blank */
-#define FB_VBLANK_HBLANKING 0x002 /* currently in a horizontal blank */
-#define FB_VBLANK_HAVE_VBLANK 0x004 /* vertical blanks can be detected */
-#define FB_VBLANK_HAVE_HBLANK 0x008 /* horizontal blanks can be detected */
-#define FB_VBLANK_HAVE_COUNT 0x010 /* global retrace counter is available */
-#define FB_VBLANK_HAVE_VCOUNT 0x020 /* the vcount field is valid */
-#define FB_VBLANK_HAVE_HCOUNT 0x040 /* the hcount field is valid */
-#define FB_VBLANK_VSYNCING 0x080 /* currently in a vsync */
-#define FB_VBLANK_HAVE_VSYNC 0x100 /* verical syncs can be detected */
-
-struct fb_vblank {
- uint32_t flags; /* FB_VBLANK flags */
- uint32_t count; /* counter of retraces since boot */
- uint32_t vcount; /* current scanline position */
- uint32_t hcount; /* current scandot position */
- uint32_t reserved[4]; /* reserved for future compatibility */
-};
-
-/* Internal HW accel */
-#define ROP_COPY 0
-#define ROP_XOR 1
-
-struct fb_copyarea {
- uint32_t dx;
- uint32_t dy;
- uint32_t width;
- uint32_t height;
- uint32_t sx;
- uint32_t sy;
-};
-
-struct fb_fillrect {
- uint32_t dx; /* screen-relative */
- uint32_t dy;
- uint32_t width;
- uint32_t height;
- uint32_t color;
- uint32_t rop;
-};
-
-struct fb_image {
- uint32_t dx; /* Where to place image */
- uint32_t dy;
- uint32_t width; /* Size of image */
- uint32_t height;
- uint32_t fg_color; /* Only used when a mono bitmap */
- uint32_t bg_color;
- uint8_t depth; /* Depth of the image */
- const char *data; /* Pointer to image data */
- struct fb_cmap cmap; /* color map info */
-};
-
-/*
- * hardware cursor control
- */
-
-#define FB_CUR_SETIMAGE 0x01
-#define FB_CUR_SETPOS 0x02
-#define FB_CUR_SETHOT 0x04
-#define FB_CUR_SETCMAP 0x08
-#define FB_CUR_SETSHAPE 0x10
-#define FB_CUR_SETSIZE 0x20
-#define FB_CUR_SETALL 0xFF
-
-struct fbcurpos {
- uint16_t x, y;
-};
-
-struct fb_cursor {
- uint16_t set; /* what to set */
- uint16_t enable; /* cursor on/off */
- uint16_t rop; /* bitop operation */
- const char *mask; /* cursor mask bits */
- struct fbcurpos hot; /* cursor hot spot */
- struct fb_image image; /* Cursor image */
-};
-
-/* Settings for the generic backlight code */
-#define FB_BACKLIGHT_LEVELS 128
-#define FB_BACKLIGHT_MAX 0xFF
-
-
-#endif /* _LINUX_FB_H */
diff --git a/lib/mlibc/sysdeps/lyre/include/lyre/sockios.h b/lib/mlibc/sysdeps/lyre/include/lyre/sockios.h
deleted file mode 100644
index 9c5a318..0000000
--- a/lib/mlibc/sysdeps/lyre/include/lyre/sockios.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _LYRE__SOCKIOS_H
-#define _LYRE__SOCKIOS_H
-
-#include <asm/ioctls.h>
-
-#define SIOCINQ FIONREAD
-#define SIOCOUTQ TIOCOUTQ
-
-#define SIOCGIFNAME 0x8910 /* get interface name */
-#define SIOCGIFFLAGS 0x8911 /* get flags */
-#define SIOCSIFFLAGS 0x8912 /* set flags */
-#define SIOCGIFADDR 0x8913 /* get interface ip */
-#define SIOCSIFADDR 0x8914 /* set interface ip */
-#define SIOCGIFNETMASK 0x8915 /* set netmask */
-#define SIOCSIFNETMASK 0x8916 /* get netmask */
-#define SIOCGIFMTU 0x8917 /* get mtu */
-#define SIOCSIFMTU 0x8918 /* set mtu */
-#define SIOCSIFNAME 0x8919 /* set interface name */
-#define SIOCSIFHWADDR 0x891a /* set mac address */
-#define SIOCGIFHWADDR 0x891b /* get mac address */
-#define SIOCGIFINDEX 0x891c /* get interface index */
-#define SIOCGIFGATEWAY 0x891d /* get gateway ip */
-#define SIOCSIFGATEWAY 0x891e /* set gateway ip */
-
-#endif
diff --git a/lib/mlibc/sysdeps/lyre/include/lyre/syscall.h b/lib/mlibc/sysdeps/lyre/include/lyre/syscall.h
deleted file mode 100644
index 531b869..0000000
--- a/lib/mlibc/sysdeps/lyre/include/lyre/syscall.h
+++ /dev/null
@@ -1,113 +0,0 @@
-#ifndef _LYRE__SYSCALL_H
-#define _LYRE__SYSCALL_H
-
-#include <stdint.h>
-
-#define SYS_debug 0
-#define SYS_mmap 1
-#define SYS_openat 2
-#define SYS_close 3
-#define SYS_read 4
-#define SYS_write 5
-#define SYS_seek 6
-#define SYS_set_fs_base 7
-#define SYS_set_gs_base 8
-#define SYS_stat 9
-#define SYS_fcntl 10
-#define SYS_dup3 11
-#define SYS_ioctl 12
-#define SYS_fork 13
-#define SYS_exec 14
-#define SYS_getpid 15
-#define SYS_waitpid 16
-#define SYS_exit 17
-#define SYS_getcwd 18
-#define SYS_chdir 19
-#define SYS_unmmap 20
-#define SYS_pipe 21
-#define SYS_readlinkat 22
-#define SYS_linkat 23
-#define SYS_unlinkat 24
-#define SYS_readdir 25
-#define SYS_uname 26
-#define SYS_futex_wait 27
-#define SYS_futex_wake 28
-#define SYS_mkdirat 29
-#define SYS_fchmodat 30
-#define SYS_sleep 31
-#define SYS_ppoll 32
-#define SYS_umask 33
-#define SYS_mprotect 34
-#define SYS_getclock 35
-#define SYS_socket 36
-#define SYS_bind 37
-#define SYS_connect 38
-#define SYS_listen 39
-#define SYS_accept 40
-#define SYS_getpeername 41
-#define SYS_recvmsg 42
-#define SYS_new_thread 43
-#define SYS_exit_thread 44
-#define SYS_sendmsg 45
-#define SYS_socketpair 46
-#define SYS_getsockopt 47
-#define SYS_setsockopt 48
-#define SYS_getsockname 49
-
-struct __syscall_ret {
- uint64_t ret;
- uint64_t errno;
-};
-
-#define __SYSCALL_EXPAND(...) \
- struct __syscall_ret ret; \
- asm volatile ( \
- "mov %%rsp, %%r10\n\t" \
- "lea 1f(%%rip), %%r11\n\t" \
- "sysenter\n\t" \
- "1:" \
- : "=a"(ret.ret), "=b"(ret.errno) __VA_ARGS__ \
- "r10", "r11", "memory" \
- ); \
- return ret
-
-static inline struct __syscall_ret __syscall5(int number, uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e) {
- register uint64_t r8 asm("%r8") = d;
- register uint64_t r9 asm("%r9") = e;
- __SYSCALL_EXPAND(, "+d"(b), "+c"(c) : "D"(number), "S"(a), "r"(r8), "r"(r9) :);
-}
-
-static inline struct __syscall_ret __syscall4(int number, uint64_t a, uint64_t b, uint64_t c, uint64_t d) {
- register uint64_t r8 asm("%r8") = d;
- __SYSCALL_EXPAND(, "+d"(b), "+c"(c) : "D"(number), "S"(a), "r"(r8) :);
-}
-
-static inline struct __syscall_ret __syscall3(int number, uint64_t a, uint64_t b, uint64_t c) {
- __SYSCALL_EXPAND(, "+d"(b), "+c"(c) : "D"(number), "S"(a) :);
-}
-
-static inline struct __syscall_ret __syscall2(int number, uint64_t a, uint64_t b) {
- __SYSCALL_EXPAND(, "+d"(b) : "D"(number), "S"(a) : "rcx", );
-}
-
-static inline struct __syscall_ret __syscall1(int number, uint64_t a) {
- __SYSCALL_EXPAND( : "D"(number), "S"(a) : "rcx", "rdx", );
-}
-
-static inline struct __syscall_ret __syscall0(int number) {
- __SYSCALL_EXPAND( : "D"(number) : "rcx", "rdx", );
-}
-
-#define __SYSCALL_NARGS_SEQ(_0,_1,_2,_3,_4,_5,_6,_7,N,...) N
-#define __SYSCALL_NARGS(...) __SYSCALL_NARGS_SEQ(__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1, 0)
-
-#define __SYSCALL_CONCAT1(X, Y) X##Y
-#define __SYSCALL_CONCAT(X, Y) __SYSCALL_CONCAT1(X, Y)
-
-#define __syscall(...) ({ \
- struct __syscall_ret (*__SYSCALL_f)(int, ...); \
- __SYSCALL_f = (struct __syscall_ret (*)(int, ...))__SYSCALL_CONCAT(__syscall, __SYSCALL_NARGS(__VA_ARGS__)); \
- __SYSCALL_f(__VA_ARGS__); \
-})
-
-#endif
diff --git a/lib/mlibc/sysdeps/lyre/include/mntent.h b/lib/mlibc/sysdeps/lyre/include/mntent.h
deleted file mode 100644
index bafd289..0000000
--- a/lib/mlibc/sysdeps/lyre/include/mntent.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef _MNTENT_H
-#define _MNTENT_H
-
-#include <stdio.h>
-
-// TODO: Refer to _PATH_MOUNTED
-#define MOUNTED "/etc/mtab"
-
-/* Generic mount options */
-#define MNTOPT_DEFAULTS "defaults" /* Use all default options. */
-#define MNTOPT_RO "ro" /* Read only. */
-#define MNTOPT_RW "rw" /* Read/write. */
-#define MNTOPT_SUID "suid" /* Set uid allowed. */
-#define MNTOPT_NOSUID "nosuid" /* No set uid allowed. */
-#define MNTOPT_NOAUTO "noauto" /* Do not auto mount. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct mntent {
- char *mnt_fsname;
- char *mnt_dir;
- char *mnt_type;
- char *mnt_opts;
- int mnt_freq;
- int mnt_passno;
-};
-
-#ifndef __MLIBC_ABI_ONLY
-
-FILE *setmntent(const char *, const char *);
-
-struct mntent *getmntent(FILE *);
-
-int addmntent(FILE *, const struct mntent *);
-
-int endmntent(FILE *);
-
-char *hasmntopt(const struct mntent *, const char *);
-
-struct mntent *getmntent_r(FILE *, struct mntent *, char *, int);
-
-#endif /* !__MLIBC_ABI_ONLY */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _MNTENT_H
diff --git a/lib/mlibc/sysdeps/lyre/include/sys/mount.h b/lib/mlibc/sysdeps/lyre/include/sys/mount.h
deleted file mode 100644
index b19f3d7..0000000
--- a/lib/mlibc/sysdeps/lyre/include/sys/mount.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef _SYS_MOUNT_H
-#define _SYS_MOUNT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define MS_RDONLY 1
-#define MS_NOSUID 2
-#define MS_NODEV 4
-#define MS_NOEXEC 8
-#define MS_SYNCHRONOUS 16
-#define MS_REMOUNT 32
-#define MS_MANDLOCK 64
-#define MS_DIRSYNC 128
-#define MS_NOSYMFOLLOW 256
-#define MS_NOATIME 1024
-#define MS_NODIRATIME 2048
-#define MS_BIND 4096
-#define MS_MOVE 8192
-#define MS_REC 16384
-#define MS_SILENT 32768
-#define MS_POSIXACL (1 << 16)
-#define MS_UNBINDABLE (1 << 17)
-#define MS_PRIVATE (1 << 18)
-#define MS_SLAVE (1 << 19)
-#define MS_SHARED (1 << 20)
-#define MS_RELATIME (1 << 21)
-#define MS_KERNMOUNT (1 << 22)
-#define MS_I_VERSION (1 << 23)
-#define MS_STRICTATIME (1 << 24)
-#define MS_LAZYTIME (1 << 25)
-#define MS_NOREMOTELOCK (1 << 27)
-#define MS_NOSEC (1 << 28)
-#define MS_BORN (1 << 29)
-#define MS_ACTIVE (1 << 30)
-#define MS_NOUSER (1 << 31)
-
-#define MNT_FORCE 1
-
-#ifndef __MLIBC_ABI_ONLY
-
-int mount(const char *source, const char *target,
- const char *fstype, unsigned long flags, const void *data);
-int umount(const char *target);
-int umount2(const char *target, int flags);
-
-#endif /* !__MLIBC_ABI_ONLY */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _SYS_MOUNT_H
diff --git a/lib/mlibc/sysdeps/lyre/include/sys/reboot.h b/lib/mlibc/sysdeps/lyre/include/sys/reboot.h
deleted file mode 100644
index 6c4e495..0000000
--- a/lib/mlibc/sysdeps/lyre/include/sys/reboot.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef MLIBC_SYS_REBOOT_H
-#define MLIBC_SYS_REBOOT_H
-
-#include <abi-bits/reboot.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef __MLIBC_ABI_ONLY
-
-int reboot(int arg);
-
-#endif /* !__MLIBC_ABI_ONLY */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // MLIBC_SYS_REBOOT_H
diff --git a/lib/mlibc/sysdeps/lyre/include/sys/sysmacros.h b/lib/mlibc/sysdeps/lyre/include/sys/sysmacros.h
deleted file mode 100644
index 2d696e3..0000000
--- a/lib/mlibc/sysdeps/lyre/include/sys/sysmacros.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef _SYS_SYSMACROS_H
-#define _SYS_SYSMACROS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-static unsigned int __mlibc_dev_major(
- unsigned long long int __dev) {
- return ((__dev >> 8) & 0xfff) | ((unsigned int)(__dev >> 32) & ~0xfff);
-}
-
-static unsigned int __mlibc_dev_minor(
- unsigned long long int __dev) {
- return (__dev & 0xff) | ((unsigned int)(__dev >> 12) & ~0xff);
-}
-
-static unsigned long long int __mlibc_dev_makedev(
- unsigned int __major, unsigned int __minor) {
- return ((__minor & 0xff) | ((__major & 0xfff) << 8)
- | (((unsigned long long int)(__minor & ~0xff)) << 12)
- | (((unsigned long long int)(__major & ~0xfff)) << 32));
-}
-
-#define major(dev) __mlibc_dev_major(dev)
-#define minor(dev) __mlibc_dev_minor(dev)
-#define makedev(major, minor) __mlibc_dev_makedev(major, minor)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _SYS_SYSMACROS_H
diff --git a/lib/mlibc/sysdeps/lyre/meson.build b/lib/mlibc/sysdeps/lyre/meson.build
deleted file mode 100644
index 56ed19a..0000000
--- a/lib/mlibc/sysdeps/lyre/meson.build
+++ /dev/null
@@ -1,122 +0,0 @@
-
-rtdl_sources += files(
- 'generic/generic.cpp'
-)
-
-libc_sources += files(
- 'generic/entry.cpp',
- 'generic/generic.cpp',
- 'generic/mntent.cpp',
- 'generic/mount.cpp',
- 'generic/reboot.cpp',
- 'generic/thread.cpp',
- 'generic/thread.S'
-)
-
-if not no_headers
- install_headers(
- 'include/abi-bits/auxv.h',
- 'include/abi-bits/seek-whence.h',
- 'include/abi-bits/vm-flags.h',
- 'include/abi-bits/errno.h',
- 'include/abi-bits/fcntl.h',
- 'include/abi-bits/in.h',
- 'include/abi-bits/reboot.h',
- 'include/abi-bits/resource.h',
- 'include/abi-bits/stat.h',
- 'include/abi-bits/signal.h',
- 'include/abi-bits/socket.h',
- 'include/abi-bits/termios.h',
- 'include/abi-bits/time.h',
- 'include/abi-bits/blkcnt_t.h',
- 'include/abi-bits/blksize_t.h',
- 'include/abi-bits/dev_t.h',
- 'include/abi-bits/gid_t.h',
- 'include/abi-bits/ino_t.h',
- 'include/abi-bits/mode_t.h',
- 'include/abi-bits/nlink_t.h',
- 'include/abi-bits/pid_t.h',
- 'include/abi-bits/uid_t.h',
- 'include/abi-bits/access.h',
- 'include/abi-bits/wait.h',
- 'include/abi-bits/limits.h',
- 'include/abi-bits/utsname.h',
- 'include/abi-bits/ptrace.h',
- 'include/abi-bits/poll.h',
- 'include/abi-bits/epoll.h',
- 'include/abi-bits/packet.h',
- 'include/abi-bits/inotify.h',
- 'include/abi-bits/clockid_t.h',
- 'include/abi-bits/shm.h',
- 'include/abi-bits/mqueue.h',
- 'include/abi-bits/suseconds_t.h',
- 'include/abi-bits/fsfilcnt_t.h',
- 'include/abi-bits/fsblkcnt_t.h',
- 'include/abi-bits/socklen_t.h',
- 'include/abi-bits/statfs.h',
- 'include/abi-bits/statvfs.h',
- 'include/abi-bits/ioctls.h',
- 'include/abi-bits/xattr.h',
- 'include/abi-bits/msg.h',
- subdir: 'abi-bits',
- follow_symlinks: true
- )
-
- install_headers(
- 'include/asm/ioctl.h',
- 'include/asm/ioctls.h',
- subdir: 'asm',
- )
-
- install_headers(
- 'include/linux/fb.h',
- subdir: 'linux',
- )
-
- install_headers(
- 'include/sys/reboot.h',
- 'include/sys/mount.h',
- 'include/sys/sysmacros.h',
- subdir: 'sys',
- )
-
- install_headers(
- 'include/lyre/syscall.h',
- 'include/lyre/sockios.h',
- subdir: 'lyre',
- )
-
- install_headers(
- 'include/mntent.h',
- )
-endif
-
-if not headers_only
- crt = custom_target('crt0',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: host_machine.cpu_family() / 'crt-src/crt0.S',
- output: 'crt0.o',
- install: true,
- install_dir: get_option('libdir')
- )
-
- custom_target('crti',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: host_machine.cpu_family() / 'crt-src/crti.S',
- output: 'crti.o',
- install: true,
- install_dir: get_option('libdir')
- )
-
- custom_target('crtn',
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: host_machine.cpu_family() / 'crt-src/crtn.S',
- output: 'crtn.o',
- install: true,
- install_dir: get_option('libdir')
- )
-endif
-
diff --git a/lib/mlibc/sysdeps/lyre/x86_64/crt-src/crt0.S b/lib/mlibc/sysdeps/lyre/x86_64/crt-src/crt0.S
deleted file mode 100644
index d16a46f..0000000
--- a/lib/mlibc/sysdeps/lyre/x86_64/crt-src/crt0.S
+++ /dev/null
@@ -1,7 +0,0 @@
-.section .text
-.global _start
-_start:
- mov $main, %rdi
- call __mlibc_entry
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/lyre/x86_64/crt-src/crti.S b/lib/mlibc/sysdeps/lyre/x86_64/crt-src/crti.S
deleted file mode 100644
index 911b078..0000000
--- a/lib/mlibc/sysdeps/lyre/x86_64/crt-src/crti.S
+++ /dev/null
@@ -1,11 +0,0 @@
-.section .init
-.global _init
-_init:
- push %rax
-
-.section .fini
-.global _fini
-_fini:
- push %rax
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/lyre/x86_64/crt-src/crtn.S b/lib/mlibc/sysdeps/lyre/x86_64/crt-src/crtn.S
deleted file mode 100644
index 0187e50..0000000
--- a/lib/mlibc/sysdeps/lyre/x86_64/crt-src/crtn.S
+++ /dev/null
@@ -1,9 +0,0 @@
-.section .init
- pop %rax
- ret
-
-.section .fini
- pop %rax
- ret
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/managarm/aarch64/crt-src/Scrt1.S b/lib/mlibc/sysdeps/managarm/aarch64/crt-src/Scrt1.S
deleted file mode 100644
index 3e56608..0000000
--- a/lib/mlibc/sysdeps/managarm/aarch64/crt-src/Scrt1.S
+++ /dev/null
@@ -1,10 +0,0 @@
-.section .text
-.global _start
-_start:
- mov x0, sp
- adr x1, main
-
- bl __mlibc_entry
- brk #0
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/managarm/aarch64/crt-src/crt0.S b/lib/mlibc/sysdeps/managarm/aarch64/crt-src/crt0.S
deleted file mode 100644
index 5e59593..0000000
--- a/lib/mlibc/sysdeps/managarm/aarch64/crt-src/crt0.S
+++ /dev/null
@@ -1,11 +0,0 @@
-
-.section .text
-.global _start
-_start:
- mov x0, sp
- adrp x1, main
- add x1, x1, :lo12:main
- bl __mlibc_entry
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/managarm/aarch64/crt-src/crti.S b/lib/mlibc/sysdeps/managarm/aarch64/crt-src/crti.S
deleted file mode 100644
index 4307dfb..0000000
--- a/lib/mlibc/sysdeps/managarm/aarch64/crt-src/crti.S
+++ /dev/null
@@ -1,15 +0,0 @@
- .ident "aarch64-managarm-mlibc crti"
-
- .section .init
- .global _init
-_init:
- stp x29, x30, [sp, -16]!
- mov x29, sp
-
- .section .fini
- .global _fini
-_fini:
- stp x29, x30, [sp, -16]!
- mov x29, sp
-
- .section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/managarm/aarch64/crt-src/crtn.S b/lib/mlibc/sysdeps/managarm/aarch64/crt-src/crtn.S
deleted file mode 100644
index 005d870..0000000
--- a/lib/mlibc/sysdeps/managarm/aarch64/crt-src/crtn.S
+++ /dev/null
@@ -1,11 +0,0 @@
- .ident "aarch64-managarm-mlibc crtn"
-
- .section .init
- ldp x29, x30, [sp], #16
- ret
-
- .section .fini
- ldp x29, x30, [sp], #16
- ret
-
- .section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/managarm/aarch64/signals.S b/lib/mlibc/sysdeps/managarm/aarch64/signals.S
deleted file mode 100644
index 044767d..0000000
--- a/lib/mlibc/sysdeps/managarm/aarch64/signals.S
+++ /dev/null
@@ -1,10 +0,0 @@
-
-.section .text
-.global __mlibc_signal_restore
-__mlibc_signal_restore:
- ldr x0, =0x80000006
- svc 0
- brk #1
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/managarm/aarch64/thread.cpp b/lib/mlibc/sysdeps/managarm/aarch64/thread.cpp
deleted file mode 100644
index 88f1bf3..0000000
--- a/lib/mlibc/sysdeps/managarm/aarch64/thread.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <mlibc/thread-entry.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/tcb.hpp>
-#include <bits/ensure.h>
-#include <sys/mman.h>
-#include <errno.h>
-#include <stdint.h>
-#include <stddef.h>
-
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg, Tcb *tcb) {
- // Wait until our parent sets up the TID.
- while(!__atomic_load_n(&tcb->tid, __ATOMIC_RELAXED))
- mlibc::sys_futex_wait(&tcb->tid, 0, nullptr);
-
- if(mlibc::sys_tcb_set(tcb))
- __ensure(!"sys_tcb_set() failed");
-
- tcb->invokeThreadFunc(entry, user_arg);
-
- auto self = reinterpret_cast<Tcb *>(tcb);
-
- __atomic_store_n(&self->didExit, 1, __ATOMIC_RELEASE);
- mlibc::sys_futex_wake(&self->didExit);
-
- mlibc::sys_thread_exit();
-}
-
-namespace mlibc {
-
-static constexpr size_t default_stacksize = 0x200000;
-
-int sys_prepare_stack(void **stack, void *entry, void *user_arg, void *tcb, size_t *stack_size, size_t *guard_size, void **stack_base) {
- if (!*stack_size)
- *stack_size = default_stacksize;
- *guard_size = 0;
-
- if (*stack) {
- *stack_base = *stack;
- } else {
- *stack_base = mmap(nullptr, *stack_size, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- if(*stack_base == MAP_FAILED) {
- return errno;
- }
- }
-
- uintptr_t *sp = reinterpret_cast<uintptr_t *>(reinterpret_cast<uintptr_t>(*stack_base) + *stack_size);
-
- *--sp = reinterpret_cast<uintptr_t>(tcb);
- *--sp = reinterpret_cast<uintptr_t>(user_arg);
- *--sp = reinterpret_cast<uintptr_t>(entry);
- *stack = reinterpret_cast<void*>(sp);
- return 0;
-}
-
-} //namespace mlibc
diff --git a/lib/mlibc/sysdeps/managarm/aarch64/thread_entry.S b/lib/mlibc/sysdeps/managarm/aarch64/thread_entry.S
deleted file mode 100644
index 4cfcb4c..0000000
--- a/lib/mlibc/sysdeps/managarm/aarch64/thread_entry.S
+++ /dev/null
@@ -1,11 +0,0 @@
-
-.section .text
-.global __mlibc_start_thread
-__mlibc_start_thread:
- ldp x0, x1, [sp]
- ldr x2, [sp, #16]
- add sp, sp, #24
- bl __mlibc_enter_thread
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/managarm/generic/drm.cpp b/lib/mlibc/sysdeps/managarm/generic/drm.cpp
deleted file mode 100644
index 805c366..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/drm.cpp
+++ /dev/null
@@ -1,1176 +0,0 @@
-#include <drm/drm_fourcc.h>
-#include <drm/drm.h>
-
-#include <bits/ensure.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/allocator.hpp>
-#include <mlibc/debug.hpp>
-#include <mlibc/posix-pipe.hpp>
-
-#include <fs.frigg_bragi.hpp>
-
-namespace mlibc {
-
-int ioctl_drm(int fd, unsigned long request, void *arg, int *result, HelHandle handle) {
- managarm::fs::IoctlRequest<MemoryAllocator> ioctl_req(getSysdepsAllocator());
-
- switch(request) {
- case DRM_IOCTL_VERSION: {
- auto param = reinterpret_cast<drm_version*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->version_major = resp.drm_version_major();
- param->version_minor = resp.drm_version_minor();
- param->version_patchlevel = resp.drm_version_patchlevel();
-
- if(param->name)
- memcpy(param->name, resp.drm_driver_name().data(), frg::min(param->name_len,
- resp.drm_driver_name().size()));
- if(param->date)
- memcpy(param->date, resp.drm_driver_date().data(), frg::min(param->date_len,
- resp.drm_driver_date().size()));
- if(param->desc)
- memcpy(param->desc, resp.drm_driver_desc().data(), frg::min(param->desc_len,
- resp.drm_driver_desc().size()));
-
- param->name_len = resp.drm_driver_name().size();
- param->date_len = resp.drm_driver_date().size();
- param->desc_len = resp.drm_driver_desc().size();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_GET_CAP: {
- auto param = reinterpret_cast<drm_get_cap*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_capability(param->capability);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->value = resp.drm_value();
- *result = resp.result();
- return 0;
- }
- }
- case DRM_IOCTL_SET_CLIENT_CAP: {
- auto param = reinterpret_cast<drm_set_client_cap *>(arg);
- mlibc::infoLogger() << "\e[35mmlibc: DRM_IOCTL_SET_CLIENT_CAP(" << param->capability << ") ignores its value\e[39m" << frg::endlog;
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_capability(param->capability);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->value = resp.drm_value();
- *result = resp.result();
- return 0;
- }
- }
- case DRM_IOCTL_GET_MAGIC: {
- auto param = reinterpret_cast<drm_auth *>(arg);
- mlibc::infoLogger() << "\e[31mmlibc: DRM_IOCTL_GET_MAGIC is not implemented correctly\e[39m"
- << frg::endlog;
- param->magic = 1;
- *result = 0;
- return 0;
- }
- case DRM_IOCTL_AUTH_MAGIC: {
- mlibc::infoLogger() << "\e[31mmlibc: DRM_IOCTL_AUTH_MAGIC is not implemented correctly\e[39m"
- << frg::endlog;
- *result = 0;
- return 0;
- }
- case DRM_IOCTL_SET_MASTER: {
- mlibc::infoLogger() << "\e[31mmlibc: DRM_IOCTL_SET_MASTER is not implemented correctly\e[39m"
- << frg::endlog;
- *result = 0;
- return 0;
- }
- case DRM_IOCTL_DROP_MASTER: {
- mlibc::infoLogger() << "\e[31mmlibc: DRM_IOCTL_DROP_MASTER is not implemented correctly\e[39m"
- << frg::endlog;
- *result = 0;
- return 0;
- }
- case DRM_IOCTL_MODE_GETRESOURCES: {
- auto param = reinterpret_cast<drm_mode_card_res *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- if(recv_resp.error() == kHelErrDismissed) {
- return EINVAL;
- }
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- for(size_t i = 0; i < resp.drm_fb_ids_size(); i++) {
- if(i >= param->count_fbs)
- break;
- auto dest = reinterpret_cast<uint32_t *>(param->fb_id_ptr);
- dest[i] = resp.drm_fb_ids(i);
- }
- param->count_fbs = resp.drm_fb_ids_size();
-
- for(size_t i = 0; i < resp.drm_crtc_ids_size(); i++) {
- if(i >= param->count_crtcs)
- break;
- auto dest = reinterpret_cast<uint32_t *>(param->crtc_id_ptr);
- dest[i] = resp.drm_crtc_ids(i);
- }
- param->count_crtcs = resp.drm_crtc_ids_size();
-
- for(size_t i = 0; i < resp.drm_connector_ids_size(); i++) {
- if(i >= param->count_connectors)
- break;
- auto dest = reinterpret_cast<uint32_t *>(param->connector_id_ptr);
- dest[i] = resp.drm_connector_ids(i);
- }
- param->count_connectors = resp.drm_connector_ids_size();
-
- for(size_t i = 0; i < resp.drm_encoder_ids_size(); i++) {
- if(i >= param->count_encoders)
- continue;
- auto dest = reinterpret_cast<uint32_t *>(param->encoder_id_ptr);
- dest[i] = resp.drm_encoder_ids(i);
- }
- param->count_encoders = resp.drm_encoder_ids_size();
-
- param->min_width = resp.drm_min_width();
- param->max_width = resp.drm_max_width();
- param->min_height = resp.drm_min_height();
- param->max_height = resp.drm_max_height();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_GETCONNECTOR: {
- auto param = reinterpret_cast<drm_mode_get_connector*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_connector_id(param->connector_id);
- req.set_drm_max_modes(param->count_modes);
-
- auto [offer, send_ioctl_req, send_req, recv_resp, recv_list] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(reinterpret_cast<void *>(param->modes_ptr), param->count_modes * sizeof(drm_mode_modeinfo))
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- if(recv_resp.error() == kHelErrDismissed)
- return EINVAL;
-
- HEL_CHECK(recv_resp.error());
- HEL_CHECK(recv_list.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- for(size_t i = 0; i < resp.drm_encoders_size(); i++) {
- if(i >= param->count_encoders)
- continue;
- auto dest = reinterpret_cast<uint32_t *>(param->encoders_ptr);
- dest[i] = resp.drm_encoders(i);
- }
-
- param->encoder_id = resp.drm_encoder_id();
- param->connector_type = resp.drm_connector_type();
- param->connector_type_id = resp.drm_connector_type_id();
- param->connection = resp.drm_connection();
- param->mm_width = resp.drm_mm_width();
- param->mm_height = resp.drm_mm_height();
- param->subpixel = resp.drm_subpixel();
- param->pad = 0;
- param->count_encoders = resp.drm_encoders_size();
- param->count_modes = resp.drm_num_modes();
-
- if(param->props_ptr) {
- auto id_ptr = reinterpret_cast<uint32_t *>(param->props_ptr);
- auto val_ptr = reinterpret_cast<uint64_t *>(param->prop_values_ptr);
-
- for(size_t i = 0; i < frg::min(static_cast<size_t>(param->count_props), resp.drm_obj_property_ids_size()); i++) {
- id_ptr[i] = resp.drm_obj_property_ids(i);
- val_ptr[i] = resp.drm_obj_property_values(i);
- }
- }
-
- param->count_props = resp.drm_obj_property_ids_size();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_GETPROPERTY: {
- auto param = reinterpret_cast<drm_mode_get_property*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_property_id(param->prop_id);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() != managarm::fs::Errors::SUCCESS) {
- mlibc::infoLogger() << "\e[31mmlibc: DRM_IOCTL_MODE_GETPROPERTY(" << param->prop_id << ") error " << (int) resp.error() << "\e[39m"
- << frg::endlog;
- *result = 0;
- return EINVAL;
- }
-
- memcpy(param->name, resp.drm_property_name().data(), resp.drm_property_name().size());
- param->count_values = resp.drm_property_vals_size();
- param->flags = resp.drm_property_flags();
-
- for(size_t i = 0; i < param->count_values && i < resp.drm_property_vals_size() && param->values_ptr; i++) {
- auto dest = reinterpret_cast<uint64_t *>(param->values_ptr);
- dest[i] = resp.drm_property_vals(i);
- }
-
- __ensure(resp.drm_enum_name_size() == resp.drm_enum_value_size());
-
- for(size_t i = 0; i < param->count_enum_blobs && i < resp.drm_enum_name_size() && i < resp.drm_enum_value_size(); i++) {
- auto dest = reinterpret_cast<drm_mode_property_enum *>(param->enum_blob_ptr);
- dest[i].value = resp.drm_enum_value(i);
- strncpy(dest[i].name, resp.drm_enum_name(i).data(), DRM_PROP_NAME_LEN);
- }
-
- param->count_enum_blobs = resp.drm_enum_name_size();
-
- *result = 0;
- return 0;
- }
- case DRM_IOCTL_MODE_SETPROPERTY: {
- auto param = reinterpret_cast<drm_mode_connector_set_property *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_property_id(param->prop_id);
- req.set_drm_property_value(param->value);
- req.set_drm_obj_id(param->connector_id);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() != managarm::fs::Errors::SUCCESS) {
- mlibc::infoLogger() << "\e[31mmlibc: DRM_IOCTL_MODE_SETPROPERTY(" << param->prop_id << ") error " << (int) resp.error() << "\e[39m"
- << frg::endlog;
- *result = 0;
- return EINVAL;
- }
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_GETPROPBLOB: {
- auto param = reinterpret_cast<drm_mode_get_blob *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_blob_id(param->blob_id);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() != managarm::fs::Errors::SUCCESS) {
- mlibc::infoLogger() << "\e[31mmlibc: DRM_IOCTL_MODE_GETPROPBLOB(" << param->blob_id << ") error " << (int) resp.error() << "\e[39m"
- << frg::endlog;
- *result = 0;
- return EINVAL;
- }
-
- uint8_t *dest = reinterpret_cast<uint8_t *>(param->data);
- for(size_t i = 0; i < resp.drm_property_blob_size(); i++) {
- if(i >= param->length) {
- continue;
- }
-
- dest[i] = resp.drm_property_blob(i);
- }
-
- param->length = resp.drm_property_blob_size();
-
- *result = 0;
- return 0;
- }
- case DRM_IOCTL_MODE_GETPLANE: {
- auto param = reinterpret_cast<drm_mode_get_plane*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_plane_id(param->plane_id);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->crtc_id = resp.drm_crtc_id();
- param->fb_id = resp.drm_fb_id();
- param->possible_crtcs = resp.drm_possible_crtcs();
- param->gamma_size = resp.drm_gamma_size();
-
- // FIXME: this should be passed as a buffer with helix, but this has no bounded max size?
- for(size_t i = 0; i < resp.drm_format_type_size(); i++) {
- if(i >= param->count_format_types) {
- break;
- }
- auto dest = reinterpret_cast<uint32_t *>(param->format_type_ptr);
- dest[i] = resp.drm_format_type(i);
- }
-
- param->count_format_types = resp.drm_format_type_size();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_GETPLANERESOURCES: {
- auto param = reinterpret_cast<drm_mode_get_plane_res *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBuffer(ser.data(), ser.size()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- // FIXME: send this via a helix_ng buffer
- for(size_t i = 0; i < resp.drm_plane_res_size(); i++) {
- if(i >= param->count_planes) {
- continue;
- }
- auto dest = reinterpret_cast<uint32_t *>(param->plane_id_ptr);
- dest[i] = resp.drm_plane_res(i);
- }
-
- param->count_planes = resp.drm_plane_res_size();
-
- *result = resp.result();
-
- return 0;
- }
- case DRM_IOCTL_MODE_GETENCODER: {
- auto param = reinterpret_cast<drm_mode_get_encoder*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_encoder_id(param->encoder_id);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->encoder_type = resp.drm_encoder_type();
- param->crtc_id = resp.drm_crtc_id();
- param->possible_crtcs = resp.drm_possible_crtcs();
- param->possible_clones = resp.drm_possible_clones();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_CREATE_DUMB: {
- auto param = reinterpret_cast<drm_mode_create_dumb*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- req.set_drm_width(param->width);
- req.set_drm_height(param->height);
- req.set_drm_bpp(param->bpp);
- req.set_drm_flags(param->flags);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->handle = resp.drm_handle();
- param->pitch = resp.drm_pitch();
- param->size = resp.drm_size();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_ADDFB: {
- auto param = reinterpret_cast<drm_mode_fb_cmd *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- req.set_drm_width(param->width);
- req.set_drm_height(param->height);
- req.set_drm_pitch(param->pitch);
- req.set_drm_bpp(param->bpp);
- req.set_drm_depth(param->depth);
- req.set_drm_handle(param->handle);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->fb_id = resp.drm_fb_id();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_GETFB2: {
- auto param = reinterpret_cast<drm_mode_fb_cmd2 *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(DRM_IOCTL_MODE_GETFB2);
- req.set_drm_fb_id(param->fb_id);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->width = resp.drm_width();
- param->height = resp.drm_height();
- param->pixel_format = resp.pixel_format();
- param->modifier[0] = resp.modifier();
- memcpy(param->handles, resp.drm_handles().data(), sizeof(uint32_t) * resp.drm_handles_size());
- memcpy(param->pitches, resp.drm_pitches().data(), sizeof(uint32_t) * resp.drm_pitches_size());
- memcpy(param->offsets, resp.drm_offsets().data(), sizeof(uint32_t) * resp.drm_offsets_size());
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_ADDFB2: {
- auto param = reinterpret_cast<drm_mode_fb_cmd2 *>(arg);
-
- __ensure(!param->flags || param->flags == DRM_MODE_FB_MODIFIERS);
- __ensure(!param->modifier[0] || param->modifier[0] == DRM_FORMAT_MOD_INVALID);
- __ensure(!param->offsets[0]);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(DRM_IOCTL_MODE_ADDFB2);
-
- req.set_drm_width(param->width);
- req.set_drm_height(param->height);
- req.set_drm_pitch(param->pitches[0]);
- req.set_drm_fourcc(param->pixel_format);
- req.set_drm_handle(param->handles[0]);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->fb_id = resp.drm_fb_id();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_RMFB: {
- auto param = reinterpret_cast<int *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- req.set_drm_fb_id(*param);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_MAP_DUMB: {
- auto param = reinterpret_cast<drm_mode_map_dumb*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- req.set_drm_handle(param->handle);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->offset = resp.drm_offset();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_GETCRTC: {
- auto param = reinterpret_cast<drm_mode_crtc*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_crtc_id(param->crtc_id);
-
- auto [offer, send_ioctl_req, send_req, recv_resp, recv_data] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(&param->mode, sizeof(drm_mode_modeinfo)))
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
- HEL_CHECK(recv_data.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->fb_id = resp.drm_fb_id();
- param->x = resp.drm_x();
- param->y = resp.drm_y();
- param->gamma_size = resp.drm_gamma_size();
- param->mode_valid = resp.drm_mode_valid();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_SETCRTC: {
- auto param = reinterpret_cast<drm_mode_crtc*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- for(size_t i = 0; i < param->count_connectors; i++) {
- auto dest = reinterpret_cast<uint32_t *>(param->set_connectors_ptr);
- req.add_drm_connector_ids(dest[i]);
- }
- req.set_drm_x(param->x);
- req.set_drm_y(param->y);
- req.set_drm_crtc_id(param->crtc_id);
- req.set_drm_fb_id(param->fb_id);
- req.set_drm_mode_valid(param->mode_valid);
-
- auto [offer, send_ioctl_req, send_req, send_mode, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::sendBuffer(&param->mode, sizeof(drm_mode_modeinfo)),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(send_mode.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_OBJ_GETPROPERTIES: {
- auto param = reinterpret_cast<drm_mode_obj_get_properties *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- req.set_drm_count_props(param->count_props);
- req.set_drm_obj_id(param->obj_id);
- req.set_drm_obj_type(param->obj_type);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- auto props = reinterpret_cast<uint32_t *>(param->props_ptr);
- auto prop_vals = reinterpret_cast<uint64_t *>(param->prop_values_ptr);
-
- for(size_t i = 0; i < resp.drm_obj_property_ids_size(); i++) {
- if(i >= param->count_props) {
- break;
- }
- props[i] = resp.drm_obj_property_ids(i);
- prop_vals[i] = resp.drm_obj_property_values(i);
- }
-
- param->count_props = resp.drm_obj_property_ids_size();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_PAGE_FLIP: {
- auto param = reinterpret_cast<drm_mode_crtc_page_flip *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- __ensure(!(param->flags & ~DRM_MODE_PAGE_FLIP_EVENT));
- req.set_drm_crtc_id(param->crtc_id);
- req.set_drm_fb_id(param->fb_id);
- req.set_drm_cookie(param->user_data);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_DIRTYFB: {
- auto param = reinterpret_cast<drm_mode_fb_dirty_cmd*>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- req.set_drm_fb_id(param->fb_id);
- req.set_drm_flags(param->flags);
- req.set_drm_color(param->color);
- for(size_t i = 0; i < param->num_clips; i++) {
- auto dest = reinterpret_cast<drm_clip_rect *>(param->clips_ptr);
- managarm::fs::Rect<MemoryAllocator> clip(getSysdepsAllocator());
- clip.set_x1(dest->x1);
- clip.set_y1(dest->y1);
- clip.set_x2(dest->x2);
- clip.set_y2(dest->y2);
- req.add_drm_clips(std::move(clip));
- }
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = resp.result();
- return 0;
- }
- }
- case DRM_IOCTL_MODE_CURSOR: {
- auto param = reinterpret_cast<drm_mode_cursor *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- req.set_drm_flags(param->flags);
- req.set_drm_crtc_id(param->crtc_id);
-
- if (param->flags == DRM_MODE_CURSOR_MOVE) {
- req.set_drm_x(param->x);
- req.set_drm_y(param->y);
- } else if (param->flags == DRM_MODE_CURSOR_BO) {
- req.set_drm_width(param->width);
- req.set_drm_height(param->height);
- req.set_drm_handle(param->handle);
- } else {
- mlibc::infoLogger() << "\e[35mmlibc: invalid flags in DRM_IOCTL_MODE_CURSOR\e[39m" << frg::endlog;
- return EINVAL;
- }
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if (resp.error() == managarm::fs::Errors::NO_BACKING_DEVICE) {
- return ENXIO;
- }else if (resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }else{
- *result = resp.result();
- return 0;
- }
- }
- case DRM_IOCTL_MODE_DESTROY_DUMB: {
- auto param = reinterpret_cast<drm_mode_destroy_dumb *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- req.set_drm_handle(param->handle);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_CREATEPROPBLOB: {
- auto param = reinterpret_cast<drm_mode_create_blob *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_blob_size(param->length);
-
- auto [offer, send_ioctl_req, send_req, blob_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::sendBuffer(reinterpret_cast<void *>(param->data), param->length),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(blob_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->blob_id = resp.drm_blob_id();
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_DESTROYPROPBLOB: {
- auto param = reinterpret_cast<drm_mode_destroy_blob *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_blob_id(param->blob_id);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_ATOMIC: {
- auto param = reinterpret_cast<drm_mode_atomic *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_flags(param->flags);
- req.set_drm_cookie(param->user_data);
-
- size_t prop_count = 0;
- auto objs_ptr = reinterpret_cast<uint32_t *>(param->objs_ptr);
- auto count_props_ptr = reinterpret_cast<uint32_t *>(param->count_props_ptr);
- auto props_ptr = reinterpret_cast<uint32_t *>(param->props_ptr);
- auto prop_values_ptr = reinterpret_cast<uint64_t *>(param->prop_values_ptr);
-
- for(size_t i = 0; i < param->count_objs; i++) {
- /* list of modeobjs and their property count */
- req.add_drm_obj_ids(objs_ptr[i]);
- req.add_drm_prop_counts(count_props_ptr[i]);
- prop_count += count_props_ptr[i];
- }
-
- for(size_t i = 0; i < prop_count; i++) {
- /* array of property IDs */
- req.add_drm_props(props_ptr[i]);
- /* array of property values */
- req.add_drm_prop_values(prop_values_ptr[i]);
- }
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_MODE_LIST_LESSEES: {
- mlibc::infoLogger() << "\e[35mmlibc: DRM_IOCTL_MODE_LIST_LESSEES"
- " is not implemented correctly\e[39m" << frg::endlog;
- return EINVAL;
- }
- case DRM_IOCTL_MODE_SETGAMMA: {
- mlibc::infoLogger() << "\e[35mmlibc: DRM_IOCTL_MODE_SETGAMMA"
- " is not implemented correctly\e[39m" << frg::endlog;
- return 0;
- }
- case DRM_IOCTL_MODE_CREATE_LEASE: {
- auto param = reinterpret_cast<drm_mode_create_lease *>(arg);
-
- mlibc::infoLogger() << "\e[35mmlibc: DRM_IOCTL_MODE_CREATE_LEASE"
- " is a noop\e[39m" << frg::endlog;
- param->lessee_id = 1;
- param->fd = fd;
- *result = 0;
- return 0;
- }
- case DRM_IOCTL_GEM_CLOSE: {
- mlibc::infoLogger() << "\e[35mmlibc: DRM_IOCTL_GEM_CLOSE"
- " is a noop\e[39m" << frg::endlog;
- return 0;
- }
- case DRM_IOCTL_PRIME_HANDLE_TO_FD: {
- auto param = reinterpret_cast<drm_prime_handle *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_prime_handle(param->handle);
- req.set_drm_flags(param->flags);
-
- auto [offer, send_ioctl_req, send_req, send_creds, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::imbueCredentials(),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(send_creds.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->fd = resp.drm_prime_fd();
- *result = resp.result();
- return 0;
- }
- case DRM_IOCTL_PRIME_FD_TO_HANDLE: {
- auto param = reinterpret_cast<drm_prime_handle *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_drm_flags(param->flags);
-
- auto [offer, send_ioctl_req, send_req, send_creds, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::imbueCredentials(getHandleForFd(param->fd)),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(send_creds.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::FILE_NOT_FOUND) {
- return EBADF;
- } else {
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- }
-
- param->handle = resp.drm_prime_handle();
- *result = resp.result();
- return 0;
- }
- }
-
- mlibc::infoLogger() << "mlibc: Unexpected DRM ioctl with"
- << ", number: 0x" << frg::hex_fmt(_IOC_NR(request))
- << " (raw request: " << frg::hex_fmt(request) << ")" << frg::endlog;
- __ensure(!"Illegal ioctl request");
- __builtin_unreachable();
-}
-
-} //namespace mlibc
diff --git a/lib/mlibc/sysdeps/managarm/generic/ensure.cpp b/lib/mlibc/sysdeps/managarm/generic/ensure.cpp
deleted file mode 100644
index ab0d84f..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/ensure.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-
-#include <stdint.h>
-#include <string.h>
-#include <assert.h>
-
-#include <bits/ensure.h>
-#include <mlibc/debug.hpp>
-#include <mlibc/all-sysdeps.hpp>
-
-#include <hel.h>
-#include <hel-syscalls.h>
-
-void __frigg_assert_fail(const char *assertion, const char *file, unsigned int line,
- const char *function) {
- mlibc::panicLogger() << "In function " << function
- << ", file " << file << ":" << line << "\n"
- << "__ensure(" << assertion << ") failed" << frg::endlog;
-}
-
-namespace mlibc {
- void sys_libc_log(const char *message) {
- // This implementation is inherently signal-safe.
- size_t n = 0;
- while(message[n])
- n++;
- HEL_CHECK(helLog(message, n));
- }
-
- void sys_libc_panic() {
- // This implementation is inherently signal-safe.
- const char *message = "mlibc: Panic!";
- size_t n = 0;
- while(message[n])
- n++;
- helPanic(message, n);
- }
-}
-
diff --git a/lib/mlibc/sysdeps/managarm/generic/entry.cpp b/lib/mlibc/sysdeps/managarm/generic/entry.cpp
deleted file mode 100644
index 3ff28d2..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/entry.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-#include <pthread.h>
-#include <stdlib.h>
-#include <sys/auxv.h>
-
-#include <frg/eternal.hpp>
-
-#include <bits/ensure.h>
-#include <mlibc/allocator.hpp>
-#include <mlibc/debug.hpp>
-#include <mlibc/posix-pipe.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/elf/startup.h>
-
-#include <protocols/posix/data.hpp>
-#include <protocols/posix/supercalls.hpp>
-
-// defined by the POSIX library
-void __mlibc_initLocale();
-
-extern "C" uintptr_t *__dlapi_entrystack();
-extern "C" void __dlapi_enter(uintptr_t *);
-
-// declared in posix-pipe.hpp
-thread_local Queue globalQueue;
-
-// TODO: clock tracker page and file table don't need to be thread-local!
-thread_local HelHandle __mlibc_posix_lane;
-thread_local void *__mlibc_clk_tracker_page;
-
-namespace {
- thread_local unsigned __mlibc_gsf_nesting;
- thread_local void *__mlibc_cached_thread_page;
- thread_local HelHandle *cachedFileTable;
-
- // This construction is a bit weird: Even though the variables above
- // are thread_local we still protect their initialization with a pthread_once_t
- // (instead of using a C++ constructor).
- // We do this in order to able to clear the pthread_once_t after a fork.
- thread_local pthread_once_t has_cached_infos = PTHREAD_ONCE_INIT;
-
- void actuallyCacheInfos() {
- posix::ManagarmProcessData data;
- HEL_CHECK(helSyscall1(kHelCallSuper + posix::superGetProcessData, reinterpret_cast<HelWord>(&data)));
-
- __mlibc_posix_lane = data.posixLane;
- __mlibc_cached_thread_page = data.threadPage;
- cachedFileTable = data.fileTable;
- __mlibc_clk_tracker_page = data.clockTrackerPage;
- }
-}
-
-SignalGuard::SignalGuard() {
- pthread_once(&has_cached_infos, &actuallyCacheInfos);
- if(!__mlibc_cached_thread_page)
- return;
- auto p = reinterpret_cast<unsigned int *>(__mlibc_cached_thread_page);
- if(!__mlibc_gsf_nesting)
- __atomic_store_n(p, 1, __ATOMIC_RELAXED);
- __mlibc_gsf_nesting++;
-}
-
-SignalGuard::~SignalGuard() {
- pthread_once(&has_cached_infos, &actuallyCacheInfos);
- if(!__mlibc_cached_thread_page)
- return;
- auto p = reinterpret_cast<unsigned int *>(__mlibc_cached_thread_page);
- __ensure(__mlibc_gsf_nesting > 0);
- __mlibc_gsf_nesting--;
- if(!__mlibc_gsf_nesting) {
- unsigned int result = __atomic_exchange_n(p, 0, __ATOMIC_RELAXED);
- if(result == 2) {
- HEL_CHECK(helSyscall0(kHelCallSuper + posix::superSigRaise));
- }else{
- __ensure(result == 1);
- }
- }
-}
-
-MemoryAllocator &getSysdepsAllocator() {
- // use frg::eternal to prevent a call to __cxa_atexit().
- // this is necessary because __cxa_atexit() call this function.
- static frg::eternal<VirtualAllocator> virtualAllocator;
- static frg::eternal<MemoryPool> heap{virtualAllocator.get()};
- static frg::eternal<MemoryAllocator> singleton{&heap.get()};
- return singleton.get();
-}
-
-HelHandle getPosixLane() {
- cacheFileTable();
- return __mlibc_posix_lane;
-}
-
-HelHandle *cacheFileTable() {
- // TODO: Make sure that this is signal-safe (it is called e.g. by sys_clock_get()).
- pthread_once(&has_cached_infos, &actuallyCacheInfos);
- return cachedFileTable;
-}
-
-HelHandle getHandleForFd(int fd) {
- if (fd >= 512)
- return 0;
-
- return cacheFileTable()[fd];
-}
-
-void clearCachedInfos() {
- has_cached_infos = PTHREAD_ONCE_INIT;
-}
-
-struct LibraryGuard {
- LibraryGuard();
-};
-
-static LibraryGuard guard;
-
-extern char **environ;
-static mlibc::exec_stack_data __mlibc_stack_data;
-
-LibraryGuard::LibraryGuard() {
- __mlibc_initLocale();
-
- // Parse the exec() stack.
- mlibc::parse_exec_stack(__dlapi_entrystack(), &__mlibc_stack_data);
- mlibc::set_startup_data(__mlibc_stack_data.argc, __mlibc_stack_data.argv,
- __mlibc_stack_data.envp);
-}
-
-extern "C" void __mlibc_entry(uintptr_t *entry_stack, int (*main_fn)(int argc, char *argv[], char *env[])) {
- __dlapi_enter(entry_stack);
- auto result = main_fn(__mlibc_stack_data.argc, __mlibc_stack_data.argv, environ);
- exit(result);
-}
diff --git a/lib/mlibc/sysdeps/managarm/generic/file.cpp b/lib/mlibc/sysdeps/managarm/generic/file.cpp
deleted file mode 100644
index 1f5cba6..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/file.cpp
+++ /dev/null
@@ -1,2526 +0,0 @@
-#include <asm/ioctls.h>
-#include <dirent.h>
-#include <errno.h>
-#include <stdio.h>
-#include <sys/eventfd.h>
-#include <sys/inotify.h>
-#include <sys/signalfd.h>
-#include <unistd.h>
-
-#include <bits/ensure.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/allocator.hpp>
-#include <mlibc/posix-pipe.hpp>
-
-#include <fs.frigg_bragi.hpp>
-#include <posix.frigg_bragi.hpp>
-
-HelHandle __mlibc_getPassthrough(int fd) {
- auto handle = getHandleForFd(fd);
- __ensure(handle);
- return handle;
-}
-
-namespace mlibc {
-
-int sys_chdir(const char *path) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::CHDIR);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_fchdir(int fd) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::FCHDIR);
- req.set_fd(fd);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
-}
-
-int sys_chroot(const char *path) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::CHROOT);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
-}
-
-int sys_mkdir(const char *path, mode_t mode) {
- return sys_mkdirat(AT_FDCWD, path, mode);
-}
-
-int sys_mkdirat(int dirfd, const char *path, mode_t mode) {
- (void)mode;
- SignalGuard sguard;
-
- managarm::posix::MkdirAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(dirfd);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::ALREADY_EXISTS) {
- return EEXIST;
- } else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else if(resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- }else if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::NOT_A_DIRECTORY) {
- return ENOTDIR;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_symlink(const char *target_path, const char *link_path) {
- return sys_symlinkat(target_path, AT_FDCWD, link_path);
-}
-
-int sys_symlinkat(const char *target_path, int dirfd, const char *link_path) {
- SignalGuard sguard;
-
- managarm::posix::SymlinkAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(dirfd);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), link_path));
- req.set_target_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), target_path));
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else if(resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- }else if(resp.error() == managarm::posix::Errors::NOT_A_DIRECTORY) {
- return ENOTDIR;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_link(const char *old_path, const char *new_path) {
- return sys_linkat(AT_FDCWD, old_path, AT_FDCWD, new_path, 0);
-}
-
-int sys_linkat(int olddirfd, const char *old_path, int newdirfd, const char *new_path, int flags) {
- SignalGuard sguard;
-
- managarm::posix::LinkAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), old_path));
- req.set_target_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), new_path));
- req.set_fd(olddirfd);
- req.set_newfd(newdirfd);
- req.set_flags(flags);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else if(resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_rename(const char *path, const char *new_path) {
- return sys_renameat(AT_FDCWD, path, AT_FDCWD, new_path);
-}
-
-int sys_renameat(int olddirfd, const char *old_path, int newdirfd, const char *new_path) {
- SignalGuard sguard;
-
- managarm::posix::RenameAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), old_path));
- req.set_target_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), new_path));
- req.set_fd(olddirfd);
- req.set_newfd(newdirfd);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-} //namespace mlibc
-
-namespace mlibc {
-
-int sys_fcntl(int fd, int request, va_list args, int *result) {
- SignalGuard sguard;
- if(request == F_DUPFD) {
- int newfd;
- if(int e = sys_dup(fd, 0, &newfd); e)
- return e;
- *result = newfd;
- return 0;
- }else if(request == F_DUPFD_CLOEXEC) {
- int newfd;
- if(int e = sys_dup(fd, O_CLOEXEC, &newfd); e)
- return e;
- *result = newfd;
- return 0;
- }else if(request == F_GETFD) {
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::FD_GET_FLAGS);
- req.set_fd(fd);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::NO_SUCH_FD)
- return EBADF;
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *result = resp.flags();
- return 0;
- }else if(request == F_SETFD) {
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::FD_SET_FLAGS);
- req.set_fd(fd);
- req.set_flags(va_arg(args, int));
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::NO_SUCH_FD)
- return EBADF;
- else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS)
- return EINVAL;
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *result = static_cast<int>(resp.error());
- return 0;
- }else if(request == F_GETFL) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_GET_FILE_FLAGS);
- req.set_fd(fd);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- mlibc::infoLogger() << "\e[31mmlibc: fcntl(F_GETFL) unimplemented for this file\e[39m" << frg::endlog;
- return EINVAL;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = resp.flags();
- return 0;
- }else if(request == F_SETFL) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_SET_FILE_FLAGS);
- req.set_fd(fd);
- req.set_flags(va_arg(args, int));
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- mlibc::infoLogger() << "\e[31mmlibc: fcntl(F_SETFL) unimplemented for this file\e[39m" << frg::endlog;
- return EINVAL;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = 0;
- return 0;
- }else if(request == F_SETLK) {
- mlibc::infoLogger() << "\e[31mmlibc: F_SETLK\e[39m" << frg::endlog;
- return 0;
- }else if(request == F_SETLKW) {
- mlibc::infoLogger() << "\e[31mmlibc: F_SETLKW\e[39m" << frg::endlog;
- return 0;
- }else if(request == F_GETLK) {
- struct flock *lock = va_arg(args, struct flock *);
- lock->l_type = F_UNLCK;
- mlibc::infoLogger() << "\e[31mmlibc: F_GETLK is stubbed!\e[39m" << frg::endlog;
- return 0;
- }else if(request == F_ADD_SEALS) {
- auto seals = va_arg(args, int);
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_ADD_SEALS);
- req.set_fd(fd);
- req.set_seals(seals);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::RecvInline()
- ));
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- mlibc::infoLogger() << "\e[31mmlibc: fcntl(F_ADD_SEALS) unimplemented for this file\e[39m" << frg::endlog;
- return EINVAL;
- } else if(resp.error() == managarm::fs::Errors::INSUFFICIENT_PERMISSIONS) {
- return EPERM;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- *result = resp.seals();
- return 0;
- }else if(request == F_GET_SEALS) {
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_GET_SEALS);
- req.set_fd(fd);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::RecvInline()
- ));
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- mlibc::infoLogger() << "\e[31mmlibc: fcntl(F_GET_SEALS) unimplemented for this file\e[39m" << frg::endlog;
- return EINVAL;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = resp.seals();
- return 0;
- }else{
- mlibc::infoLogger() << "\e[31mmlibc: Unexpected fcntl() request: "
- << request << "\e[39m" << frg::endlog;
- return EINVAL;
- }
-}
-
-int sys_open_dir(const char *path, int *handle) {
- return sys_open(path, 0, 0, handle);
-}
-
-int sys_read_entries(int fd, void *buffer, size_t max_size, size_t *bytes_read) {
- SignalGuard sguard;
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_READ_ENTRIES);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::END_OF_FILE) {
- *bytes_read = 0;
- return 0;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- __ensure(max_size > sizeof(struct dirent));
- auto ent = new (buffer) struct dirent;
- memset(ent, 0, sizeof(struct dirent));
- memcpy(ent->d_name, resp.path().data(), resp.path().size());
- ent->d_reclen = sizeof(struct dirent);
- *bytes_read = sizeof(struct dirent);
- return 0;
- }
-}
-
-int sys_ttyname(int fd, char *buf, size_t size) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::TTY_NAME);
- req.set_fd(fd);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- }else if(resp.error() == managarm::posix::Errors::NOT_A_TTY) {
- return ENOTTY;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- __ensure(size >= resp.path().size() + 1);
- memcpy(buf, resp.path().data(), size);
- buf[resp.path().size()] = '\0';
- return 0;
- }
-}
-
-int sys_fdatasync(int) {
- mlibc::infoLogger() << "\e[35mmlibc: fdatasync() is a no-op\e[39m"
- << frg::endlog;
- return 0;
-}
-
-int sys_getcwd(char *buffer, size_t size) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::GETCWD);
- req.set_size(size);
-
- auto [offer, send_req, recv_resp, recv_path] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(buffer, size))
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
- HEL_CHECK(recv_path.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- if(static_cast<size_t>(resp.size()) >= size)
- return ERANGE;
- return 0;
-}
-
-int sys_vm_map(void *hint, size_t size, int prot, int flags, int fd, off_t offset, void **window) {
- SignalGuard sguard;
-
- managarm::posix::VmMapRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_address_hint(reinterpret_cast<uintptr_t>(hint));
- req.set_size(size);
- req.set_mode(prot);
- req.set_flags(flags);
- req.set_fd(fd);
- req.set_rel_offset(offset);
-
- auto [offer, sendReq, recvResp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendReq.error());
- HEL_CHECK(recvResp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
- if(resp.error() == managarm::posix::Errors::ALREADY_EXISTS) {
- return EEXIST;
- }else if(resp.error() == managarm::posix::Errors::NO_MEMORY) {
- return EFAULT;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else {
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *window = reinterpret_cast<void *>(resp.offset());
- }
-
- return 0;
-}
-
-int sys_vm_remap(void *pointer, size_t size, size_t new_size, void **window) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::VM_REMAP);
- req.set_address(reinterpret_cast<uintptr_t>(pointer));
- req.set_size(size);
- req.set_new_size(new_size);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *window = reinterpret_cast<void *>(resp.offset());
- return 0;
-}
-
-int sys_vm_protect(void *pointer, size_t size, int prot) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::VM_PROTECT);
- req.set_address(reinterpret_cast<uintptr_t>(pointer));
- req.set_size(size);
- req.set_mode(prot);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
-}
-
-int sys_vm_unmap(void *pointer, size_t size) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::VM_UNMAP);
- req.set_address(reinterpret_cast<uintptr_t>(pointer));
- req.set_size(size);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
-}
-
-int sys_setsid(pid_t *sid) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::SETSID);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::ACCESS_DENIED) {
- *sid = -1;
- return EPERM;
- }
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *sid = resp.sid();
- return 0;
-}
-
-int sys_tcgetattr(int fd, struct termios *attr) {
- int result;
- if(int e = sys_ioctl(fd, TCGETS, attr, &result); e)
- return e;
- return 0;
-}
-
-int sys_tcsetattr(int fd, int when, const struct termios *attr) {
- if(when < TCSANOW || when > TCSAFLUSH)
- return EINVAL;
-
- if(int e = sys_ioctl(fd, TCSETS, const_cast<struct termios *>(attr), nullptr); e)
- return e;
- return 0;
-}
-
-int sys_tcdrain(int) {
- mlibc::infoLogger() << "\e[35mmlibc: tcdrain() is a stub\e[39m" << frg::endlog;
- return 0;
-}
-
-int sys_socket(int domain, int type_and_flags, int proto, int *fd) {
- constexpr int type_mask = int(0xF);
- constexpr int flags_mask = ~int(0xF);
- __ensure(!((type_and_flags & flags_mask) & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)));
-
- SignalGuard sguard;
-
- managarm::posix::SocketRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_domain(domain);
- req.set_socktype(type_and_flags & type_mask);
- req.set_protocol(proto);
- req.set_flags(type_and_flags & flags_mask);
-
- auto [offer, sendReq, recvResp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendReq.error());
- HEL_CHECK(recvResp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
- if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EAFNOSUPPORT;
- } else {
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *fd = resp.fd();
- return 0;
- }
-}
-
-int sys_pipe(int *fds, int flags) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::PIPE_CREATE);
- req.set_flags(flags);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- __ensure(resp.fds_size() == 2);
- fds[0] = resp.fds(0);
- fds[1] = resp.fds(1);
- return 0;
-}
-
-int sys_socketpair(int domain, int type_and_flags, int proto, int *fds) {
- constexpr int type_mask = int(0xF);
- constexpr int flags_mask = ~int(0xF);
- __ensure(!((type_and_flags & flags_mask) & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)));
-
- SignalGuard sguard;
-
- managarm::posix::SockpairRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_domain(domain);
- req.set_socktype(type_and_flags & type_mask);
- req.set_protocol(proto);
- req.set_flags(type_and_flags & flags_mask);
-
- auto [offer, sendReq, recvResp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendReq.error());
- HEL_CHECK(recvResp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
- if(resp.error() == managarm::posix::Errors::PROTOCOL_NOT_SUPPORTED) {
- return EPROTONOSUPPORT;
- } else {
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- }
- __ensure(resp.fds_size() == 2);
- fds[0] = resp.fds(0);
- fds[1] = resp.fds(1);
- return 0;
-}
-
-int sys_msg_send(int sockfd, const struct msghdr *hdr, int flags, ssize_t *length) {
- frg::vector<HelSgItem, MemoryAllocator> sglist{getSysdepsAllocator()};
- auto handle = getHandleForFd(sockfd);
- if (!handle)
- return EBADF;
-
- size_t overall_size = 0;
- for(int i = 0; i < hdr->msg_iovlen; i++) {
- HelSgItem item{
- .buffer = hdr->msg_iov[i].iov_base,
- .length = hdr->msg_iov[i].iov_len,
- };
- sglist.push_back(item);
- overall_size += hdr->msg_iov[i].iov_len;
- }
-
- SignalGuard sguard;
-
- managarm::fs::SendMsgRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_flags(flags);
- req.set_size(overall_size);
-
- for(auto cmsg = CMSG_FIRSTHDR(hdr); cmsg; cmsg = CMSG_NXTHDR(hdr, cmsg)) {
- __ensure(cmsg->cmsg_level == SOL_SOCKET);
- if(cmsg->cmsg_type == SCM_CREDENTIALS) {
- mlibc::infoLogger() << "mlibc: SCM_CREDENTIALS requested but we don't handle that yet!" << frg::endlog;
- return EINVAL;
- }
- __ensure(cmsg->cmsg_type == SCM_RIGHTS);
- __ensure(cmsg->cmsg_len >= sizeof(struct cmsghdr));
-
- size_t size = cmsg->cmsg_len - CMSG_ALIGN(sizeof(struct cmsghdr));
- __ensure(!(size % sizeof(int)));
- for(size_t off = 0; off < size; off += sizeof(int)) {
- int fd;
- memcpy(&fd, CMSG_DATA(cmsg) + off, sizeof(int));
- req.add_fds(fd);
- }
- }
-
- auto [offer, send_head, send_tail, send_data, imbue_creds, send_addr, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::sendBufferSg(sglist.data(), hdr->msg_iovlen),
- helix_ng::imbueCredentials(),
- helix_ng::sendBuffer(hdr->msg_name, hdr->msg_namelen),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(send_data.error());
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(send_addr.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SendMsgReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() == managarm::fs::Errors::BROKEN_PIPE) {
- return EPIPE;
- }else if(resp.error() == managarm::fs::Errors::NOT_CONNECTED) {
- return ENOTCONN;
- }else if(resp.error() == managarm::fs::Errors::WOULD_BLOCK) {
- return EAGAIN;
- }else if(resp.error() == managarm::fs::Errors::HOST_UNREACHABLE) {
- return EHOSTUNREACH;
- }else if(resp.error() == managarm::fs::Errors::ACCESS_DENIED) {
- return EACCES;
- }else if(resp.error() == managarm::fs::Errors::NETWORK_UNREACHABLE) {
- return ENETUNREACH;
- }else if(resp.error() == managarm::fs::Errors::DESTINATION_ADDRESS_REQUIRED) {
- return EDESTADDRREQ;
- }else if(resp.error() == managarm::fs::Errors::ADDRESS_NOT_AVAILABLE) {
- return EADDRNOTAVAIL;
- }else if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }else if(resp.error() == managarm::fs::Errors::AF_NOT_SUPPORTED) {
- return EAFNOSUPPORT;
- }else if(resp.error() == managarm::fs::Errors::MESSAGE_TOO_LARGE) {
- return EMSGSIZE;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *length = resp.size();
- return 0;
- }
-}
-
-int sys_msg_recv(int sockfd, struct msghdr *hdr, int flags, ssize_t *length) {
- if(!hdr->msg_iovlen) {
- return EMSGSIZE;
- }
-
- auto handle = getHandleForFd(sockfd);
- if (!handle)
- return EBADF;
-
- SignalGuard sguard;
-
- managarm::fs::RecvMsgRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_flags(flags);
- req.set_size(hdr->msg_iov[0].iov_len);
- req.set_addr_size(hdr->msg_namelen);
- req.set_ctrl_size(hdr->msg_controllen);
-
- auto [offer, send_req, imbue_creds, recv_resp, recv_addr, recv_data, recv_ctrl] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::imbueCredentials(),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(hdr->msg_name, hdr->msg_namelen),
- helix_ng::recvBuffer(hdr->msg_iov[0].iov_base, hdr->msg_iov[0].iov_len),
- helix_ng::recvBuffer(hdr->msg_control, hdr->msg_controllen))
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::RecvMsgReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() == managarm::fs::Errors::WOULD_BLOCK) {
- return EAGAIN;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- HEL_CHECK(recv_addr.error());
- HEL_CHECK(recv_data.error());
- HEL_CHECK(recv_ctrl.error());
-
- hdr->msg_namelen = resp.addr_size();
- hdr->msg_controllen = recv_ctrl.actualLength();
- hdr->msg_flags = resp.flags();
- *length = resp.ret_val();
- return 0;
- }
-}
-
-int sys_pselect(int, fd_set *read_set, fd_set *write_set,
- fd_set *except_set, const struct timespec *timeout,
- const sigset_t *sigmask, int *num_events) {
- // TODO: Do not keep errors from epoll (?).
- int fd = epoll_create1(0);
- if(fd == -1)
- return -1;
-
- for(int k = 0; k < FD_SETSIZE; k++) {
- struct epoll_event ev;
- memset(&ev, 0, sizeof(struct epoll_event));
-
- if(read_set && FD_ISSET(k, read_set))
- ev.events |= EPOLLIN; // TODO: Additional events.
- if(write_set && FD_ISSET(k, write_set))
- ev.events |= EPOLLOUT; // TODO: Additional events.
- if(except_set && FD_ISSET(k, except_set))
- ev.events |= EPOLLPRI;
-
- if(!ev.events)
- continue;
- ev.data.u32 = k;
-
- if(epoll_ctl(fd, EPOLL_CTL_ADD, k, &ev))
- return -1;
- }
-
- struct epoll_event evnts[16];
- int n = epoll_pwait(fd, evnts, 16,
- timeout ? (timeout->tv_sec * 1000 + timeout->tv_nsec / 100) : -1, sigmask);
- if(n == -1)
- return -1;
-
- fd_set res_read_set;
- fd_set res_write_set;
- fd_set res_except_set;
- FD_ZERO(&res_read_set);
- FD_ZERO(&res_write_set);
- FD_ZERO(&res_except_set);
- int m = 0;
-
- for(int i = 0; i < n; i++) {
- int k = evnts[i].data.u32;
-
- if(read_set && FD_ISSET(k, read_set)
- && evnts[i].events & (EPOLLIN | EPOLLERR | EPOLLHUP)) {
- FD_SET(k, &res_read_set);
- m++;
- }
-
- if(write_set && FD_ISSET(k, write_set)
- && evnts[i].events & (EPOLLOUT | EPOLLERR | EPOLLHUP)) {
- FD_SET(k, &res_write_set);
- m++;
- }
-
- if(except_set && FD_ISSET(k, except_set)
- && evnts[i].events & EPOLLPRI) {
- FD_SET(k, &res_except_set);
- m++;
- }
- }
-
- if(close(fd))
- __ensure("close() failed on epoll file");
-
- if(read_set)
- memcpy(read_set, &res_read_set, sizeof(fd_set));
- if(write_set)
- memcpy(write_set, &res_write_set, sizeof(fd_set));
- if(except_set)
- memcpy(except_set, &res_except_set, sizeof(fd_set));
-
- *num_events = m;
- return 0;
-}
-
-int sys_poll(struct pollfd *fds, nfds_t count, int timeout, int *num_events) {
- __ensure(timeout >= 0 || timeout == -1); // TODO: Report errors correctly.
-
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::EPOLL_CALL);
- req.set_timeout(timeout > 0 ? int64_t{timeout} * 1000000 : timeout);
-
- for(nfds_t i = 0; i < count; i++) {
- req.add_fds(fds[i].fd);
- req.add_events(fds[i].events);
- }
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- } else {
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- __ensure(resp.events_size() == count);
-
- int m = 0;
- for(nfds_t i = 0; i < count; i++) {
- if(resp.events(i))
- m++;
- fds[i].revents = resp.events(i);
- }
-
- *num_events = m;
- return 0;
- }
-}
-
-int sys_epoll_create(int flags, int *fd) {
- // Some applications assume EPOLL_CLOEXEC and O_CLOEXEC to be the same.
- // They are on linux, but not yet on managarm.
- __ensure(!(flags & ~(EPOLL_CLOEXEC | O_CLOEXEC)));
-
- SignalGuard sguard;
-
- uint32_t proto_flags = 0;
- if(flags & EPOLL_CLOEXEC || flags & O_CLOEXEC)
- proto_flags |= managarm::posix::OpenFlags::OF_CLOEXEC;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::EPOLL_CREATE);
- req.set_flags(proto_flags);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *fd = resp.fd();
- return 0;
-}
-
-int sys_epoll_ctl(int epfd, int mode, int fd, struct epoll_event *ev) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- if(mode == EPOLL_CTL_ADD) {
- __ensure(ev);
- req.set_request_type(managarm::posix::CntReqType::EPOLL_ADD);
- req.set_flags(ev->events);
- req.set_cookie(ev->data.u64);
- }else if(mode == EPOLL_CTL_MOD) {
- __ensure(ev);
- req.set_request_type(managarm::posix::CntReqType::EPOLL_MODIFY);
- req.set_flags(ev->events);
- req.set_cookie(ev->data.u64);
- }else if(mode == EPOLL_CTL_DEL) {
- req.set_request_type(managarm::posix::CntReqType::EPOLL_DELETE);
- }else{
- mlibc::panicLogger() << "\e[31mmlibc: Illegal epoll_ctl() mode\e[39m" << frg::endlog;
- }
- req.set_fd(epfd);
- req.set_newfd(fd);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- } else if(resp.error() == managarm::posix::Errors::ALREADY_EXISTS) {
- return EEXIST;
- } else if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- } else {
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
- return 0;
-}
-
-int sys_epoll_pwait(int epfd, struct epoll_event *ev, int n,
- int timeout, const sigset_t *sigmask, int *raised) {
- __ensure(timeout >= 0 || timeout == -1); // TODO: Report errors correctly.
-
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::EPOLL_WAIT);
- req.set_fd(epfd);
- req.set_size(n);
- req.set_timeout(timeout > 0 ? int64_t{timeout} * 1000000 : timeout);
- if(sigmask != NULL) {
- req.set_sigmask((long int)*sigmask);
- req.set_sigmask_needed(true);
- } else {
- req.set_sigmask_needed(false);
- }
-
- auto [offer, send_req, recv_resp, recv_data] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(ev, n * sizeof(struct epoll_event)))
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
- HEL_CHECK(recv_data.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- }
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- __ensure(!(recv_data.actualLength() % sizeof(struct epoll_event)));
- *raised = recv_data.actualLength() / sizeof(struct epoll_event);
- return 0;
-}
-
-int sys_timerfd_create(int clockid, int flags, int *fd) {
- (void) clockid;
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::TIMERFD_CREATE);
- req.set_flags(flags);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *fd = resp.fd();
- return 0;
-}
-
-int sys_timerfd_settime(int fd, int,
- const struct itimerspec *value, struct itimerspec *oldvalue) {
- __ensure(!oldvalue);
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::TIMERFD_SETTIME);
- req.set_fd(fd);
- req.set_time_secs(value->it_value.tv_sec);
- req.set_time_nanos(value->it_value.tv_nsec);
- req.set_interval_secs(value->it_interval.tv_sec);
- req.set_interval_nanos(value->it_interval.tv_nsec);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
-}
-
-int sys_signalfd_create(const sigset_t *masks, int flags, int *fd) {
- __ensure(!(flags & ~(SFD_CLOEXEC | SFD_NONBLOCK)));
-
- uint32_t proto_flags = 0;
- if(flags & SFD_CLOEXEC)
- proto_flags |= managarm::posix::OpenFlags::OF_CLOEXEC;
- if(flags & SFD_NONBLOCK)
- proto_flags |= managarm::posix::OpenFlags::OF_NONBLOCK;
-
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::SIGNALFD_CREATE);
- req.set_flags(proto_flags);
- req.set_sigset(*masks);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *fd = resp.fd();
- return 0;
-}
-
-int sys_inotify_create(int flags, int *fd) {
- __ensure(!(flags & ~(IN_CLOEXEC | IN_NONBLOCK)));
-
- SignalGuard sguard;
-
- uint32_t proto_flags = 0;
- if(flags & IN_CLOEXEC)
- proto_flags |= managarm::posix::OpenFlags::OF_CLOEXEC;
- if(flags & IN_NONBLOCK)
- proto_flags |= managarm::posix::OpenFlags::OF_NONBLOCK;
-
- managarm::posix::InotifyCreateRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_flags(proto_flags);
-
- auto [offer, sendReq, recvResp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendReq.error());
- HEL_CHECK(recvResp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *fd = resp.fd();
- return 0;
-}
-
-int sys_inotify_add_watch(int ifd, const char *path, uint32_t mask, int *wd) {
- SignalGuard sguard;
-
- managarm::posix::InotifyAddRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(ifd);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
- req.set_flags(mask);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *wd = resp.wd();
- return 0;
- }
-}
-
-int sys_eventfd_create(unsigned int initval, int flags, int *fd) {
- SignalGuard sguard;
-
- uint32_t proto_flags = 0;
- if (flags & EFD_NONBLOCK) proto_flags |= managarm::posix::OpenFlags::OF_NONBLOCK;
- if (flags & EFD_CLOEXEC) proto_flags |= managarm::posix::OpenFlags::OF_CLOEXEC;
- if (flags & EFD_SEMAPHORE)
- return ENOSYS;
-
- managarm::posix::EventfdCreateRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_flags(proto_flags);
- req.set_initval(initval);
-
- auto [offer, sendReq, recvResp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendReq.error());
- HEL_CHECK(recvResp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *fd = resp.fd();
- return 0;
-}
-
-int sys_open(const char *path, int flags, mode_t mode, int *fd) {
- return sys_openat(AT_FDCWD, path, flags, mode, fd);
-}
-
-int sys_openat(int dirfd, const char *path, int flags, mode_t mode, int *fd) {
- SignalGuard sguard;
-
- // We do not support O_TMPFILE.
- if(flags & O_TMPFILE)
- return EOPNOTSUPP;
-
- uint32_t proto_flags = 0;
- if(flags & O_APPEND)
- proto_flags |= managarm::posix::OpenFlags::OF_APPEND;
- if(flags & O_CREAT)
- proto_flags |= managarm::posix::OpenFlags::OF_CREATE;
- if(flags & O_EXCL)
- proto_flags |= managarm::posix::OpenFlags::OF_EXCLUSIVE;
- if(flags & O_NONBLOCK)
- proto_flags |= managarm::posix::OpenFlags::OF_NONBLOCK;
- if(flags & O_TRUNC)
- proto_flags |= managarm::posix::OpenFlags::OF_TRUNC;
-
- if(flags & O_CLOEXEC)
- proto_flags |= managarm::posix::OpenFlags::OF_CLOEXEC;
- if(flags & O_NOCTTY)
- proto_flags |= managarm::posix::OpenFlags::OF_NOCTTY;
-
- if(flags & O_RDONLY)
- proto_flags |= managarm::posix::OpenFlags::OF_RDONLY;
- else if(flags & O_WRONLY)
- proto_flags |= managarm::posix::OpenFlags::OF_WRONLY;
- else if(flags & O_RDWR)
- proto_flags |= managarm::posix::OpenFlags::OF_RDWR;
- else if(flags & O_PATH)
- proto_flags |= managarm::posix::OpenFlags::OF_PATH;
-
- managarm::posix::OpenAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(dirfd);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
- req.set_flags(proto_flags);
- req.set_mode(mode);
-
- auto [offer, sendHead, sendTail, recvResp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendHead.error());
- HEL_CHECK(sendTail.error());
- HEL_CHECK(recvResp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::ALREADY_EXISTS) {
- return EEXIST;
- }else if(resp.error() == managarm::posix::Errors::NOT_A_DIRECTORY) {
- return ENOTDIR;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_OPERATION_TARGET) {
- mlibc::infoLogger() << "\e[31mmlibc: openat unimplemented for this file " << path << "\e[39m" << frg::endlog;
- return EINVAL;
- }else if(resp.error() == managarm::posix::Errors::NO_BACKING_DEVICE) {
- return ENXIO;
- }else if(resp.error() == managarm::posix::Errors::IS_DIRECTORY) {
- return EISDIR;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *fd = resp.fd();
- return 0;
- }
-}
-
-int sys_mkfifoat(int dirfd, const char *path, mode_t mode) {
- SignalGuard sguard;
-
- managarm::posix::MkfifoAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(dirfd);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
- req.set_mode(mode);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::ALREADY_EXISTS) {
- return EEXIST;
- }else if(resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else if(resp.error() == managarm::posix::Errors::INTERNAL_ERROR) {
- return EIEIO;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_mknodat(int dirfd, const char *path, int mode, int dev) {
- SignalGuard sguard;
-
- managarm::posix::MknodAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_dirfd(dirfd);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
- req.set_mode(mode);
- req.set_device(dev);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::ALREADY_EXISTS) {
- return EEXIST;
- }else if(resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_read(int fd, void *data, size_t max_size, ssize_t *bytes_read) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::READ);
- req.set_fd(fd);
- req.set_size(max_size);
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, send_req, imbue_creds, recv_resp, recv_data] =
- exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBuffer(ser.data(), ser.size()),
- helix_ng::imbueCredentials(),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(data, max_size)
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-/* if(resp.error() == managarm::fs::Errors::NO_SUCH_FD) {
- return EBADF;
- }else*/
- if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }else if(resp.error() == managarm::fs::Errors::WOULD_BLOCK) {
- return EAGAIN;
- }else if(resp.error() == managarm::fs::Errors::END_OF_FILE) {
- *bytes_read = 0;
- return 0;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- HEL_CHECK(recv_data.error());
- *bytes_read = recv_data.actualLength();
- return 0;
- }
-}
-
-int sys_readv(int fd, const struct iovec *iovs, int iovc, ssize_t *bytes_read) {
- for(int i = 0; i < iovc; i++) {
- ssize_t intermed = 0;
-
- if(int e = sys_read(fd, iovs[i].iov_base, iovs[i].iov_len, &intermed); e)
- return e;
- else if(intermed == 0)
- break;
-
- *bytes_read += intermed;
- }
-
- return 0;
-}
-
-int sys_write(int fd, const void *data, size_t size, ssize_t *bytes_written) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::WRITE);
- req.set_fd(fd);
- req.set_size(size);
-
- auto [offer, send_req, imbue_creds, send_data, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::imbueCredentials(),
- helix_ng::sendBuffer(data, size),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(send_data.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- // TODO: implement NO_SUCH_FD
-/* if(resp.error() == managarm::fs::Errors::NO_SUCH_FD) {
- return EBADF;
- }else*/ if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- return EINVAL; // FD does not support writes.
- }else if(resp.error() == managarm::fs::Errors::NO_SPACE_LEFT) {
- return ENOSPC;
- }else if(resp.error() == managarm::fs::Errors::WOULD_BLOCK) {
- return EAGAIN;
- }else if(resp.error() == managarm::fs::Errors::NOT_CONNECTED) {
- return ENOTCONN;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- if(bytes_written) {
- *bytes_written = resp.size();
- }
- return 0;
- }
-}
-
-int sys_pread(int fd, void *buf, size_t n, off_t off, ssize_t *bytes_read) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_PREAD);
- req.set_fd(fd);
- req.set_size(n);
- req.set_offset(off);
-
- auto [offer, send_req, imbue_creds, recv_resp, recv_data] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::imbueCredentials(),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(buf, n))
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-/* if(resp.error() == managarm::fs::Errors::NO_SUCH_FD) {
- return EBADF;
- }else*/
- if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }else if(resp.error() == managarm::fs::Errors::WOULD_BLOCK) {
- return EAGAIN;
- }else if(resp.error() == managarm::fs::Errors::END_OF_FILE) {
- *bytes_read = 0;
- return 0;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- HEL_CHECK(recv_data.error());
- *bytes_read = recv_data.actualLength();
- return 0;
- }
-}
-
-int sys_pwrite(int fd, const void *buf, size_t n, off_t off, ssize_t *bytes_written) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_PWRITE);
- req.set_fd(fd);
- req.set_size(n);
- req.set_offset(off);
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, send_head, imbue_creds, to_write, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::imbueCredentials(),
- helix_ng::sendBuffer(buf, n),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(to_write.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }else if(resp.error() == managarm::fs::Errors::WOULD_BLOCK) {
- return EAGAIN;
- }else if(resp.error() == managarm::fs::Errors::NO_SPACE_LEFT) {
- return ENOSPC;
- }else if(resp.error() == managarm::fs::Errors::SEEK_ON_PIPE) {
- return ESPIPE;
- }else if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *bytes_written = n;
- return 0;
- }
-}
-
-int sys_seek(int fd, off_t offset, int whence, off_t *new_offset) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if(!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(fd);
- req.set_rel_offset(offset);
-
- if(whence == SEEK_SET) {
- req.set_req_type(managarm::fs::CntReqType::SEEK_ABS);
- }else if(whence == SEEK_CUR) {
- req.set_req_type(managarm::fs::CntReqType::SEEK_REL);
- }else if(whence == SEEK_END) {
- req.set_req_type(managarm::fs::CntReqType::SEEK_EOF);
- }else{
- return EINVAL;
- }
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBuffer(ser.data(), ser.size()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::SEEK_ON_PIPE) {
- return ESPIPE;
- } else if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- } else {
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *new_offset = resp.offset();
- return 0;
- }
-}
-
-
-int sys_close(int fd) {
- SignalGuard sguard;
-
- managarm::posix::CloseRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(fd);
-
- auto [offer, sendReq, recvResp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendReq.error());
- HEL_CHECK(recvResp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
-
- if(resp.error() == managarm::posix::Errors::NO_SUCH_FD) {
- return EBADF;
- }else if(resp.error() == managarm::posix::Errors::SUCCESS) {
- return 0;
- }else{
- __ensure(!"Unexpected error");
- __builtin_unreachable();
- }
-}
-
-int sys_dup(int fd, int flags, int *newfd) {
- SignalGuard sguard;
-
- __ensure(!(flags & ~(O_CLOEXEC)));
-
- uint32_t proto_flags = 0;
- if(flags & O_CLOEXEC)
- proto_flags |= managarm::posix::OpenFlags::OF_CLOEXEC;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::DUP);
- req.set_fd(fd);
- req.set_flags(proto_flags);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if (resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- } else if (resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- } else {
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- }
-
- *newfd = resp.fd();
- return 0;
-}
-
-int sys_dup2(int fd, int flags, int newfd) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::DUP2);
- req.set_fd(fd);
- req.set_newfd(newfd);
- req.set_flags(flags);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if (resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- } else if (resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- } else {
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- }
-
- return 0;
-}
-
-int sys_stat(fsfd_target fsfdt, int fd, const char *path, int flags, struct stat *result) {
- SignalGuard sguard;
-
- managarm::posix::FstatAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- if (fsfdt == fsfd_target::path) {
- req.set_fd(AT_FDCWD);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
- } else if (fsfdt == fsfd_target::fd) {
- flags |= AT_EMPTY_PATH;
- req.set_fd(fd);
- } else {
- __ensure(fsfdt == fsfd_target::fd_path);
- req.set_fd(fd);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
- }
-
- if (flags & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) {
- return EINVAL;
- }
-
- if (!(flags & AT_EMPTY_PATH) && (!path || !strlen(path))) {
- return ENOENT;
- }
-
- req.set_flags(flags);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::BAD_FD) {
- return EBADF;
- }else if(resp.error() == managarm::posix::Errors::NOT_A_DIRECTORY) {
- return ENOTDIR;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- memset(result, 0, sizeof(struct stat));
-
- switch(resp.file_type()) {
- case managarm::posix::FileType::FT_REGULAR:
- result->st_mode = S_IFREG; break;
- case managarm::posix::FileType::FT_DIRECTORY:
- result->st_mode = S_IFDIR; break;
- case managarm::posix::FileType::FT_SYMLINK:
- result->st_mode = S_IFLNK; break;
- case managarm::posix::FileType::FT_CHAR_DEVICE:
- result->st_mode = S_IFCHR; break;
- case managarm::posix::FileType::FT_BLOCK_DEVICE:
- result->st_mode = S_IFBLK; break;
- case managarm::posix::FileType::FT_SOCKET:
- result->st_mode = S_IFSOCK; break;
- case managarm::posix::FileType::FT_FIFO:
- result->st_mode = S_IFIFO; break;
- default:
- __ensure(!resp.file_type());
- }
-
- result->st_dev = 1;
- result->st_ino = resp.fs_inode();
- result->st_mode |= resp.mode();
- result->st_nlink = resp.num_links();
- result->st_uid = resp.uid();
- result->st_gid = resp.gid();
- result->st_rdev = resp.ref_devnum();
- result->st_size = resp.file_size();
- result->st_atim.tv_sec = resp.atime_secs();
- result->st_atim.tv_nsec = resp.atime_nanos();
- result->st_mtim.tv_sec = resp.mtime_secs();
- result->st_mtim.tv_nsec = resp.mtime_nanos();
- result->st_ctim.tv_sec = resp.ctime_secs();
- result->st_ctim.tv_nsec = resp.ctime_nanos();
- result->st_blksize = 4096;
- result->st_blocks = resp.file_size() / 512 + 1;
- return 0;
- }
-}
-
-int sys_readlink(const char *path, void *data, size_t max_size, ssize_t *length) {
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::READLINK);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
-
- auto [offer, send_req, recv_resp, recv_data] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(data, max_size))
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *length = recv_data.actualLength();
- return 0;
- }
-}
-
-int sys_rmdir(const char *path) {
- SignalGuard sguard;
-
- managarm::posix::RmdirRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_ftruncate(int fd, size_t size) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_TRUNCATE);
- req.set_size(size);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- return EINVAL;
- } else {
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_fallocate(int fd, off_t offset, size_t size) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_FALLOCATE);
- req.set_rel_offset(offset);
- req.set_size(size);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- return EINVAL;
- }else if(resp.error() == managarm::fs::Errors::INSUFFICIENT_PERMISSIONS) {
- return EPERM;
- }else if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- return 0;
- }
- return 0;
-}
-
-int sys_unlinkat(int fd, const char *path, int flags) {
- SignalGuard sguard;
-
- managarm::posix::UnlinkAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(fd);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), path));
- req.set_flags(flags);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::RESOURCE_IN_USE) {
- return EBUSY;
- }else if(resp.error() == managarm::posix::Errors::IS_DIRECTORY) {
- return EISDIR;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_access(const char *path, int mode) {
- return sys_faccessat(AT_FDCWD, path, mode, 0);
-}
-
-int sys_faccessat(int dirfd, const char *pathname, int, int flags) {
- SignalGuard sguard;
-
- managarm::posix::AccessAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), pathname));
- req.set_fd(dirfd);
- req.set_flags(flags);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::NO_SUCH_FD) {
- return EBADF;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_flock(int fd, int opts) {
- SignalGuard sguard;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::FLOCK);
- req.set_fd(fd);
- req.set_flock_flags(opts);
- auto handle = getHandleForFd(fd);
- if(!handle) {
- return EBADF;
- }
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::WOULD_BLOCK) {
- return EWOULDBLOCK;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- } else {
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_isatty(int fd) {
- SignalGuard sguard;
-
- managarm::posix::IsTtyRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(fd);
-
- auto [offer, sendReq, recvResp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendReq.error());
- HEL_CHECK(recvResp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
- if(resp.error() == managarm::posix::Errors::NO_SUCH_FD) {
- return EBADF;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- if(resp.mode())
- return 0;
- return ENOTTY;
- }
-}
-
-int sys_chmod(const char *pathname, mode_t mode) {
- return sys_fchmodat(AT_FDCWD, pathname, mode, 0);
-}
-
-int sys_fchmod(int fd, mode_t mode) {
- return sys_fchmodat(fd, "", mode, AT_EMPTY_PATH);
-}
-
-int sys_fchmodat(int fd, const char *pathname, mode_t mode, int flags) {
- SignalGuard sguard;
-
- managarm::posix::FchmodAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(fd);
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), pathname));
- req.set_mode(mode);
- req.set_flags(flags);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::NO_SUCH_FD) {
- return EBADF;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else if(resp.error() == managarm::posix::Errors::NOT_SUPPORTED) {
- return ENOTSUP;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_fchownat(int dirfd, const char *pathname, uid_t owner, gid_t group, int flags) {
- (void)dirfd;
- (void)pathname;
- (void)owner;
- (void)group;
- (void)flags;
- mlibc::infoLogger() << "mlibc: sys_fchownat is a stub!" << frg::endlog;
- return 0;
-}
-
-int sys_umask(mode_t mode, mode_t *old) {
- (void)mode;
- mlibc::infoLogger() << "mlibc: sys_umask is a stub, hardcoding 022!" << frg::endlog;
- *old = 022;
- return 0;
-}
-
-int sys_utimensat(int dirfd, const char *pathname, const struct timespec times[2], int flags) {
- SignalGuard sguard;
-
- managarm::posix::UtimensAtRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(dirfd);
- if(pathname != nullptr)
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), pathname));
- if(times) {
- req.set_atimeSec(times[0].tv_sec);
- req.set_atimeNsec(times[0].tv_nsec);
- req.set_mtimeSec(times[1].tv_sec);
- req.set_mtimeNsec(times[1].tv_nsec);
- } else {
- req.set_atimeSec(UTIME_NOW);
- req.set_atimeNsec(UTIME_NOW);
- req.set_mtimeSec(UTIME_NOW);
- req.set_mtimeNsec(UTIME_NOW);
- }
- req.set_flags(flags);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- }else if(resp.error() == managarm::posix::Errors::NO_SUCH_FD) {
- return EBADF;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else if(resp.error() == managarm::posix::Errors::NOT_SUPPORTED) {
- return ENOTSUP;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_getentropy(void *buffer, size_t length) {
- SignalGuard sguard;
- auto p = reinterpret_cast<char *>(buffer);
- size_t n = 0;
-
- while(n < length) {
- size_t chunk;
- HEL_CHECK(helGetRandomBytes(p + n, length - n, &chunk));
- n+= chunk;
- }
-
- return 0;
-}
-
-int sys_gethostname(char *buffer, size_t bufsize) {
- SignalGuard sguard;
- mlibc::infoLogger() << "mlibc: gethostname always returns managarm" << frg::endlog;
- char name[10] = "managarm\0";
- if(bufsize < 10)
- return ENAMETOOLONG;
- strncpy(buffer, name, 10);
- return 0;
-}
-
-int sys_fsync(int) {
- mlibc::infoLogger() << "mlibc: fsync is a stub" << frg::endlog;
- return 0;
-}
-
-int sys_memfd_create(const char *name, int flags, int *fd) {
- SignalGuard sguard;
-
- managarm::posix::MemFdCreateRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_name(frg::string<MemoryAllocator>(getSysdepsAllocator(), name));
- req.set_flags(flags);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }
-
- *fd = resp.fd();
-
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
-}
-
-int sys_uname(struct utsname *buf) {
- __ensure(buf);
- mlibc::infoLogger() << "\e[31mmlibc: uname() returns static information\e[39m" << frg::endlog;
- strcpy(buf->sysname, "Managarm");
- strcpy(buf->nodename, "managarm");
- strcpy(buf->release, "0.0.1-rolling");
- strcpy(buf->version, "Managarm is not Managram");
-#if defined(__x86_64__)
- strcpy(buf->machine, "x86_64");
-#elif defined (__aarch64__)
- strcpy(buf->machine, "aarch64");
-#else
-# error Unknown architecture
-#endif
-
- return 0;
-}
-
-int sys_madvise(void *, size_t, int) {
- mlibc::infoLogger() << "mlibc: sys_madvise is a stub!" << frg::endlog;
- return 0;
-}
-
-int sys_ptsname(int fd, char *buffer, size_t length) {
- int index;
- if(int e = sys_ioctl(fd, TIOCGPTN, &index, NULL); e)
- return e;
- if((size_t)snprintf(buffer, length, "/dev/pts/%d", index) >= length) {
- return ERANGE;
- }
- return 0;
-}
-
-int sys_unlockpt(int fd) {
- int unlock = 0;
-
- if(int e = sys_ioctl(fd, TIOCSPTLCK, &unlock, NULL); e)
- return e;
-
- return 0;
-}
-
-} //namespace mlibc
-
diff --git a/lib/mlibc/sysdeps/managarm/generic/fork-exec.cpp b/lib/mlibc/sysdeps/managarm/generic/fork-exec.cpp
deleted file mode 100644
index 8da0e1e..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/fork-exec.cpp
+++ /dev/null
@@ -1,744 +0,0 @@
-
-// for _Exit()
-#include <stdlib.h>
-
-#include <string.h>
-#include <errno.h>
-
-// for fork() and execve()
-#include <unistd.h>
-// for sched_yield()
-#include <sched.h>
-#include <stdio.h>
-// for getrusage()
-#include <sys/resource.h>
-// for waitpid()
-#include <sys/wait.h>
-#include <pthread.h>
-
-#include <bits/ensure.h>
-#include <mlibc/allocator.hpp>
-#include <mlibc/debug.hpp>
-#include <mlibc/posix-pipe.hpp>
-#include <mlibc/thread-entry.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <posix.frigg_bragi.hpp>
-#include <protocols/posix/supercalls.hpp>
-
-namespace mlibc {
-
-int sys_futex_tid() {
- HelWord tid = 0;
- HEL_CHECK(helSyscall0_1(kHelCallSuper + posix::superGetTid,
- &tid));
-
- return tid;
-}
-
-int sys_futex_wait(int *pointer, int expected, const struct timespec *time) {
- // This implementation is inherently signal-safe.
- if(time) {
- if(helFutexWait(pointer, expected, time->tv_nsec + time->tv_sec * 1000000000))
- return -1;
- return 0;
- }
- if(helFutexWait(pointer, expected, -1))
- return -1;
- return 0;
-}
-
-int sys_futex_wake(int *pointer) {
- // This implementation is inherently signal-safe.
- if(helFutexWake(pointer))
- return -1;
- return 0;
-}
-
-int sys_waitpid(pid_t pid, int *status, int flags, struct rusage *ru, pid_t *ret_pid) {
- if(ru) {
- mlibc::infoLogger() << "mlibc: struct rusage in sys_waitpid is unsupported" << frg::endlog;
- return ENOSYS;
- }
-
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::WAIT);
- req.set_pid(pid);
- req.set_flags(flags);
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- if(status)
- *status = resp.mode();
- *ret_pid = resp.pid();
- return 0;
-}
-
-int sys_waitid(idtype_t idtype, id_t id, siginfo_t *info, int options) {
- SignalGuard sguard;
-
- managarm::posix::WaitIdRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- req.set_idtype(idtype);
- req.set_id(id);
- req.set_flags(options);
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::WaitIdResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- info->si_pid = resp.pid();
- info->si_uid = resp.uid();
- info->si_signo = SIGCHLD;
- info->si_status = resp.sig_status();
- info->si_code = resp.sig_code();
- return 0;
-}
-
-void sys_exit(int status) {
- // This implementation is inherently signal-safe.
- HEL_CHECK(helSyscall1(kHelCallSuper + posix::superExit, status));
- __builtin_trap();
-}
-
-void sys_yield() {
- // This implementation is inherently signal-safe.
- HEL_CHECK(helYield());
-}
-
-int sys_sleep(time_t *secs, long *nanos) {
- SignalGuard sguard;
- globalQueue.trim();
-
- uint64_t now;
- HEL_CHECK(helGetClock(&now));
-
- uint64_t async_id;
- HEL_CHECK(helSubmitAwaitClock(now + uint64_t(*secs) * 1000000000 + uint64_t(*nanos),
- globalQueue.getQueue(), 0, &async_id));
-
- auto element = globalQueue.dequeueSingle();
- auto result = parseSimple(element);
- HEL_CHECK(result->error);
-
- *secs = 0;
- *nanos = 0;
-
- return 0;
-}
-
-int sys_fork(pid_t *child) {
- // This implementation is inherently signal-safe.
- int res;
-
- sigset_t full_sigset;
- res = sigfillset(&full_sigset);
- __ensure(!res);
-
- sigset_t former_sigset;
- res = sigprocmask(SIG_SETMASK, &full_sigset, &former_sigset);
- __ensure(!res);
-
- HelWord out;
- HEL_CHECK(helSyscall0_1(kHelCallSuper + posix::superFork, &out));
- *child = out;
-
- if(!out) {
- clearCachedInfos();
- globalQueue.recreateQueue();
- }
-
- res = sigprocmask(SIG_SETMASK, &former_sigset, nullptr);
- __ensure(!res);
-
- return 0;
-}
-
-int sys_execve(const char *path, char *const argv[], char *const envp[]) {
- // TODO: Make this function signal-safe!
- frg::string<MemoryAllocator> args_area(getSysdepsAllocator());
- for(auto it = argv; *it; ++it)
- args_area += frg::string_view{*it, strlen(*it) + 1};
-
- frg::string<MemoryAllocator> env_area(getSysdepsAllocator());
- for(auto it = envp; *it; ++it)
- env_area += frg::string_view{*it, strlen(*it) + 1};
-
- uintptr_t out;
-
- HEL_CHECK(helSyscall6_1(kHelCallSuper + posix::superExecve,
- reinterpret_cast<uintptr_t>(path),
- strlen(path),
- reinterpret_cast<uintptr_t>(args_area.data()),
- args_area.size(),
- reinterpret_cast<uintptr_t>(env_area.data()),
- env_area.size(),
- &out));
-
- return out;
-}
-
-gid_t sys_getgid() {
- SignalGuard sguard;
-
- managarm::posix::GetGidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return resp.uid();
-}
-
-int sys_setgid(gid_t gid) {
- SignalGuard sguard;
-
- managarm::posix::SetGidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- req.set_uid(gid);
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::ACCESS_DENIED) {
- return EPERM;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-gid_t sys_getegid() {
- SignalGuard sguard;
-
- managarm::posix::GetEgidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return resp.uid();
-}
-
-int sys_setegid(gid_t egid) {
- SignalGuard sguard;
-
- managarm::posix::SetEgidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- req.set_uid(egid);
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::ACCESS_DENIED) {
- return EPERM;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-uid_t sys_getuid() {
- SignalGuard sguard;
-
- managarm::posix::GetUidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return resp.uid();
-}
-
-int sys_setuid(uid_t uid) {
- SignalGuard sguard;
-
- managarm::posix::SetUidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- req.set_uid(uid);
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::ACCESS_DENIED) {
- return EPERM;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-uid_t sys_geteuid() {
- SignalGuard sguard;
-
- managarm::posix::GetEuidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return resp.uid();
-}
-
-int sys_seteuid(uid_t euid) {
- SignalGuard sguard;
-
- managarm::posix::SetEuidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- req.set_uid(euid);
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::ACCESS_DENIED) {
- return EPERM;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-pid_t sys_gettid() {
- // TODO: use an actual gettid syscall.
- return sys_getpid();
-}
-
-pid_t sys_getpid() {
- SignalGuard sguard;
-
- managarm::posix::GetPidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return resp.pid();
-}
-
-pid_t sys_getppid() {
- SignalGuard sguard;
-
- managarm::posix::GetPpidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return resp.pid();
-}
-
-int sys_getsid(pid_t pid, pid_t *sid) {
- SignalGuard sguard;
-
- managarm::posix::GetSidRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_pid(pid);
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::NO_SUCH_RESOURCE) {
- *sid = 0;
- return ESRCH;
- } else {
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *sid = resp.pid();
- return 0;
- }
-}
-
-int sys_getpgid(pid_t pid, pid_t *pgid) {
- SignalGuard sguard;
-
- managarm::posix::GetPgidRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_pid(pid);
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::NO_SUCH_RESOURCE) {
- *pgid = 0;
- return ESRCH;
- } else {
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *pgid = resp.pid();
- return 0;
- }
-}
-
-int sys_setpgid(pid_t pid, pid_t pgid) {
- SignalGuard sguard;
-
- managarm::posix::SetPgidRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- req.set_pid(pid);
- req.set_pgid(pgid);
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::posix::Errors::INSUFFICIENT_PERMISSION) {
- return EPERM;
- }else if(resp.error() == managarm::posix::Errors::NO_SUCH_RESOURCE) {
- return ESRCH;
- }else if(resp.error() == managarm::posix::Errors::ACCESS_DENIED) {
- return EACCES;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
-}
-
-int sys_getrusage(int scope, struct rusage *usage) {
- memset(usage, 0, sizeof(struct rusage));
-
- SignalGuard sguard;
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::GET_RESOURCE_USAGE);
- req.set_mode(scope);
-
- auto [offer, send_head, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
-
- usage->ru_utime.tv_sec = resp.ru_user_time() / 1'000'000'000;
- usage->ru_utime.tv_usec = (resp.ru_user_time() % 1'000'000'000) / 1'000;
-
- return 0;
-}
-
-int sys_getschedparam(void *tcb, int *policy, struct sched_param *param) {
- if(tcb != mlibc::get_current_tcb()) {
- return ESRCH;
- }
-
- *policy = SCHED_OTHER;
- int prio = 0;
- // TODO(no92): use helGetPriority(kHelThisThread) here
- mlibc::infoLogger() << "\e[31mlibc: sys_getschedparam always returns priority 0\e[39m" << frg::endlog;
- param->sched_priority = prio;
-
- return 0;
-}
-
-int sys_setschedparam(void *tcb, int policy, const struct sched_param *param) {
- if(tcb != mlibc::get_current_tcb()) {
- return ESRCH;
- }
-
- if(policy != SCHED_OTHER) {
- return EINVAL;
- }
-
- HEL_CHECK(helSetPriority(kHelThisThread, param->sched_priority));
-
- return 0;
-}
-
-int sys_clone(void *tcb, pid_t *pid_out, void *stack) {
- HelWord pid = 0;
- HEL_CHECK(helSyscall2_1(kHelCallSuper + posix::superClone,
- reinterpret_cast<HelWord>(__mlibc_start_thread),
- reinterpret_cast<HelWord>(stack),
- &pid));
-
- if (pid_out)
- *pid_out = pid;
-
- return 0;
-}
-
-int sys_tcb_set(void *pointer) {
-#if defined(__aarch64__)
- uintptr_t addr = reinterpret_cast<uintptr_t>(pointer);
- addr += sizeof(Tcb) - 0x10;
- asm volatile ("msr tpidr_el0, %0" :: "r"(addr));
-#else
- HEL_CHECK(helWriteFsBase(pointer));
-#endif
- return 0;
-}
-
-void sys_thread_exit() {
- // This implementation is inherently signal-safe.
- HEL_CHECK(helSyscall1(kHelCallSuper + posix::superExit, 0));
- __builtin_trap();
-}
-
-int sys_thread_setname(void *tcb, const char *name) {
- if(strlen(name) > 15) {
- return ERANGE;
- }
-
- auto t = reinterpret_cast<Tcb *>(tcb);
- char *path;
- int cs = 0;
-
- if(asprintf(&path, "/proc/self/task/%d/comm", t->tid) < 0) {
- return ENOMEM;
- }
-
- pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
-
- int fd;
- if(int e = sys_open(path, O_WRONLY, 0, &fd); e) {
- return e;
- }
-
- if(int e = sys_write(fd, name, strlen(name) + 1, NULL)) {
- return e;
- }
-
- sys_close(fd);
-
- pthread_setcancelstate(cs, 0);
-
- return 0;
-}
-
-int sys_thread_getname(void *tcb, char *name, size_t size) {
- auto t = reinterpret_cast<Tcb *>(tcb);
- char *path;
- int cs = 0;
- ssize_t real_size = 0;
-
- if(asprintf(&path, "/proc/self/task/%d/comm", t->tid) < 0) {
- return ENOMEM;
- }
-
- pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
-
- int fd;
- if(int e = sys_open(path, O_RDONLY | O_CLOEXEC, 0, &fd); e) {
- return e;
- }
-
- if(int e = sys_read(fd, name, size, &real_size)) {
- return e;
- }
-
- name[real_size - 1] = 0;
- sys_close(fd);
-
- pthread_setcancelstate(cs, 0);
-
- if(static_cast<ssize_t>(size) <= real_size) {
- return ERANGE;
- }
-
- return 0;
-}
-
-
-} //namespace mlibc
-
diff --git a/lib/mlibc/sysdeps/managarm/generic/ioctl.cpp b/lib/mlibc/sysdeps/managarm/generic/ioctl.cpp
deleted file mode 100644
index 384c09e..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/ioctl.cpp
+++ /dev/null
@@ -1,708 +0,0 @@
-#include <errno.h>
-#include <fcntl.h>
-#include <linux/cdrom.h>
-#include <linux/input.h>
-#include <linux/kd.h>
-#include <linux/vt.h>
-#include <sys/ioctl.h>
-
-#include <bits/ensure.h>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/allocator.hpp>
-#include <mlibc/debug.hpp>
-#include <mlibc/posix-pipe.hpp>
-
-#include <fs.frigg_bragi.hpp>
-#include <posix.frigg_bragi.hpp>
-
-namespace mlibc {
-
-static constexpr bool logIoctls = false;
-
-int ioctl_drm(int fd, unsigned long request, void *arg, int *result, HelHandle handle);
-
-int sys_ioctl(int fd, unsigned long request, void *arg, int *result) {
- if(logIoctls)
- mlibc::infoLogger() << "mlibc: ioctl with"
- << " type: 0x" << frg::hex_fmt(_IOC_TYPE(request))
- << ", number: 0x" << frg::hex_fmt(_IOC_NR(request))
- << " (raw request: " << frg::hex_fmt(request) << ")"
- << " on fd " << fd << frg::endlog;
-
- SignalGuard sguard;
- auto handle = getHandleForFd(fd);
- if(!handle)
- return EBADF;
-
- if(_IOC_TYPE(request) == 'd') {
- return ioctl_drm(fd, request, arg, result, handle);
- }
-
- managarm::fs::IoctlRequest<MemoryAllocator> ioctl_req(getSysdepsAllocator());
-
- switch(request) {
- case FIONBIO: {
- auto mode = reinterpret_cast<int *>(arg);
- int flags = fcntl(fd, F_GETFL, 0);
- if(*mode) {
- fcntl(fd, F_SETFL, flags | O_NONBLOCK);
- }else{
- fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
- }
- return 0;
- }
- case FIONREAD: {
- auto argp = reinterpret_cast<int *>(arg);
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- if(!argp)
- return EINVAL;
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(FIONREAD);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] =
- exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::NOT_CONNECTED) {
- return ENOTCONN;
- } else {
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- *argp = resp.fionread_count();
-
- return 0;
- }
- }
- case FIOCLEX: {
- managarm::posix::IoctlFioclexRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(fd);
-
- auto [offer, sendReq, recvResp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendReq.error());
- if(recvResp.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(recvResp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
- }
- case TCGETS: {
- auto param = reinterpret_cast<struct termios *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- auto [offer, send_ioctl_req, send_req, recv_resp, recv_attrs] = exchangeMsgsSync(handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(param, sizeof(struct termios))
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
- HEL_CHECK(recv_attrs.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- __ensure(recv_attrs.actualLength() == sizeof(struct termios));
- *result = resp.result();
- return 0;
- }
- case TCSETS: {
- auto param = reinterpret_cast<struct termios *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- auto [offer, send_ioctl_req, send_req, send_attrs, recv_resp] = exchangeMsgsSync(handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::sendBuffer(param, sizeof(struct termios)),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(send_attrs.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- if(result)
- *result = resp.result();
- return 0;
- }
- case TIOCSCTTY: {
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- auto [offer, send_ioctl_req, send_req, imbue_creds, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::imbueCredentials(),
- helix_ng::recvInline())
- );
-
- HEL_CHECK(offer.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_ioctl_req.error());
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }else if(resp.error() == managarm::fs::Errors::INSUFFICIENT_PERMISSIONS) {
- return EPERM;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = resp.result();
- return 0;
- }
- case TIOCGWINSZ: {
- auto param = reinterpret_cast<struct winsize *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET)
- return EINVAL;
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- *result = resp.result();
- param->ws_col = resp.pts_width();
- param->ws_row = resp.pts_height();
- param->ws_xpixel = resp.pts_pixel_width();
- param->ws_ypixel = resp.pts_pixel_height();
- return 0;
- }
- case TIOCSWINSZ: {
- auto param = reinterpret_cast<const struct winsize *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_pts_width(param->ws_col);
- req.set_pts_height(param->ws_row);
- req.set_pts_pixel_width(param->ws_xpixel);
- req.set_pts_pixel_height(param->ws_ypixel);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- *result = resp.result();
- return 0;
- }
- case TIOCGPTN: {
- auto param = reinterpret_cast<int *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *param = resp.pts_index();
- if(result)
- *result = resp.result();
- return 0;
- }
- case TIOCGPGRP: {
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, send_ioctl_req, send_req, imbue_creds, recv_resp] =
- exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBuffer(ser.data(), ser.size()),
- helix_ng::imbueCredentials(),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error())
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::NOT_A_TERMINAL) {
- return ENOTTY;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = resp.result();
- *static_cast<int *>(arg) = resp.pid();
- return 0;
- }
- case TIOCSPGRP: {
- auto param = reinterpret_cast<int *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_pgid(*param);
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, send_ioctl_req, send_req, imbue_creds, recv_resp] =
- exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBuffer(ser.data(), ser.size()),
- helix_ng::imbueCredentials(),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::INSUFFICIENT_PERMISSIONS) {
- return EPERM;
- } else if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = resp.result();
- return 0;
- }
- case TIOCGSID: {
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, send_ioctl_req, send_req, imbue_creds, recv_resp] =
- exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBuffer(ser.data(), ser.size()),
- helix_ng::imbueCredentials(),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- if(send_ioctl_req.error())
- return EINVAL;
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error())
- return EINVAL;
- HEL_CHECK(send_req.error());
- if(imbue_creds.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::NOT_A_TERMINAL) {
- return ENOTTY;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = resp.result();
- *static_cast<int *>(arg) = resp.pid();
- return 0;
- }
- case CDROM_GET_CAPABILITY: {
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] =
- exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBuffer(ser.data(), ser.size()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- if(send_ioctl_req.error())
- return EINVAL;
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error())
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::NOT_A_TERMINAL) {
- return ENOTTY;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = resp.result();
- return 0;
- }
- } // end of switch()
-
-
- if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) == _IOC_NR(EVIOCGVERSION)) {
- *reinterpret_cast<int *>(arg) = 0x010001; // should be EV_VERSION
- *result = 0;
- return 0;
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) == _IOC_NR(EVIOCGID)) {
- memset(arg, 0, sizeof(struct input_id));
- *result = 0;
- return 0;
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) == _IOC_NR(EVIOCGNAME(0))) {
- const char *s = "Managarm generic evdev";
- auto chunk = frg::min(_IOC_SIZE(request), strlen(s) + 1);
- memcpy(arg, s, chunk);
- *result = chunk;
- return 0;
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) == _IOC_NR(EVIOCGPHYS(0))) {
- // Returns the sysfs path of the device.
- const char *s = "input0";
- auto chunk = frg::min(_IOC_SIZE(request), strlen(s) + 1);
- memcpy(arg, s, chunk);
- *result = chunk;
- return 0;
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) == _IOC_NR(EVIOCGUNIQ(0))) {
- // Returns a unique ID for the device.
- const char *s = "0";
- auto chunk = frg::min(_IOC_SIZE(request), strlen(s) + 1);
- memcpy(arg, s, chunk);
- *result = chunk;
- return 0;
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) == _IOC_NR(EVIOCGPROP(0))) {
- // Returns a bitmask of properties of the device.
- auto size = _IOC_SIZE(request);
- memset(arg, 0, size);
- *result = size;
- return 0;
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) == _IOC_NR(EVIOCGKEY(0))) {
- // Returns the current key state.
- auto size = _IOC_SIZE(request);
- memset(arg, 0, size);
- *result = size;
- return 0;
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) == _IOC_NR(EVIOCGLED(0))) {
- // Returns the current LED state.
- auto size = _IOC_SIZE(request);
- memset(arg, 0, size);
- *result = size;
- return 0;
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) == _IOC_NR(EVIOCGSW(0))) {
- auto size = _IOC_SIZE(request);
- memset(arg, 0, size);
- *result = size;
- return 0;
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) >= _IOC_NR(EVIOCGBIT(0, 0))
- && _IOC_NR(request) <= _IOC_NR(EVIOCGBIT(EV_MAX, 0))) {
- // Returns a bitmask of capabilities of the device.
- // If type is zero, return a mask of supported types.
- // As EV_SYN is zero, this implies that it is impossible
- // to get the mask of supported synthetic events.
- auto type = _IOC_NR(request) - _IOC_NR(EVIOCGBIT(0, 0));
- if(!type) {
- // TODO: Check with the Linux ABI if we have to do this.
- memset(arg, 0, _IOC_SIZE(request));
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(EVIOCGBIT(0, 0));
- req.set_size(_IOC_SIZE(request));
-
- auto [offer, send_ioctl_req, send_req, recv_resp, recv_data] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(arg, _IOC_SIZE(request)))
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
- HEL_CHECK(recv_data.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = recv_data.actualLength();
- return 0;
- }else{
- // TODO: Check with the Linux ABI if we have to do this.
- memset(arg, 0, _IOC_SIZE(request));
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(EVIOCGBIT(1, 0));
- req.set_input_type(type);
- req.set_size(_IOC_SIZE(request));
-
- auto [offer, send_ioctl_req, send_req, recv_resp, recv_data] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(arg, _IOC_SIZE(request)))
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
- HEL_CHECK(recv_data.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = recv_data.actualLength();
- return 0;
- }
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) == _IOC_NR(EVIOCSCLOCKID)) {
- auto param = reinterpret_cast<int *>(arg);
-
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(request);
- req.set_input_clock(*param);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *result = resp.result();
- return 0;
- }else if(_IOC_TYPE(request) == 'E'
- && _IOC_NR(request) >= _IOC_NR(EVIOCGABS(0))
- && _IOC_NR(request) <= _IOC_NR(EVIOCGABS(ABS_MAX))) {
- auto param = reinterpret_cast<struct input_absinfo *>(arg);
-
- auto type = _IOC_NR(request) - _IOC_NR(EVIOCGABS(0));
- managarm::fs::GenericIoctlRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_command(EVIOCGABS(0));
- req.set_input_type(type);
-
- auto [offer, send_ioctl_req, send_req, recv_resp] = exchangeMsgsSync(handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(ioctl_req, getSysdepsAllocator()),
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_ioctl_req.error());
- if(send_req.error() == kHelErrDismissed)
- return EINVAL;
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::GenericIoctlReply<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- param->value = resp.input_value();
- param->minimum = resp.input_min();
- param->maximum = resp.input_max();
- param->fuzz = resp.input_fuzz();
- param->flat = resp.input_flat();
- param->resolution = resp.input_resolution();
-
- *result = resp.result();
- return 0;
- }else if(request == KDSETMODE) {
- auto param = reinterpret_cast<unsigned int *>(arg);
- mlibc::infoLogger() << "\e[35mmlibc: KD_SETMODE(" << frg::hex_fmt(param) << ") is a no-op" << frg::endlog;
-
- *result = 0;
- return 0;
- }else if(request == KDGETMODE) {
- auto param = reinterpret_cast<unsigned int *>(arg);
- mlibc::infoLogger() << "\e[35mmlibc: KD_GETMODE is a no-op" << frg::endlog;
- *param = 0;
-
- *result = 0;
- return 0;
- }else if(request == KDSKBMODE) {
- auto param = reinterpret_cast<long>(arg);
- mlibc::infoLogger() << "\e[35mmlibc: KD_SKBMODE(" << frg::hex_fmt(param) << ") is a no-op" << frg::endlog;
-
- *result = 0;
- return 0;
- }else if(request == VT_SETMODE) {
- // auto param = reinterpret_cast<struct vt_mode *>(arg);
- mlibc::infoLogger() << "\e[35mmlibc: VT_SETMODE is a no-op" << frg::endlog;
-
- *result = 0;
- return 0;
- }else if(request == VT_GETSTATE) {
- auto param = reinterpret_cast<struct vt_stat *>(arg);
-
- param->v_active = 0;
- param->v_signal = 0;
- param->v_state = 0;
-
- mlibc::infoLogger() << "\e[35mmlibc: VT_GETSTATE is a no-op" << frg::endlog;
-
- *result = 0;
- return 0;
- }else if(request == VT_ACTIVATE || request == VT_WAITACTIVE) {
- mlibc::infoLogger() << "\e[35mmlibc: VT_ACTIVATE/VT_WAITACTIVE are no-ops" << frg::endlog;
- *result = 0;
- return 0;
- }else if(request == TIOCSPTLCK) {
- mlibc::infoLogger() << "\e[35mmlibc: TIOCSPTLCK is a no-op" << frg::endlog;
- if(result)
- *result = 0;
- return 0;
- }
-
- mlibc::infoLogger() << "mlibc: Unexpected ioctl with"
- << " type: 0x" << frg::hex_fmt(_IOC_TYPE(request))
- << ", number: 0x" << frg::hex_fmt(_IOC_NR(request))
- << " (raw request: " << frg::hex_fmt(request) << ")" << frg::endlog;
- __ensure(!"Illegal ioctl request");
- __builtin_unreachable();
-}
-
-} //namespace mlibc
diff --git a/lib/mlibc/sysdeps/managarm/generic/memory.cpp b/lib/mlibc/sysdeps/managarm/generic/memory.cpp
deleted file mode 100644
index 91e47af..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/memory.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-
-#include <string.h>
-
-#include <bits/ensure.h>
-#include <mlibc/allocator.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <protocols/posix/supercalls.hpp>
-
-#include <hel.h>
-#include <hel-syscalls.h>
-
-namespace mlibc {
-
-int sys_anon_allocate(size_t size, void **pointer) {
- // This implementation is inherently signal-safe.
- __ensure(!(size & 0xFFF));
- HelWord out;
- HEL_CHECK(helSyscall1_1(kHelCallSuper + posix::superAnonAllocate, size, &out));
- *pointer = reinterpret_cast<void *>(out);
- return 0;
-}
-
-int sys_anon_free(void *pointer, size_t size) {
- // This implementation is inherently signal-safe.
- HEL_CHECK(helSyscall2(kHelCallSuper + posix::superAnonDeallocate, (HelWord)pointer, size));
- return 0;
-}
-
-} //namespace mlibc
-
diff --git a/lib/mlibc/sysdeps/managarm/generic/mount.cpp b/lib/mlibc/sysdeps/managarm/generic/mount.cpp
deleted file mode 100644
index 5677b20..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/mount.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <errno.h>
-#include <string.h>
-#include <sys/mount.h>
-
-#include <bits/ensure.h>
-#include <mlibc/allocator.hpp>
-#include <mlibc/posix-pipe.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <posix.frigg_bragi.hpp>
-#include <bragi/helpers-frigg.hpp>
-
-namespace mlibc {
-
-int sys_mount(const char *source, const char *target,
- const char *fstype, unsigned long, const void *) {
- SignalGuard sguard;
-
- managarm::posix::MountRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), source));
- req.set_target_path(frg::string<MemoryAllocator>(getSysdepsAllocator(), target));
- req.set_fs_type(frg::string<MemoryAllocator>(getSysdepsAllocator(), fstype));
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- auto resp = *bragi::parse_head_only<managarm::posix::SvrResponse>(recv_resp, getSysdepsAllocator());
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND)
- return ENOENT;
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
-}
-
-} //namespace mlibc
diff --git a/lib/mlibc/sysdeps/managarm/generic/net.cpp b/lib/mlibc/sysdeps/managarm/generic/net.cpp
deleted file mode 100644
index 63f2d0c..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/net.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <mlibc/all-sysdeps.hpp>
-#include <sys/ioctl.h>
-#include <net/if.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-namespace mlibc {
-
-int sys_if_indextoname(unsigned int index, char *name) {
- int fd = 0;
- int r = sys_socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, AF_UNSPEC, &fd);
-
- if(r)
- return r;
-
- struct ifreq ifr;
- ifr.ifr_ifindex = index;
-
- int res = 0;
- int ret = sys_ioctl(fd, SIOCGIFNAME, &ifr, &res);
- close(fd);
-
- if(ret) {
- if(ret == ENODEV)
- return ENXIO;
- return ret;
- }
-
- strncpy(name, ifr.ifr_name, IF_NAMESIZE);
-
- return 0;
-}
-
-int sys_if_nametoindex(const char *name, unsigned int *ret) {
- int fd = 0;
- int r = sys_socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, AF_UNSPEC, &fd);
-
- if(r)
- return r;
-
- struct ifreq ifr;
- strncpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
-
- int res = 0;
- r = sys_ioctl(fd, SIOCGIFINDEX, &ifr, &res);
- close(fd);
-
- if(r)
- return r;
-
- *ret = ifr.ifr_ifindex;
-
- return 0;
-}
-
-} //namespace mlibc
diff --git a/lib/mlibc/sysdeps/managarm/generic/sched.cpp b/lib/mlibc/sysdeps/managarm/generic/sched.cpp
deleted file mode 100644
index bce8db8..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/sched.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-#include <bits/ensure.h>
-#include <unistd.h>
-
-#include <hel.h>
-#include <hel-syscalls.h>
-#include <mlibc/debug.hpp>
-#include <mlibc/allocator.hpp>
-#include <mlibc/posix-pipe.hpp>
-#include <mlibc/posix-sysdeps.hpp>
-
-#include <posix.frigg_bragi.hpp>
-
-namespace mlibc {
-
-int sys_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask) {
- return sys_getthreadaffinity(pid, cpusetsize, mask);
-}
-
-int sys_getthreadaffinity(pid_t tid, size_t cpusetsize, cpu_set_t *mask) {
- SignalGuard sguard;
-
- managarm::posix::GetAffinityRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- req.set_pid(tid);
- req.set_size(cpusetsize);
-
- auto [offer, send_head, recv_resp, recv_data] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(mask, cpusetsize)
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- } else if(resp.error() != managarm::posix::Errors::SUCCESS) {
- mlibc::infoLogger() << "mlibc: got unexpected error from posix in sys_getaffinity!" << frg::endlog;
- return EIEIO;
- }
- HEL_CHECK(recv_data.error());
-
- return 0;
-}
-
-int sys_setaffinity(pid_t pid, size_t cpusetsize, const cpu_set_t *mask) {
- return sys_setthreadaffinity(pid, cpusetsize, mask);
-}
-
-int sys_setthreadaffinity(pid_t tid, size_t cpusetsize, const cpu_set_t *mask) {
- SignalGuard sguard;
-
- frg::vector<uint8_t, MemoryAllocator> affinity_mask(getSysdepsAllocator());
- affinity_mask.resize(cpusetsize);
- memcpy(affinity_mask.data(), mask, cpusetsize);
- managarm::posix::SetAffinityRequest<MemoryAllocator> req(getSysdepsAllocator());
-
- req.set_pid(tid);
- req.set_mask(affinity_mask);
-
- auto [offer, send_head, send_tail, recv_resp] =
- exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadTail(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_head.error());
- HEL_CHECK(send_tail.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- } else if(resp.error() != managarm::posix::Errors::SUCCESS) {
- mlibc::infoLogger() << "mlibc: got unexpected error from posix in sys_getaffinity!" << frg::endlog;
- return EIEIO;
- }
-
- return 0;
-}
-
-int sys_getcpu(int *cpu) {
- HEL_CHECK(helGetCurrentCpu(cpu));
- return 0;
-}
-
-}
diff --git a/lib/mlibc/sysdeps/managarm/generic/signals.cpp b/lib/mlibc/sysdeps/managarm/generic/signals.cpp
deleted file mode 100644
index 486f3d4..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/signals.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-#include <bits/ensure.h>
-#include <signal.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-#include <errno.h>
-
-#include <hel.h>
-#include <hel-syscalls.h>
-
-#include <mlibc/debug.hpp>
-#include <mlibc/allocator.hpp>
-#include <mlibc/posix-pipe.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <posix.frigg_bragi.hpp>
-
-#include <bragi/helpers-frigg.hpp>
-#include <helix/ipc-structs.hpp>
-
-#include <protocols/posix/supercalls.hpp>
-
-extern "C" void __mlibc_signal_restore();
-
-namespace mlibc {
-
-int sys_sigprocmask(int how, const sigset_t *set, sigset_t *retrieve) {
- // This implementation is inherently signal-safe.
- uint64_t former, unused;
- if(set) {
- HEL_CHECK(helSyscall2_2(kHelObserveSuperCall + posix::superSigMask, how, *set, &former, &unused));
- }else{
- HEL_CHECK(helSyscall2_2(kHelObserveSuperCall + posix::superSigMask, 0, 0, &former, &unused));
- }
- if(retrieve)
- *retrieve = former;
- return 0;
-}
-
-int sys_sigaction(int number, const struct sigaction *__restrict action,
- struct sigaction *__restrict saved_action) {
- SignalGuard sguard;
-
- // TODO: Respect restorer. __ensure(!(action->sa_flags & SA_RESTORER));
-
- managarm::posix::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_request_type(managarm::posix::CntReqType::SIG_ACTION);
- req.set_sig_number(number);
- if(action) {
- req.set_mode(1);
- req.set_flags(action->sa_flags);
- req.set_sig_mask(action->sa_mask);
- if(action->sa_flags & SA_SIGINFO) {
- req.set_sig_handler(reinterpret_cast<uintptr_t>(action->sa_sigaction));
- }else{
- req.set_sig_handler(reinterpret_cast<uintptr_t>(action->sa_handler));
- }
- req.set_sig_restorer(reinterpret_cast<uintptr_t>(&__mlibc_signal_restore));
- } else {
- req.set_mode(0);
- }
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
-
- if(resp.error() == managarm::posix::Errors::ILLEGAL_REQUEST) {
- // This is only returned for servers, not for normal userspace.
- return ENOSYS;
- }else if(resp.error() == managarm::posix::Errors::ILLEGAL_ARGUMENTS) {
- return EINVAL;
- }
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
-
- if(saved_action) {
- saved_action->sa_flags = resp.flags();
- saved_action->sa_mask = resp.sig_mask();
- if(resp.flags() & SA_SIGINFO) {
- saved_action->sa_sigaction =
- reinterpret_cast<void (*)(int, siginfo_t *, void *)>(resp.sig_handler());
- }else{
- saved_action->sa_handler = reinterpret_cast<void (*)(int)>(resp.sig_handler());
- }
- // TODO: saved_action->sa_restorer = resp.sig_restorer;
- }
- return 0;
-}
-
-int sys_kill(int pid, int number) {
- // This implementation is inherently signal-safe.
- HEL_CHECK(helSyscall2(kHelObserveSuperCall + posix::superSigKill, pid, number));
- return 0;
-}
-
-int sys_tgkill(int, int tid, int number) {
- return sys_kill(tid, number);
-}
-
-int sys_sigaltstack(const stack_t *ss, stack_t *oss) {
- HelWord out;
-
- // This implementation is inherently signal-safe.
- HEL_CHECK(helSyscall2_1(kHelObserveSuperCall + posix::superSigAltStack,
- reinterpret_cast<HelWord>(ss),
- reinterpret_cast<HelWord>(oss),
- &out));
-
- return out;
-}
-
-int sys_sigsuspend(const sigset_t *set) {
- //SignalGuard sguard;
- uint64_t former, seq, unused;
-
- HEL_CHECK(helSyscall2_2(kHelObserveSuperCall + posix::superSigMask, SIG_SETMASK, *set, &former, &seq));
- HEL_CHECK(helSyscall1(kHelObserveSuperCall + posix::superSigSuspend, seq));
- HEL_CHECK(helSyscall2_2(kHelObserveSuperCall + posix::superSigMask, SIG_SETMASK, former, &unused, &unused));
-
- return EINTR;
-}
-
-int sys_sigpending(sigset_t *set) {
- uint64_t pendingMask;
-
- HEL_CHECK(helSyscall0_1(kHelObserveSuperCall + posix::superSigGetPending, &pendingMask));
- *set = pendingMask;
-
- return 0;
-}
-
-} //namespace mlibc
diff --git a/lib/mlibc/sysdeps/managarm/generic/socket.cpp b/lib/mlibc/sysdeps/managarm/generic/socket.cpp
deleted file mode 100644
index 5bdc1fc..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/socket.cpp
+++ /dev/null
@@ -1,423 +0,0 @@
-
-#include <bits/ensure.h>
-#include <errno.h>
-#include <sys/socket.h>
-#include <linux/netlink.h>
-#include <netinet/tcp.h>
-#include <netinet/in.h>
-
-#include <mlibc/allocator.hpp>
-#include <mlibc/debug.hpp>
-#include <mlibc/posix-pipe.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <fs.frigg_bragi.hpp>
-#include <posix.frigg_bragi.hpp>
-
-namespace {
-
-int fcntl_helper(int fd, int request, int *result, ...) {
- va_list args;
- va_start(args, result);
- if(!mlibc::sys_fcntl) {
- return ENOSYS;
- }
- int ret = mlibc::sys_fcntl(fd, request, args, result);
- va_end(args);
- return ret;
-}
-
-}
-
-namespace mlibc {
-
-int sys_accept(int fd, int *newfd, struct sockaddr *addr_ptr, socklen_t *addr_length, int flags) {
- SignalGuard sguard;
-
- managarm::posix::AcceptRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_fd(fd);
-
- auto [offer, sendReq, recvResp] = exchangeMsgsSync(
- getPosixLane(),
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendReq.error());
- HEL_CHECK(recvResp.error());
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
- if(resp.error() == managarm::posix::Errors::WOULD_BLOCK) {
- return EWOULDBLOCK;
- }else{
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *newfd = resp.fd();
- }
-
- if(addr_ptr && addr_length) {
- if(int e = mlibc::sys_peername(*newfd, addr_ptr, *addr_length, addr_length); e) {
- errno = e;
- return -1;
- }
- }
-
- if(flags & SOCK_NONBLOCK) {
- int fcntl_ret = 0;
- fcntl_helper(*newfd, F_GETFL, &fcntl_ret);
- fcntl_helper(*newfd, F_SETFL, &fcntl_ret, fcntl_ret | O_NONBLOCK);
- }
-
- if(flags & SOCK_CLOEXEC) {
- int fcntl_ret = 0;
- fcntl_helper(*newfd, F_GETFD, &fcntl_ret);
- fcntl_helper(*newfd, F_SETFD, &fcntl_ret, fcntl_ret | FD_CLOEXEC);
- }
-
- return 0;
-}
-
-int sys_bind(int fd, const struct sockaddr *addr_ptr, socklen_t addr_length) {
- SignalGuard sguard;
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_BIND);
-
- auto [offer, send_req, send_creds, send_buf, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::imbueCredentials(),
- helix_ng::sendBuffer(addr_ptr, addr_length),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(send_creds.error());
- HEL_CHECK(send_buf.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- } else if(resp.error() == managarm::fs::Errors::ADDRESS_IN_USE) {
- return EADDRINUSE;
- } else if(resp.error() == managarm::fs::Errors::ALREADY_EXISTS) {
- return EINVAL;
- } else if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- return EINVAL;
- } else if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- } else if(resp.error() == managarm::fs::Errors::ACCESS_DENIED) {
- return EACCES;
- } else if(resp.error() == managarm::fs::Errors::ADDRESS_NOT_AVAILABLE) {
- return EADDRNOTAVAIL;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- return 0;
-}
-
-int sys_connect(int fd, const struct sockaddr *addr_ptr, socklen_t addr_length) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_CONNECT);
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, send_req, imbue_creds, send_addr, recv_resp] =
- exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBuffer(ser.data(), ser.size()),
- helix_ng::imbueCredentials(),
- helix_ng::sendBuffer(const_cast<struct sockaddr *>(addr_ptr), addr_length),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(imbue_creds.error());
- HEL_CHECK(send_addr.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::FILE_NOT_FOUND) {
- return ENOENT;
- } else if(resp.error() == managarm::fs::Errors::ILLEGAL_ARGUMENT) {
- return EINVAL;
- }
-
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- return 0;
-}
-
-int sys_sockname(int fd, struct sockaddr *addr_ptr, socklen_t max_addr_length,
- socklen_t *actual_length) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_SOCKNAME);
- req.set_fd(fd);
- req.set_size(max_addr_length);
-
- auto [offer, send_req, recv_resp, recv_addr] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(addr_ptr, max_addr_length))
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- return ENOTSOCK;
- }
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- HEL_CHECK(recv_addr.error());
- *actual_length = resp.file_size();
- return 0;
-}
-
-int sys_peername(int fd, struct sockaddr *addr_ptr, socklen_t max_addr_length,
- socklen_t *actual_length) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_PEERNAME);
- req.set_fd(fd);
- req.set_size(max_addr_length);
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, sendReq, recvResp, recvData] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBuffer(ser.data(), ser.size()),
- helix_ng::recvInline(),
- helix_ng::recvBuffer(addr_ptr, max_addr_length)
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(sendReq.error());
- if(recvResp.error() == kHelErrDismissed)
- return ENOTSOCK;
- HEL_CHECK(recvResp.error());
- HEL_CHECK(recvData.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recvResp.data(), recvResp.length());
- if(resp.error() == managarm::fs::Errors::ILLEGAL_OPERATION_TARGET) {
- return ENOTSOCK;
- }else if(resp.error() == managarm::fs::Errors::NOT_CONNECTED) {
- return ENOTCONN;
- }else{
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *actual_length = resp.file_size();
- return 0;
- }
-}
-
-int sys_getsockopt(int fd, int layer, int number,
- void *__restrict buffer, socklen_t *__restrict size) {
- SignalGuard sguard;
-
- if(layer == SOL_SOCKET && number == SO_PEERCRED) {
- if(*size != sizeof(struct ucred))
- return EINVAL;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_GET_OPTION);
- req.set_command(SO_PEERCRED);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
-
- struct ucred creds;
- creds.pid = resp.pid();
- creds.uid = resp.uid();
- creds.gid = resp.gid();
- memcpy(buffer, &creds, sizeof(struct ucred));
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_SNDBUF) {
- mlibc::infoLogger() << "\e[31mmlibc: getsockopt() call with SOL_SOCKET and SO_SNDBUF is unimplemented\e[39m" << frg::endlog;
- *(int *)buffer = 4096;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_TYPE) {
- mlibc::infoLogger() << "\e[31mmlibc: getsockopt() call with SOL_SOCKET and SO_TYPE is unimplemented, hardcoding SOCK_STREAM\e[39m" << frg::endlog;
- *(int *)buffer = SOCK_STREAM;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_ERROR) {
- mlibc::infoLogger() << "\e[31mmlibc: getsockopt() call with SOL_SOCKET and SO_ERROR is unimplemented, hardcoding 0\e[39m" << frg::endlog;
- *(int *)buffer = 0;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_KEEPALIVE) {
- mlibc::infoLogger() << "\e[31mmlibc: getsockopt() call with SOL_SOCKET and SO_KEEPALIVE is unimplemented, hardcoding 0\e[39m" << frg::endlog;
- *(int *)buffer = 0;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_LINGER) {
- mlibc::infoLogger() << "\e[31mmlibc: getsockopt() call with SOL_SOCKET and SO_LINGER is unimplemented, hardcoding 0\e[39m" << frg::endlog;
- *(int *)buffer = 0;
- return 0;
- }else{
- mlibc::panicLogger() << "\e[31mmlibc: Unexpected getsockopt() call, layer: " << layer << " number: " << number << "\e[39m" << frg::endlog;
- __builtin_unreachable();
- }
-}
-
-int sys_setsockopt(int fd, int layer, int number,
- const void *buffer, socklen_t size) {
- SignalGuard sguard;
-
- if(layer == SOL_SOCKET && number == SO_PASSCRED) {
- int value;
- __ensure(size == sizeof(int));
- memcpy(&value, buffer, sizeof(int));
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_SET_OPTION);
- req.set_command(SO_PASSCRED);
- req.set_value(value);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBragiHeadOnly(req, getSysdepsAllocator()),
- helix_ng::recvInline())
- );
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_ATTACH_FILTER) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt(SO_ATTACH_FILTER) is not implemented"
- " correctly\e[39m" << frg::endlog;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_RCVBUFFORCE) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt(SO_RCVBUFFORCE) is not implemented"
- " correctly\e[39m" << frg::endlog;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_SNDBUF) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_SOCKET and SO_SNDBUF is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_KEEPALIVE) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_SOCKET and SO_KEEPALIVE is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_REUSEADDR) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_SOCKET and SO_REUSEADDR is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_REUSEPORT) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_SOCKET and SO_REUSEPORT is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_RCVBUF) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_SOCKET and SO_RCVBUF is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == IPPROTO_TCP && number == TCP_NODELAY) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with IPPROTO_TCP and TCP_NODELAY is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == SOL_SOCKET && number == SO_ACCEPTCONN) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_SOCKET and SO_ACCEPTCONN is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == IPPROTO_TCP && number == TCP_KEEPIDLE) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with IPPROTO_TCP and TCP_KEEPIDLE is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == SOL_NETLINK && number == NETLINK_EXT_ACK) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_NETLINK and NETLINK_EXT_ACK is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == SOL_NETLINK && number == NETLINK_GET_STRICT_CHK) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with SOL_NETLINK and NETLINK_EXT_ACK is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == IPPROTO_TCP && number == TCP_KEEPINTVL) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with IPPROTO_TCP and TCP_KEEPINTVL is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else if(layer == IPPROTO_TCP && number == TCP_KEEPCNT) {
- mlibc::infoLogger() << "\e[31mmlibc: setsockopt() call with IPPROTO_TCP and TCP_KEEPCNT is unimplemented\e[39m" << frg::endlog;
- return 0;
- }else{
- mlibc::panicLogger() << "\e[31mmlibc: Unexpected setsockopt() call, layer: " << layer << " number: " << number << "\e[39m" << frg::endlog;
- __builtin_unreachable();
- }
-}
-
-int sys_listen(int fd, int) {
- SignalGuard sguard;
-
- auto handle = getHandleForFd(fd);
- if (!handle)
- return EBADF;
-
- managarm::fs::CntRequest<MemoryAllocator> req(getSysdepsAllocator());
- req.set_req_type(managarm::fs::CntReqType::PT_LISTEN);
-
- frg::string<MemoryAllocator> ser(getSysdepsAllocator());
- req.SerializeToString(&ser);
-
- auto [offer, send_req, recv_resp] = exchangeMsgsSync(
- handle,
- helix_ng::offer(
- helix_ng::sendBuffer(ser.data(), ser.size()),
- helix_ng::recvInline()
- )
- );
-
- HEL_CHECK(offer.error());
- HEL_CHECK(send_req.error());
- HEL_CHECK(recv_resp.error());
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getSysdepsAllocator());
- resp.ParseFromArray(recv_resp.data(), recv_resp.length());
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- return 0;
-}
-
-} //namespace mlibc
diff --git a/lib/mlibc/sysdeps/managarm/generic/time.cpp b/lib/mlibc/sysdeps/managarm/generic/time.cpp
deleted file mode 100644
index 468a738..0000000
--- a/lib/mlibc/sysdeps/managarm/generic/time.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-
-#include <bits/ensure.h>
-#include <time.h>
-#include <string.h>
-#include <sys/time.h>
-
-#include <hel.h>
-#include <hel-syscalls.h>
-#include <mlibc/debug.hpp>
-#include <mlibc/allocator.hpp>
-#include <mlibc/posix-pipe.hpp>
-#include <mlibc/all-sysdeps.hpp>
-
-struct TrackerPage {
- uint64_t seqlock;
- int32_t state;
- int32_t padding;
- int64_t refClock;
- int64_t baseRealtime;
-};
-
-extern thread_local TrackerPage *__mlibc_clk_tracker_page;
-
-namespace mlibc {
-
-int sys_clock_get(int clock, time_t *secs, long *nanos) {
- // This implementation is inherently signal-safe.
- if(clock == CLOCK_MONOTONIC || clock == CLOCK_MONOTONIC_RAW || clock == CLOCK_MONOTONIC_COARSE) {
- uint64_t tick;
- HEL_CHECK(helGetClock(&tick));
- *secs = tick / 1000000000;
- *nanos = tick % 1000000000;
- }else if(clock == CLOCK_REALTIME) {
- cacheFileTable();
-
- // Start the seqlock read.
- auto seqlock = __atomic_load_n(&__mlibc_clk_tracker_page->seqlock, __ATOMIC_ACQUIRE);
- __ensure(!(seqlock & 1));
-
- // Perform the actual loads.
- auto ref = __atomic_load_n(&__mlibc_clk_tracker_page->refClock, __ATOMIC_RELAXED);
- auto base = __atomic_load_n(&__mlibc_clk_tracker_page->baseRealtime, __ATOMIC_RELAXED);
-
- // Finish the seqlock read.
- __atomic_thread_fence(__ATOMIC_ACQUIRE);
- __ensure(__atomic_load_n(&__mlibc_clk_tracker_page->seqlock, __ATOMIC_RELAXED) == seqlock);
-
- // Calculate the current time.
- uint64_t tick;
- HEL_CHECK(helGetClock(&tick));
- __ensure(tick >= (uint64_t)__mlibc_clk_tracker_page->refClock); // TODO: Respect the seqlock!
- tick -= ref;
- tick += base;
- *secs = tick / 1000000000;
- *nanos = tick % 1000000000;
- }else if(clock == CLOCK_PROCESS_CPUTIME_ID) {
- mlibc::infoLogger() << "\e[31mmlibc: clock_gettime does not support the CPU time clocks"
- "\e[39m" << frg::endlog;
- *secs = 0;
- *nanos = 0;
- }else if(clock == CLOCK_BOOTTIME) {
- mlibc::infoLogger() << "\e[31mmlibc: clock_gettime does not support CLOCK_BOOTTIME"
- "\e[39m" << frg::endlog;
- *secs = 0;
- *nanos = 0;
- }else{
- mlibc::panicLogger() << "mlibc: Unexpected clock " << clock << frg::endlog;
- }
- return 0;
-}
-
-int sys_clock_getres(int clock, time_t *secs, long *nanos) {
- (void)clock;
- (void)secs;
- (void)nanos;
- mlibc::infoLogger() << "mlibc: clock_getres is a stub" << frg::endlog;
- return 0;
-}
-
-} //namespace mlibc
-
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/access.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/access.h
deleted file mode 120000
index cb83931..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/access.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/access.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/auxv.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/auxv.h
deleted file mode 120000
index e760d62..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/auxv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/managarm/auxv.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/blkcnt_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/blkcnt_t.h
deleted file mode 120000
index 0b0ec27..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/blkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/blkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/blksize_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/blksize_t.h
deleted file mode 120000
index 7dc8d7c..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/blksize_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/blksize_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/clockid_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/clockid_t.h
deleted file mode 120000
index 6a42da5..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/clockid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/clockid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/dev_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/dev_t.h
deleted file mode 120000
index bca881e..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/dev_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/dev_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/epoll.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/epoll.h
deleted file mode 120000
index eb4b76d..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/epoll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/epoll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/errno.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/errno.h
deleted file mode 120000
index 6e507de..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/errno.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/errno.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/fcntl.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/fcntl.h
deleted file mode 120000
index 463e2c9..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fcntl.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/fsblkcnt_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/fsblkcnt_t.h
deleted file mode 120000
index 898dfb2..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/fsblkcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsblkcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/fsfilcnt_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/fsfilcnt_t.h
deleted file mode 120000
index 791755c..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/fsfilcnt_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/fsfilcnt_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/gid_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/gid_t.h
deleted file mode 120000
index abce6d6..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/gid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/gid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/in.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/in.h
deleted file mode 120000
index 418d1d5..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/in.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/in.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/ino_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/ino_t.h
deleted file mode 120000
index 4c20aca..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/ino_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ino_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/inotify.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/inotify.h
deleted file mode 120000
index b5cb282..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/inotify.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/inotify.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/ioctls.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/ioctls.h
deleted file mode 120000
index 595106b..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/ioctls.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ioctls.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/limits.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/limits.h
deleted file mode 120000
index 6c88db2..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/limits.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/limits.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/mode_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/mode_t.h
deleted file mode 120000
index 5d78fdf..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/mode_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mode_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/mqueue.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/mqueue.h
deleted file mode 120000
index fa87b07..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/mqueue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/mqueue.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/msg.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/msg.h
deleted file mode 120000
index f402b49..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/msg.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/msg.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/nlink_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/nlink_t.h
deleted file mode 120000
index bb3b625..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/nlink_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/nlink_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/packet.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/packet.h
deleted file mode 120000
index 998ef1a..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/packet.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/packet.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/pid_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/pid_t.h
deleted file mode 120000
index baa90f6..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/pid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/pid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/poll.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/poll.h
deleted file mode 120000
index 8ea6a0a..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/poll.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/poll.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/ptrace.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/ptrace.h
deleted file mode 120000
index b2517b2..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/ptrace.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/ptrace.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/reboot.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/reboot.h
deleted file mode 120000
index 77013a4..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/reboot.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/reboot.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/resource.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/resource.h
deleted file mode 120000
index 88d7402..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/resource.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/seek-whence.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/seek-whence.h
deleted file mode 120000
index df7bccf..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/seek-whence.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/seek-whence.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/shm.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/shm.h
deleted file mode 120000
index 067d8c4..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/shm.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/shm.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/signal.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/signal.h
deleted file mode 120000
index 4dcb0b7..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/signal.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/signal.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/socket.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/socket.h
deleted file mode 120000
index f1dc016..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/socket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socket.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/socklen_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/socklen_t.h
deleted file mode 120000
index 41f3b11..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/socklen_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/socklen_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/stat.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/stat.h
deleted file mode 120000
index 1f63b41..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/stat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/stat.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/statfs.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/statfs.h
deleted file mode 120000
index e3d202f..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/statfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/statvfs.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/statvfs.h
deleted file mode 120000
index 1fc80c2..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/statvfs.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/statvfs.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/suseconds_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/suseconds_t.h
deleted file mode 120000
index 9ed6597..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/suseconds_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/suseconds_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/termios.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/termios.h
deleted file mode 120000
index ee8f0b0..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/termios.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/termios.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/time.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/time.h
deleted file mode 120000
index 2a02625..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/time.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/time.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/uid_t.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/uid_t.h
deleted file mode 120000
index b306777..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/uid_t.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/uid_t.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/utsname.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/utsname.h
deleted file mode 120000
index b285754..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/utsname.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/utsname.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/vm-flags.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/vm-flags.h
deleted file mode 120000
index bbe258c..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/vm-flags.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/vm-flags.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/vt.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/vt.h
deleted file mode 120000
index 5798a4a..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/vt.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/vt.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/wait.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/wait.h
deleted file mode 120000
index feb2840..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/wait.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/wait.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/abi-bits/xattr.h b/lib/mlibc/sysdeps/managarm/include/abi-bits/xattr.h
deleted file mode 120000
index 66412d7..0000000
--- a/lib/mlibc/sysdeps/managarm/include/abi-bits/xattr.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../abis/linux/xattr.h \ No newline at end of file
diff --git a/lib/mlibc/sysdeps/managarm/include/mlibc/posix-pipe.hpp b/lib/mlibc/sysdeps/managarm/include/mlibc/posix-pipe.hpp
deleted file mode 100644
index 4bcf1cb..0000000
--- a/lib/mlibc/sysdeps/managarm/include/mlibc/posix-pipe.hpp
+++ /dev/null
@@ -1,300 +0,0 @@
-#ifndef MLIBC_POSIX_PIPE
-#define MLIBC_POSIX_PIPE
-
-#include <signal.h>
-#include <stdint.h>
-#include <string.h>
-#include <cstddef>
-
-#include <hel.h>
-#include <hel-syscalls.h>
-
-struct SignalGuard {
- SignalGuard();
-
- SignalGuard(const SignalGuard &) = delete;
-
- ~SignalGuard();
-
- SignalGuard &operator= (const SignalGuard &) = delete;
-};
-
-// We need an allocator for message structs in sysdeps functions; the "normal" mlibc
-// allocator cannot be used, as the sysdeps function might be called from a signal.
-MemoryAllocator &getSysdepsAllocator();
-
-struct Queue;
-
-struct ElementHandle {
- friend void swap(ElementHandle &u, ElementHandle &v) {
- using std::swap;
- swap(u._queue, v._queue);
- swap(u._n, v._n);
- swap(u._data, v._data);
- }
-
- ElementHandle()
- : _queue{nullptr}, _n{-1}, _data{nullptr} { }
-
- ElementHandle(Queue *queue, int n, void *data)
- : _queue{queue}, _n{n}, _data{data} { }
-
- ElementHandle(const ElementHandle &other);
-
- ElementHandle(ElementHandle &&other)
- : ElementHandle{} {
- swap(*this, other);
- }
-
- ~ElementHandle();
-
- ElementHandle &operator= (ElementHandle other) {
- swap(*this, other);
- return *this;
- }
-
- void *data() {
- return _data;
- }
-
- void advance(size_t size) {
- _data = reinterpret_cast<char *>(_data) + size;
- }
-
-private:
- Queue *_queue;
- int _n;
- void *_data;
-};
-
-struct Queue {
- Queue()
- : _handle{kHelNullHandle} {
- // We do not need to protect those allocations against signals as this constructor
- // is only called during library initialization.
- _chunks[0] = reinterpret_cast<HelChunk *>(getSysdepsAllocator().allocate(sizeof(HelChunk) + 4096));
- _chunks[1] = reinterpret_cast<HelChunk *>(getSysdepsAllocator().allocate(sizeof(HelChunk) + 4096));
-
- recreateQueue();
- }
-
- Queue(const Queue &) = delete;
-
- Queue &operator= (const Queue &) = delete;
-
- void recreateQueue() {
- // Reset the internal queue state.
- _retrieveIndex = 0;
- _nextIndex = 0;
- _lastProgress = 0;
-
- // Setup the queue header.
- HelQueueParameters params {
- .flags = 0,
- .ringShift = 1,
- .numChunks = 2,
- .chunkSize = 4096
- };
- HEL_CHECK(helCreateQueue(&params, &_handle));
-
- auto chunksOffset = (sizeof(HelQueue) + (sizeof(int) << 1) + 63) & ~size_t(63);
- auto reservedPerChunk = (sizeof(HelChunk) + params.chunkSize + 63) & ~size_t(63);
- auto overallSize = chunksOffset + params.numChunks * reservedPerChunk;
-
- void *mapping;
- HEL_CHECK(helMapMemory(_handle, kHelNullHandle, nullptr,
- 0, (overallSize + 0xFFF) & ~size_t(0xFFF),
- kHelMapProtRead | kHelMapProtWrite, &mapping));
-
- _queue = reinterpret_cast<HelQueue *>(mapping);
- auto chunksPtr = reinterpret_cast<std::byte *>(mapping) + chunksOffset;
- for(unsigned int i = 0; i < 2; ++i)
- _chunks[i] = reinterpret_cast<HelChunk *>(chunksPtr + i * reservedPerChunk);
-
- // Reset and enqueue the chunks.
- _chunks[0]->progressFutex = 0;
- _chunks[1]->progressFutex = 0;
- _refCount[0] = 1;
- _refCount[1] = 1;
-
- _queue->indexQueue[0] = 0;
- _queue->indexQueue[1] = 1;
- _queue->headFutex = 0;
- _nextIndex = 2;
- _wakeHeadFutex();
- }
-
- HelHandle getQueue() {
- return _handle;
- }
-
- void trim() { }
-
- ElementHandle dequeueSingle() {
- while(true) {
- __ensure(_retrieveIndex != _nextIndex);
-
- bool done;
- _waitProgressFutex(&done);
-
- auto n = _numberOf(_retrieveIndex);
- __ensure(_refCount[n]);
-
- if(done) {
- retire(n);
-
- _lastProgress = 0;
- _retrieveIndex = ((_retrieveIndex + 1) & kHelHeadMask);
- continue;
- }
-
- // Dequeue the next element.
- auto ptr = (char *)_chunks[n] + sizeof(HelChunk) + _lastProgress;
- auto element = reinterpret_cast<HelElement *>(ptr);
- _lastProgress += sizeof(HelElement) + element->length;
- _refCount[n]++;
- return ElementHandle{this, n, ptr + sizeof(HelElement)};
- }
- }
-
- void retire(int n) {
- __ensure(_refCount[n]);
- if(_refCount[n]-- > 1)
- return;
-
- // Reset and enqueue the chunk again.
- _chunks[n]->progressFutex = 0;
- _refCount[n] = 1;
-
- _queue->indexQueue[_nextIndex & 1] = n;
- _nextIndex = ((_nextIndex + 1) & kHelHeadMask);
- _wakeHeadFutex();
- }
-
- void reference(int n) {
- _refCount[n]++;
- }
-
-private:
- int _numberOf(int index) {
- return _queue->indexQueue[index & 1];
- }
-
- HelChunk *_retrieveChunk() {
- return _chunks[_numberOf(_retrieveIndex)];
- }
-
- void _wakeHeadFutex() {
- auto futex = __atomic_exchange_n(&_queue->headFutex, _nextIndex, __ATOMIC_RELEASE);
- if(futex & kHelHeadWaiters)
- HEL_CHECK(helFutexWake(&_queue->headFutex));
- }
-
- void _waitProgressFutex(bool *done) {
- while(true) {
- auto futex = __atomic_load_n(&_retrieveChunk()->progressFutex, __ATOMIC_ACQUIRE);
- __ensure(!(futex & ~(kHelProgressMask | kHelProgressWaiters | kHelProgressDone)));
- do {
- if(_lastProgress != (futex & kHelProgressMask)) {
- *done = false;
- return;
- }else if(futex & kHelProgressDone) {
- *done = true;
- return;
- }
-
- if(futex & kHelProgressWaiters)
- break; // Waiters bit is already set (in a previous iteration).
- } while(!__atomic_compare_exchange_n(&_retrieveChunk()->progressFutex, &futex,
- _lastProgress | kHelProgressWaiters,
- false, __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE));
-
- HEL_CHECK(helFutexWait(&_retrieveChunk()->progressFutex,
- _lastProgress | kHelProgressWaiters, -1));
- }
- }
-
-private:
- HelHandle _handle;
- HelQueue *_queue;
- HelChunk *_chunks[2];
-
- // Index of the chunk that we are currently retrieving/inserting next.
- int _retrieveIndex;
- int _nextIndex;
-
- // Progress into the current chunk.
- int _lastProgress;
-
- // Number of ElementHandle objects alive.
- int _refCount[2];
-};
-
-inline ElementHandle::~ElementHandle() {
- if(_queue)
- _queue->retire(_n);
-}
-
-inline ElementHandle::ElementHandle(const ElementHandle &other) {
- _queue = other._queue;
- _n = other._n;
- _data = other._data;
-
- _queue->reference(_n);
-}
-
-
-inline HelSimpleResult *parseSimple(ElementHandle &element) {
- auto result = reinterpret_cast<HelSimpleResult *>(element.data());
- element.advance(sizeof(HelSimpleResult));
- return result;
-}
-
-inline HelInlineResult *parseInline(ElementHandle &element) {
- auto result = reinterpret_cast<HelInlineResult *>(element.data());
- element.advance(sizeof(HelInlineResult) + ((result->length + 7) & ~size_t(7)));
- return result;
-}
-
-inline HelLengthResult *parseLength(ElementHandle &element) {
- auto result = reinterpret_cast<HelLengthResult *>(element.data());
- element.advance(sizeof(HelLengthResult));
- return result;
-}
-
-inline HelHandleResult *parseHandle(ElementHandle &element) {
- auto result = reinterpret_cast<HelHandleResult *>(element.data());
- element.advance(sizeof(HelHandleResult));
- return result;
-}
-
-HelHandle getPosixLane();
-HelHandle *cacheFileTable();
-HelHandle getHandleForFd(int fd);
-void clearCachedInfos();
-
-extern thread_local Queue globalQueue;
-
-// This include is here because it needs ElementHandle to be declared
-#include <helix/ipc-structs.hpp>
-
-template <typename ...Args>
-auto exchangeMsgsSync(HelHandle descriptor, Args &&...args) {
- auto results = helix_ng::createResultsTuple(args...);
- auto actions = helix_ng::chainActionArrays(args...);
-
- HEL_CHECK(helSubmitAsync(descriptor, actions.data(),
- actions.size(), globalQueue.getQueue(), 0, 0));
-
- auto element = globalQueue.dequeueSingle();
- void *ptr = element.data();
-
- [&]<size_t ...p>(std::index_sequence<p...>) {
- (results.template get<p>().parse(ptr, element), ...);
- } (std::make_index_sequence<std::tuple_size_v<decltype(results)>>{});
-
- return results;
-}
-
-
-#endif // MLIBC_POSIX_PIPE
diff --git a/lib/mlibc/sysdeps/managarm/include/mlibc/thread-entry.hpp b/lib/mlibc/sysdeps/managarm/include/mlibc/thread-entry.hpp
deleted file mode 100644
index 2dd88a6..0000000
--- a/lib/mlibc/sysdeps/managarm/include/mlibc/thread-entry.hpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#pragma once
-
-#include <mlibc/tcb.hpp>
-
-extern "C" void __mlibc_start_thread(void);
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg, Tcb *tcb);
-
-namespace mlibc {
- void *prepare_stack(void *entry, void *user_arg, void *tcb);
-}
diff --git a/lib/mlibc/sysdeps/managarm/meson.build b/lib/mlibc/sysdeps/managarm/meson.build
deleted file mode 100644
index 3b85e30..0000000
--- a/lib/mlibc/sysdeps/managarm/meson.build
+++ /dev/null
@@ -1,145 +0,0 @@
-
-bragi = find_program('bragi')
-
-bragi_gen = generator(bragi, arguments: [
- '-l', 'frigg',
- '--protobuf',
- '@INPUT@',
- '@OUTPUT@'
- ],
- output: '@BASENAME@.frigg_bragi.hpp')
-
-fs_bragi = bragi_gen.process('../../subprojects/managarm/protocols/fs/fs.bragi')
-posix_bragi = bragi_gen.process('../../subprojects/managarm/protocols/posix/posix.bragi')
-
-managarm_incl = include_directories(
- '../../subprojects/managarm/protocols/posix/include',
- '../../subprojects/managarm/hel/include',
- '../../subprojects/bragi/include')
-
-rtdl_include_dirs += managarm_incl
-rtdl_sources += files(
- 'generic/ensure.cpp',
- 'generic/memory.cpp',
- 'rtdl-generic/support.cpp',
-)
-rtdl_sources += [
- fs_bragi,
- posix_bragi,
-]
-
-libc_include_dirs += include_directories('../../../ports/libdrm/include')
-libc_include_dirs += managarm_incl
-
-libc_sources += files(
- 'generic/drm.cpp',
- 'generic/ensure.cpp',
- 'generic/entry.cpp',
- 'generic/file.cpp',
- 'generic/fork-exec.cpp',
- 'generic/ioctl.cpp',
- 'generic/memory.cpp',
- 'generic/mount.cpp',
- 'generic/net.cpp',
- 'generic/sched.cpp',
- 'generic/signals.cpp',
- 'generic/socket.cpp',
- 'generic/time.cpp'
-)
-libc_sources += [
- fs_bragi,
- posix_bragi,
-]
-
-if host_machine.cpu_family() == 'aarch64'
- libc_sources += files(
- 'aarch64/signals.S',
- 'aarch64/thread_entry.S',
- 'aarch64/thread.cpp'
- )
-elif host_machine.cpu_family() == 'x86_64'
- libc_sources += files(
- 'x86_64/signals.S',
- 'x86_64/thread_entry.S',
- 'x86_64/thread.cpp'
- )
-else
- error('Unknown architecture')
-endif
-
-if not no_headers
- install_headers(
- 'include/abi-bits/access.h',
- 'include/abi-bits/auxv.h',
- 'include/abi-bits/seek-whence.h',
- 'include/abi-bits/vm-flags.h',
- 'include/abi-bits/errno.h',
- 'include/abi-bits/fcntl.h',
- 'include/abi-bits/in.h',
- 'include/abi-bits/stat.h',
- 'include/abi-bits/signal.h',
- 'include/abi-bits/reboot.h',
- 'include/abi-bits/resource.h',
- 'include/abi-bits/socket.h',
- 'include/abi-bits/termios.h',
- 'include/abi-bits/time.h',
- 'include/abi-bits/blkcnt_t.h',
- 'include/abi-bits/blksize_t.h',
- 'include/abi-bits/dev_t.h',
- 'include/abi-bits/gid_t.h',
- 'include/abi-bits/ino_t.h',
- 'include/abi-bits/mode_t.h',
- 'include/abi-bits/nlink_t.h',
- 'include/abi-bits/pid_t.h',
- 'include/abi-bits/uid_t.h',
- 'include/abi-bits/wait.h',
- 'include/abi-bits/limits.h',
- 'include/abi-bits/utsname.h',
- 'include/abi-bits/ptrace.h',
- 'include/abi-bits/poll.h',
- 'include/abi-bits/epoll.h',
- 'include/abi-bits/packet.h',
- 'include/abi-bits/inotify.h',
- 'include/abi-bits/clockid_t.h',
- 'include/abi-bits/shm.h',
- 'include/abi-bits/mqueue.h',
- 'include/abi-bits/suseconds_t.h',
- 'include/abi-bits/fsfilcnt_t.h',
- 'include/abi-bits/fsblkcnt_t.h',
- 'include/abi-bits/socklen_t.h',
- 'include/abi-bits/statfs.h',
- 'include/abi-bits/statvfs.h',
- 'include/abi-bits/ioctls.h',
- 'include/abi-bits/xattr.h',
- 'include/abi-bits/msg.h',
- 'include/abi-bits/vt.h',
- subdir: 'abi-bits',
- follow_symlinks: true
- )
-endif
-
-if not headers_only
- crtstuff = ['crt0']
- if host_machine.cpu_family() in ['x86_64', 'aarch64']
- crtstuff += [
- 'Scrt1',
- 'crti',
- 'crtn'
- ]
- endif
- foreach crtthing : crtstuff
- crtf = crtthing + '.S'
- crt_src = files(host_machine.cpu_family() / 'crt-src' / crtf)
- crt = custom_target(
- crtthing,
- build_by_default: true,
- command: c_compiler.cmd_array() + ['-c', '-o', '@OUTPUT@', '@INPUT@'],
- input: crt_src,
- output: crtthing + '.o',
- install: true,
- install_dir: get_option('libdir')
- )
- endforeach
-
-endif
-
diff --git a/lib/mlibc/sysdeps/managarm/rtdl-generic/support.cpp b/lib/mlibc/sysdeps/managarm/rtdl-generic/support.cpp
deleted file mode 100644
index ee8ecbb..0000000
--- a/lib/mlibc/sysdeps/managarm/rtdl-generic/support.cpp
+++ /dev/null
@@ -1,444 +0,0 @@
-#include <fcntl.h>
-#include <stdint.h>
-#include <string.h>
-#include <cstddef>
-
-#include <frg/manual_box.hpp>
-#include <frg/string.hpp>
-#include <hel.h>
-#include <hel-syscalls.h>
-
-#include <mlibc/allocator.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <posix.frigg_bragi.hpp>
-#include <fs.frigg_bragi.hpp>
-
-#include <protocols/posix/data.hpp>
-#include <protocols/posix/supercalls.hpp>
-
-// --------------------------------------------------------
-// POSIX I/O functions.
-// --------------------------------------------------------
-
-HelHandle posixLane;
-HelHandle *fileTable;
-
-void cacheFileTable() {
- if(fileTable)
- return;
-
- posix::ManagarmProcessData data;
- HEL_CHECK(helSyscall1(kHelCallSuper + posix::superGetProcessData, reinterpret_cast<HelWord>(&data)));
- posixLane = data.posixLane;
- fileTable = data.fileTable;
-}
-
-template<typename T>
-T load(void *ptr) {
- T result;
- memcpy(&result, ptr, sizeof(T));
- return result;
-}
-
-// This Queue implementation is more simplistic than the ones in mlibc and helix.
-// In fact, we only manage a single chunk; this minimizes the memory usage of the queue.
-struct Queue {
- Queue()
- : _handle{kHelNullHandle}, _lastProgress(0) {
- HelQueueParameters params {
- .flags = 0,
- .ringShift = 0,
- .numChunks = 1,
- .chunkSize = 4096
- };
- HEL_CHECK(helCreateQueue(&params, &_handle));
-
- auto chunksOffset = (sizeof(HelQueue) + (sizeof(int) << 0) + 63) & ~size_t(63);
- auto reservedPerChunk = (sizeof(HelChunk) + params.chunkSize + 63) & ~size_t(63);
- auto overallSize = chunksOffset + params.numChunks * reservedPerChunk;
-
- void *mapping;
- HEL_CHECK(helMapMemory(_handle, kHelNullHandle, nullptr,
- 0, (overallSize + 0xFFF) & ~size_t(0xFFF),
- kHelMapProtRead | kHelMapProtWrite, &mapping));
-
- _queue = reinterpret_cast<HelQueue *>(mapping);
- _chunk = reinterpret_cast<HelChunk *>(
- reinterpret_cast<std::byte *>(mapping) + chunksOffset);
-
- // Reset and enqueue the first chunk.
- _chunk->progressFutex = 0;
-
- _queue->indexQueue[0] = 0;
- _queue->headFutex = 1;
- _nextIndex = 1;
- _wakeHeadFutex();
- }
-
- Queue(const Queue &) = delete;
-
- Queue &operator= (const Queue &) = delete;
-
- HelHandle getHandle() {
- return _handle;
- }
-
- void *dequeueSingle() {
- while(true) {
- bool done;
- _waitProgressFutex(&done);
- if(done) {
- // Reset and enqueue the chunk again.
- _chunk->progressFutex = 0;
-
- _queue->indexQueue[0] = 0;
- _nextIndex = ((_nextIndex + 1) & kHelHeadMask);
- _wakeHeadFutex();
-
- _lastProgress = 0;
- continue;
- }
-
- // Dequeue the next element.
- auto ptr = (char *)_chunk + sizeof(HelChunk) + _lastProgress;
- auto element = load<HelElement>(ptr);
- _lastProgress += sizeof(HelElement) + element.length;
- return ptr + sizeof(HelElement);
- }
- }
-
-private:
- void _wakeHeadFutex() {
- auto futex = __atomic_exchange_n(&_queue->headFutex, _nextIndex, __ATOMIC_RELEASE);
- if(futex & kHelHeadWaiters)
- HEL_CHECK(helFutexWake(&_queue->headFutex));
- }
-
- void _waitProgressFutex(bool *done) {
- while(true) {
- auto futex = __atomic_load_n(&_chunk->progressFutex, __ATOMIC_ACQUIRE);
- __ensure(!(futex & ~(kHelProgressMask | kHelProgressWaiters | kHelProgressDone)));
- do {
- if(_lastProgress != (futex & kHelProgressMask)) {
- *done = false;
- return;
- }else if(futex & kHelProgressDone) {
- *done = true;
- return;
- }
-
- if(futex & kHelProgressWaiters)
- break; // Waiters bit is already set (in a previous iteration).
- } while(!__atomic_compare_exchange_n(&_chunk->progressFutex, &futex,
- _lastProgress | kHelProgressWaiters,
- false, __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE));
-
- HEL_CHECK(helFutexWait(&_chunk->progressFutex,
- _lastProgress | kHelProgressWaiters, -1));
- }
- }
-
-private:
- HelHandle _handle;
- HelQueue *_queue;
- HelChunk *_chunk;
- int _nextIndex;
- int _lastProgress;
-};
-
-frg::manual_box<Queue> globalQueue;
-
-HelSimpleResult *parseSimple(void *&element) {
- auto result = reinterpret_cast<HelSimpleResult *>(element);
- element = (char *)element + sizeof(HelSimpleResult);
- return result;
-}
-
-HelInlineResult *parseInline(void *&element) {
- auto result = reinterpret_cast<HelInlineResult *>(element);
- element = (char *)element + sizeof(HelInlineResult)
- + ((result->length + 7) & ~size_t(7));
- return result;
-}
-
-HelLengthResult *parseLength(void *&element) {
- auto result = reinterpret_cast<HelLengthResult *>(element);
- element = (char *)element + sizeof(HelLengthResult);
- return result;
-}
-
-HelHandleResult *parseHandle(void *&element) {
- auto result = reinterpret_cast<HelHandleResult *>(element);
- element = (char *)element + sizeof(HelHandleResult);
- return result;
-}
-
-namespace mlibc {
-
-int sys_tcb_set(void *pointer) {
-#if defined(__aarch64__)
- asm volatile ("msr tpidr_el0, %0" :: "r"(pointer));
-#else
- HEL_CHECK(helWriteFsBase(pointer));
-#endif
- return 0;
-}
-
-int sys_open(const char *path, int flags, mode_t mode, int *fd) {
- cacheFileTable();
- HelAction actions[4];
-
- managarm::posix::OpenAtRequest<MemoryAllocator> req(getAllocator());
- req.set_fd(AT_FDCWD);
- req.set_flags(flags);
- req.set_mode(mode);
- req.set_path(frg::string<MemoryAllocator>(getAllocator(), path));
-
- if(!globalQueue.valid())
- globalQueue.initialize();
-
- frg::string<MemoryAllocator> head(getAllocator());
- frg::string<MemoryAllocator> tail(getAllocator());
- head.resize(req.size_of_head());
- tail.resize(req.size_of_tail());
- bragi::limited_writer headWriter{head.data(), head.size()};
- bragi::limited_writer tailWriter{tail.data(), tail.size()};
- auto headOk = req.encode_head(headWriter);
- auto tailOk = req.encode_tail(tailWriter);
- __ensure(headOk);
- __ensure(tailOk);
-
- actions[0].type = kHelActionOffer;
- actions[0].flags = kHelItemAncillary;
- actions[1].type = kHelActionSendFromBuffer;
- actions[1].flags = kHelItemChain;
- actions[1].buffer = head.data();
- actions[1].length = head.size();
- actions[2].type = kHelActionSendFromBuffer;
- actions[2].flags = kHelItemChain;
- actions[2].buffer = tail.data();
- actions[2].length = tail.size();
- actions[3].type = kHelActionRecvInline;
- actions[3].flags = 0;
- HEL_CHECK(helSubmitAsync(posixLane, actions, 4, globalQueue->getHandle(), 0, 0));
-
- auto element = globalQueue->dequeueSingle();
- auto offer = parseHandle(element);
- auto send_head = parseSimple(element);
- auto send_tail = parseSimple(element);
- auto recv_resp = parseInline(element);
- HEL_CHECK(offer->error);
- HEL_CHECK(send_head->error);
- HEL_CHECK(send_tail->error);
- HEL_CHECK(recv_resp->error);
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getAllocator());
- resp.ParseFromArray(recv_resp->data, recv_resp->length);
-
- if(resp.error() == managarm::posix::Errors::FILE_NOT_FOUND)
- return -1;
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *fd = resp.fd();
- return 0;
-}
-
-int sys_seek(int fd, off_t offset, int whence, off_t *new_offset) {
- __ensure(whence == SEEK_SET);
-
- cacheFileTable();
- auto lane = fileTable[fd];
- HelAction actions[3];
-
- managarm::fs::CntRequest<MemoryAllocator> req(getAllocator());
- req.set_req_type(managarm::fs::CntReqType::SEEK_ABS);
- req.set_rel_offset(offset);
-
- if(!globalQueue.valid())
- globalQueue.initialize();
-
- frg::string<MemoryAllocator> ser(getAllocator());
- req.SerializeToString(&ser);
- actions[0].type = kHelActionOffer;
- actions[0].flags = kHelItemAncillary;
- actions[1].type = kHelActionSendFromBuffer;
- actions[1].flags = kHelItemChain;
- actions[1].buffer = ser.data();
- actions[1].length = ser.size();
- actions[2].type = kHelActionRecvInline;
- actions[2].flags = 0;
- HEL_CHECK(helSubmitAsync(lane, actions, 3, globalQueue->getHandle(), 0, 0));
-
- auto element = globalQueue->dequeueSingle();
- auto offer = parseHandle(element);
- auto send_req = parseSimple(element);
- auto recv_resp = parseInline(element);
- HEL_CHECK(offer->error);
- HEL_CHECK(send_req->error);
- HEL_CHECK(recv_resp->error);
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getAllocator());
- resp.ParseFromArray(recv_resp->data, recv_resp->length);
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *new_offset = offset;
- return 0;
-}
-
-int sys_read(int fd, void *data, size_t length, ssize_t *bytes_read) {
- cacheFileTable();
- auto lane = fileTable[fd];
- HelAction actions[5];
-
- managarm::fs::CntRequest<MemoryAllocator> req(getAllocator());
- req.set_req_type(managarm::fs::CntReqType::READ);
- req.set_size(length);
-
- if(!globalQueue.valid())
- globalQueue.initialize();
-
- frg::string<MemoryAllocator> ser(getAllocator());
- req.SerializeToString(&ser);
- actions[0].type = kHelActionOffer;
- actions[0].flags = kHelItemAncillary;
- actions[1].type = kHelActionSendFromBuffer;
- actions[1].flags = kHelItemChain;
- actions[1].buffer = ser.data();
- actions[1].length = ser.size();
- actions[2].type = kHelActionImbueCredentials;
- actions[2].handle = kHelThisThread;
- actions[2].flags = kHelItemChain;
- actions[3].type = kHelActionRecvInline;
- actions[3].flags = kHelItemChain;
- actions[4].type = kHelActionRecvToBuffer;
- actions[4].flags = 0;
- actions[4].buffer = data;
- actions[4].length = length;
- HEL_CHECK(helSubmitAsync(lane, actions, 5, globalQueue->getHandle(), 0, 0));
-
- auto element = globalQueue->dequeueSingle();
- auto offer = parseHandle(element);
- auto send_req = parseSimple(element);
- auto imbue_creds = parseSimple(element);
- auto recv_resp = parseInline(element);
- auto recv_data = parseLength(element);
- HEL_CHECK(offer->error);
- HEL_CHECK(send_req->error);
- HEL_CHECK(imbue_creds->error);
- HEL_CHECK(recv_resp->error);
- HEL_CHECK(recv_data->error);
-
- managarm::fs::SvrResponse<MemoryAllocator> resp(getAllocator());
- resp.ParseFromArray(recv_resp->data, recv_resp->length);
- __ensure(resp.error() == managarm::fs::Errors::SUCCESS);
- *bytes_read = recv_data->length;
- return 0;
-}
-
-int sys_vm_map(void *hint, size_t size, int prot, int flags, int fd, off_t offset, void **window) {
- cacheFileTable();
- HelAction actions[3];
-
- managarm::posix::VmMapRequest<MemoryAllocator> req(getAllocator());
- req.set_address_hint(reinterpret_cast<uintptr_t>(hint));
- req.set_size(size);
- req.set_mode(prot);
- req.set_flags(flags);
- req.set_fd(fd);
- req.set_rel_offset(offset);
-
- if(!globalQueue.valid())
- globalQueue.initialize();
-
- frg::string<MemoryAllocator> ser(getAllocator());
- req.SerializeToString(&ser);
- actions[0].type = kHelActionOffer;
- actions[0].flags = kHelItemAncillary;
- actions[1].type = kHelActionSendFromBuffer;
- actions[1].flags = kHelItemChain;
- actions[1].buffer = ser.data();
- actions[1].length = ser.size();
- actions[2].type = kHelActionRecvInline;
- actions[2].flags = 0;
- HEL_CHECK(helSubmitAsync(posixLane, actions, 3,
- globalQueue->getHandle(), 0, 0));
-
- auto element = globalQueue->dequeueSingle();
- auto offer = parseHandle(element);
- auto send_req = parseSimple(element);
- auto recv_resp = parseInline(element);
-
- HEL_CHECK(offer->error);
- HEL_CHECK(send_req->error);
- HEL_CHECK(recv_resp->error);
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getAllocator());
- resp.ParseFromArray(recv_resp->data, recv_resp->length);
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- *window = reinterpret_cast<void *>(resp.offset());
- return 0;
-}
-
-int sys_close(int fd) {
- cacheFileTable();
- HelAction actions[3];
-
- managarm::posix::CloseRequest<MemoryAllocator> req(getAllocator());
- req.set_fd(fd);
-
- if(!globalQueue.valid())
- globalQueue.initialize();
-
- frg::string<MemoryAllocator> ser(getAllocator());
- req.SerializeToString(&ser);
- actions[0].type = kHelActionOffer;
- actions[0].flags = kHelItemAncillary;
- actions[1].type = kHelActionSendFromBuffer;
- actions[1].flags = kHelItemChain;
- actions[1].buffer = ser.data();
- actions[1].length = ser.size();
- actions[2].type = kHelActionRecvInline;
- actions[2].flags = 0;
- HEL_CHECK(helSubmitAsync(posixLane, actions, 3, globalQueue->getHandle(), 0, 0));
-
- auto element = globalQueue->dequeueSingle();
- auto offer = parseHandle(element);
- auto send_req = parseSimple(element);
- auto recv_resp = parseInline(element);
- HEL_CHECK(offer->error);
- HEL_CHECK(send_req->error);
- HEL_CHECK(recv_resp->error);
-
- managarm::posix::SvrResponse<MemoryAllocator> resp(getAllocator());
- resp.ParseFromArray(recv_resp->data, recv_resp->length);
- __ensure(resp.error() == managarm::posix::Errors::SUCCESS);
- return 0;
-}
-
-int sys_futex_tid() {
- HelWord tid = 0;
- HEL_CHECK(helSyscall0_1(kHelCallSuper + posix::superGetTid,
- &tid));
-
- return tid;
-}
-
-int sys_futex_wait(int *pointer, int expected, const struct timespec *time) {
- // This implementation is inherently signal-safe.
- if(time) {
- if(helFutexWait(pointer, expected, time->tv_nsec + time->tv_sec * 1000000000))
- return -1;
- return 0;
- }
- if(helFutexWait(pointer, expected, -1))
- return -1;
- return 0;
-}
-
-int sys_futex_wake(int *pointer) {
- // This implementation is inherently signal-safe.
- if(helFutexWake(pointer))
- return -1;
- return 0;
-}
-
-
-} // namespace mlibc
diff --git a/lib/mlibc/sysdeps/managarm/x86_64/crt-src/Scrt1.S b/lib/mlibc/sysdeps/managarm/x86_64/crt-src/Scrt1.S
deleted file mode 100644
index d0e8213..0000000
--- a/lib/mlibc/sysdeps/managarm/x86_64/crt-src/Scrt1.S
+++ /dev/null
@@ -1,8 +0,0 @@
-.section .text
-.global _start
-_start:
- mov %rsp, %rdi
- lea main(%rip), %rsi
- call __mlibc_entry
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/managarm/x86_64/crt-src/crt0.S b/lib/mlibc/sysdeps/managarm/x86_64/crt-src/crt0.S
deleted file mode 100644
index 6afb421..0000000
--- a/lib/mlibc/sysdeps/managarm/x86_64/crt-src/crt0.S
+++ /dev/null
@@ -1,10 +0,0 @@
-
-.section .text
-.global _start
-_start:
- mov %rsp, %rdi
- mov $main, %rsi
- call __mlibc_entry
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/managarm/x86_64/crt-src/crti.S b/lib/mlibc/sysdeps/managarm/x86_64/crt-src/crti.S
deleted file mode 100644
index 1ca20f2..0000000
--- a/lib/mlibc/sysdeps/managarm/x86_64/crt-src/crti.S
+++ /dev/null
@@ -1,15 +0,0 @@
- .ident "x86_64-managarm-mlibc crti"
-
- .section .init
- .globl _init
- .type _init,@function
-_init:
- push %rax
-
- .section .fini
- .globl _fini
- .type _fini,@function
-_fini:
- push %rax
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/managarm/x86_64/crt-src/crtn.S b/lib/mlibc/sysdeps/managarm/x86_64/crt-src/crtn.S
deleted file mode 100644
index fdb309e..0000000
--- a/lib/mlibc/sysdeps/managarm/x86_64/crt-src/crtn.S
+++ /dev/null
@@ -1,11 +0,0 @@
-.ident "x86_64-managarm-mlibc crtn"
-
-.section .init
- pop %rax
- ret
-
-.section .fini
- pop %rax
- ret
-
-.section .note.GNU-stack,"",%progbits
diff --git a/lib/mlibc/sysdeps/managarm/x86_64/signals.S b/lib/mlibc/sysdeps/managarm/x86_64/signals.S
deleted file mode 100644
index 33ac4a3..0000000
--- a/lib/mlibc/sysdeps/managarm/x86_64/signals.S
+++ /dev/null
@@ -1,10 +0,0 @@
-
-.section .text
-.global __mlibc_signal_restore
-__mlibc_signal_restore:
- mov $0x80000006, %rdi
- syscall
- ud2
-
-.section .note.GNU-stack,"",%progbits
-
diff --git a/lib/mlibc/sysdeps/managarm/x86_64/thread.cpp b/lib/mlibc/sysdeps/managarm/x86_64/thread.cpp
deleted file mode 100644
index 88f1bf3..0000000
--- a/lib/mlibc/sysdeps/managarm/x86_64/thread.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <mlibc/thread-entry.hpp>
-#include <mlibc/all-sysdeps.hpp>
-#include <mlibc/tcb.hpp>
-#include <bits/ensure.h>
-#include <sys/mman.h>
-#include <errno.h>
-#include <stdint.h>
-#include <stddef.h>
-
-extern "C" void __mlibc_enter_thread(void *entry, void *user_arg, Tcb *tcb) {
- // Wait until our parent sets up the TID.
- while(!__atomic_load_n(&tcb->tid, __ATOMIC_RELAXED))
- mlibc::sys_futex_wait(&tcb->tid, 0, nullptr);
-
- if(mlibc::sys_tcb_set(tcb))
- __ensure(!"sys_tcb_set() failed");
-
- tcb->invokeThreadFunc(entry, user_arg);
-
- auto self = reinterpret_cast<Tcb *>(tcb);
-
- __atomic_store_n(&self->didExit, 1, __ATOMIC_RELEASE);
- mlibc::sys_futex_wake(&self->didExit);
-
- mlibc::sys_thread_exit();
-}
-
-namespace mlibc {
-
-static constexpr size_t default_stacksize = 0x200000;
-
-int sys_prepare_stack(void **stack, void *entry, void *user_arg, void *tcb, size_t *stack_size, size_t *guard_size, void **stack_base) {
- if (!*stack_size)
- *stack_size = default_stacksize;
- *guard_size = 0;
-
- if (*stack) {
- *stack_base = *stack;
- } else {
- *stack_base = mmap(nullptr, *stack_size, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- if(*stack_base == MAP_FAILED) {
- return errno;
- }
- }
-
- uintptr_t *sp = reinterpret_cast<uintptr_t *>(reinterpret_cast<uintptr_t>(*stack_base) + *stack_size);
-
- *--sp = reinterpret_cast<uintptr_t>(tcb);
- *--sp = reinterpret_cast<uintptr_t>(user_arg);
- *--sp = reinterpret_cast<uintptr_t>(entry);
- *stack = reinterpret_cast<void*>(sp);
- return 0;
-}
-
-} //namespace mlibc
diff --git a/lib/mlibc/sysdeps/managarm/x86_64/thread_entry.S b/lib/mlibc/sysdeps/managarm/x86_64/thread_entry.S
deleted file mode 100644
index 51e703b..0000000
--- a/lib/mlibc/sysdeps/managarm/x86_64/thread_entry.S
+++ /dev/null
@@ -1,11 +0,0 @@
-
-.section .text
-.global __mlibc_start_thread
-__mlibc_start_thread:
- pop %rdi
- pop %rsi
- pop %rdx
- call __mlibc_enter_thread
-
-.section .note.GNU-stack,"",%progbits
-