diff options
Diffstat (limited to '')
-rw-r--r-- | cpukit/include/rtems/stackchk.h | 89 |
1 files changed, 81 insertions, 8 deletions
diff --git a/cpukit/include/rtems/stackchk.h b/cpukit/include/rtems/stackchk.h index 22d48c9d2b..c836263925 100644 --- a/cpukit/include/rtems/stackchk.h +++ b/cpukit/include/rtems/stackchk.h @@ -40,9 +40,7 @@ #ifndef _RTEMS_STACKCHK_H #define _RTEMS_STACKCHK_H -#include <stdbool.h> /* bool */ - -#include <rtems/score/thread.h> /* Thread_Control */ +#include <rtems.h> #include <rtems/print.h> /** @@ -92,6 +90,81 @@ void rtems_stack_checker_report_usage_with_plugin( const rtems_printer *printer ); +/** + * @brief This structure contains the stack information provided by the stack + * checker for a stack. + */ +typedef struct { + /** + * @brief This member contains the object identifier associated with the + * object using the stack. + * + * For interrupt stacks, the object identifier is the processor index. + */ + rtems_id id; + + /** + * @brief This member provides the object name associated with the + * object using the stack. + * + * For interrupt stacks, the object name is "Interrupt Stack". + */ + const char *name; + + /** + * @brief This member provides the begin address of the stack area. + */ + const void *begin; + + /** + * @brief This member contains the size in byes of the stack area. + */ + uintptr_t size; + + /** + * @brief This member provides the current stack pointer of the stack. + * + * If the current stack pointer is not available, then the value is set to + * NULL. + */ + const void *current; + + /** + * @brief This member contains the size in byes of the used stack area. + * + * If the stack checker is not initialized, then the value is set to + * UINTPTR_MAX. + */ + uintptr_t used; +} rtems_stack_checker_info; + +/** + * @brief Visitor routines invoked by rtems_stack_checker_iterate() shall have + * this type. + * + * @param info is the stack information. + * + * @param arg is the argument passed to rtems_stack_checker_iterate(). + */ +typedef void ( *rtems_stack_checker_visitor )( + const rtems_stack_checker_info *info, + void *arg +); + +/** + * @brief Iterates over all stacks used by the system and invokes the visitor + * routine for each stack. + * + * This method prints a stack usage report for the curently executing + * task. + * + * @param visitor is the visitor routine invoked for each stack. + * + * @param arg is the argument passed to each visitor routine invocation during + * the iteration. + */ +void rtems_stack_checker_iterate( rtems_stack_checker_visitor visit, void *arg ); + /************************************************************* ************************************************************* ** Prototyped only so the user extension can be installed ** @@ -110,11 +183,11 @@ void rtems_stack_checker_report_usage_with_plugin( * will automatically intialize itself. */ bool rtems_stack_checker_create_extension( - Thread_Control *running, - Thread_Control *the_thread + rtems_tcb *running, + rtems_tcb *the_thread ); -void rtems_stack_checker_begin_extension( Thread_Control *executing ); +void rtems_stack_checker_begin_extension( rtems_tcb *executing ); /** * @brief Stack Checker Task Context Switch Extension @@ -128,8 +201,8 @@ void rtems_stack_checker_begin_extension( Thread_Control *executing ); * @note This is called from the internal method _Thread_Dispatch. */ void rtems_stack_checker_switch_extension( - Thread_Control *running, - Thread_Control *heir + rtems_tcb *running, + rtems_tcb *heir ); /** |