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

mca_drv_asm.S (1135B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * File:        mca_drv_asm.S
      4 * Purpose:     Assembly portion of Generic MCA handling
      5 *
      6 * Copyright (C) 2004 FUJITSU LIMITED
      7 * Copyright (C) 2004 Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
      8 */
      9#include <linux/threads.h>
     10
     11#include <asm/asmmacro.h>
     12#include <asm/processor.h>
     13#include <asm/ptrace.h>
     14
     15GLOBAL_ENTRY(mca_handler_bhhook)
     16	invala				// clear RSE ?
     17	cover
     18	;;
     19	clrrrb
     20	;;						
     21	alloc	r16=ar.pfs,0,2,3,0	// make a new frame
     22	mov	ar.rsc=0
     23	mov	r13=IA64_KR(CURRENT)	// current task pointer
     24	;;
     25	mov	r2=r13
     26	;;
     27	addl	r22=IA64_RBS_OFFSET,r2
     28	;;
     29	mov	ar.bspstore=r22
     30	addl	sp=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2
     31	;;
     32	adds	r2=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
     33	;;
     34	st1	[r2]=r0		// clear current->thread.on_ustack flag
     35	mov	loc0=r16
     36	movl	loc1=mca_handler_bh	// recovery C function
     37	;;
     38	mov	out0=r8			// poisoned address
     39	mov	out1=r9			// iip
     40	mov	out2=r10		// psr
     41	mov	b6=loc1
     42	;;
     43	mov	loc1=rp
     44	ssm	psr.ic
     45	;;
     46	srlz.i
     47	;;
     48	ssm	psr.i
     49	br.call.sptk.many rp=b6		// does not return ...
     50	;;
     51	mov	ar.pfs=loc0
     52	mov 	rp=loc1
     53	;;
     54	mov	r8=r0
     55	br.ret.sptk.many rp
     56END(mca_handler_bhhook)