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

stub_64.S (779B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#include <as-layout.h>
      3
      4.section .__syscall_stub, "ax"
      5	.globl batch_syscall_stub
      6batch_syscall_stub:
      7	/* %rsp has the pointer to first operation */
      8	mov	%rsp, %rbx
      9	add	$0x10, %rsp
     10again:
     11	/* load length of additional data */
     12	mov	0x0(%rsp), %rax
     13
     14	/* if(length == 0) : end of list */
     15	/* write possible 0 to header */
     16	mov	%rax, 8(%rbx)
     17	cmp	$0, %rax
     18	jz	done
     19
     20	/* save current pointer */
     21	mov	%rsp, 8(%rbx)
     22
     23	/* skip additional data */
     24	add	%rax, %rsp
     25
     26	/* load syscall-# */
     27	pop	%rax
     28
     29	/* load syscall params */
     30	pop	%rdi
     31	pop	%rsi
     32	pop	%rdx
     33	pop	%r10
     34 	pop	%r8
     35	pop	%r9
     36
     37	/* execute syscall */
     38	syscall
     39
     40	/* check return value */
     41	pop	%rcx
     42	cmp	%rcx, %rax
     43	je	again
     44
     45done:
     46	/* save return value */
     47	mov	%rax, (%rbx)
     48
     49	/* stop */
     50	int3