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