summaryrefslogtreecommitdiff
path: root/sys.s
blob: b2d002e95c0f37a1261e9f5097319ff59e51e5cf (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
.ifndef __SYS__
.set __SYS__, 1

.include "syscall.s"

# sys call args:
#	%rdi
#	%rsi
#	%rdx
#	%rcx
#	%r8
#	%r9

.macro __putargs6 arg:req, args:vararg
	movq \arg, %r9
.endm

.macro __putargs5 arg:req, args:vararg
	movq \arg, %r8
.ifnb \args
	__putargs6 \args
.endif
.endm

.macro __putargs4 arg:req, args:vararg
	movq \arg, %rcx
.ifnb \args
	__putargs5 \args
.endif
.endm

.macro __putargs3 arg:req, args:vararg
	movq \arg, %rdx
.ifnb \args
	__putargs4 \args
.endif
.endm

.macro __putargs2 arg:req, args:vararg
	movq \arg, %rsi
.ifnb \args
	__putargs3 \args
.endif
.endm

.macro __putargs1 arg:req, args:vararg
	movq \arg, %rdi
.ifnb \args
	__putargs2 \args
.endif
.endm

.macro sysargs args:vararg
.ifnb \args
	__putargs1 \args
.endif
.endm

.macro sys func:req, args:vararg
	sysargs \args
	movq $__NR_\func, %rax
	syscall
.endm

.endif