Warning: This file is not a C or C++ file. It does not have highlighting.

1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ASM_SCS_H
3#define _ASM_SCS_H
4
5#ifdef __ASSEMBLY__
6#include <asm/asm-offsets.h>
7
8#ifdef CONFIG_SHADOW_CALL_STACK
9
10/* Load init_shadow_call_stack to gp. */
11.macro scs_load_init_stack
12 la gp, init_shadow_call_stack
13 XIP_FIXUP_OFFSET gp
14.endm
15
16/* Load the per-CPU IRQ shadow call stack to gp. */
17.macro scs_load_irq_stack tmp
18 load_per_cpu gp, irq_shadow_call_stack_ptr, \tmp
19.endm
20
21/* Load task_scs_sp(current) to gp. */
22.macro scs_load_current
23 REG_L gp, TASK_TI_SCS_SP(tp)
24.endm
25
26/* Load task_scs_sp(current) to gp, but only if tp has changed. */
27.macro scs_load_current_if_task_changed prev
28 beq \prev, tp, _skip_scs
29 scs_load_current
30_skip_scs:
31.endm
32
33/* Save gp to task_scs_sp(current). */
34.macro scs_save_current
35 REG_S gp, TASK_TI_SCS_SP(tp)
36.endm
37
38#else /* CONFIG_SHADOW_CALL_STACK */
39
40.macro scs_load_init_stack
41.endm
42.macro scs_load_irq_stack tmp
43.endm
44.macro scs_load_current
45.endm
46.macro scs_load_current_if_task_changed prev
47.endm
48.macro scs_save_current
49.endm
50
51#endif /* CONFIG_SHADOW_CALL_STACK */
52#endif /* __ASSEMBLY__ */
53
54#endif /* _ASM_SCS_H */
55

Warning: This file is not a C or C++ file. It does not have highlighting.

source code of linux/arch/riscv/include/asm/scs.h