Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/um/sys-x86_64/setjmp.S
10818 views
1
#
2
# arch/x86_64/setjmp.S
3
#
4
# setjmp/longjmp for the x86-64 architecture
5
#
6
7
#
8
# The jmp_buf is assumed to contain the following, in order:
9
# %rbx
10
# %rsp (post-return)
11
# %rbp
12
# %r12
13
# %r13
14
# %r14
15
# %r15
16
# <return address>
17
#
18
19
.text
20
.align 4
21
.globl setjmp
22
.type setjmp, @function
23
setjmp:
24
pop %rsi # Return address, and adjust the stack
25
xorl %eax,%eax # Return value
26
movq %rbx,(%rdi)
27
movq %rsp,8(%rdi) # Post-return %rsp!
28
push %rsi # Make the call/return stack happy
29
movq %rbp,16(%rdi)
30
movq %r12,24(%rdi)
31
movq %r13,32(%rdi)
32
movq %r14,40(%rdi)
33
movq %r15,48(%rdi)
34
movq %rsi,56(%rdi) # Return address
35
ret
36
37
.size setjmp,.-setjmp
38
39
.text
40
.align 4
41
.globl longjmp
42
.type longjmp, @function
43
longjmp:
44
movl %esi,%eax # Return value (int)
45
movq (%rdi),%rbx
46
movq 8(%rdi),%rsp
47
movq 16(%rdi),%rbp
48
movq 24(%rdi),%r12
49
movq 32(%rdi),%r13
50
movq 40(%rdi),%r14
51
movq 48(%rdi),%r15
52
jmp *56(%rdi)
53
54
.size longjmp,.-longjmp
55
56