1
0

lwp_dbg.c 1.8 KB

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