Zephyr API 3.6.99
Loading...
Searching...
No Matches
exception.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016 Jean-Paul Etienne <fractalclone@gmail.com>
3 * Copyright (c) 2018 Foundries.io Ltd
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
15#ifndef ZEPHYR_INCLUDE_ARCH_RISCV_EXCEPTION_H_
16#define ZEPHYR_INCLUDE_ARCH_RISCV_EXCEPTION_H_
17
18#ifndef _ASMLANGUAGE
19#include <zephyr/types.h>
20#include <zephyr/toolchain.h>
21
22#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE
23#include <soc_context.h>
24#endif
25
26#ifdef CONFIG_RISCV_SOC_HAS_ISR_STACKING
27#include <soc_isr_stacking.h>
28#endif
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34/*
35 * The name of the structure which contains soc-specific state, if
36 * any, as well as the soc_esf_t typedef below, are part of the RISC-V
37 * arch API.
38 *
39 * The contents of the struct are provided by a SOC-specific
40 * definition in soc_context.h.
41 */
42#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE
43struct soc_esf {
44 SOC_ESF_MEMBERS;
45};
46#endif
47
48#ifdef CONFIG_EXTRA_EXCEPTION_INFO
49/* Forward declaration */
50struct _callee_saved;
51typedef struct _callee_saved _callee_saved_t;
52#endif /* CONFIG_EXTRA_EXCEPTION_INFO */
53
54#if defined(CONFIG_RISCV_SOC_HAS_ISR_STACKING)
55 SOC_ISR_STACKING_ESF_DECLARE;
56#else
57struct arch_esf {
58 unsigned long ra; /* return address */
59
60 unsigned long t0; /* Caller-saved temporary register */
61 unsigned long t1; /* Caller-saved temporary register */
62 unsigned long t2; /* Caller-saved temporary register */
63#if !defined(CONFIG_RISCV_ISA_RV32E)
64 unsigned long t3; /* Caller-saved temporary register */
65 unsigned long t4; /* Caller-saved temporary register */
66 unsigned long t5; /* Caller-saved temporary register */
67 unsigned long t6; /* Caller-saved temporary register */
68#endif /* !CONFIG_RISCV_ISA_RV32E */
69
70 unsigned long a0; /* function argument/return value */
71 unsigned long a1; /* function argument */
72 unsigned long a2; /* function argument */
73 unsigned long a3; /* function argument */
74 unsigned long a4; /* function argument */
75 unsigned long a5; /* function argument */
76#if !defined(CONFIG_RISCV_ISA_RV32E)
77 unsigned long a6; /* function argument */
78 unsigned long a7; /* function argument */
79#endif /* !CONFIG_RISCV_ISA_RV32E */
80
81 unsigned long mepc; /* machine exception program counter */
82 unsigned long mstatus; /* machine status register */
83
84 unsigned long s0; /* callee-saved s0 */
85
86#ifdef CONFIG_USERSPACE
87 unsigned long sp; /* preserved (user or kernel) stack pointer */
88#endif
89
90#ifdef CONFIG_EXTRA_EXCEPTION_INFO
91 _callee_saved_t *csf; /* pointer to callee-saved-registers */
92#endif /* CONFIG_EXTRA_EXCEPTION_INFO */
93
94#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE
95 struct soc_esf soc_context;
96#endif
97} __aligned(16);
98#endif /* CONFIG_RISCV_SOC_HAS_ISR_STACKING */
99
100#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE
101typedef struct soc_esf soc_esf_t;
102#endif
103
104#ifdef __cplusplus
105}
106#endif
107
108#endif /* _ASMLANGUAGE */
109
110#endif /* ZEPHYR_INCLUDE_ARCH_RISCV_EXCEPTION_H_ */
Exception Stack Frame.
Definition exception.h:60
unsigned long a0
Definition exception.h:35
unsigned long ra
Definition exception.h:21
unsigned long a4
Definition exception.h:74
unsigned long t0
Definition exception.h:24
unsigned long a3
Definition exception.h:38
unsigned long a6
Definition exception.h:77
unsigned long a1
Definition exception.h:36
unsigned long mepc
Definition exception.h:81
unsigned long mstatus
Definition exception.h:82
unsigned long t6
Definition exception.h:30
unsigned long a7
Definition exception.h:78
unsigned long t4
Definition exception.h:28
unsigned long s0
Definition exception.h:84
unsigned long sp
Definition exception.h:87
unsigned long t2
Definition exception.h:26
unsigned long a5
Definition exception.h:75
unsigned long t5
Definition exception.h:29
unsigned long a2
Definition exception.h:37
unsigned long t1
Definition exception.h:25
unsigned long t3
Definition exception.h:27
Macros to abstract toolchain specific capabilities.