cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

setjmp_32.S (1072B)


      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
     22kernel_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
     45kernel_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