aboutsummaryrefslogtreecommitdiff
path: root/sys/linux/amd64/syscall.h
blob: a06e3ba7db0e37bc6057295b636a8b7c995ef377 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
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;
}