Line data Source code
1 1 : /* 2 : * Copyright (c) 2019 Intel Corporation. 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : /** @file 8 : * @brief Fatal error functions 9 : */ 10 : 11 : #ifndef ZEPHYR_INCLUDE_FATAL_H 12 : #define ZEPHYR_INCLUDE_FATAL_H 13 : 14 : #include <zephyr/arch/cpu.h> 15 : #include <zephyr/arch/exception.h> 16 : #include <zephyr/toolchain.h> 17 : #include <zephyr/fatal_types.h> 18 : 19 : #ifdef __cplusplus 20 : extern "C" { 21 : #endif 22 : 23 : /** 24 : * @defgroup fatal_apis Fatal error APIs 25 : * @ingroup kernel_apis 26 : * @{ 27 : */ 28 : 29 : /** 30 : * @brief Halt the system on a fatal error 31 : * 32 : * Invokes architecture-specific code to power off or halt the system in 33 : * a low power state. Lacking that, lock interrupts and sit in an idle loop. 34 : * 35 : * @param reason Fatal exception reason code 36 : */ 37 1 : FUNC_NORETURN void k_fatal_halt(unsigned int reason); 38 : 39 : /** 40 : * @brief Fatal error policy handler 41 : * 42 : * This function is not invoked by application code, but is declared as a 43 : * weak symbol so that applications may introduce their own policy. 44 : * 45 : * The default implementation of this function halts the system 46 : * unconditionally. Depending on architecture support, this may be 47 : * a simple infinite loop, power off the hardware, or exit an emulator. 48 : * 49 : * If this function returns, then the currently executing thread will be 50 : * aborted. 51 : * 52 : * A few notes for custom implementations: 53 : * 54 : * - If the error is determined to be unrecoverable, LOG_PANIC() should be 55 : * invoked to flush any pending logging buffers. 56 : * - K_ERR_KERNEL_PANIC indicates a severe unrecoverable error in the kernel 57 : * itself, and should not be considered recoverable. There is an assertion 58 : * in z_fatal_error() to enforce this. 59 : * - Even outside of a kernel panic, unless the fault occurred in user mode, 60 : * the kernel itself may be in an inconsistent state, with API calls to 61 : * kernel objects possibly exhibiting undefined behavior or triggering 62 : * another exception. 63 : * 64 : * @param reason The reason for the fatal error 65 : * @param esf Exception context, with details and partial or full register 66 : * state when the error occurred. May in some cases be NULL. 67 : */ 68 1 : void k_sys_fatal_error_handler(unsigned int reason, const struct arch_esf *esf); 69 : 70 : /** 71 : * @brief Called by architecture code upon a fatal error. 72 : * 73 : * This function dumps out architecture-agnostic information about the error 74 : * and then makes a policy decision on what to do by invoking 75 : * k_sys_fatal_error_handler(). 76 : * 77 : * On architectures where k_thread_abort() never returns, this function 78 : * never returns either. 79 : * 80 : * @param reason The reason for the fatal error 81 : * @param esf Exception context, with details and partial or full register 82 : * state when the error occurred. May in some cases be NULL. 83 : */ 84 : void z_fatal_error(unsigned int reason, const struct arch_esf *esf); 85 : 86 : /** @} */ 87 : 88 : #ifdef __cplusplus 89 : } 90 : #endif 91 : 92 : #endif /* ZEPHYR_INCLUDE_FATAL_H */