utils.gdb 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. # -*- gdb-script -*-
  2. define load_dump
  3. restore $arg0 binary 0x800000
  4. set $pc = (((unsigned long)$arg1) - 2) << 1
  5. set $sp = $arg2
  6. where
  7. end
  8. document load_dump
  9. Load a crash dump, setup PC/SP and show the current backtrace
  10. Usage: load_dump <file> <pc-addr> <sp-addr>
  11. end
  12. define sp_skip
  13. if $argc == 0
  14. set $shift = 3
  15. else
  16. set $shift = $arg0
  17. end
  18. set $new_pc = ((((unsigned long)*(uint8_t*)($sp+$shift+1)) << 16) + \
  19. (((unsigned long)*(uint8_t*)($sp+$shift+2)) << 8) + \
  20. (((unsigned long)*(uint8_t*)($sp+$shift+3)) << 0)) << 1
  21. set $new_sp = $sp+$shift+3
  22. select-frame 0
  23. set $saved_pc = $pc
  24. set $saved_sp = $sp
  25. set $pc = $new_pc
  26. set $sp = $new_sp
  27. where
  28. end
  29. document sp_skip
  30. TODO
  31. end
  32. define sp_restore
  33. select-frame 0
  34. set $pc = $saved_pc
  35. set $sp = $saved_sp
  36. where
  37. end
  38. document sp_restore
  39. TODO
  40. end
  41. define sp_test
  42. sp_skip $arg0
  43. set $pc = $saved_pc
  44. set $sp = $saved_sp
  45. end
  46. document sp_test
  47. TODO
  48. end
  49. define sp_scan
  50. dont-repeat
  51. if $argc == 0
  52. set $sp_end = 0x802200
  53. else
  54. set $sp_end = $arg0
  55. end
  56. set $sp_pos = $sp
  57. while $sp_pos < ($sp_end-4)
  58. set $sp_off = $sp_pos - $sp
  59. printf "**** scanning %#x (+%u) ****\n", $sp_pos, $sp_off
  60. sp_test $sp_off
  61. set $sp_pos += 1
  62. end
  63. end
  64. document sp_scan
  65. TODO
  66. end