1 /* SPDX-License-Identifier: GPL-2.0 */ 2 # 3 # arch/x86_64/setjmp.S 4 # 5 # setjmp/longjmp for the x86-64 architecture 6 # 7 8 # 9 # The jmp_buf is assumed to contain the following, in order: 10 # %rbx 11 # %rsp (post-return) 12 # %rbp 13 # %r12 14 # %r13 15 # %r14 16 # %r15 17 # <return address> 18 # 19 20 .text 21 .align 4 22 .globl kernel_setjmp 23 .type kernel_setjmp, @function 24 kernel_setjmp: 25 pop %rsi # Return address, and adjust the stack 26 xorl %eax,%eax # Return value 27 movq %rbx,(%rdi) 28 movq %rsp,8(%rdi) # Post-return %rsp! 29 push %rsi # Make the call/return stack happy 30 movq %rbp,16(%rdi) 31 movq %r12,24(%rdi) 32 movq %r13,32(%rdi) 33 movq %r14,40(%rdi) 34 movq %r15,48(%rdi) 35 movq %rsi,56(%rdi) # Return address 36 RET 37 38 .size kernel_setjmp,.-kernel_setjmp 39 40 .text 41 .align 4 42 .globl kernel_longjmp 43 .type kernel_longjmp, @function 44 kernel_longjmp: 45 movl %esi,%eax # Return value (int) 46 movq (%rdi),%rbx 47 movq 8(%rdi),%rsp 48 movq 16(%rdi),%rbp 49 movq 24(%rdi),%r12 50 movq 32(%rdi),%r13 51 movq 40(%rdi),%r14 52 movq 48(%rdi),%r15 53 jmp *56(%rdi) 54 55 .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.