diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2021-03-23 12:15:16 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-03-23 12:15:16 +0100 |
commit | ac7267ac2580590a9253549d8e129c853b6b30c7 (patch) | |
tree | 9425e0d8cfff345312da3af7e963715e776de039 /arch/x86/lib/setjmp_32.S | |
parent | f4d9908504e2a35afc4f39da6aa3436903039121 (diff) | |
parent | 412806653a147177cba75fb62ea633d74c5ad1ee (diff) | |
download | barebox-ac7267ac2580590a9253549d8e129c853b6b30c7.tar.gz barebox-ac7267ac2580590a9253549d8e129c853b6b30c7.tar.xz |
Merge branch 'for-next/bthreads'
Diffstat (limited to 'arch/x86/lib/setjmp_32.S')
-rw-r--r-- | arch/x86/lib/setjmp_32.S | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/arch/x86/lib/setjmp_32.S b/arch/x86/lib/setjmp_32.S new file mode 100644 index 0000000000..38dcb68c1b --- /dev/null +++ b/arch/x86/lib/setjmp_32.S @@ -0,0 +1,60 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Written by H. Peter Anvin <hpa@zytor.com> + * Brought in from Linux v4.4 and modified for U-Boot + * From Linux arch/um/sys-i386/setjmp.S + */ + +#define _REGPARM + +#include <linux/linkage.h> + +.text +.align 8 + +/* + * The jmp_buf is assumed to contain the following, in order: + * %ebx + * %esp + * %ebp + * %esi + * %edi + * <return address> + */ + +ENTRY(setjmp) + + movl %eax, %edx + popl %ecx /* Return address, and adjust the stack */ + xorl %eax, %eax /* Return value */ + movl %ebx, (%edx) + movl %esp, 4(%edx) /* Post-return %esp! */ + pushl %ecx /* Make the call/return stack happy */ + movl %ebp, 8(%edx) + movl %esi, 12(%edx) + movl %edi, 16(%edx) + movl %ecx, 20(%edx) /* Return address */ + ret + +ENDPROC(setjmp) + +ENTRY(longjmp) + + xchgl %eax, %edx + movl (%edx), %ebx + movl 4(%edx), %esp + movl 8(%edx), %ebp + movl 12(%edx), %esi + movl 16(%edx), %edi + jmp *20(%edx) + +ENDPROC(longjmp) + +ENTRY(initjmp) + + movl %edx, 20(%eax) /* Return address */ + movl %ecx, 4(%eax) /* Post-return %esp! */ + xorl %eax, %eax /* Return value */ + ret + +ENDPROC(initjmp) |