diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-09-29 15:35:37 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-10-14 10:48:23 +0200 |
commit | 829e489230669aa65db200b8234559cfb42e6ad4 (patch) | |
tree | 5257af44c62fbe807a264b7a5d958ab5096e57e9 /cpukit/include/rtems/stackchk.h | |
parent | stackchk: Avoid internal header file (diff) | |
download | rtems-829e489230669aa65db200b8234559cfb42e6ad4.tar.bz2 |
stackchk: Add rtems_stack_checker_iterate()
Diffstat (limited to '')
-rw-r--r-- | cpukit/include/rtems/stackchk.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/cpukit/include/rtems/stackchk.h b/cpukit/include/rtems/stackchk.h index 7968211a51..c836263925 100644 --- a/cpukit/include/rtems/stackchk.h +++ b/cpukit/include/rtems/stackchk.h @@ -90,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 ** |