| #pragma once |
| |
| #ifndef ROS_INC_TRAPFRAME_H |
| #error "Do not include include ros/arch/trapframe.h directly" |
| #endif |
| |
| #include <ros/common.h> |
| #include <stdint.h> |
| |
| struct hw_trapframe |
| { |
| uintptr_t gpr[32]; |
| uintptr_t sr; |
| uintptr_t epc; |
| uintptr_t badvaddr; |
| long cause; |
| }; |
| |
| struct sw_trapframe { |
| /* TODO */ |
| }; |
| |
| struct vm_trapframe { |
| /* TODO */ |
| }; |
| |
| #define GPR_RA 1 |
| #define GPR_SP 14 |
| #define GPR_A0 18 |
| #define GPR_A1 19 |
| |
| #error "fix this #define" |
| /* this is an error flag, reflected back in faults. similar to flags that say |
| * if a PF was a write fault, read fault, or user fault. */ |
| #define PF_VMR_BACKED (1 << 31) |
| |
| typedef struct ancillary_state |
| { |
| uint64_t fpr[32]; |
| uint32_t fsr; |
| } ancillary_state_t; |
| |
| static inline uintptr_t get_hwtf_pc(struct hw_trapframe *hw_tf) |
| { |
| #warning "fix me" |
| return 0; |
| //return hw_tf->tf_rip; |
| } |
| |
| static inline uintptr_t get_hwtf_fp(struct hw_trapframe *hw_tf) |
| { |
| /* do you even have frame pointers? this is used for backtrace, but if |
| * you don't use FPs, we'll need to change up our parameters or |
| * something. */ |
| #warning "fix me" |
| return 0; |
| //return hw_tf->tf_rbp; |
| } |
| |
| static inline uintptr_t get_hwtf_sp(struct hw_trapframe *hw_tf) |
| { |
| /* do you even have frame pointers? this is used for backtrace, but if |
| * you don't use FPs, we'll need to change up our parameters or |
| * something. */ |
| #warning "fix me" |
| return 0; |
| //return hw_tf->tf_rsp; |
| } |
| |
| static inline uintptr_t get_swtf_pc(struct sw_trapframe *sw_tf) |
| { |
| #warning "fix me" |
| return 0; |
| //return sw_tf->tf_rip; |
| } |
| |
| static inline uintptr_t get_swtf_fp(struct sw_trapframe *sw_tf) |
| { |
| #warning "fix me" |
| return 0; |
| //return sw_tf->tf_rbp; |
| } |
| |
| static inline uintptr_t get_swtf_sp(struct sw_trapframe *sw_tf) |
| { |
| #warning "fix me" |
| return 0; |
| //return sw_tf->tf_rsp; |
| } |
| |
| static inline uintptr_t get_vmtf_pc(struct vm_trapframe *vm_tf) |
| { |
| #warning "fix me" |
| return 0; |
| } |
| |
| static inline uintptr_t get_vmtf_fp(struct vm_trapframe *vm_tf) |
| { |
| #warning "fix me" |
| return 0; |
| } |
| |
| static inline uintptr_t get_vmtf_sp(struct vm_trapframe *vm_tf) |
| { |
| #warning "fix me" |
| return 0; |
| } |