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

raw_syscall_helper_32.S (942B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2.global sys32_helper
      3sys32_helper:
      4	/* Args: syscall_args_32*, function pointer */
      5	pushl	%ebp
      6	pushl	%ebx
      7	pushl	%esi
      8	pushl	%edi
      9	movl	5*4(%esp), %eax	/* pointer to args struct */
     10
     11	movl	1*4(%eax), %ebx
     12	movl	2*4(%eax), %ecx
     13	movl	3*4(%eax), %edx
     14	movl	4*4(%eax), %esi
     15	movl	5*4(%eax), %edi
     16	movl	6*4(%eax), %ebp
     17	movl	0*4(%eax), %eax
     18
     19	call	*(6*4)(%esp)	/* Do the syscall */
     20
     21	/* Now we need to recover without losing any reg values */
     22	pushl	%eax
     23	movl	6*4(%esp), %eax
     24	popl	0*4(%eax)
     25	movl	%ebx, 1*4(%eax)
     26	movl	%ecx, 2*4(%eax)
     27	movl	%edx, 3*4(%eax)
     28	movl	%esi, 4*4(%eax)
     29	movl	%edi, 5*4(%eax)
     30	movl	%ebp, 6*4(%eax)
     31
     32	popl	%edi
     33	popl	%esi
     34	popl	%ebx
     35	popl	%ebp
     36	ret
     37
     38	.type sys32_helper, @function
     39	.size sys32_helper, .-sys32_helper
     40
     41.global int80_and_ret
     42int80_and_ret:
     43	int	$0x80
     44	ret
     45
     46	.type int80_and_ret, @function
     47	.size int80_and_ret, .-int80_and_ret
     48
     49.section .note.GNU-stack,"",%progbits