From 8a365179eafdf3aea98e60ab9f5882b200d4c759 Mon Sep 17 00:00:00 2001 From: px4dev Date: Sat, 4 Aug 2012 15:12:36 -0700 Subject: Fresh import of the PX4 firmware sources. --- Debug/NuttX | 211 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 Debug/NuttX (limited to 'Debug/NuttX') diff --git a/Debug/NuttX b/Debug/NuttX new file mode 100644 index 000000000..46ba3d1ff --- /dev/null +++ b/Debug/NuttX @@ -0,0 +1,211 @@ +# +# Generic GDB macros for working with NuttX +# + +echo Loading NuttX GDB macros. Use 'help nuttx' for more information.\n + +define nuttx + echo Use 'help nuttx' for more information.\n +end + +document nuttx +. Various macros for working with NuttX. +. +. showheap +. Prints the contents of the malloc heap(s). +. showtasks +. Prints a list of all tasks. +. showtask
+. Prints information about the task at
+. +. Use 'help ' for more specific help. +end + +################################################################################ +# Heap display +################################################################################ + +define _showheap + set $index = $arg0 + if (sizeof(struct mm_allocnode_s) == 4) + set $MM_ALLOC_BIT = 0x8000 + else + set $MM_ALLOC_BIT = 0x80000000 + end + printf "HEAP %d %p - %p\n", $index, g_heapstart[$index], g_heapend[$index] + printf "ptr size\n" + set $node = (char *)g_heapstart[$index] + sizeof(struct mm_allocnode_s) + while $node < g_heapend[$index] + printf " %p", $node + set $nodestruct = (struct mm_allocnode_s *)$node + printf " %u", $nodestruct->size + if !($nodestruct->preceding & $MM_ALLOC_BIT) + printf " FREE" + end + if ($nodestruct->size > g_heapsize) || (($node + $nodestruct->size) > g_heapend[$index]) + printf " (BAD SIZE)" + end + printf "\n" + set $node = $node + $nodestruct->size + end +end + +define showheap + set $nheaps = sizeof(g_heapstart) / sizeof(g_heapstart[0]) + printf "Printing %d heaps\n", $nheaps + set $heapindex = (int)0 + while $heapindex < $nheaps + showheap $heapindex + set $heapindex = $heapindex + 1 + end +end + +document showheap +. showheap +. Prints the contents of the malloc heap(s). +end + +################################################################################ +# Task display +################################################################################ + +define _showtask_oneline + set $task = (struct _TCB *)$arg0 + printf " %p %.2d %.3d %s\n", $task, $task->pid, $task->sched_priority, $task->name +end + +define _showtasklist + set $queue = (dq_queue_t *)$arg0 + set $cursor = (dq_entry_t *)$queue->head + + if $cursor != 0 + printf " TCB PID PRI\n" + else + printf " \n" + end + + while $cursor != 0 + + _showtask_oneline $cursor + + if $cursor == $queue->tail + set $cursor = 0 + else + set $next = $cursor->flink + + if $next->blink != $cursor + printf "task linkage corrupt\n" + set $cursor = 0 + else + set $cursor = $next + end + end + end +end + +# +# Print task registers for a NuttX v7em target with FPU enabled. +# +define _showtaskregs_v7em + set $task = (struct _TCB *)$arg0 + set $regs = (uint32_t *)&($task->xcp.regs[0]) + + printf " r0: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", $regs[27], $regs[28], $regs[29], $regs[30], $regs[2], $regs[3], $regs[4], $regs[5] + printf " r8: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", $regs[6], $regs[7], $regs[8], $regs[9], $regs[31], $regs[0], $regs[32], $regs[33] + printf " XPSR 0x%08x EXC_RETURN 0x%08x PRIMASK 0x%08x\n", $regs[34], $regs[10], $regs[1] +end + +# +# Print current registers for a NuttX v7em target with FPU enabled. +# +define _showcurrentregs_v7em + printf " r0: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7 + printf " r8: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", $r8, $r9, $r10, $r11, $r12, $r13, $r14, $r15 + printf " XPSR 0x%08x\n", $xpsr +end + +# +# Print details of a semaphore +# +define _showsemaphore + printf "count %d ", $arg0->semcount + if $arg0->hlist.holder != 0 + set $_task = (struct _TCB *)$arg0->hlist.holder + printf "held by %s", $_task->name + end + printf "\n" +end + +define showtask + set $task = (struct _TCB *)$arg0 + + printf "%p %.2d ", $task, $task->pid + _showtaskstate $task + printf " %s\n", $task->name + set $stack_free = 0 + while ($stack_free < $task->adj_stack_size) && *(uint8_t *)($task->stack_alloc_ptr + $stack_free) + set $stack_free = $stack_free + 1 + end + printf" stack 0x%08x-0x%08x (%d) %d free\n", $task->stack_alloc_ptr, $task->adj_stack_ptr, $task->adj_stack_size, $stack_free + + if $task->task_state == TSTATE_WAIT_SEM + printf " waiting on %p ", $task->waitsem + _showsemaphore $task->waitsem + end + + if $task->task_state != TSTATE_TASK_RUNNING + _showtaskregs_v7em $task + else + _showcurrentregs_v7em + end + + # XXX print registers here +end + +document showtask +. showtask +. Print details of a task. +end + +define _showtaskstate + if $arg0->task_state == TSTATE_TASK_INVALID + printf "INVALID" + end + if $arg0->task_state == TSTATE_TASK_PENDING + printf "PENDING" + end + if $arg0->task_state == TSTATE_TASK_READYTORUN + printf "READYTORUN" + end + if $arg0->task_state == TSTATE_TASK_RUNNING + printf "RUNNING" + end + if $arg0->task_state == TSTATE_TASK_INACTIVE + printf "INACTIVE" + end + if $arg0->task_state == TSTATE_WAIT_SEM + printf "WAIT_SEM" + end + if $arg0->task_state == TSTATE_WAIT_SIG + printf "WAIT_SIG" + end + if $arg0->task_state > TSTATE_WAIT_SIG + printf "%d", $arg0->task_state + end +end + +define showtasks + printf "PENDING\n" + _showtasklist &g_pendingtasks + printf "RUNNABLE\n" + _showtasklist &g_readytorun + printf "WAITING\n" + _showtasklist &g_waitingforsemaphore + printf "INACTIVE\n" + _showtasklist &g_inactivetasks +end + +document showtasks +. showtasks +. Print a list of all tasks in the system, separated into their respective queues. +end -- cgit v1.2.3