source: rtems/cpukit/score/src/interr.c @ 38ee758

4.115
Last change on this file since 38ee758 was 38ee758, checked in by Sebastian Huber <sebastian.huber@…>, on 02/17/14 at 08:58:43

score: Disable ISR in _Internal_error_Occurred()

Disable interrupts as the first step in _Internal_error_Occurred() to
get a defined execution context for the fatal extensions.

Make _ISR_Disable_without_giant() available for non-SMP configurations.

  • Property mode set to 100644
File size: 1.2 KB
Line 
1/**
2 * @file
3 *
4 * @brief Initiates system termination
5 * @ingroup ScoreIntErr
6 */
7
8/*
9 *  COPYRIGHT (c) 1989-1999.
10 *  On-Line Applications Research Corporation (OAR).
11 *
12 *  The license and distribution terms for this file may be
13 *  found in the file LICENSE in this distribution or at
14 *  http://www.rtems.com/license/LICENSE.
15 */
16
17#if HAVE_CONFIG_H
18#include "config.h"
19#endif
20
21#include <rtems/score/interr.h>
22#include <rtems/score/isrlevel.h>
23#include <rtems/score/sysstate.h>
24#include <rtems/score/userextimpl.h>
25
26System_state_Codes _System_state_Current;
27
28Internal_errors_Information _Internal_errors_What_happened;
29
30void _Internal_error_Occurred(
31  Internal_errors_Source  the_source,
32  bool                    is_internal,
33  Internal_errors_t       the_error
34)
35{
36  ISR_Level level;
37
38  _ISR_Disable_without_giant( level );
39  (void) level;
40
41  _User_extensions_Fatal( the_source, is_internal, the_error );
42
43  _Internal_errors_What_happened.the_source  = the_source;
44  _Internal_errors_What_happened.is_internal = is_internal;
45  _Internal_errors_What_happened.the_error   = the_error;
46
47  _System_state_Set( SYSTEM_STATE_TERMINATED );
48
49  _CPU_Fatal_halt( the_error );
50
51  /* will not return from this routine */
52  while (true);
53}
Note: See TracBrowser for help on using the repository browser.