summaryrefslogtreecommitdiff
path: root/arch/x64/linux/syscall.S
blob: 3d7f0b8ac87069edb01c344919d98e8c44cc2ebd (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
/*
The kernel uses the following registers:
%rdi, %rsi, %rdx, %r8, %r9, %r10

The number of the syscall is passed in %rax.

A syscall clobbers:
%rax, %rcx, %r11

The returned value is placed in %rax.
*/
	.text

	.globl syscall1
	.type syscall1, @function

syscall1:
	movq %rsi, %rax // Syscall number.

	syscall

	ret


// 2 parameters.
	.globl _D5tanya3sys5linux7syscallQiFNbNilllZl
	.type _D5tanya3sys5linux7syscallQiFNbNilllZl, @function

_D5tanya3sys5linux7syscallQiFNbNilllZl:
	movq %rdx, %rax

	syscall

	ret


// 6 parameters.
	.globl _D5tanya3sys5linux7syscallQiFNbNilllllllZl
	.type _D5tanya3sys5linux7syscallQiFNbNilllllllZl, @function

_D5tanya3sys5linux7syscallQiFNbNilllllllZl:
	pushq %rbp
	movq %rsp, %rbp

	movq 16(%rbp), %rax

	mov %rcx, %r10

	syscall

	leave
	ret