File indexing completed on 2025-05-11 08:24:33
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 <stdlib.h>
0035
0036
0037 #include <assert.h>
0038
0039 #include <rtems.h>
0040
0041 const char rtems_test_name[] = "EXIT 1";
0042
0043 #define EXIT_STATUS 123
0044
0045 static int counter;
0046
0047 static void atexit_0(void)
0048 {
0049 assert(counter == 0);
0050 ++counter;
0051 }
0052
0053 static void atexit_1(void)
0054 {
0055 assert(counter == 1);
0056 ++counter;
0057 }
0058
0059 static void atexit_2(void)
0060 {
0061 assert(counter == 2);
0062 ++counter;
0063 }
0064
0065 static void fatal_extension(
0066 rtems_fatal_source source,
0067 bool always_set_to_false,
0068 rtems_fatal_code error
0069 )
0070 {
0071 if (
0072 source == RTEMS_FATAL_SOURCE_EXIT
0073 && !always_set_to_false
0074 && error == EXIT_STATUS
0075 && counter == 3
0076 ) {
0077 TEST_END();
0078 }
0079 }
0080
0081 static void exit_task(rtems_task_argument arg)
0082 {
0083 int rv;
0084
0085 rv = atexit(atexit_2);
0086 assert(rv == 0);
0087
0088 rv = atexit(atexit_1);
0089 assert(rv == 0);
0090
0091 rv = atexit(atexit_0);
0092 assert(rv == 0);
0093
0094 exit(EXIT_STATUS);
0095 }
0096
0097 static void Init(rtems_task_argument arg)
0098 {
0099 rtems_status_code sc;
0100 rtems_id id;
0101
0102 TEST_BEGIN();
0103
0104 sc = rtems_task_create(
0105 rtems_build_name('E', 'X', 'I', 'T'),
0106 RTEMS_MINIMUM_PRIORITY,
0107 RTEMS_MINIMUM_STACK_SIZE,
0108 RTEMS_DEFAULT_MODES,
0109 RTEMS_DEFAULT_ATTRIBUTES,
0110 &id
0111 );
0112 assert(sc == RTEMS_SUCCESSFUL);
0113
0114 sc = rtems_task_start(id, exit_task, 0);
0115 assert(sc == RTEMS_SUCCESSFUL);
0116
0117 rtems_task_exit();
0118 }
0119
0120 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
0121 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0122
0123 #define CONFIGURE_INITIAL_EXTENSIONS \
0124 { .fatal = fatal_extension }, \
0125 RTEMS_TEST_INITIAL_EXTENSION
0126
0127 #define CONFIGURE_MAXIMUM_TASKS 2
0128
0129 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0130
0131 #define CONFIGURE_INIT
0132
0133 #include <rtems/confdefs.h>