diff options
Diffstat (limited to '')
-rw-r--r-- | cpukit/include/rtems/stackchk.h | 114 |
1 files changed, 103 insertions, 11 deletions
diff --git a/cpukit/include/rtems/stackchk.h b/cpukit/include/rtems/stackchk.h index b600bae3a7..c836263925 100644 --- a/cpukit/include/rtems/stackchk.h +++ b/cpukit/include/rtems/stackchk.h @@ -1,3 +1,5 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + /** * @file * @@ -13,17 +15,32 @@ * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ #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> /** @@ -73,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 ** @@ -91,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 @@ -109,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 ); /** |