1 // See LICENSE for license details.
13 trap_t(reg_t which
) : which(which
) {}
14 virtual const char* name();
15 virtual void side_effects(state_t
* state
) {}
16 reg_t
cause() { return which
; }
22 class mem_trap_t
: public trap_t
25 mem_trap_t(reg_t which
, reg_t badvaddr
)
26 : trap_t(which
), badvaddr(badvaddr
) {}
27 void side_effects(state_t
* state
);
28 reg_t
get_badvaddr() { return badvaddr
; }
33 #define DECLARE_TRAP(n, x) class trap_##x : public trap_t { \
35 trap_##x() : trap_t(n) {} \
36 const char* name() { return "trap_"#x; } \
39 #define DECLARE_MEM_TRAP(n, x) class trap_##x : public mem_trap_t { \
41 trap_##x(reg_t badvaddr) : mem_trap_t(n, badvaddr) {} \
42 const char* name() { return "trap_"#x; } \
45 DECLARE_MEM_TRAP(CAUSE_MISALIGNED_FETCH
, instruction_address_misaligned
)
46 DECLARE_MEM_TRAP(CAUSE_FAULT_FETCH
, instruction_access_fault
)
47 DECLARE_TRAP(CAUSE_ILLEGAL_INSTRUCTION
, illegal_instruction
)
48 DECLARE_TRAP(CAUSE_BREAKPOINT
, breakpoint
)
49 DECLARE_MEM_TRAP(CAUSE_MISALIGNED_LOAD
, load_address_misaligned
)
50 DECLARE_MEM_TRAP(CAUSE_MISALIGNED_STORE
, store_address_misaligned
)
51 DECLARE_MEM_TRAP(CAUSE_FAULT_LOAD
, load_access_fault
)
52 DECLARE_MEM_TRAP(CAUSE_FAULT_STORE
, store_access_fault
)
53 DECLARE_TRAP(CAUSE_USER_ECALL
, user_ecall
)
54 DECLARE_TRAP(CAUSE_SUPERVISOR_ECALL
, supervisor_ecall
)
55 DECLARE_TRAP(CAUSE_HYPERVISOR_ECALL
, hypervisor_ecall
)
56 DECLARE_TRAP(CAUSE_MACHINE_ECALL
, machine_ecall
)