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

bioscall.S (1424B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/* -----------------------------------------------------------------------
      3 *
      4 *   Copyright 2009-2014 Intel Corporation; author H. Peter Anvin
      5 *
      6 * ----------------------------------------------------------------------- */
      7
      8/*
      9 * "Glove box" for BIOS calls.  Avoids the constant problems with BIOSes
     10 * touching registers they shouldn't be.
     11 */
     12
     13	.code16
     14	.section ".inittext","ax"
     15	.globl	intcall
     16	.type	intcall, @function
     17intcall:
     18	/* Self-modify the INT instruction.  Ugly, but works. */
     19	cmpb	%al, 3f
     20	je	1f
     21	movb	%al, 3f
     22	jmp	1f		/* Synchronize pipeline */
     231:
     24	/* Save state */
     25	pushfl
     26	pushw	%fs
     27	pushw	%gs
     28	pushal
     29
     30	/* Copy input state to stack frame */
     31	subw	$44, %sp
     32	movw	%dx, %si
     33	movw	%sp, %di
     34	movw	$11, %cx
     35	rep; movsd
     36
     37	/* Pop full state from the stack */
     38	popal
     39	popw	%gs
     40	popw	%fs
     41	popw	%es
     42	popw	%ds
     43	popfl
     44
     45	/* Actual INT */
     46	.byte	0xcd		/* INT opcode */
     473:	.byte	0
     48
     49	/* Push full state to the stack */
     50	pushfl
     51	pushw	%ds
     52	pushw	%es
     53	pushw	%fs
     54	pushw	%gs
     55	pushal
     56
     57	/* Re-establish C environment invariants */
     58	cld
     59	movzwl	%sp, %esp
     60	movw	%cs, %ax
     61	movw	%ax, %ds
     62	movw	%ax, %es
     63
     64	/* Copy output state from stack frame */
     65	movw	68(%esp), %di	/* Original %cx == 3rd argument */
     66	andw	%di, %di
     67	jz	4f
     68	movw	%sp, %si
     69	movw	$11, %cx
     70	rep; movsd
     714:	addw	$44, %sp
     72
     73	/* Restore state and return */
     74	popal
     75	popw	%gs
     76	popw	%fs
     77	popfl
     78	retl
     79	.size	intcall, .-intcall