root/arch/x86/um/setjmp_32.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #
   3 # arch/i386/setjmp.S
   4 #
   5 # setjmp/longjmp for the i386 architecture
   6 #
   7 
   8 #
   9 # The jmp_buf is assumed to contain the following, in order:
  10 #       %ebx
  11 #       %esp
  12 #       %ebp
  13 #       %esi
  14 #       %edi
  15 #       <return address>
  16 #
  17 
  18         .text
  19         .align 4
  20         .globl kernel_setjmp
  21         .type kernel_setjmp, @function
  22 kernel_setjmp:
  23 #ifdef _REGPARM
  24         movl %eax,%edx
  25 #else
  26         movl 4(%esp),%edx
  27 #endif
  28         popl %ecx                       # Return address, and adjust the stack
  29         xorl %eax,%eax                  # Return value
  30         movl %ebx,(%edx)
  31         movl %esp,4(%edx)               # Post-return %esp!
  32         pushl %ecx                      # Make the call/return stack happy
  33         movl %ebp,8(%edx)
  34         movl %esi,12(%edx)
  35         movl %edi,16(%edx)
  36         movl %ecx,20(%edx)              # Return address
  37         ret
  38 
  39         .size kernel_setjmp,.-kernel_setjmp
  40 
  41         .text
  42         .align 4
  43         .globl kernel_longjmp
  44         .type kernel_longjmp, @function
  45 kernel_longjmp:
  46 #ifdef _REGPARM
  47         xchgl %eax,%edx
  48 #else
  49         movl 4(%esp),%edx               # jmp_ptr address
  50         movl 8(%esp),%eax               # Return value
  51 #endif
  52         movl (%edx),%ebx
  53         movl 4(%edx),%esp
  54         movl 8(%edx),%ebp
  55         movl 12(%edx),%esi
  56         movl 16(%edx),%edi
  57         jmp *20(%edx)
  58 
  59         .size kernel_longjmp,.-kernel_longjmp

/* [<][>][^][v][top][bottom][index][help] */