summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/fatal.h
blob: 3fc6a89a7801e4753b4bca6c849ab3be738bbe4c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**
 * @file
 *
 * @brief Fatal API.
 */

/*
 *  COPYRIGHT (c) 1989-2011.
 *  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.
 */

#ifndef _RTEMS_FATAL_H
#define _RTEMS_FATAL_H

#include <rtems/score/basedefs.h> /* RTEMS_NO_RETURN */
#include <rtems/extension.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @defgroup ClassicFatal Fatal
 *
 * @ingroup RTEMSAPIClassic
 *
 * @brief The Fatal Manager provides functions for fatal system states and or
 * irrecoverable errors.
 */
/**@{**/

/**
 * @brief Assert context.
 */
typedef struct {
  const char *file;
  int         line;
  const char *function;
  const char *failed_expression;
} rtems_assert_context;

/**
 * @brief Exception frame.
 */
typedef CPU_Exception_frame rtems_exception_frame;

/**
 * @brief Prints the exception frame via printk().
 *
 * @see rtems_fatal() and RTEMS_FATAL_SOURCE_EXCEPTION.
 */
static inline void rtems_exception_frame_print(
  const rtems_exception_frame *frame
)
{
  _CPU_Exception_frame_print( frame );
}

/**
 * @brief Invokes the internal error handler with a source of
 * INTERNAL_ERROR_RTEMS_API and is internal set to false.
 *
 * @param[in] the_error is a 32-bit fatal error code.
 *
 * @see _Terminate().
 */
void rtems_fatal_error_occurred(
  uint32_t   the_error
) RTEMS_NO_RETURN;

/**
 * @brief Terminates the system.
 *
 * @param[in] fatal_source The fatal source.
 * @param[in] error_code The error code.
 *
 * @see _Terminate().
 */
RTEMS_NO_RETURN RTEMS_INLINE_ROUTINE void rtems_fatal(
  rtems_fatal_source fatal_source,
  rtems_fatal_code   error_code
)
{
  _Terminate( fatal_source, error_code );
}

/**
 * @brief Prints the specified message via printk() and terminates the system.
 *
 * @param[in] fmt The message format.
 * @param[in] ... The message parameters.
 *
 * @see _Terminate().
 */
RTEMS_NO_RETURN void rtems_panic(
  const char *fmt, ...
) RTEMS_PRINTFLIKE( 1, 2 );

/**
 * @brief Returns a text for a fatal source.
 *
 * The text for each fatal source is the enumerator constant.
 *
 * @param[in] source is the fatal source.
 *
 * @retval text The fatal source text.
 * @retval "?" The passed fatal source is invalid.
 */
const char *rtems_fatal_source_text( rtems_fatal_source source );

/**
 * @brief Returns a text for an internal error code.
 *
 * The text for each internal error code is the enumerator constant.
 *
 * @param[in] error is the error code.
 *
 * @retval text The error code text.
 * @retval "?" The passed error code is invalid.
 */
const char *rtems_internal_error_text( rtems_fatal_code error );

/** @} */

#ifdef __cplusplus
}
#endif

#endif
/* end of include file */