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

ftrace_low.S (1352B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Split from entry_64.S
      4 */
      5
      6#include <linux/magic.h>
      7#include <asm/ppc_asm.h>
      8#include <asm/asm-offsets.h>
      9#include <asm/ftrace.h>
     10#include <asm/ppc-opcode.h>
     11#include <asm/export.h>
     12
     13#ifdef CONFIG_PPC64
     14.pushsection ".tramp.ftrace.text","aw",@progbits;
     15.globl ftrace_tramp_text
     16ftrace_tramp_text:
     17	.space 64
     18.popsection
     19
     20.pushsection ".tramp.ftrace.init","aw",@progbits;
     21.globl ftrace_tramp_init
     22ftrace_tramp_init:
     23	.space 64
     24.popsection
     25#endif
     26
     27_GLOBAL(mcount)
     28_GLOBAL(_mcount)
     29EXPORT_SYMBOL(_mcount)
     30	mflr	r12
     31	mtctr	r12
     32	mtlr	r0
     33	bctr
     34
     35#ifdef CONFIG_FUNCTION_GRAPH_TRACER
     36_GLOBAL(return_to_handler)
     37	/* need to save return values */
     38#ifdef CONFIG_PPC64
     39	std	r4,  -32(r1)
     40	std	r3,  -24(r1)
     41	/* save TOC */
     42	std	r2,  -16(r1)
     43	std	r31, -8(r1)
     44	mr	r31, r1
     45	stdu	r1, -112(r1)
     46
     47	/*
     48	 * We might be called from a module.
     49	 * Switch to our TOC to run inside the core kernel.
     50	 */
     51	ld	r2, PACATOC(r13)
     52#else
     53	stwu	r1, -16(r1)
     54	stw	r3, 8(r1)
     55	stw	r4, 12(r1)
     56#endif
     57
     58	bl	ftrace_return_to_handler
     59	nop
     60
     61	/* return value has real return address */
     62	mtlr	r3
     63
     64#ifdef CONFIG_PPC64
     65	ld	r1, 0(r1)
     66	ld	r4,  -32(r1)
     67	ld	r3,  -24(r1)
     68	ld	r2,  -16(r1)
     69	ld	r31, -8(r1)
     70#else
     71	lwz	r3, 8(r1)
     72	lwz	r4, 12(r1)
     73	addi	r1, r1, 16
     74#endif
     75
     76	/* Jump back to real return address */
     77	blr
     78#endif /* CONFIG_FUNCTION_GRAPH_TRACER */