summaryrefslogtreecommitdiff
path: root/kernel/src/sys/syscall_asm.S
blob: a9942cad1c3b1a566b9b3b5436246924154d1bed (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
.extern syscall_handler

.macro pushall
	push %rax
	push %rcx
	push %rdx
	push %rsi
	push %rdi
	push %r8
	push %r9
	push %r10
	push %r11
	pushfq
.endm

.macro popall
	popfq
	pop %r11
	pop %r10
	pop %r9
	pop %r8
	pop %rdi
	pop %rsi
	pop %rdx
	pop %rcx
	pop %rax
.endm

.global __syscall
__syscall:
	pushq %rcx
	pushq %r11

	pushall
	call syscall_handler
	popall

	popfq
	popq %rcx
	sysretq