Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/x86/um/setjmp_32.S
26451 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#
3
# arch/i386/setjmp.S
4
#
5
# setjmp/longjmp for the i386 architecture
6
#
7
8
#
9
# The jmp_buf is assumed to contain the following, in order:
10
# %ebx
11
# %esp
12
# %ebp
13
# %esi
14
# %edi
15
# <return address>
16
#
17
18
.text
19
.align 4
20
.globl kernel_setjmp
21
.type kernel_setjmp, @function
22
kernel_setjmp:
23
#ifdef _REGPARM
24
movl %eax,%edx
25
#else
26
movl 4(%esp),%edx
27
#endif
28
popl %ecx # Return address, and adjust the stack
29
xorl %eax,%eax # Return value
30
movl %ebx,(%edx)
31
movl %esp,4(%edx) # Post-return %esp!
32
pushl %ecx # Make the call/return stack happy
33
movl %ebp,8(%edx)
34
movl %esi,12(%edx)
35
movl %edi,16(%edx)
36
movl %ecx,20(%edx) # Return address
37
RET
38
39
.size kernel_setjmp,.-kernel_setjmp
40
41
.text
42
.align 4
43
.globl kernel_longjmp
44
.type kernel_longjmp, @function
45
kernel_longjmp:
46
#ifdef _REGPARM
47
xchgl %eax,%edx
48
#else
49
movl 4(%esp),%edx # jmp_ptr address
50
movl 8(%esp),%eax # Return value
51
#endif
52
movl (%edx),%ebx
53
movl 4(%edx),%esp
54
movl 8(%edx),%ebp
55
movl 12(%edx),%esi
56
movl 16(%edx),%edi
57
jmp *20(%edx)
58
59
.size kernel_longjmp,.-kernel_longjmp
60
61