| #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; | 
 | } |