From 84dfdfd97f291f5df95fda25bf9fca7ff32ee7a4 Mon Sep 17 00:00:00 2001 From: Rahix <rahix@rahix.de> Date: Sun, 15 Sep 2019 22:47:07 +0200 Subject: [PATCH] feat(gdb): Add task_backtrace command The task_backtrace (aliased as tbt) command allows viewing the backtrace of a task which is currently not running. Signed-off-by: Rahix <rahix@rahix.de> --- init.gdb | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/init.gdb b/init.gdb index 607cb82bd..151639c28 100644 --- a/init.gdb +++ b/init.gdb @@ -3,3 +3,33 @@ target remote localhost:3333 define reset mon mww 0x40000004 0x80000000 end + + +# usage: task_backtrace <tskTCB*> +define task_backtrace + set $taskbt_task_ptr = $arg0 + set $taskbt_stack_ptr = $taskbt_task_ptr->pxTopOfStack + + set $taskbt_frame_offset = 9 + if ((*(uint32_t*)($taskbt_stack_ptr + 8)) & 0x10 == 0) + echo FPU is on\n + set $taskbt_frame_offset += 16 + else + echo FPU is off\n + end + + set $taskbt_reg_lr = $lr + set $taskbt_reg_pc = $pc + set $taskbt_reg_sp = $sp + + set $lr = *($taskbt_stack_ptr + $taskbt_frame_offset + 5) + set $pc = *($taskbt_stack_ptr + $taskbt_frame_offset + 6) + set $sp = $taskbt_stack_ptr + $taskbt_frame_offset + 8 + + bt + + set $lr = $taskbt_reg_lr + set $pc = $taskbt_reg_pc + set $sp = $taskbt_reg_sp +end +alias tbt = task_backtrace -- GitLab