aboutsummaryrefslogtreecommitdiff
path: root/sys/linux/i386/syscall.h
blob: 5c42f907147ea15a0c5b299706c8ef5ed5d3af92 (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
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
#define ·RestartSysCall                0
#define ·Exit                          1
#define ·Fork                          2
#define ·Read                          3
#define ·Write                         4
#define ·Open                          5
#define ·Close                         6
#define ·WaitPid                       7
#define ·Create                        8
#define ·Link                          9
#define ·Unlink                        10
#define ·ExecVe                        11
#define ·Chdir                         12
#define ·Time                          13
#define ·MkNod                         14
#define ·Chmod                         15
#define ·LChown                        16
#define ·Break                         17
#define ·OldStat                       18
#define ·LSeek                         19
#define ·GetPid                        20
#define ·Mount                         21
#define ·UMount                        22
#define ·SetUid                        23
#define ·GetUid                        24
#define ·STime                         25
#define ·PTrace                        26
#define ·Alarm                         27
#define ·OldFStat                      28
#define ·Pause                         29
#define ·UTime                         30
#define ·STty                          31
#define ·GTty                          32
#define ·Access                        33
#define ·Nice                          34
#define ·FTime                         35
#define ·Sync                          36
#define ·Kill                          37
#define ·Rename                        38
#define ·Mkdir                         39
#define ·Rmdir                         40
#define ·Dup                           41
#define ·Pipe                          42
#define ·Times                         43
#define ·Prof                          44
#define ·Brk                           45
#define ·SetGid                        46
#define ·GetGid                        47
#define ·Signal                        48
#define ·GetEUid                       49
#define ·GetEGid                       50
#define ·Acct                          51
#define ·UMount2                       52
#define ·Lock                          53
#define ·IoCtl                         54
#define ·FCntl                         55
#define ·MPx                           56
#define ·SetPGid                       57
#define ·ULimit                        58
#define ·OldOldUName                   59
#define ·UMask                         60
#define ·Chroot                        61
#define ·UStat                         62
#define ·Dup2                          63
#define ·GetPPid                       64
#define ·GetPGrp                       65
#define ·SetSId                        66
#define ·SigAction                     67
#define ·SGetMask                      68
#define ·SSetMask                      69
#define ·SetReUid                      70
#define ·SetReGid                      71
#define ·SigSuspend                    72
#define ·SigPending                    73
#define ·SetHostname                   74
#define ·SetRLimit                     75
#define ·GetRUsage                     77
#define ·GetTimeOfDayTime32            78
#define ·SetTimeOfDayTime32            79
#define ·GetGroups                     80
#define ·SetGroups                     81
#define ·Select                        82
#define ·SymLink                       83
#define ·OldLStat                      84
#define ·ReadLink                      85
#define ·UseLib                        86
#define ·SwapOn                        87
#define ·Reboot                        88
#define ·ReadDir                       89
#define ·MMap                          90
#define ·MUnmap                        91
#define ·Truncate                      92
#define ·FTruncate                     93
#define ·FChmod                        94
#define ·FChown                        95
#define ·GetPriority                   96
#define ·SetPriority                   97
#define ·ProfIl                        98
#define ·StatFs                        99
#define ·FStatFs                       100
#define ·IoPerm                        101
#define ·SocketCall                    102
#define ·SysLog                        103
#define ·SetITimer                     104
#define ·GetITimer                     105
#define ·Stat                          106
#define ·LStat                         107
#define ·FStat                         108
#define ·OldUName                      109
#define ·IoPl                          110
#define ·VHangUp                       111
#define ·Idle                          112
#define ·Vm86Old                       113
#define ·Wait4                         114
#define ·SwapOff                       115
#define ·SysInfo                       116
#define ·Ipc                           117
#define ·FSync                         118
#define ·SigReturn                     119
#define ·Clone                         120
#define ·SetDomainName                 121
#define ·UName                         122
#define ·ModifyLdT                     123
#define ·AdjTimex                      124
#define ·MProtect                      125
#define ·SigProcMask                   126
#define ·CreateModule                  127
#define ·InItModule                    128
#define ·DeleteModule                  129
#define ·GetKernelSyms                 130
#define ·QuotaCtl                      131
#define ·GetPGid                       132
#define ·FChdir                        133
#define ·BdFlush                       134
#define ·SysFs                         135
#define ·Personality                   136
#define ·AFsSysCall                    137
#define ·SetFsUid                      138
#define ·SetFsGid                      139
#define ·LlSeek                        140
#define ·GetDents                      141
#define ·NewSelect                     142
#define ·FLock                         143
#define ·MSync                         144
#define ·ReadV                         145
#define ·WriteV                        146
#define ·GetsId                        147
#define ·FdAtAsync                     148
#define ·SysCtl                        149
#define ·MLock                         150
#define ·MUnlock                       151
#define ·MLockAll                      152
#define ·MUnlockAll                    153
#define ·SchedSetParam                 154
#define ·SchedGetParam                 155
#define ·SchedSetScheduler             156
#define ·SchedGetScheduler             157
#define ·SchedYield                    158
#define ·SchedGetPriorityMax           159
#define ·SchedGetPriorityMin           160
#define ·SchedRrGetInterval            161
#define ·NanoSleep                     162
#define ·MRemap                        163
#define ·SetResUid                     164
#define ·GetResUid                     165
#define ·Vm86                          166
#define ·QueryModule                   167
#define ·Poll                          168
#define ·NfsServCtl                    169
#define ·SetResGid                     170
#define ·GetResGid                     171
#define ·PrCtl                         172
#define ·RtSigReturn                   173
#define ·RtSigAction                   174
#define ·RtSigProcMask                 175
#define ·RtSigPending                  176
#define ·RtSigTimedWait                177
#define ·RtSigQueueInfo                178
#define ·RtSigSuspend                  179
#define ·PRead64                       180
#define ·PWrite64                      181
#define ·Chown                         182
#define ·GetCwd                        183
#define ·CapGet                        184
#define ·CapSet                        185
#define ·SiGaltStack                   186
#define ·SendFile                      187
#define ·GetPMsg                       188
#define ·PutPMsg                       189
#define ·VFork                         190
#define ·UGetRLimit                    191
#define ·MMap2                         192
#define ·Truncate64                    193
#define ·FTruncate64                   194
#define ·Stat64                        195
#define ·LStat64                       196
#define ·FStat64                       197
#define ·LChown32                      198
#define ·GetUid32                      199
#define ·GetGid32                      200
#define ·GetEUid32                     201
#define ·GetEGid32                     202
#define ·SetReUid32                    203
#define ·SetReGid32                    204
#define ·GetGroups32                   205
#define ·SetGroups32                   206
#define ·FChown32                      207
#define ·SetResUid32                   208
#define ·GetResUid32                   209
#define ·SetResGid32                   210
#define ·GetResGid32                   211
#define ·Chown32                       212
#define ·SetUid32                      213
#define ·SetGid32                      214
#define ·SetFsUid32                    215
#define ·SetFsGid32                    216
#define ·PivotRoot                     217
#define ·MLoaded                       218
#define ·MAdvise                       219
#define ·GetDents64                    220
#define ·FCntl64                       221
#define ·GetTId                        224
#define ·ReadAhead                     225
#define ·SetXAttr                      226
#define ·LSetXAttr                     227
#define ·FSetXAttr                     228
#define ·GetXAttr                      229
#define ·LGetXAttr                     230
#define ·FGetXAttr                     231
#define ·ListXAttr                     232
#define ·LListXAttr                    233
#define ·FListXAttr                    234
#define ·RemoveXAttr                   235
#define ·LRemoveXAttr                  236
#define ·FRemoveXAttr                  237
#define ·TKill                         238
#define ·SendFile64                    239
#define ·Futex                         240
#define ·SchedSetAffinity              241
#define ·SchedGetAffinity              242
#define ·SetThreadArea                 243
#define ·GetThreadArea                 244
#define ·IoSetUp                       245
#define ·IoDestroy                     246
#define ·IoGetEvents                   247
#define ·IoSubmit                      248
#define ·IoCancel                      249
#define ·FAdvise64                     250
#define ·ExitGroup                     252
#define ·LookupDCookie                 253
#define ·EPollCreate                   254
#define ·EPollCtl                      255
#define ·EPollWait                     256
#define ·RemapFilePages                257
#define ·SetTIdAddress                 258
#define ·TimerCreate                   259
#define ·StatFs64                      268
#define ·FStatFs64                     269
#define ·TgKill                        270
#define ·UTimes                        271
#define ·FAdvise6464                   272
#define ·VServer                       273
#define ·MBind                         274
#define ·GetMemPolicy                  275
#define ·SetMemPolicy                  276
#define ·MQOpen                        277
#define ·KExecLoad                     283
#define ·WaitId                        284
#define ·AddKey                        286
#define ·RequestKey                    287
#define ·KeyCtl                        288
#define ·IoPrIoSet                     289
#define ·IoPrIoGet                     290
#define ·INotifyInIt                   291
#define ·INotifyAddWatch               292
#define ·INotifyRmWatch                293
#define ·MigratePages                  294
#define ·OpenAt                        295
#define ·MkdirAt                       296
#define ·MkNodAt                       297
#define ·FChownAt                      298
#define ·FuTimesAt                     299
#define ·FStatAt64                     300
#define ·UnlinkAt                      301
#define ·RenameAt                      302
#define ·LinkAt                        303
#define ·SymLinkAt                     304
#define ·ReadLinkAt                    305
#define ·FChmodAt                      306
#define ·FAccessAt                     307
#define ·PSelect6                      308
#define ·PPoll                         309
#define ·UnShare                       310
#define ·SetRobustList                 311
#define ·GetRobustList                 312
#define ·Splice                        313
#define ·SyncFileRange                 314
#define ·Tee                           315
#define ·VmSplice                      316
#define ·MovePages                     317
#define ·GetCpu                        318
#define ·EPollPWait                    319
#define ·UTimeNsAt                     320
#define ·SignalFd                      321
#define ·TimerFdCreate                 322
#define ·EventFd                       323
#define ·FAllocate                     324
#define ·TimerFdSetTime32              325
#define ·TimerFdGetTime32              326
#define ·SignalFd4                     327
#define ·EventFd2                      328
#define ·EPollCreate1                  329
#define ·Dup3                          330
#define ·Pipe2                         331
#define ·INotifyInIt1                  332
#define ·PreAdv                        333
#define ·PWriteV                       334
#define ·RtTgSigQueueInfo              335
#define ·PerFEventOpen                 336
#define ·RecvMMsg                      337
#define ·FaNotifyInIt                  338
#define ·FaNotifyMark                  339
#define ·PrLimit64                     340
#define ·NameToHandleAt                341
#define ·OpenByHandleAt                342
#define ·ClockAdjTime                  343
#define ·SyncFs                        344
#define ·SendMMsg                      345
#define ·SetNs                         346
#define ·ProcessVmReadV                347
#define ·ProcessVmWriteV               348
#define ·KCmp                          349
#define ·FinItModule                   350
#define ·SchedSetAttr                  351
#define ·SchedGetAttr                  352
#define ·RenameAt2                     353
#define ·SeccoMp                       354
#define ·GetRandom                     355
#define ·MemFdCreate                   356
#define ·BpF                           357
#define ·ExecVeAt                      358
#define ·Socket                        359
#define ·SocketPair                    360
#define ·Bind                          361
#define ·Connect                       362
#define ·Listen                        363
#define ·Accept4                       364
#define ·GetSockOpt                    365
#define ·SetSockOpt                    366
#define ·GetSockName                   367
#define ·GetPeerName                   368
#define ·SendTo                        369
#define ·SendMsg                       370
#define ·RecvFrom                      371
#define ·RecvMsg                       372
#define ·Shutdown                      373
#define ·UserFaultFd                   374
#define ·MemBarrier                    375
#define ·MLock2                        376
#define ·CopyFileRange                 377
#define ·PreAdv2                       378
#define ·PWriteV2                      379
#define ·PKeyMProtect                  380
#define ·PKeyAllOc                     381
#define ·PKeyFree                      382
#define ·StatX                         383
#define ·ArchPrCtl                     384
#define ·IoPGetEvents                  385
#define ·RSeq                          386
#define ·SemGet                        393
#define ·SemCtl                        394
#define ·ShmGet                        395
#define ·ShmCtl                        396
#define ·ShmAt                         397
#define ·ShmDt                         398
#define ·MsgGet                        399
#define ·MsgSend                       400
#define ·MsgRecv                       401
#define ·MsgCtl                        402
#define ·ClockGetTime64                403
#define ·ClockSetTime64                404
#define ·ClockAdjTime64                405
#define ·ClockGetResTime64             406
#define ·ClockNanoSleepTime64          407
#define ·TimerGetTime64                408
#define ·TimerSetTime64                409
#define ·TimerFdGetTime64              410
#define ·TimerFdSetTime64              411
#define ·UTimeNsAtTime64               412
#define ·PSelect6Time64                413
#define ·PPollTime64                   414
#define ·IoPGetEventsTime64            416
#define ·RecvMMsgTime64                417
#define ·MQTimedSendTime64             418
#define ·MQTimedReceiveTime64          419
#define ·SemTimeDopTime64              420
#define ·RtSigTimedWaitTime64          421
#define ·FutexTime64                   422
#define ·SchedRrGetIntervalTime64      423
#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

/* assembly routines */
#define asm   __asm__ __volatile__

#if SYSCALL_NO_TLS
#define SYSCALL_INSNS "int $128"
#else
#define SYSCALL_INSNS "call *%%gs:16"
#endif

#define SYSCALL_INSNS_12 "xchg %%ebx,%%edx ; " SYSCALL_INSNS " ; xchg %%ebx,%%edx"
#define SYSCALL_INSNS_34 "xchg %%ebx,%%edi ; " SYSCALL_INSNS " ; xchg %%ebx,%%edi"

static inline
long _syscall0(long n)
{
    ulong __ret;
    asm(SYSCALL_INSNS : "=a"(__ret) : "a"(n) : "memory");
    return __ret;
}

static inline
long _syscall1(long n, long a1)
{
    ulong __ret;
    asm(SYSCALL_INSNS_12 : "=a"(__ret) : "a"(n), "d"(a1) : "memory");
    return __ret;
}

static inline
long _syscall2(long n, long a1, long a2)
{
    ulong __ret;
    asm(SYSCALL_INSNS_12 : "=a"(__ret) : "a"(n), "d"(a1), "c"(a2) : "memory");
    return __ret;
}

static inline
long _syscall3(long n, long a1, long a2, long a3)
{
    ulong __ret;
#if !defined(__PIC__) || !defined(BROKEN_EBX_ASM)
    asm(SYSCALL_INSNS : "=a"(__ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3) : "memory");
#else
    asm(SYSCALL_INSNS_34 : "=a"(__ret) : "a"(n), "D"(a1), "c"(a2), "d"(a3) : "memory");
#endif
    return __ret;
}

static inline
long _syscall4(long n, long a1, long a2, long a3, long a4)
{
    ulong __ret;
#if !defined(__PIC__) || !defined(BROKEN_EBX_ASM)
    asm(SYSCALL_INSNS : "=a"(__ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3), "S"(a4) : "memory");
#else
    asm(SYSCALL_INSNS_34 : "=a"(__ret) : "a"(n), "D"(a1), "c"(a2), "d"(a3), "S"(a4) : "memory");
#endif
    return __ret;
}

static inline
long _syscall5(long n, long a1, long a2, long a3, long a4, long a5)
{
    ulong __ret;
#if !defined(__PIC__) || !defined(BROKEN_EBX_ASM)
    asm(SYSCALL_INSNS
        : "=a"(__ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5) : "memory");
#else
    asm("pushl %2 ; push %%ebx ; mov 4(%%esp),%%ebx ; " SYSCALL_INSNS " ; pop %%ebx ; add $4,%%esp"
        : "=a"(__ret) : "a"(n), "g"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5) : "memory");
#endif
    return __ret;
}

static inline
long _syscall6(long n, long a1, long a2, long a3, long a4, long a5, long a6)
{
    ulong __ret;
#if !defined(__PIC__) || !defined(BROKEN_EBX_ASM)
    asm("pushl %7 ; push %%ebp ; mov 4(%%esp),%%ebp ; " SYSCALL_INSNS " ; pop %%ebp ; add $4,%%esp"
        : "=a"(__ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5), "g"(a6) : "memory");
#else
    ulong a1a6[2] = { a1, a6 };
    asm("pushl %1 ; push %%ebx ; push %%ebp ; mov 8(%%esp),%%ebx ; mov 4(%%ebx),%%ebp ; mov (%%ebx),%%ebx ; " SYSCALL_INSNS " ; pop %%ebp ; pop %%ebx ; add $4,%%esp"
        : "=a"(__ret) : "g"(&a1a6), "a"(n), "c"(a2), "d"(a3), "S"(a4), "D"(a5) : "memory");
#endif
    return __ret;
}