rp2040_gdb_macros 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # Macros to help debugging on RP2040 and other mbed-os / RTX targets using Black Magic Probe
  2. # Loosely based upon https://github.com/pyocd/pyOCD/pull/392/files
  3. # Get a thread backtrace from hardfault context
  4. define hardfault_backtrace
  5. set $sp = $psp
  6. bt
  7. end
  8. # List current threads
  9. define threads
  10. set $t = &osRtxInfo.thread
  11. thread_print_chain $t->run.curr "RUN "
  12. thread_print_chain $t->ready.thread_list "READY"
  13. thread_print_chain $t->delay_list "DELAY"
  14. thread_print_chain $t->wait_list "WAIT "
  15. printf "Use thread_bt 0x... to show thread backtrace\n"
  16. end
  17. define thread_print_chain
  18. set $p = $arg0
  19. while ($p != 0)
  20. printf "%-16s ", $p->name
  21. printf $arg1
  22. printf " 0x%08x\n", $p->sp
  23. set $p = $p->thread_next
  24. end
  25. end
  26. # Switch to different thread
  27. define thread_switch
  28. set $tsp=(uint32_t*)$arg0
  29. set $n_r0 =$r0
  30. set $n_r1 =$r1
  31. set $n_r2 =$r2
  32. set $n_r3 =$r3
  33. set $n_r4 =$r4
  34. set $n_r5 =$r5
  35. set $n_r6 =$r6
  36. set $n_r7 =$r7
  37. set $n_r8 =$r8
  38. set $n_r9 =$r9
  39. set $n_r10 =$r10
  40. set $n_r11 =$r11
  41. set $n_r12 =$r12
  42. set $n_sp =$sp
  43. set $n_lr =$lr
  44. set $n_pc =$pc
  45. set $n_xPSR=$xPSR
  46. set $r4 = $tsp[0]
  47. set $r5 = $tsp[1]
  48. set $r6 = $tsp[2]
  49. set $r7 = $tsp[3]
  50. set $r8 = $tsp[4]
  51. set $r9 = $tsp[5]
  52. set $r10 = $tsp[6]
  53. set $r11 = $tsp[7]
  54. set $r0 = $tsp[8]
  55. set $r1 = $tsp[9]
  56. set $r2 = $tsp[10]
  57. set $r3 = $tsp[11]
  58. set $r12 = $tsp[12]
  59. set $lr = $tsp[13]
  60. set $pc = $tsp[14]
  61. set $xPSR = $tsp[15]
  62. set $sp = &$tsp[16]
  63. echo Switched task, use thread_restore to return before continuing execution.\n
  64. end
  65. define thread_restore
  66. set $r0 =$n_r0
  67. set $r1 =$n_r1
  68. set $r2 =$n_r2
  69. set $r3 =$n_r3
  70. set $r4 =$n_r4
  71. set $r5 =$n_r5
  72. set $r6 =$n_r6
  73. set $r7 =$n_r7
  74. set $r8 =$n_r8
  75. set $r9 =$n_r9
  76. set $r10 =$n_r10
  77. set $r11 =$n_r11
  78. set $r12 =$n_r12
  79. set $sp =$n_sp
  80. set $lr =$n_lr
  81. set $pc =$n_pc
  82. set $xPSR=$n_xPSR
  83. end
  84. define thread_bt
  85. thread_switch $arg0
  86. bt
  87. thread_restore
  88. end