* [U-Boot] [PATCH v3] x86: Add 64-bit setjmp/longjmp implementation @ 2018-06-19 18:39 Ivan Gorinov 2018-06-19 18:40 ` Ivan Gorinov 0 siblings, 1 reply; 4+ messages in thread From: Ivan Gorinov @ 2018-06-19 18:39 UTC (permalink / raw) To: u-boot Add setjmp/longjmp functions for x86_64. v3: Removed the FPU control word and MXCSR; Corrected SPDX License Identifier. v2: Added the FPU control word and MXCSR to jmp_buf; Using ENTRY/ENDPROC macros. Ivan Gorinov (1): x86: Add 64-bit setjmp/longjmp implementation arch/x86/cpu/x86_64/setjmp.S | 49 +++++++++++++++++++++++++++++++++++++++++++ arch/x86/cpu/x86_64/setjmp.c | 19 ----------------- arch/x86/include/asm/setjmp.h | 17 +++++++++++++++ 3 files changed, 66 insertions(+), 19 deletions(-) create mode 100644 arch/x86/cpu/x86_64/setjmp.S delete mode 100644 arch/x86/cpu/x86_64/setjmp.c -- 2.7.4 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH v3] x86: Add 64-bit setjmp/longjmp implementation 2018-06-19 18:39 [U-Boot] [PATCH v3] x86: Add 64-bit setjmp/longjmp implementation Ivan Gorinov @ 2018-06-19 18:40 ` Ivan Gorinov 2018-06-21 4:30 ` Bin Meng 0 siblings, 1 reply; 4+ messages in thread From: Ivan Gorinov @ 2018-06-19 18:40 UTC (permalink / raw) To: u-boot Add setjmp/longjmp functions for x86_64. Signed-off-by: Ivan Gorinov <ivan.gorinov@intel.com> --- arch/x86/cpu/x86_64/setjmp.S | 49 +++++++++++++++++++++++++++++++++++++++++++ arch/x86/cpu/x86_64/setjmp.c | 19 ----------------- arch/x86/include/asm/setjmp.h | 17 +++++++++++++++ 3 files changed, 66 insertions(+), 19 deletions(-) create mode 100644 arch/x86/cpu/x86_64/setjmp.S delete mode 100644 arch/x86/cpu/x86_64/setjmp.c diff --git a/arch/x86/cpu/x86_64/setjmp.S b/arch/x86/cpu/x86_64/setjmp.S new file mode 100644 index 0000000..97b8128 --- /dev/null +++ b/arch/x86/cpu/x86_64/setjmp.S @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2018 Intel Corporation + * + * See arch/x86/include/asm/setjmp.h for jmp_buf format + */ + +#include <linux/linkage.h> + +.text +.align 8 + +ENTRY(setjmp) + + pop %rcx + movq %rcx, (%rdi) /* Return address */ + movq %rsp, 8(%rdi) + movq %rbp, 16(%rdi) + movq %rbx, 24(%rdi) + movq %r12, 32(%rdi) + movq %r13, 40(%rdi) + movq %r14, 48(%rdi) + movq %r15, 56(%rdi) + xorq %rax, %rax /* Direct invocation returns 0 */ + jmpq *%rcx + +ENDPROC(setjmp) + +.align 8 + +ENTRY(longjmp) + + movq (%rdi), %rcx /* Return address */ + movq 8(%rdi), %rsp + movq 16(%rdi), %rbp + movq 24(%rdi), %rbx + movq 32(%rdi), %r12 + movq 40(%rdi), %r13 + movq 48(%rdi), %r14 + movq 56(%rdi), %r15 + + movq %rsi, %rax /* Value to be returned by setjmp() */ + testq %rax, %rax /* cannot be 0 in this case */ + jnz 1f + incq %rax /* Return 1 instead */ +1: + jmpq *%rcx + +ENDPROC(longjmp) diff --git a/arch/x86/cpu/x86_64/setjmp.c b/arch/x86/cpu/x86_64/setjmp.c deleted file mode 100644 index 5d4a74a..0000000 --- a/arch/x86/cpu/x86_64/setjmp.c +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * Copyright (c) 2016 Google, Inc - */ - -#include <common.h> -#include <asm/setjmp.h> - -int setjmp(struct jmp_buf_data *jmp_buf) -{ - printf("WARNING: setjmp() is not supported\n"); - - return 0; -} - -void longjmp(struct jmp_buf_data *jmp_buf, int val) -{ - printf("WARNING: longjmp() is not supported\n"); -} diff --git a/arch/x86/include/asm/setjmp.h b/arch/x86/include/asm/setjmp.h index f25975f..49c36c1 100644 --- a/arch/x86/include/asm/setjmp.h +++ b/arch/x86/include/asm/setjmp.h @@ -8,6 +8,21 @@ #ifndef __setjmp_h #define __setjmp_h +#ifdef CONFIG_X86_64 + +struct jmp_buf_data { + unsigned long __rip; + unsigned long __rsp; + unsigned long __rbp; + unsigned long __rbx; + unsigned long __r12; + unsigned long __r13; + unsigned long __r14; + unsigned long __r15; +}; + +#else + struct jmp_buf_data { unsigned int __ebx; unsigned int __esp; @@ -17,6 +32,8 @@ struct jmp_buf_data { unsigned int __eip; }; +#endif + int setjmp(struct jmp_buf_data *jmp_buf); void longjmp(struct jmp_buf_data *jmp_buf, int val); -- 2.7.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH v3] x86: Add 64-bit setjmp/longjmp implementation 2018-06-19 18:40 ` Ivan Gorinov @ 2018-06-21 4:30 ` Bin Meng 2018-06-21 4:50 ` Bin Meng 0 siblings, 1 reply; 4+ messages in thread From: Bin Meng @ 2018-06-21 4:30 UTC (permalink / raw) To: u-boot On Wed, Jun 20, 2018 at 2:40 AM, Ivan Gorinov <ivan.gorinov@intel.com> wrote: > Add setjmp/longjmp functions for x86_64. > > Signed-off-by: Ivan Gorinov <ivan.gorinov@intel.com> > --- > arch/x86/cpu/x86_64/setjmp.S | 49 +++++++++++++++++++++++++++++++++++++++++++ > arch/x86/cpu/x86_64/setjmp.c | 19 ----------------- > arch/x86/include/asm/setjmp.h | 17 +++++++++++++++ > 3 files changed, 66 insertions(+), 19 deletions(-) > create mode 100644 arch/x86/cpu/x86_64/setjmp.S > delete mode 100644 arch/x86/cpu/x86_64/setjmp.c > Reviewed-by: Bin Meng <bmeng.cn@gmail.com> ^ permalink raw reply [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH v3] x86: Add 64-bit setjmp/longjmp implementation 2018-06-21 4:30 ` Bin Meng @ 2018-06-21 4:50 ` Bin Meng 0 siblings, 0 replies; 4+ messages in thread From: Bin Meng @ 2018-06-21 4:50 UTC (permalink / raw) To: u-boot On Thu, Jun 21, 2018 at 12:30 PM, Bin Meng <bmeng.cn@gmail.com> wrote: > On Wed, Jun 20, 2018 at 2:40 AM, Ivan Gorinov <ivan.gorinov@intel.com> wrote: >> Add setjmp/longjmp functions for x86_64. >> >> Signed-off-by: Ivan Gorinov <ivan.gorinov@intel.com> >> --- >> arch/x86/cpu/x86_64/setjmp.S | 49 +++++++++++++++++++++++++++++++++++++++++++ >> arch/x86/cpu/x86_64/setjmp.c | 19 ----------------- >> arch/x86/include/asm/setjmp.h | 17 +++++++++++++++ >> 3 files changed, 66 insertions(+), 19 deletions(-) >> create mode 100644 arch/x86/cpu/x86_64/setjmp.S >> delete mode 100644 arch/x86/cpu/x86_64/setjmp.c >> > > Reviewed-by: Bin Meng <bmeng.cn@gmail.com> applied to u-boot-x86, thanks! ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-06-21 4:50 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-06-19 18:39 [U-Boot] [PATCH v3] x86: Add 64-bit setjmp/longjmp implementation Ivan Gorinov 2018-06-19 18:40 ` Ivan Gorinov 2018-06-21 4:30 ` Bin Meng 2018-06-21 4:50 ` Bin Meng
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.