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

misc.S (2336B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * This file contains miscellaneous low-level functions.
      4 *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
      5 *
      6 * Largely rewritten by Cort Dougan (cort@cs.nmt.edu)
      7 * and Paul Mackerras.
      8 *
      9 * PPC64 updates by Dave Engebretsen (engebret@us.ibm.com)
     10 *
     11 * setjmp/longjmp code by Paul Mackerras.
     12 */
     13#include <asm/ppc_asm.h>
     14#include <asm/unistd.h>
     15#include <asm/asm-compat.h>
     16#include <asm/asm-offsets.h>
     17#include <asm/export.h>
     18
     19	.text
     20
     21/*
     22 * Returns (address we are running at) - (address we were linked at)
     23 * for use before the text and data are mapped to KERNELBASE.
     24
     25 * add_reloc_offset(x) returns x + reloc_offset().
     26 */
     27
     28_GLOBAL(reloc_offset)
     29	li	r3, 0
     30_GLOBAL(add_reloc_offset)
     31	mflr	r0
     32	bcl	20,31,$+4
     331:	mflr	r5
     34	PPC_LL	r4,(2f-1b)(r5)
     35	subf	r5,r4,r5
     36	add	r3,r3,r5
     37	mtlr	r0
     38	blr
     39_ASM_NOKPROBE_SYMBOL(reloc_offset)
     40_ASM_NOKPROBE_SYMBOL(add_reloc_offset)
     41
     42	.align	3
     432:	PPC_LONG 1b
     44
     45_GLOBAL(setjmp)
     46	mflr	r0
     47	PPC_STL	r0,0(r3)
     48	PPC_STL	r1,SZL(r3)
     49	PPC_STL	r2,2*SZL(r3)
     50#ifdef CONFIG_PPC32
     51	mfcr	r12
     52	stmw	r12, 3*SZL(r3)
     53#else
     54	mfcr	r0
     55	PPC_STL	r0,3*SZL(r3)
     56	PPC_STL	r13,4*SZL(r3)
     57	PPC_STL	r14,5*SZL(r3)
     58	PPC_STL	r15,6*SZL(r3)
     59	PPC_STL	r16,7*SZL(r3)
     60	PPC_STL	r17,8*SZL(r3)
     61	PPC_STL	r18,9*SZL(r3)
     62	PPC_STL	r19,10*SZL(r3)
     63	PPC_STL	r20,11*SZL(r3)
     64	PPC_STL	r21,12*SZL(r3)
     65	PPC_STL	r22,13*SZL(r3)
     66	PPC_STL	r23,14*SZL(r3)
     67	PPC_STL	r24,15*SZL(r3)
     68	PPC_STL	r25,16*SZL(r3)
     69	PPC_STL	r26,17*SZL(r3)
     70	PPC_STL	r27,18*SZL(r3)
     71	PPC_STL	r28,19*SZL(r3)
     72	PPC_STL	r29,20*SZL(r3)
     73	PPC_STL	r30,21*SZL(r3)
     74	PPC_STL	r31,22*SZL(r3)
     75#endif
     76	li	r3,0
     77	blr
     78
     79_GLOBAL(longjmp)
     80#ifdef CONFIG_PPC32
     81	lmw	r12, 3*SZL(r3)
     82	mtcrf	0x38, r12
     83#else
     84	PPC_LL	r13,4*SZL(r3)
     85	PPC_LL	r14,5*SZL(r3)
     86	PPC_LL	r15,6*SZL(r3)
     87	PPC_LL	r16,7*SZL(r3)
     88	PPC_LL	r17,8*SZL(r3)
     89	PPC_LL	r18,9*SZL(r3)
     90	PPC_LL	r19,10*SZL(r3)
     91	PPC_LL	r20,11*SZL(r3)
     92	PPC_LL	r21,12*SZL(r3)
     93	PPC_LL	r22,13*SZL(r3)
     94	PPC_LL	r23,14*SZL(r3)
     95	PPC_LL	r24,15*SZL(r3)
     96	PPC_LL	r25,16*SZL(r3)
     97	PPC_LL	r26,17*SZL(r3)
     98	PPC_LL	r27,18*SZL(r3)
     99	PPC_LL	r28,19*SZL(r3)
    100	PPC_LL	r29,20*SZL(r3)
    101	PPC_LL	r30,21*SZL(r3)
    102	PPC_LL	r31,22*SZL(r3)
    103	PPC_LL	r0,3*SZL(r3)
    104	mtcrf	0x38,r0
    105#endif
    106	PPC_LL	r0,0(r3)
    107	PPC_LL	r1,SZL(r3)
    108	PPC_LL	r2,2*SZL(r3)
    109	mtlr	r0
    110	mr.	r3, r4
    111	bnelr
    112	li	r3, 1
    113	blr
    114
    115_GLOBAL(current_stack_frame)
    116	PPC_LL	r3,0(r1)
    117	blr
    118EXPORT_SYMBOL(current_stack_frame)