xref: /openbmc/linux/arch/x86/um/setjmp_32.S (revision 14b476e0)
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