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
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.