RTEMS gdb script
Till Straumann
strauman at SLAC.Stanford.EDU
Wed Dec 11 22:57:30 UTC 2002
Joel.
It would be nice to have these (and more) in the system itself
(so I could call them from CEXP).
-- Till
Joel Sherrill wrote:
> Hi,
>
> I have mentioned this a few times over the years but
> it never seems to get anywhere. Attached is a gdb script
> I conjured up a while back to define macro commands for
> gdb that dump some internal RTEMS structures in a meaningful
> way.
>
> It is a hack in process. The top is a bunch of directory
> commands to point back to the source tree I was using
> at the time.
>
> The commands of interest are:
>
> dump_tasks - prints classic API tasks
> dump_pthread - prints pthreads
> dump_all_tasks - prints internal, classic, and pthreads
> dump_ticks_chain - prints ticks chain (ISR serviced watchdog timers)
> dumps_ticks_tasks_chain - print ticks chain (task serviced watchdog
> timers)
>
> I am throwing this out for a handful of reasons.
>
> 1. It needs feedback.
> 2. The command names are VERY bad! Suggestions desired.
> 3. More commands are needed. These are good examples for
> creating ones that run the other object chains.
> 4. Now they are in the mailing list archive so I won't
> misplace them again. :)
>
> Ideally I would like to see a robust set of these commands
> defined from a user's point of view. Then we could add them
> as "not implemented" and everyone could write them as needed.
>
> These run as macros in gdb so in theory are pretty target
> independent. You have to source this file to get the commands.
>
> Feedback, comments welcomed.
>
> --joel
>
>
> ------------------------------------------------------------------------
>
> directory /usr1/rtems/work/rtems/c/src/exec/rtems/src
> directory /usr1/rtems/work/rtems/c/src/exec/posix/src
> directory /usr1/rtems/work/rtems/c/src/exec/sapi/src
> directory /usr1/rtems/work/rtems/c/src/exec/score/src
> directory /usr1/rtems/work/rtems/c/src/exec/score/cpu/powerpc
> directory /usr1/rtems/work/rtems/c/src/lib/libbsp/powerpc/psim/clock
> directory /usr1/rtems/work/rtems/c/src/lib/libbsp/powerpc/psim/startup
> directory /usr1/rtems/work/rtems/c/src/lib/libbsp/shared
> directory /opt/gnatrtems/powerpc-rtems/psim/lib/include/rtems/score
> directory /opt/gnatrtems/powerpc-rtems/psim/lib/include/rtems/rtems
>
> define dump_tasks_support
> set $index = 1
> while $index <= $arg0.maximum
> set $pt = (Thread_Control *)$arg0.local_table[$index]
> if $pt != 0
> printf "thread 0x%x: state=0x%x pri=%d ", \
> $pt->Object.id, $pt->current_state, $pt->current_priority
> printf "ticks_executed=%d \n", $pt->ticks_executed
> end
>
> set $index = $index + 1
> end
> end
>
> define dump_internal_tasks
> dump_tasks_support _Thread_Internal_information
> end
>
> define dump_tasks
> dump_tasks_support _RTEMS_tasks_Information
> end
>
> define dump_pthread
> dump_tasks_support _POSIX_Threads_Information
> end
>
> define dump_all_tasks
> printf "Executing: 0x%x, Heir: 0x%x\n", _Thread_Executing->Object.id, \
> _Thread_Heir.Object.id
> dump_tasks_support _Thread_Internal_information
> dump_tasks_support _RTEMS_tasks_Information
> dump_tasks_support _POSIX_Threads_Information
> end
>
> define dump_watchdog_chain
> set $permt = &$arg0.permanent_null
> set $node = $arg0.first
> while $node != $permt
> set $wnode = (Watchdog_Control *)$node
> #printf "0x%x, %d, 0x%x -- ", $wnode, $wnode.delta_interval, $wnode.routine
> printf "======================\n"
> print $wnode
> print *$wnode
> set $node = $node.next
> end
> end
>
> define dump_ticks_chain
> dump_watchdog_chain _Watchdog_Ticks_chain
> end
>
> define dump_ticks_task_chain
> dump_watchdog_chain _Timer_Ticks_chain
> end
>
> #d
> #b _Thread_Delay_ended
> #r
More information about the users
mailing list