1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 25c48b108SAl Viro# 35c48b108SAl Viro# arch/i386/setjmp.S 45c48b108SAl Viro# 55c48b108SAl Viro# setjmp/longjmp for the i386 architecture 65c48b108SAl Viro# 75c48b108SAl Viro 85c48b108SAl Viro# 95c48b108SAl Viro# The jmp_buf is assumed to contain the following, in order: 105c48b108SAl Viro# %ebx 115c48b108SAl Viro# %esp 125c48b108SAl Viro# %ebp 135c48b108SAl Viro# %esi 145c48b108SAl Viro# %edi 155c48b108SAl Viro# <return address> 165c48b108SAl Viro# 175c48b108SAl Viro 185c48b108SAl Viro .text 195c48b108SAl Viro .align 4 20f44f1e7dSFlorian Fainelli .globl kernel_setjmp 21f44f1e7dSFlorian Fainelli .type kernel_setjmp, @function 22f44f1e7dSFlorian Fainellikernel_setjmp: 235c48b108SAl Viro#ifdef _REGPARM 245c48b108SAl Viro movl %eax,%edx 255c48b108SAl Viro#else 265c48b108SAl Viro movl 4(%esp),%edx 275c48b108SAl Viro#endif 285c48b108SAl Viro popl %ecx # Return address, and adjust the stack 295c48b108SAl Viro xorl %eax,%eax # Return value 305c48b108SAl Viro movl %ebx,(%edx) 315c48b108SAl Viro movl %esp,4(%edx) # Post-return %esp! 325c48b108SAl Viro pushl %ecx # Make the call/return stack happy 335c48b108SAl Viro movl %ebp,8(%edx) 345c48b108SAl Viro movl %esi,12(%edx) 355c48b108SAl Viro movl %edi,16(%edx) 365c48b108SAl Viro movl %ecx,20(%edx) # Return address 37*14b476e0SPeter Zijlstra RET 385c48b108SAl Viro 39f44f1e7dSFlorian Fainelli .size kernel_setjmp,.-kernel_setjmp 405c48b108SAl Viro 415c48b108SAl Viro .text 425c48b108SAl Viro .align 4 43f44f1e7dSFlorian Fainelli .globl kernel_longjmp 44f44f1e7dSFlorian Fainelli .type kernel_longjmp, @function 45f44f1e7dSFlorian Fainellikernel_longjmp: 465c48b108SAl Viro#ifdef _REGPARM 475c48b108SAl Viro xchgl %eax,%edx 485c48b108SAl Viro#else 495c48b108SAl Viro movl 4(%esp),%edx # jmp_ptr address 505c48b108SAl Viro movl 8(%esp),%eax # Return value 515c48b108SAl Viro#endif 525c48b108SAl Viro movl (%edx),%ebx 535c48b108SAl Viro movl 4(%edx),%esp 545c48b108SAl Viro movl 8(%edx),%ebp 555c48b108SAl Viro movl 12(%edx),%esi 565c48b108SAl Viro movl 16(%edx),%edi 575c48b108SAl Viro jmp *20(%edx) 585c48b108SAl Viro 59f44f1e7dSFlorian Fainelli .size kernel_longjmp,.-kernel_longjmp 60