aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas <nbnoll@eml.cc>2021-11-17 10:19:58 -0800
committerNicholas <nbnoll@eml.cc>2021-11-17 10:19:58 -0800
commit8d60b38fbe778de30c3a1751b35d8e366882cd01 (patch)
tree51ef447e52fac0cb6f46b4a854e4e7f4f946a29c
parentb27936eb5a877fada8e6edf939e1acb5da535712 (diff)
update: sys
-rw-r--r--include/sys.h12
-rw-r--r--sys/linux/amd64/arch/bits.h18
-rw-r--r--sys/linux/amd64/syscall.h452
-rw-r--r--sys/linux/port/arch/constants.h11
4 files changed, 493 insertions, 0 deletions
diff --git a/include/sys.h b/include/sys.h
new file mode 100644
index 0000000..773ff3a
--- /dev/null
+++ b/include/sys.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#include <sys/constants.h>
+
+#define sys·Oread 0x0u
+#define sys·Owrite 0x1u
+#define sys·Ordwr 0x2u
+
+/* system calls */
+int sys·call(int num, ...);
+int sys·open(char *path, int flag, int mode, int *ret);
+int sys·close(char *path, int flag, int mode, int *ret);
diff --git a/sys/linux/amd64/arch/bits.h b/sys/linux/amd64/arch/bits.h
new file mode 100644
index 0000000..e72e4e8
--- /dev/null
+++ b/sys/linux/amd64/arch/bits.h
@@ -0,0 +1,18 @@
+#pragma once
+
+/* base types */
+#define INT8 char
+#define INT16 short
+#define INT32 int
+#define INT64 long
+#define ADDR long
+
+/* ABI */
+#define PAGESIZE 4096
+#define INTPTR_MIN INT64_MIN
+#define INTPTR_MAX INT64_MAX
+#define UINTPTR_MAX UINT64_MAX
+#define PTRDIFF_MIN INT64_MIN
+#define PTRDIFF_MAX INT64_MAX
+#define SIZE_MAX UINT64_MAX
+#define LONG_MAX 0x7fffffffffffffffL
diff --git a/sys/linux/amd64/syscall.h b/sys/linux/amd64/syscall.h
new file mode 100644
index 0000000..a06e3ba
--- /dev/null
+++ b/sys/linux/amd64/syscall.h
@@ -0,0 +1,452 @@
+#pragma once
+
+#define ·Read 0
+#define ·Write 1
+#define ·Open 2
+#define ·Close 3
+#define ·Stat 4
+#define ·Fstat 5
+#define ·Lstat 6
+#define ·Poll 7
+#define ·Lseek 8
+#define ·Mmap 9
+#define ·Mprotect 10
+#define ·Munmap 11
+#define ·Brk 12
+#define ·RtSigAction 13
+#define ·RtSigProcmask 14
+#define ·RtSigReturn 15
+#define ·IoCtl 16
+#define ·PRead64 17
+#define ·PWrite64 18
+#define ·Readv 19
+#define ·Writev 20
+#define ·Access 21
+#define ·Pipe 22
+#define ·Select 23
+#define ·SchedYield 24
+#define ·MRemap 25
+#define ·MSync 26
+#define ·MIncore 27
+#define ·MAdvise 28
+#define ·ShmGet 29
+#define ·ShmAt 30
+#define ·ShmCtl 31
+#define ·Dup 32
+#define ·Dup2 33
+#define ·Pause 34
+#define ·Nanosleep 35
+#define ·GetItimer 36
+#define ·Alarm 37
+#define ·SetItimer 38
+#define ·GetPid 39
+#define ·SendFile 40
+#define ·Socket 41
+#define ·Connect 42
+#define ·Accept 43
+#define ·SendTo 44
+#define ·RecvFrom 45
+#define ·SendMsg 46
+#define ·RecvMsg 47
+#define ·Shutdown 48
+#define ·Bind 49
+#define ·Listen 50
+#define ·GetSockName 51
+#define ·GetPeerName 52
+#define ·SocketPair 53
+#define ·SetSockOpt 54
+#define ·GetSockOpt 55
+#define ·Clone 56
+#define ·Fork 57
+#define ·Vfork 58
+#define ·Execve 59
+#define ·Exit 60
+#define ·Wait4 61
+#define ·Kill 62
+#define ·Uname 63
+#define ·SemGet 64
+#define ·SemOp 65
+#define ·SemCtl 66
+#define ·ShmDt 67
+#define ·MsgGet 68
+#define ·MsgSnd 69
+#define ·MsgRcv 70
+#define ·MsgCtl 71
+#define ·Fcntl 72
+#define ·FLock 73
+#define ·FSync 74
+#define ·FDataSync 75
+#define ·Truncate 76
+#define ·FTruncate 77
+#define ·GetDents 78
+#define ·GetCwd 79
+#define ·Chdir 80
+#define ·Fchdir 81
+#define ·Rename 82
+#define ·Mkdir 83
+#define ·Rmdir 84
+#define ·Create 85
+#define ·Link 86
+#define ·Unlink 87
+#define ·Symlink 88
+#define ·Readlink 89
+#define ·Chmod 90
+#define ·Fchmod 91
+#define ·Chown 92
+#define ·FChown 93
+#define ·LChown 94
+#define ·UMask 95
+#define ·GetTimeOfDay 96
+#define ·GetRLimit 97
+#define ·GetRUsage 98
+#define ·SysInfo 99
+#define ·Times 100
+#define ·PTrace 101
+#define ·GetUID 102
+#define ·SysLog 103
+#define ·GetGid 104
+#define ·SetUid 105
+#define ·SetGid 106
+#define ·GetEuid 107
+#define ·GetEgid 108
+#define ·SetPgid 109
+#define ·GetPpid 110
+#define ·GetPgrp 111
+#define ·SetSid 112
+#define ·SetReuid 113
+#define ·SetRegid 114
+#define ·GetGroups 115
+#define ·SetGroups 116
+#define ·SetResuid 117
+#define ·GetResuid 118
+#define ·SetResgid 119
+#define ·GetResgid 120
+#define ·GetPgid 121
+#define ·SetFsuid 122
+#define ·SetFsgid 123
+#define ·GetSid 124
+#define ·CapGet 125
+#define ·CapSet 126
+#define ·RtSigPending 127
+#define ·RtSigTimedWait 128
+#define ·RtSigQueueInfo 129
+#define ·RtSigSuspend 130
+#define ·SignaltStack 131
+#define ·UTime 132
+#define ·MkNod 133
+#define ·UseLib 134
+#define ·Personality 135
+#define ·UStat 136
+#define ·StatFs 137
+#define ·FstatFs 138
+#define ·SysFs 139
+#define ·GetPriority 140
+#define ·SetPriority 141
+#define ·SchedSetParam 142
+#define ·SchedGetParam 143
+#define ·SchedSetScheduler 144
+#define ·SchedGetScheduler 145
+#define ·SchedGetPriorityMax 146
+#define ·SchedGetPriorityMin 147
+#define ·SchedRrGetInterval 148
+#define ·MLock 149
+#define ·MUnlock 150
+#define ·MLockAll 151
+#define ·MUnlockAll 152
+#define ·VHangup 153
+#define ·ModifyLdt 154
+#define ·PivotRoot 155
+#define ·Sysctl 156
+#define ·Prctl 157
+#define ·ArchPrctl 158
+#define ·AdjTimex 159
+#define ·SetRLimit 160
+#define ·Chroot 161
+#define ·Sync 162
+#define ·Acct 163
+#define ·Settimeofday 164
+#define ·Mount 165
+#define ·Umount2 166
+#define ·Swapon 167
+#define ·Swapoff 168
+#define ·Reboot 169
+#define ·SetHostName 170
+#define ·SetDomainName 171
+#define ·Iopl 172
+#define ·Ioperm 173
+#define ·CreateModule 174
+#define ·InitModule 175
+#define ·DeleteModule 176
+#define ·GetKernelSyms 177
+#define ·QueryModule 178
+#define ·QuotaCtl 179
+#define ·NfsServCtl 180
+#define ·GetPmsg 181
+#define ·PutPmsg 182
+#define ·AfsSyscall 183
+#define ·TuxCall 184
+#define ·Security 185
+#define ·Gettid 186
+#define ·Readahead 187
+#define ·SetXattr 188
+#define ·LsetXattr 189
+#define ·FsetXattr 190
+#define ·GetXattr 191
+#define ·LgetXattr 192
+#define ·FgetXattr 193
+#define ·ListXattr 194
+#define ·LlistXattr 195
+#define ·FlistXattr 196
+#define ·RemoveXattr 197
+#define ·LremoveXattr 198
+#define ·FremoveXattr 199
+#define ·TKill 200
+#define ·Time 201
+#define ·Futex 202
+#define ·SchedSetAffinity 203
+#define ·SchedGetAffinity 204
+#define ·SetThreadArea 205
+#define ·IoSetup 206
+#define ·IoDestroy 207
+#define ·IoGetEvents 208
+#define ·IoSubmit 209
+#define ·IoCancel 210
+#define ·GetThreadArea 211
+#define ·LookupDCookie 212
+#define ·EpollCreate 213
+#define ·EpollCtlOld 214
+#define ·EpollWaitOld 215
+#define ·RemapFilePages 216
+#define ·Getdents64 217
+#define ·SetTidAddress 218
+#define ·RestartSyscall 219
+#define ·SemtimeDop 220
+#define ·Fadvise64 221
+#define ·TimerCreate 222
+#define ·TimerSetTime 223
+#define ·TimerGetTime 224
+#define ·TimerGetOverrun 225
+#define ·TimerDelete 226
+#define ·ClockSetTime 227
+#define ·ClockGetTime 228
+#define ·ClockGetRes 229
+#define ·ClockNanosleep 230
+#define ·ExitGroup 231
+#define ·EpollWait 232
+#define ·EpollCtl 233
+#define ·Tgkill 234
+#define ·Utimes 235
+#define ·Vserver 236
+#define ·Mbind 237
+#define ·SetMemPolicy 238
+#define ·GetMemPolicy 239
+#define ·MqOpen 240
+#define ·MqUnlink 241
+#define ·MqTimedSend 242
+#define ·MqTimedReceive 243
+#define ·MqNotify 244
+#define ·MqGetSetAttr 245
+#define ·KexecLoad 246
+#define ·Waitid 247
+#define ·AddKey 248
+#define ·RequestKey 249
+#define ·Keyctl 250
+#define ·IoprioSet 251
+#define ·IoprioGet 252
+#define ·InotifyInit 253
+#define ·InotifyAddWatch 254
+#define ·InotifyRmWatch 255
+#define ·MigratePages 256
+#define ·OpenAt 257
+#define ·MkdirAt 258
+#define ·MkNodAt 259
+#define ·FchownAt 260
+#define ·FutimesAt 261
+#define ·NewfstatAt 262
+#define ·UnlinkAt 263
+#define ·RenameAt 264
+#define ·LinkAt 265
+#define ·SymlinkAt 266
+#define ·ReadlinkAt 267
+#define ·FchmodAt 268
+#define ·FaccessAt 269
+#define ·Pselect6 270
+#define ·Ppoll 271
+#define ·Unshare 272
+#define ·SetRobustList 273
+#define ·GetRobustList 274
+#define ·Splice 275
+#define ·Tee 276
+#define ·SyncFileRange 277
+#define ·Vmsplice 278
+#define ·MovePages 279
+#define ·UtimensAt 280
+#define ·EpollPwait 281
+#define ·SignalFd 282
+#define ·TimerFdCreate 283
+#define ·EventFd 284
+#define ·Fallocate 285
+#define ·TimerFdSetTime 286
+#define ·TimerFdGetTime 287
+#define ·Accept4 288
+#define ·SignalFd4 289
+#define ·EventFd2 290
+#define ·EpollCreate1 291
+#define ·Dup3 292
+#define ·Pipe2 293
+#define ·InotifyInit1 294
+#define ·Preadv 295
+#define ·Pwritev 296
+#define ·RtTgSigQueueInfo 297
+#define ·PerfEventOpen 298
+#define ·RecvmMsg 299
+#define ·FanotifyInit 300
+#define ·FanotifyMark 301
+#define ·Prlimit64 302
+#define ·NameToHandleAt 303
+#define ·OpenByHandleAt 304
+#define ·ClockAdjtime 305
+#define ·SyncFs 306
+#define ·SendmMsg 307
+#define ·SetNs 308
+#define ·GetCpu 309
+#define ·ProcessVmReadv 310
+#define ·ProcessVmWritev 311
+#define ·Kcmp 312
+#define ·FinitModule 313
+#define ·SchedSetattr 314
+#define ·SchedGetattr 315
+#define ·Renameat2 316
+#define ·Seccomp 317
+#define ·Getrandom 318
+#define ·MemfdCreate 319
+#define ·KexecFileLoad 320
+#define ·Bpf 321
+#define ·ExecveAt 322
+#define ·UserFaultFd 323
+#define ·MemBarrier 324
+#define ·Mlock2 325
+#define ·CopyFileRange 326
+#define ·Preadv2 327
+#define ·Pwritev2 328
+#define ·PkeyMprotect 329
+#define ·PkeyAlloc 330
+#define ·PkeyFree 331
+#define ·Statx 332
+#define ·IoPgetEvents 333
+#define ·Rseq 334
+#define ·PidfdSendSignal 424
+#define ·IoUringSetup 425
+#define ·IoUringEnter 426
+#define ·IoUringRegister 427
+#define ·OpenTree 428
+#define ·MoveMount 429
+#define ·FsOpen 430
+#define ·FsConfig 431
+#define ·FsMount 432
+#define ·FsPick 433
+#define ·PidFdOpen 434
+#define ·Clone3 435
+#define ·CloseRange 436
+#define ·OpenAt2 437
+#define ·PidFdGetFd 438
+#define ·FaccessAt2 439
+#define ·ProcessMadvise 440
+
+/*
+ * x86-64 linux ABI
+ * syscall rdi rsi rdx r10 r8 r9
+ * return value in rax
+ *
+ * the syntax for extended GNU inline assembly
+ * asm([instructions] : [output operands] : [input operands] : [clobbers] )
+ * operands are written as "constrants"(symbol)
+ * available constraints are:
+ * 'r': any register
+ * 'a': eax, 'b': ebx, 'c': ecx, 'd': edx, 'S', esi, 'D' edi
+ * '=': write only, previous value is discarded
+ */
+#define sysarg(x) ((long)(x))
+
+static inline long
+_syscall0(long n)
+{
+ ulong ret;
+ asm volatile("syscall" : "=a"(ret)
+ : "a"(n)
+ : "rcx", "r11", "memory"
+ );
+ return ret;
+}
+
+static inline long
+_syscall1(long n, long a1)
+{
+ ulong ret;
+ asm volatile("syscall" : "=a"(ret)
+ : "a"(n), "D"(a1)
+ : "rcx", "r11", "memory"
+ );
+ return ret;
+}
+
+static inline long
+_syscall2(long n, long a1, long a2)
+{
+ ulong ret;
+ asm volatile("syscall" : "=a"(ret)
+ : "a"(n), "D"(a1), "S"(a2)
+ : "rcx", "r11", "memory"
+ );
+ return ret;
+}
+
+static inline long
+_syscall3(long n, long a1, long a2, long a3)
+{
+ ulong ret;
+ asm volatile("syscall" : "=a"(ret)
+ : "a"(n), "D"(a1), "S"(a2), "d"(a3)
+ : "rcx", "r11", "memory"
+ );
+ return ret;
+}
+
+static inline long
+_syscall4(long n, long a1, long a2, long a3, long a4)
+{
+ ulong ret;
+ register long r10 asm("r10") = a4;
+ asm volatile("syscall" : "=a"(ret)
+ : "a"(n), "D"(a1), "S"(a2), "d"(a3), "r"(r10)
+ : "rcx", "r11", "memory"
+ );
+ return ret;
+}
+
+static inline long
+_syscall5(long n, long a1, long a2, long a3, long a4, long a5)
+{
+ ulong ret;
+ register long r10 asm("r10") = a4;
+ register long r8 asm("r8") = a5;
+ asm volatile("syscall" : "=a"(ret)
+ : "a"(n), "D"(a1), "S"(a2), "d"(a3), "r"(r10), "r"(r8)
+ : "rcx", "r11", "memory"
+ );
+ return ret;
+}
+
+static inline long
+_syscall6(long n, long a1, long a2, long a3, long a4, long a5, long a6)
+{
+ ulong ret;
+ register long r10 __asm__("r10") = a4;
+ register long r8 __asm__("r8") = a5;
+ register long r9 __asm__("r9") = a6;
+ asm volatile("syscall" : "=a"(ret)
+ : "a"(n), "D"(a1), "S"(a2), "d"(a3), "r"(r10), "r"(r8), "r"(r9)
+ : "rcx", "r11", "memory"
+ );
+ return ret;
+}
diff --git a/sys/linux/port/arch/constants.h b/sys/linux/port/arch/constants.h
new file mode 100644
index 0000000..dce0489
--- /dev/null
+++ b/sys/linux/port/arch/constants.h
@@ -0,0 +1,11 @@
+#pragma once
+
+#define sys·Ocreate 0x40u
+#define sys·Onotty 0x100u
+#define sys·Otrunc 0x200u
+#define sys·Oappend 0x400u
+#define sys·Onoblock 0x800u
+#define sys·Osync 0x1000u
+#define sys·Oasync 0x2000u
+#define sys·Odirectory 0x10000u
+#define sys·Onofollow 0x20000u