/* SPDX-License-Identifier: BSD-2-Clause */ /** * @file * * @brief This header file defines the Fatal Error Manager API. */ /* * Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de) * Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR) * * 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. */ /* * This file is part of the RTEMS quality process and was automatically * generated. If you find something that needs to be fixed or * worded better please post a report or patch to an RTEMS mailing list * or raise a bug report: * * https://www.rtems.org/bugs.html * * For information on updating and regenerating please refer to the How-To * section in the Software Requirements Engineering chapter of the * RTEMS Software Engineering manual. The manual is provided as a part of * a release. For development sources please refer to the online * documentation at: * * https://docs.rtems.org */ /* Generated from spec:/rtems/fatal/if/header */ #ifndef _RTEMS_FATAL_H #define _RTEMS_FATAL_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /* Generated from spec:/rtems/fatal/if/group */ /** * @defgroup RTEMSAPIClassicFatal Fatal Error Manager * * @ingroup RTEMSAPIClassic * * @brief The Fatal Error Manager processes all fatal or irrecoverable errors * and other sources of system termination (for example after exit()). Fatal * errors are identified by the fatal source and code pair. */ /* Generated from spec:/rtems/fatal/if/assert-context */ /** * @ingroup RTEMSAPIClassicFatal * * @brief This structure provides the context in which an assertion failed. */ typedef struct { /** * @brief This member provides the file name of the source code file containing * the failed assertion statement. */ const char *file; /** * @brief This member provides the line number in the source code file * containing the failed assertion statement. */ int line; /** * @brief This member provides the function name containing the failed * assertion statement. */ const char *function; /** * @brief This member provides the expression of the failed assertion * statement. */ const char *failed_expression; } rtems_assert_context; /* Generated from spec:/rtems/fatal/if/exception-frame */ /** * @ingroup RTEMSAPIClassicFatal * * @brief This structure represents an architecture-dependent exception frame. */ typedef CPU_Exception_frame rtems_exception_frame; /* Generated from spec:/rtems/fatal/if/fatal */ /** * @ingroup RTEMSAPIClassicFatal * * @brief Invokes the fatal error handler. * * @param fatal_source is the fatal source. * * @param fatal_code is the fatal code. * * This directive processes fatal errors. The fatal source is set to the value * of the ``fatal_source`` parameter. The fatal code is set to the value of * the ``fatal_code`` parameter. * * @par Constraints * @parblock * The following constraints apply to this directive: * * * The directive may be called from within any runtime context. * * * The directive will not return to the caller. * * * The directive invokes the fatal error extensions in extension forward * order. * * * The directive does not invoke handlers registered by atexit() or * on_exit(). * * * The directive may terminate the system. * @endparblock */ RTEMS_NO_RETURN static inline void rtems_fatal( rtems_fatal_source fatal_source, rtems_fatal_code fatal_code ) { _Terminate( fatal_source, fatal_code ); } /* Generated from spec:/rtems/fatal/if/panic */ /** * @ingroup RTEMSAPIClassicFatal * * @brief Prints the message and invokes the fatal error handler. * * @param fmt is the message format. * * @param ... is a list of optional parameters required by the message format. * * This directive prints a message via printk() specified by the ``fmt`` * parameter and optional parameters and then invokes the fatal error handler. * The fatal source is set to RTEMS_FATAL_SOURCE_PANIC. The fatal code is set * to the value of the ``fmt`` parameter value. * * @par Constraints * @parblock * The following constraints apply to this directive: * * * The directive may be called from within any runtime context. * * * The directive will not return to the caller. * * * The directive invokes the fatal error extensions in extension forward * order. * * * The directive does not invoke handlers registered by atexit() or * on_exit(). * * * The directive may terminate the system. * @endparblock */ RTEMS_NO_RETURN RTEMS_PRINTFLIKE( 1, 2 ) void rtems_panic( const char *fmt, ... ); /* Generated from spec:/rtems/fatal/if/exception-frame-print */ /** * @ingroup RTEMSAPIClassicFatal * * @brief Prints the exception frame. * * @param frame is the reference to the exception frame to print. * * The exception frame is printed in an architecture-dependent format using * printk(). */ static inline void rtems_exception_frame_print( const rtems_exception_frame *frame ) { _CPU_Exception_frame_print( frame ); } /* Generated from spec:/rtems/fatal/if/source-text */ /** * @ingroup RTEMSAPIClassicFatal * * @brief Returns a descriptive text for the fatal source. * * @param fatal_source is the fatal source. * * @retval "?" The ``fatal_source`` parameter value was not a fatal source. * * @return Returns a descriptive text for the fatal source. The text for the * fatal source is the enumerator constant name. * * @par Constraints * @parblock * The following constraints apply to this directive: * * * The directive may be called from within any runtime context. * @endparblock */ const char *rtems_fatal_source_text( rtems_fatal_source fatal_source ); /* Generated from spec:/rtems/fatal/if/internal-error-text */ /** * @ingroup RTEMSAPIClassicFatal * * @brief Returns a descriptive text for the internal error code. * * @param internal_error_code is the internal error code. * * @retval "?" The ``internal_error_code`` parameter value was not an internal * error code. * * @return Returns a descriptive text for the internal error code. The text * for the internal error code is the enumerator constant name. * * @par Constraints * @parblock * The following constraints apply to this directive: * * * The directive may be called from within any runtime context. * @endparblock */ const char *rtems_internal_error_text( rtems_fatal_code internal_error_code ); /* Generated from spec:/rtems/fatal/if/error-occurred */ /** * @ingroup RTEMSAPIClassicFatal * * @brief Invokes the fatal error handler. * * @param fatal_code is the fatal code. * * This directive processes fatal errors. The fatal source is set to * INTERNAL_ERROR_RTEMS_API. The fatal code is set to the value of the * ``fatal_code`` parameter. * * @par Notes * This directive is deprecated and should not be used in new code. It is * recommended to not use this directive since error locations cannot be * uniquely identified. A recommended alternative directive is rtems_fatal(). * * @par Constraints * @parblock * The following constraints apply to this directive: * * * The directive may be called from within any runtime context. * * * The directive will not return to the caller. * * * The directive invokes the fatal error extensions in extension forward * order. * * * The directive does not invoke handlers registered by atexit() or * on_exit(). * * * The directive may terminate the system. * @endparblock */ RTEMS_NO_RETURN void rtems_fatal_error_occurred( uint32_t fatal_code ); #ifdef __cplusplus } #endif #endif /* _RTEMS_FATAL_H */