File indexing completed on 2025-05-11 08:24:47
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #ifdef HAVE_CONFIG_H
0029 #include "config.h"
0030 #endif
0031
0032 #include "tmacros.h"
0033
0034 #include <rtems.h>
0035
0036 const char rtems_test_name[] = "SPFATAL 31";
0037
0038 #if defined(SPARC_USE_LAZY_FP_SWITCH)
0039
0040 #define EXPECTED_FATAL_SOURCE INTERNAL_ERROR_CORE
0041
0042 static bool is_expected_fatal_code( rtems_fatal_code code )
0043 {
0044 return code == INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT;
0045 }
0046
0047 #elif defined(SPARC_USE_SYNCHRONOUS_FP_SWITCH)
0048
0049 #define EXPECTED_FATAL_SOURCE RTEMS_FATAL_SOURCE_EXCEPTION
0050
0051 static bool is_expected_fatal_code( rtems_fatal_code code )
0052 {
0053 const rtems_exception_frame *frame;
0054
0055 frame = (const rtems_exception_frame *) code;
0056 return frame->trap == 4;
0057 }
0058
0059 #endif
0060
0061 static volatile double f = 1.0;
0062
0063 static void timer(rtems_id id, void *arg)
0064 {
0065 f *= 123.456;
0066 }
0067
0068 static void Init(rtems_task_argument arg)
0069 {
0070 rtems_status_code sc;
0071 rtems_id id;
0072
0073 TEST_BEGIN();
0074
0075 sc = rtems_timer_create(rtems_build_name('T', 'I', 'M', 'E'), &id);
0076 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0077
0078 sc = rtems_timer_fire_after(id, 1, timer, NULL);
0079 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0080
0081 sc = rtems_task_wake_after(2);
0082 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0083
0084 #ifdef EXPECTED_FATAL_SOURCE
0085 rtems_test_assert(0);
0086 #else
0087 TEST_END();
0088 rtems_test_exit(0);
0089 #endif
0090 }
0091
0092 #ifdef EXPECTED_FATAL_SOURCE
0093 static void fatal_extension(
0094 rtems_fatal_source source,
0095 bool always_set_to_false,
0096 rtems_fatal_code code
0097 )
0098 {
0099 if (
0100 source == EXPECTED_FATAL_SOURCE
0101 && !always_set_to_false
0102 && is_expected_fatal_code( code )
0103 ) {
0104 TEST_END();
0105 }
0106 }
0107
0108 #define CONFIGURE_INITIAL_EXTENSIONS \
0109 { .fatal = fatal_extension }, \
0110 RTEMS_TEST_INITIAL_EXTENSION
0111
0112 #else
0113
0114 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0115
0116 #endif
0117
0118 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
0119
0120 #define CONFIGURE_MAXIMUM_TASKS 1
0121 #define CONFIGURE_MAXIMUM_TIMERS 1
0122
0123 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0124
0125 #define CONFIGURE_INIT
0126
0127 #include <rtems/confdefs.h>