1 // See LICENSE for license details.
14 trap_t(reg_t which
) : which(which
) {}
15 virtual const char* name();
16 virtual bool has_tval() { return false; }
17 virtual reg_t
get_tval() { return 0; }
18 reg_t
cause() { return which
; }
24 class mem_trap_t
: public trap_t
27 mem_trap_t(reg_t which
, reg_t tval
)
28 : trap_t(which
), tval(tval
) {}
29 bool has_tval() override
{ return true; }
30 reg_t
get_tval() override
{ return tval
; }
35 #define DECLARE_TRAP(n, x) class trap_##x : public trap_t { \
37 trap_##x() : trap_t(n) {} \
38 const char* name() { return "trap_"#x; } \
41 #define DECLARE_MEM_TRAP(n, x) class trap_##x : public mem_trap_t { \
43 trap_##x(reg_t tval) : mem_trap_t(n, tval) {} \
44 const char* name() { return "trap_"#x; } \
47 DECLARE_MEM_TRAP(CAUSE_MISALIGNED_FETCH
, instruction_address_misaligned
)
48 DECLARE_MEM_TRAP(CAUSE_FETCH_ACCESS
, instruction_access_fault
)
49 DECLARE_MEM_TRAP(CAUSE_ILLEGAL_INSTRUCTION
, illegal_instruction
)
50 DECLARE_MEM_TRAP(CAUSE_BREAKPOINT
, breakpoint
)
51 DECLARE_MEM_TRAP(CAUSE_MISALIGNED_LOAD
, load_address_misaligned
)
52 DECLARE_MEM_TRAP(CAUSE_MISALIGNED_STORE
, store_address_misaligned
)
53 DECLARE_MEM_TRAP(CAUSE_LOAD_ACCESS
, load_access_fault
)
54 DECLARE_MEM_TRAP(CAUSE_STORE_ACCESS
, store_access_fault
)
55 DECLARE_TRAP(CAUSE_USER_ECALL
, user_ecall
)
56 DECLARE_TRAP(CAUSE_SUPERVISOR_ECALL
, supervisor_ecall
)
57 DECLARE_TRAP(CAUSE_HYPERVISOR_ECALL
, hypervisor_ecall
)
58 DECLARE_TRAP(CAUSE_MACHINE_ECALL
, machine_ecall
)
59 DECLARE_MEM_TRAP(CAUSE_FETCH_PAGE_FAULT
, instruction_page_fault
)
60 DECLARE_MEM_TRAP(CAUSE_LOAD_PAGE_FAULT
, load_page_fault
)
61 DECLARE_MEM_TRAP(CAUSE_STORE_PAGE_FAULT
, store_page_fault
)