first commit

This commit is contained in:
sam 2024-10-28 13:03:37 +13:00
commit 551ed00a32
11 changed files with 705 additions and 0 deletions

8
.gitignore vendored Normal file
View file

@ -0,0 +1,8 @@
# Xmake cache
.xmake/
build/
# MacOS Cache
.DS_Store

View file

@ -0,0 +1,5 @@
#include <stdlib.h>
int main() {
exit(10);
}

View file

@ -0,0 +1,333 @@
#define sys_read 0
#define sys_write 1
#define sys_open 2
#define sys_close 3
#define sys_stat 4
#define sys_fstat 5
#define sys_lstat 6
#define sys_poll 7
#define sys_lseek 8
#define sys_mmap 9
#define sys_mprotect 10
#define sys_munmap 11
#define sys_brk 12
#define sys_rt_sigaction 13
#define sys_rt_sigprocmask 14
#define sys_rt_sigreturn 15
#define sys_ioctl 16
#define sys_pread64 17
#define sys_pwrite64 18
#define sys_readv 19
#define sys_writev 20
#define sys_access 21
#define sys_pipe 22
#define sys_select 23
#define sys_sched_yield 24
#define sys_mremap 25
#define sys_msync 26
#define sys_mincore 27
#define sys_madvise 28
#define sys_shmget 29
#define sys_shmat 30
#define sys_shmctl 31
#define sys_dup 32
#define sys_dup2 33
#define sys_pause 34
#define sys_nanosleep 35
#define sys_getitimer 36
#define sys_alarm 37
#define sys_setitimer 38
#define sys_getpid 39
#define sys_sendfile 40
#define sys_socket 41
#define sys_connect 42
#define sys_accept 43
#define sys_sendto 44
#define sys_recvfrom 45
#define sys_sendmsg 46
#define sys_recvmsg 47
#define sys_shutdown 48
#define sys_bind 49
#define sys_listen 50
#define sys_getsockname 51
#define sys_getpeername 52
#define sys_socketpair 53
#define sys_setsockopt 54
#define sys_getsockopt 55
#define sys_clone 56
#define sys_fork 57
#define sys_vfork 58
#define sys_execve 59
#define sys_exit 60
#define sys_wait4 61
#define sys_kill 62
#define sys_uname 63
#define sys_semget 64
#define sys_semop 65
#define sys_semctl 66
#define sys_shmdt 67
#define sys_msgget 68
#define sys_msgsnd 69
#define sys_msgrcv 70
#define sys_msgctl 71
#define sys_fcntl 72
#define sys_flock 73
#define sys_fsync 74
#define sys_fdatasync 75
#define sys_truncate 76
#define sys_ftruncate 77
#define sys_getdents 78
#define sys_getcwd 79
#define sys_chdir 80
#define sys_fchdir 81
#define sys_rename 82
#define sys_mkdir 83
#define sys_rmdir 84
#define sys_creat 85
#define sys_link 86
#define sys_unlink 87
#define sys_symlink 88
#define sys_readlink 89
#define sys_chmod 90
#define sys_fchmod 91
#define sys_chown 92
#define sys_fchown 93
#define sys_lchown 94
#define sys_umask 95
#define sys_gettimeofday 96
#define sys_getrlimit 97
#define sys_getrusage 98
#define sys_sysinfo 99
#define sys_times 100
#define sys_ptrace 101
#define sys_getuid 102
#define sys_syslog 103
#define sys_getgid 104
#define sys_setuid 105
#define sys_setgid 106
#define sys_geteuid 107
#define sys_getegid 108
#define sys_setpgid 109
#define sys_getppid 110
#define sys_getpgrp 111
#define sys_setsid 112
#define sys_setreuid 113
#define sys_setregid 114
#define sys_getgroups 115
#define sys_setgroups 116
#define sys_setresuid 117
#define sys_getresuid 118
#define sys_setresgid 119
#define sys_getresgid 120
#define sys_getpgid 121
#define sys_setfsuid 122
#define sys_setfsgid 123
#define sys_getsid 124
#define sys_capget 125
#define sys_capset 126
#define sys_rt_sigpending 127
#define sys_rt_sigtimedwait 128
#define sys_rt_sigqueueinfo 129
#define sys_rt_sigsuspend 130
#define sys_sigaltstack 131
#define sys_utime 132
#define sys_mknod 133
#define sys_uselib 134
#define sys_personality 135
#define sys_ustat 136
#define sys_statfs 137
#define sys_fstatfs 138
#define sys_sysfs 139
#define sys_getpriority 140
#define sys_setpriority 141
#define sys_sched_setparam 142
#define sys_sched_getparam 143
#define sys_sched_setscheduler 144
#define sys_sched_getscheduler 145
#define sys_sched_get_priority_max 146
#define sys_sched_get_priority_min 147
#define sys_sched_rr_get_interval 148
#define sys_mlock 149
#define sys_munlock 150
#define sys_mlockall 151
#define sys_munlockall 152
#define sys_vhangup 153
#define sys_modify_ldt 154
#define sys_pivot_root 155
#define sys__sysctl 156
#define sys_prctl 157
#define sys_arch_prctl 158
#define sys_adjtimex 159
#define sys_setrlimit 160
#define sys_chroot 161
#define sys_sync 162
#define sys_acct 163
#define sys_settimeofday 164
#define sys_mount 165
#define sys_umount2 166
#define sys_swapon 167
#define sys_swapoff 168
#define sys_reboot 169
#define sys_sethostname 170
#define sys_setdomainname 171
#define sys_iopl 172
#define sys_ioperm 173
#define sys_create_module 174
#define sys_init_module 175
#define sys_delete_module 176
#define sys_get_kernel_syms 177
#define sys_query_module 178
#define sys_quotactl 179
#define sys_nfsservctl 180
#define sys_getpmsg 181
#define sys_putpmsg 182
#define sys_afs_syscall 183
#define sys_tuxcall 184
#define sys_security 185
#define sys_gettid 186
#define sys_readahead 187
#define sys_setxattr 188
#define sys_lsetxattr 189
#define sys_fsetxattr 190
#define sys_getxattr 191
#define sys_lgetxattr 192
#define sys_fgetxattr 193
#define sys_listxattr 194
#define sys_llistxattr 195
#define sys_flistxattr 196
#define sys_removexattr 197
#define sys_lremovexattr 198
#define sys_fremovexattr 199
#define sys_tkill 200
#define sys_time 201
#define sys_futex 202
#define sys_sched_setaffinity 203
#define sys_sched_getaffinity 204
#define sys_set_thread_area 205
#define sys_io_setup 206
#define sys_io_destroy 207
#define sys_io_getevents 208
#define sys_io_submit 209
#define sys_io_cancel 210
#define sys_get_thread_area 211
#define sys_lookup_dcookie 212
#define sys_epoll_create 213
#define sys_epoll_ctl_old 214
#define sys_epoll_wait_old 215
#define sys_remap_file_pages 216
#define sys_getdents64 217
#define sys_set_tid_address 218
#define sys_restart_syscall 219
#define sys_semtimedop 220
#define sys_fadvise64 221
#define sys_timer_create 222
#define sys_timer_settime 223
#define sys_timer_gettime 224
#define sys_timer_getoverrun 225
#define sys_timer_delete 226
#define sys_clock_settime 227
#define sys_clock_gettime 228
#define sys_clock_getres 229
#define sys_clock_nanosleep 230
#define sys_exit_group 231
#define sys_epoll_wait 232
#define sys_epoll_ctl 233
#define sys_tgkill 234
#define sys_utimes 235
#define sys_vserver 236
#define sys_mbind 237
#define sys_set_mempolicy 238
#define sys_get_mempolicy 239
#define sys_mq_open 240
#define sys_mq_unlink 241
#define sys_mq_timedsend 242
#define sys_mq_timedreceive 243
#define sys_mq_notify 244
#define sys_mq_getsetattr 245
#define sys_kexec_load 246
#define sys_waitid 247
#define sys_add_key 248
#define sys_request_key 249
#define sys_keyctl 250
#define sys_ioprio_set 251
#define sys_ioprio_get 252
#define sys_inotify_init 253
#define sys_inotify_add_watch 254
#define sys_inotify_rm_watch 255
#define sys_migrate_pages 256
#define sys_openat 257
#define sys_mkdirat 258
#define sys_mknodat 259
#define sys_fchownat 260
#define sys_futimesat 261
#define sys_newfstatat 262
#define sys_unlinkat 263
#define sys_renameat 264
#define sys_linkat 265
#define sys_symlinkat 266
#define sys_readlinkat 267
#define sys_fchmodat 268
#define sys_faccessat 269
#define sys_pselect6 270
#define sys_ppoll 271
#define sys_unshare 272
#define sys_set_robust_list 273
#define sys_get_robust_list 274
#define sys_splice 275
#define sys_tee 276
#define sys_sync_file_range 277
#define sys_vmsplice 278
#define sys_move_pages 279
#define sys_utimensat 280
#define sys_epoll_pwait 281
#define sys_signalfd 282
#define sys_timerfd_create 283
#define sys_eventfd 284
#define sys_fallocate 285
#define sys_timerfd_settime 286
#define sys_timerfd_gettime 287
#define sys_accept4 288
#define sys_signalfd4 289
#define sys_eventfd2 290
#define sys_epoll_create1 291
#define sys_dup3 292
#define sys_pipe2 293
#define sys_inotify_init1 294
#define sys_preadv 295
#define sys_pwritev 296
#define sys_rt_tgsigqueueinfo 297
#define sys_perf_event_open 298
#define sys_recvmmsg 299
#define sys_fanotify_init 300
#define sys_fanotify_mark 301
#define sys_prlimit64 302
#define sys_name_to_handle_at 303
#define sys_open_by_handle_at 304
#define sys_clock_adjtime 305
#define sys_syncfs 306
#define sys_sendmmsg 307
#define sys_setns 308
#define sys_getcpu 309
#define sys_process_vm_readv 310
#define sys_process_vm_writev 311
#define sys_kcmp 312
#define sys_finit_module 313
#define sys_sched_setattr 314
#define sys_sched_getattr 315
#define sys_renameat2 316
#define sys_seccomp 317
#define sys_getrandom 318
#define sys_memfd_create 319
#define sys_kexec_file_load 320
#define sys_bpf 321
#define sys_execveat 322
#define sys_userfaultfd 323
#define sys_membarrier 324
#define sys_mlock2 325
#define sys_copy_file_range 326
#define sys_preadv2 327
#define sys_pwritev2 328
#define sys_pkey_mprotect 329
#define sys_pkey_alloc 330
#define sys_pkey_free 331
#define sys_statx 332

View file

@ -0,0 +1,276 @@
#define sys_io_setup 0
#define sys_io_destroy 1
#define sys_io_submit 2
#define sys_io_cancel 3
#define sys_io_getevents 4
#define sys_setxattr 5
#define sys_lsetxattr 6
#define sys_fsetxattr 7
#define sys_getxattr 8
#define sys_lgetxattr 9
#define sys_fgetxattr 10
#define sys_listxattr 11
#define sys_llistxattr 12
#define sys_flistxattr 13
#define sys_removexattr 14
#define sys_lremovexattr 15
#define sys_fremovexattr 16
#define sys_getcwd 17
#define sys_lookup_dcookie 18
#define sys_eventfd2 19
#define sys_epoll_create1 20
#define sys_epoll_ctl 21
#define sys_epoll_pwait 22
#define sys_dup 23
#define sys_dup3 24
#define sys_fcntl 25
#define sys_inotify_init1 26
#define sys_inotify_add_watch 27
#define sys_inotify_rm_watch 28
#define sys_ioctl 29
#define sys_ioprio_set 30
#define sys_ioprio_get 31
#define sys_flock 32
#define sys_mknodat 33
#define sys_mkdirat 34
#define sys_unlinkat 35
#define sys_symlinkat 36
#define sys_linkat 37
#define sys_renameat 38
#define sys_umount2 39
#define sys_mount 40
#define sys_pivot_root 41
#define sys_nfsservctl 42
#define sys_statfs 43
#define sys_fstatfs 44
#define sys_truncate 45
#define sys_ftruncate 46
#define sys_fallocate 47
#define sys_faccessat 48
#define sys_chdir 49
#define sys_fchdir 50
#define sys_chroot 51
#define sys_fchmod 52
#define sys_fchmodat 53
#define sys_fchownat 54
#define sys_fchown 55
#define sys_openat 56
#define sys_close 57
#define sys_vhangup 58
#define sys_pipe2 59
#define sys_quotactl 60
#define sys_getdents64 61
#define sys_lseek 62
#define sys_read 63
#define sys_write 64
#define sys_readv 65
#define sys_writev 66
#define sys_pread64 67
#define sys_pwrite64 68
#define sys_preadv 69
#define sys_pwritev 70
#define sys_sendfile 71
#define sys_pselect6 72
#define sys_ppoll 73
#define sys_signalfd4 74
#define sys_vmsplice 75
#define sys_splice 76
#define sys_tee 77
#define sys_readlinkat 78
#define sys_newfstatat 79
#define sys_fstat 80
#define sys_sync 81
#define sys_fsync 82
#define sys_fdatasync 83
#define sys_sync_file_range 84
#define sys_timerfd_create 85
#define sys_timerfd_settime 86
#define sys_timerfd_gettime 87
#define sys_utimensat 88
#define sys_acct 89
#define sys_capget 90
#define sys_capset 91
#define sys_personality 92
#define sys_exit 93
#define sys_exit_group 94
#define sys_waitid 95
#define sys_set_tid_address 96
#define sys_unshare 97
#define sys_futex 98
#define sys_set_robust_list 99
#define sys_get_robust_list 100
#define sys_nanosleep 101
#define sys_getitimer 102
#define sys_setitimer 103
#define sys_kexec_load 104
#define sys_init_module 105
#define sys_delete_module 106
#define sys_timer_create 107
#define sys_timer_gettime 108
#define sys_timer_getoverrun 109
#define sys_timer_settime 110
#define sys_timer_delete 111
#define sys_clock_settime 112
#define sys_clock_gettime 113
#define sys_clock_getres 114
#define sys_clock_nanosleep 115
#define sys_syslog 116
#define sys_ptrace 117
#define sys_sched_setparam 118
#define sys_sched_setscheduler 119
#define sys_sched_getscheduler 120
#define sys_sched_getparam 121
#define sys_sched_setaffinity 122
#define sys_sched_getaffinity 123
#define sys_sched_yield 124
#define sys_sched_get_priority_max 125
#define sys_sched_get_priority_min 126
#define sys_sched_rr_get_interval 127
#define sys_restart_syscall 128
#define sys_kill 129
#define sys_tkill 130
#define sys_tgkill 131
#define sys_sigaltstack 132
#define sys_rt_sigsuspend 133
#define sys_rt_sigaction 134
#define sys_rt_sigprocmask 135
#define sys_rt_sigpending 136
#define sys_rt_sigtimedwait 137
#define sys_rt_sigqueueinfo 138
#define sys_rt_sigreturn 139
#define sys_setpriority 140
#define sys_getpriority 141
#define sys_reboot 142
#define sys_setregid 143
#define sys_setgid 144
#define sys_setreuid 145
#define sys_setuid 146
#define sys_setresuid 147
#define sys_getresuid 148
#define sys_setresgid 149
#define sys_getresgid 150
#define sys_setfsuid 151
#define sys_setfsgid 152
#define sys_times 153
#define sys_setpgid 154
#define sys_getpgid 155
#define sys_getsid 156
#define sys_setsid 157
#define sys_getgroups 158
#define sys_setgroups 159
#define sys_uname 160
#define sys_sethostname 161
#define sys_setdomainname 162
#define sys_getrlimit 163
#define sys_setrlimit 164
#define sys_getrusage 165
#define sys_umask 166
#define sys_prctl 167
#define sys_getcpu 168
#define sys_gettimeofday 169
#define sys_settimeofday 170
#define sys_adjtimex 171
#define sys_getpid 172
#define sys_getppid 173
#define sys_getuid 174
#define sys_geteuid 175
#define sys_getgid 176
#define sys_getegid 177
#define sys_gettid 178
#define sys_sysinfo 179
#define sys_mq_open 180
#define sys_mq_unlink 181
#define sys_mq_timedsend 182
#define sys_mq_timedreceive 183
#define sys_mq_notify 184
#define sys_mq_getsetattr 185
#define sys_msgget 186
#define sys_msgctl 187
#define sys_msgrcv 188
#define sys_msgsnd 189
#define sys_semget 190
#define sys_semctl 191
#define sys_semtimedop 192
#define sys_semop 193
#define sys_shmget 194
#define sys_shmctl 195
#define sys_shmat 196
#define sys_shmdt 197
#define sys_socket 198
#define sys_socketpair 199
#define sys_bind 200
#define sys_listen 201
#define sys_accept 202
#define sys_connect 203
#define sys_getsockname 204
#define sys_getpeername 205
#define sys_sendto 206
#define sys_recvfrom 207
#define sys_setsockopt 208
#define sys_getsockopt 209
#define sys_shutdown 210
#define sys_sendmsg 211
#define sys_recvmsg 212
#define sys_readahead 213
#define sys_brk 214
#define sys_munmap 215
#define sys_mremap 216
#define sys_add_key 217
#define sys_request_key 218
#define sys_keyctl 219
#define sys_clone 220
#define sys_execve 221
#define sys_mmap 222
#define sys_fadvise64 223
#define sys_swapon 224
#define sys_swapoff 225
#define sys_mprotect 226
#define sys_msync 227
#define sys_mlock 228
#define sys_munlock 229
#define sys_mlockall 230
#define sys_munlockall 231
#define sys_mincore 232
#define sys_madvise 233
#define sys_remap_file_pages 234
#define sys_mbind 235
#define sys_get_mempolicy 236
#define sys_set_mempolicy 237
#define sys_migrate_pages 238
#define sys_move_pages 239
#define sys_rt_tgsigqueueinfo 240
#define sys_perf_event_open 241
#define sys_accept4 242
#define sys_recvmmsg 243
#define sys_wait4 260
#define sys_prlimit64 261
#define sys_fanotify_init 262
#define sys_fanotify_mark 263
#define sys_name_to_handle_at 264
#define sys_open_by_handle_at 265
#define sys_clock_adjtime 266
#define sys_syncfs 267
#define sys_setns 268
#define sys_sendmmsg 269
#define sys_process_vm_readv 270
#define sys_process_vm_writev 271
#define sys_kcmp 272
#define sys_finit_module 273
#define sys_sched_setattr 274
#define sys_sched_getattr 275
#define sys_renameat2 276
#define sys_seccomp 277
#define sys_getrandom 278
#define sys_memfd_create 279
#define sys_bpf 280
#define sys_execveat 281
#define sys_userfaultfd 282
#define sys_membarrier 283
#define sys_mlock2 284
#define sys_copy_file_range 285
#define sys_preadv2 286
#define sys_pwritev2 287
#define sys_pkey_mprotect 288
#define sys_pkey_alloc 289
#define sys_pkey_free 290
#define sys_statx 291

12
include/syscall.h Normal file
View file

@ -0,0 +1,12 @@
#ifndef __SYSCALL_H__
#define __SYSCALL_H__
#if defined(__linux__) && defined(__aarch64__)
#include "platforms/linux-arm64/syscall.h"
#elif defined(__linux__) && defined(__amd64__)
#include "platforms/linux-amd64/syscall.h"
#endif
extern int syscall(int nr, ...);
#endif

View file

@ -0,0 +1,4 @@
.globl _start
_start:
jmp main

View file

@ -0,0 +1,12 @@
.globl syscall
syscall:
mov rax, rdi
mov rdi, rsi
mov rsi, rdx
mov rdx, rcx
mov r10, r8
mov r8, r9
mov r9, [rsp + 8]
syscall
ret

View file

@ -0,0 +1,5 @@
.globl _start
_start:
ldp x0, x1, [sp], #16
b main

View file

@ -0,0 +1,12 @@
.globl syscall
syscall:
mov x8, x0
mov x0, x1
mov x1, x2
mov x2, x3
mov x3, x4
mov x4, x5
mov x5, x6
svc #0
ret

5
src/stdlib.c Normal file
View file

@ -0,0 +1,5 @@
#include <syscall.h>
void exit(int status) {
syscall(sys_exit, status);
}

33
xmake.lua Normal file
View file

@ -0,0 +1,33 @@
add_rules("mode.debug", "mode.release")
local cflags = { "-fno-builtin" }
local ldflags = { "-nostdlib" }
local includedirs = { "include" }
target("slibc")
set_kind("static")
add_files("src/*.c")
add_includedirs(includedirs)
add_cflags(cflags)
local plat_name
if is_plat("linux") and is_arch("arm64") then
plat_name = "linux-arm64"
elseif is_plat("linux") and is_arch("amd64") then
plat_name = "linux-amd64"
end
if plat_name ~= nil then
local plat_path = "src/platforms/" .. plat_name .. "/"
add_files(plat_path .. "**.s")
end
for _, dir in ipairs(os.dirs("examples/*")) do
target(path.basename(dir))
set_kind("binary")
add_files(dir .. "/*.c")
add_includedirs(includedirs)
add_cflags(cflags)
add_ldflags(ldflags)
add_deps("slibc")
end