1 #include <rtthread.h> 2 #include <rthw.h> 3 #include <lwp.h> 4 dbg_thread_in_debug(void)5int dbg_thread_in_debug(void) 6 { 7 int ret = 0; 8 struct rt_lwp *lwp = lwp_self(); 9 10 if (lwp && lwp->debug) 11 { 12 ret = 1; 13 } 14 return ret; 15 } 16 17 struct dbg_ops_t *rt_dbg_ops = RT_NULL; 18 RTM_EXPORT(rt_dbg_ops); 19 dbg_register(struct dbg_ops_t * dbg_ops)20void dbg_register(struct dbg_ops_t *dbg_ops) 21 { 22 rt_dbg_ops = dbg_ops; 23 } 24 RTM_EXPORT(dbg_register); 25 dbg(int argc,char ** argv)26static int dbg(int argc, char **argv) 27 { 28 int ret = -1; 29 30 if (rt_dbg_ops) 31 { 32 ret = rt_dbg_ops->dbg(argc, argv); 33 } 34 else 35 { 36 rt_kprintf("Error: DBG command is not enabled!\n"); 37 } 38 return ret; 39 } 40 MSH_CMD_EXPORT(dbg, dbg); 41 dbg_get_ins(void)42uint32_t dbg_get_ins(void) 43 { 44 uint32_t ins = 0; 45 46 if (rt_dbg_ops) 47 { 48 ins = rt_dbg_ops->arch_get_ins(); 49 } 50 return ins; 51 } 52 dbg_activate_step(void)53void dbg_activate_step(void) 54 { 55 if (rt_dbg_ops) 56 { 57 rt_dbg_ops->arch_activate_step(); 58 } 59 } 60 dbg_deactivate_step(void)61void dbg_deactivate_step(void) 62 { 63 if (rt_dbg_ops) 64 { 65 rt_dbg_ops->arch_deactivate_step(); 66 } 67 } 68 dbg_check_event(struct rt_hw_exp_stack * regs,unsigned long esr)69int dbg_check_event(struct rt_hw_exp_stack *regs, unsigned long esr) 70 { 71 int ret = 0; 72 73 if (rt_dbg_ops) 74 { 75 ret = rt_dbg_ops->check_debug_event(regs, esr); 76 } 77 return ret; 78 } 79 gdb_server_channel(void)80rt_channel_t gdb_server_channel(void) 81 { 82 rt_channel_t ret = RT_NULL; 83 84 if (rt_dbg_ops) 85 { 86 ret = rt_dbg_ops->gdb_get_server_channel(); 87 } 88 return ret; 89 } 90 dbg_step_type(void)91int dbg_step_type(void) 92 { 93 int ret = 0; 94 95 if (rt_dbg_ops) 96 { 97 ret = rt_dbg_ops->gdb_get_step_type(); 98 } 99 return ret; 100 } 101 dbg_attach_req(void * pc)102void dbg_attach_req(void *pc) 103 { 104 if (rt_dbg_ops) 105 { 106 rt_dbg_ops->lwp_check_debug_attach_req(pc); 107 } 108 } 109 dbg_check_suspend(void)110int dbg_check_suspend(void) 111 { 112 int ret = 0; 113 114 if (rt_dbg_ops) 115 { 116 ret = rt_dbg_ops->lwp_check_debug_suspend(); 117 } 118 return ret; 119 } 120