source: rtems/testsuites/sptests/spsysinit01/init.c @ bc47ec1c

5
Last change on this file since bc47ec1c was bc47ec1c, checked in by Sebastian Huber <sebastian.huber@…>, on 06/20/16 at 04:50:12

score: Refine system initialization order

  • Property mode set to 100644
File size: 16.1 KB
Line 
1/*
2 * Copyright (c) 2015, 2016 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.com/license/LICENSE.
13 */
14
15#ifdef HAVE_CONFIG_H
16  #include "config.h"
17#endif
18
19#define TESTS_USE_PRINTK
20#include "tmacros.h"
21
22#include <sys/types.h>
23#include <sys/stat.h>
24
25#include <assert.h>
26#include <pthread.h>
27#include <string.h>
28#include <stdlib.h>
29#include <unistd.h>
30
31#include <rtems.h>
32#include <rtems/ioimpl.h>
33#include <rtems/libio_.h>
34#include <rtems/sysinit.h>
35
36#include <rtems/extensionimpl.h>
37#ifdef RTEMS_POSIX_API
38#include <rtems/posix/barrierimpl.h>
39#include <rtems/posix/condimpl.h>
40#include <rtems/posix/mqueueimpl.h>
41#include <rtems/posix/muteximpl.h>
42#include <rtems/posix/psignalimpl.h>
43#include <rtems/posix/pthreadimpl.h>
44#include <rtems/posix/rwlockimpl.h>
45#include <rtems/posix/semaphoreimpl.h>
46#include <rtems/posix/spinlockimpl.h>
47#include <rtems/posix/timerimpl.h>
48#endif /* RTEMS_POSIX_API */
49#include <rtems/posix/keyimpl.h>
50#include <rtems/rtems/barrierimpl.h>
51#include <rtems/rtems/dpmemimpl.h>
52#include <rtems/rtems/messageimpl.h>
53#include <rtems/rtems/partimpl.h>
54#include <rtems/rtems/ratemonimpl.h>
55#include <rtems/rtems/regionimpl.h>
56#include <rtems/rtems/semimpl.h>
57#include <rtems/rtems/tasksimpl.h>
58#include <rtems/rtems/timerimpl.h>
59#include <rtems/score/apimutex.h>
60#include <rtems/score/chainimpl.h>
61#include <rtems/score/sysstate.h>
62#include <rtems/score/userextimpl.h>
63#include <rtems/score/wkspace.h>
64
65const char rtems_test_name[] = "SPSYSINIT 1";
66
67typedef enum {
68  BSP_WORK_AREAS_PRE,
69  BSP_WORK_AREAS_POST,
70  BSP_START_PRE,
71  BSP_START_POST,
72  INITIAL_EXTENSIONS_PRE,
73  INITIAL_EXTENSIONS_POST,
74  DATA_STRUCTURES_PRE,
75  DATA_STRUCTURES_POST,
76  CPU_SET_PRE,
77  CPU_SET_POST,
78  USER_EXTENSIONS_PRE,
79  USER_EXTENSIONS_POST,
80  CLASSIC_TASKS_PRE,
81  CLASSIC_TASKS_POST,
82  CLASSIC_TIMER_PRE,
83  CLASSIC_TIMER_POST,
84  CLASSIC_SIGNAL_PRE,
85  CLASSIC_SIGNAL_POST,
86  CLASSIC_EVENT_PRE,
87  CLASSIC_EVENT_POST,
88  CLASSIC_MESSAGE_QUEUE_PRE,
89  CLASSIC_MESSAGE_QUEUE_POST,
90  CLASSIC_SEMAPHORE_PRE,
91  CLASSIC_SEMAPHORE_POST,
92  CLASSIC_PARTITION_PRE,
93  CLASSIC_PARTITION_POST,
94  CLASSIC_REGION_PRE,
95  CLASSIC_REGION_POST,
96  CLASSIC_DUAL_PORTED_MEMORY_PRE,
97  CLASSIC_DUAL_PORTED_MEMORY_POST,
98  CLASSIC_RATE_MONOTONIC_PRE,
99  CLASSIC_RATE_MONOTONIC_POST,
100  CLASSIC_BARRIER_PRE,
101  CLASSIC_BARRIER_POST,
102#ifdef RTEMS_POSIX_API
103  POSIX_SIGNALS_PRE,
104  POSIX_SIGNALS_POST,
105  POSIX_THREADS_PRE,
106  POSIX_THREADS_POST,
107  POSIX_CONDITION_VARIABLE_PRE,
108  POSIX_CONDITION_VARIABLE_POST,
109  POSIX_MUTEX_PRE,
110  POSIX_MUTEX_POST,
111  POSIX_MESSAGE_QUEUE_PRE,
112  POSIX_MESSAGE_QUEUE_POST,
113  POSIX_SEMAPHORE_PRE,
114  POSIX_SEMAPHORE_POST,
115  POSIX_TIMER_PRE,
116  POSIX_TIMER_POST,
117  POSIX_BARRIER_PRE,
118  POSIX_BARRIER_POST,
119  POSIX_RWLOCK_PRE,
120  POSIX_RWLOCK_POST,
121  POSIX_SPINLOCK_PRE,
122  POSIX_SPINLOCK_POST,
123  POSIX_CLEANUP_PRE,
124  POSIX_CLEANUP_POST,
125#endif /* RTEMS_POSIX_API */
126  POSIX_KEYS_PRE,
127  POSIX_KEYS_POST,
128  IDLE_THREADS_PRE,
129  IDLE_THREADS_POST,
130  LIBIO_PRE,
131  LIBIO_POST,
132  ROOT_FILESYSTEM_PRE,
133  ROOT_FILESYSTEM_POST,
134  BSP_PRE_DRIVERS_PRE,
135  BSP_PRE_DRIVERS_POST,
136  DEVICE_DRIVERS_PRE,
137  DEVICE_DRIVERS_POST,
138  CLASSIC_USER_TASKS_PRE,
139  CLASSIC_USER_TASKS_POST,
140#ifdef RTEMS_POSIX_API
141  POSIX_USER_THREADS_PRE,
142  POSIX_USER_THREADS_POST,
143#endif /* RTEMS_POSIX_API */
144  STD_FILE_DESCRIPTORS_PRE,
145  STD_FILE_DESCRIPTORS_POST,
146  LAST_FIRST,
147  LAST_SECOND,
148  LAST_THIRD,
149  LAST_FOURTH,
150  LAST_FIFTH,
151  LAST_SIXTH,
152  LAST_SEVENTH,
153  LAST_EIGHTH,
154  LAST_NINETH,
155  LAST_TENTH,
156  LAST_MIDDLE,
157  LAST_LAST,
158  INIT_TASK,
159  DONE
160} init_step;
161
162#define FIRST(x) \
163  static void x##_first(void); \
164  RTEMS_SYSINIT_ITEM( \
165    x##_first, \
166    x, \
167    RTEMS_SYSINIT_ORDER_FIRST \
168  ); \
169  static void x##_first(void)
170
171#define LAST(x) \
172  static void x##_last(void); \
173  RTEMS_SYSINIT_ITEM( \
174    x##_last, \
175    x, \
176    RTEMS_SYSINIT_ORDER_LAST \
177  ); \
178  static void x##_last(void)
179
180#define LAST_STEP(x) \
181  static void last_##x(void) \
182  { \
183    next_step(LAST_##x); \
184  } \
185  RTEMS_SYSINIT_ITEM( \
186    last_##x, \
187    RTEMS_SYSINIT_LAST, \
188    RTEMS_SYSINIT_ORDER_##x \
189  )
190
191static init_step step;
192
193static void next_step(init_step expected)
194{
195  assert(step == expected);
196  step = expected + 1;
197}
198
199FIRST(RTEMS_SYSINIT_BSP_WORK_AREAS)
200{
201  assert(_Workspace_Area.area_begin == 0);
202  next_step(BSP_WORK_AREAS_PRE);
203}
204
205LAST(RTEMS_SYSINIT_BSP_WORK_AREAS)
206{
207  assert(_Workspace_Area.area_begin != 0);
208  next_step(BSP_WORK_AREAS_POST);
209}
210
211FIRST(RTEMS_SYSINIT_BSP_START)
212{
213  /*
214   * Since the work performed here is BSP-specific, there is no way to test pre
215   * and post conditions.
216   */
217  next_step(BSP_START_PRE);
218}
219
220LAST(RTEMS_SYSINIT_BSP_START)
221{
222  /*
223   * Some BSPs initialize the printk() support in bsp_start().  So, print begin
224   * of test after bsp_start().
225   */
226  TEST_BEGIN();
227
228  next_step(BSP_START_POST);
229}
230
231FIRST(RTEMS_SYSINIT_INITIAL_EXTENSIONS)
232{
233  assert(_Chain_Is_empty(&_User_extensions_Switches_list));
234  next_step(INITIAL_EXTENSIONS_PRE);
235}
236
237LAST(RTEMS_SYSINIT_INITIAL_EXTENSIONS)
238{
239  assert(!_Chain_Is_empty(&_User_extensions_Switches_list));
240  next_step(INITIAL_EXTENSIONS_POST);
241}
242
243FIRST(RTEMS_SYSINIT_DATA_STRUCTURES)
244{
245  assert(_RTEMS_Allocator_Mutex == NULL);
246  next_step(DATA_STRUCTURES_PRE);
247}
248
249LAST(RTEMS_SYSINIT_DATA_STRUCTURES)
250{
251  assert(_RTEMS_Allocator_Mutex != NULL);
252  next_step(DATA_STRUCTURES_POST);
253}
254
255FIRST(RTEMS_SYSINIT_CPU_SET)
256{
257  /* There is nothing to do in case RTEMS_SMP is not defined */
258  next_step(CPU_SET_PRE);
259}
260
261LAST(RTEMS_SYSINIT_CPU_SET)
262{
263  next_step(CPU_SET_POST);
264}
265
266FIRST(RTEMS_SYSINIT_USER_EXTENSIONS)
267{
268  assert(_Extension_Information.maximum == 0);
269  next_step(USER_EXTENSIONS_PRE);
270}
271
272LAST(RTEMS_SYSINIT_USER_EXTENSIONS)
273{
274  assert(_Extension_Information.maximum != 0);
275  next_step(USER_EXTENSIONS_POST);
276}
277
278FIRST(RTEMS_SYSINIT_CLASSIC_TASKS)
279{
280  assert(_RTEMS_tasks_Information.Objects.maximum == 0);
281  next_step(CLASSIC_TASKS_PRE);
282}
283
284LAST(RTEMS_SYSINIT_CLASSIC_TASKS)
285{
286  assert(_RTEMS_tasks_Information.Objects.maximum != 0);
287  next_step(CLASSIC_TASKS_POST);
288}
289
290FIRST(RTEMS_SYSINIT_CLASSIC_TIMER)
291{
292  assert(_Timer_Information.maximum == 0);
293  next_step(CLASSIC_TIMER_PRE);
294}
295
296LAST(RTEMS_SYSINIT_CLASSIC_TIMER)
297{
298  assert(_Timer_Information.maximum != 0);
299  next_step(CLASSIC_TIMER_POST);
300}
301
302FIRST(RTEMS_SYSINIT_CLASSIC_SIGNAL)
303{
304  /* There is nothing to do in case RTEMS_MULTIPROCESSING is not defined */
305  next_step(CLASSIC_SIGNAL_PRE);
306}
307
308LAST(RTEMS_SYSINIT_CLASSIC_SIGNAL)
309{
310  next_step(CLASSIC_SIGNAL_POST);
311}
312
313FIRST(RTEMS_SYSINIT_CLASSIC_EVENT)
314{
315  /* There is nothing to do in case RTEMS_MULTIPROCESSING is not defined */
316  next_step(CLASSIC_EVENT_PRE);
317}
318
319LAST(RTEMS_SYSINIT_CLASSIC_EVENT)
320{
321  next_step(CLASSIC_EVENT_POST);
322}
323
324FIRST(RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE)
325{
326  assert(_Message_queue_Information.maximum == 0);
327  next_step(CLASSIC_MESSAGE_QUEUE_PRE);
328}
329
330LAST(RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE)
331{
332  assert(_Message_queue_Information.maximum != 0);
333  next_step(CLASSIC_MESSAGE_QUEUE_POST);
334}
335
336FIRST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE)
337{
338  assert(_Semaphore_Information.maximum == 0);
339  next_step(CLASSIC_SEMAPHORE_PRE);
340}
341
342LAST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE)
343{
344  assert(_Semaphore_Information.maximum != 0);
345  next_step(CLASSIC_SEMAPHORE_POST);
346}
347
348FIRST(RTEMS_SYSINIT_CLASSIC_PARTITION)
349{
350  assert(_Partition_Information.maximum == 0);
351  next_step(CLASSIC_PARTITION_PRE);
352}
353
354LAST(RTEMS_SYSINIT_CLASSIC_PARTITION)
355{
356  assert(_Partition_Information.maximum != 0);
357  next_step(CLASSIC_PARTITION_POST);
358}
359
360FIRST(RTEMS_SYSINIT_CLASSIC_REGION)
361{
362  assert(_Region_Information.maximum == 0);
363  next_step(CLASSIC_REGION_PRE);
364}
365
366LAST(RTEMS_SYSINIT_CLASSIC_REGION)
367{
368  assert(_Region_Information.maximum != 0);
369  next_step(CLASSIC_REGION_POST);
370}
371
372FIRST(RTEMS_SYSINIT_CLASSIC_DUAL_PORTED_MEMORY)
373{
374  assert(_Dual_ported_memory_Information.maximum == 0);
375  next_step(CLASSIC_DUAL_PORTED_MEMORY_PRE);
376}
377
378LAST(RTEMS_SYSINIT_CLASSIC_DUAL_PORTED_MEMORY)
379{
380  assert(_Dual_ported_memory_Information.maximum != 0);
381  next_step(CLASSIC_DUAL_PORTED_MEMORY_POST);
382}
383
384FIRST(RTEMS_SYSINIT_CLASSIC_RATE_MONOTONIC)
385{
386  assert(_Rate_monotonic_Information.maximum == 0);
387  next_step(CLASSIC_RATE_MONOTONIC_PRE);
388}
389
390LAST(RTEMS_SYSINIT_CLASSIC_RATE_MONOTONIC)
391{
392  assert(_Rate_monotonic_Information.maximum != 0);
393  next_step(CLASSIC_RATE_MONOTONIC_POST);
394}
395
396FIRST(RTEMS_SYSINIT_CLASSIC_BARRIER)
397{
398  assert(_Barrier_Information.maximum == 0);
399  next_step(CLASSIC_BARRIER_PRE);
400}
401
402LAST(RTEMS_SYSINIT_CLASSIC_BARRIER)
403{
404  assert(_Barrier_Information.maximum != 0);
405  next_step(CLASSIC_BARRIER_POST);
406}
407
408#ifdef RTEMS_POSIX_API
409
410FIRST(RTEMS_SYSINIT_POSIX_SIGNALS)
411{
412  assert(
413    memcmp(
414      &_POSIX_signals_Vectors,
415      _POSIX_signals_Default_vectors,
416      sizeof(_POSIX_signals_Vectors)
417    ) != 0
418  );
419  next_step(POSIX_SIGNALS_PRE);
420}
421
422LAST(RTEMS_SYSINIT_POSIX_SIGNALS)
423{
424  assert(
425    memcmp(
426      &_POSIX_signals_Vectors,
427      _POSIX_signals_Default_vectors,
428      sizeof(_POSIX_signals_Vectors)
429    ) == 0
430  );
431  next_step(POSIX_SIGNALS_POST);
432}
433
434FIRST(RTEMS_SYSINIT_POSIX_THREADS)
435{
436  assert(_POSIX_Threads_Information.Objects.maximum == 0);
437  next_step(POSIX_THREADS_PRE);
438}
439
440LAST(RTEMS_SYSINIT_POSIX_THREADS)
441{
442  assert(_POSIX_Threads_Information.Objects.maximum != 0);
443  next_step(POSIX_THREADS_POST);
444}
445
446FIRST(RTEMS_SYSINIT_POSIX_CONDITION_VARIABLE)
447{
448  assert(_POSIX_Condition_variables_Information.maximum == 0);
449  next_step(POSIX_CONDITION_VARIABLE_PRE);
450}
451
452LAST(RTEMS_SYSINIT_POSIX_CONDITION_VARIABLE)
453{
454  assert(_POSIX_Condition_variables_Information.maximum != 0);
455  next_step(POSIX_CONDITION_VARIABLE_POST);
456}
457
458FIRST(RTEMS_SYSINIT_POSIX_MUTEX)
459{
460  assert(_POSIX_Mutex_Information.maximum == 0);
461  next_step(POSIX_MUTEX_PRE);
462}
463
464LAST(RTEMS_SYSINIT_POSIX_MUTEX)
465{
466  assert(_POSIX_Mutex_Information.maximum != 0);
467  next_step(POSIX_MUTEX_POST);
468}
469
470FIRST(RTEMS_SYSINIT_POSIX_MESSAGE_QUEUE)
471{
472  assert(_POSIX_Message_queue_Information.maximum == 0);
473  next_step(POSIX_MESSAGE_QUEUE_PRE);
474}
475
476LAST(RTEMS_SYSINIT_POSIX_MESSAGE_QUEUE)
477{
478  assert(_POSIX_Message_queue_Information.maximum != 0);
479  next_step(POSIX_MESSAGE_QUEUE_POST);
480}
481
482FIRST(RTEMS_SYSINIT_POSIX_SEMAPHORE)
483{
484  assert(_POSIX_Semaphore_Information.maximum == 0);
485  next_step(POSIX_SEMAPHORE_PRE);
486}
487
488LAST(RTEMS_SYSINIT_POSIX_SEMAPHORE)
489{
490  assert(_POSIX_Semaphore_Information.maximum != 0);
491  next_step(POSIX_SEMAPHORE_POST);
492}
493
494FIRST(RTEMS_SYSINIT_POSIX_TIMER)
495{
496  assert(_POSIX_Timer_Information.maximum == 0);
497  next_step(POSIX_TIMER_PRE);
498}
499
500LAST(RTEMS_SYSINIT_POSIX_TIMER)
501{
502  assert(_POSIX_Timer_Information.maximum != 0);
503  next_step(POSIX_TIMER_POST);
504}
505
506FIRST(RTEMS_SYSINIT_POSIX_BARRIER)
507{
508  assert(_POSIX_Barrier_Information.maximum == 0);
509  next_step(POSIX_BARRIER_PRE);
510}
511
512LAST(RTEMS_SYSINIT_POSIX_BARRIER)
513{
514  assert(_POSIX_Barrier_Information.maximum != 0);
515  next_step(POSIX_BARRIER_POST);
516}
517
518FIRST(RTEMS_SYSINIT_POSIX_RWLOCK)
519{
520  assert(_POSIX_RWLock_Information.maximum == 0);
521  next_step(POSIX_RWLOCK_PRE);
522}
523
524LAST(RTEMS_SYSINIT_POSIX_RWLOCK)
525{
526  assert(_POSIX_RWLock_Information.maximum != 0);
527  next_step(POSIX_RWLOCK_POST);
528}
529
530FIRST(RTEMS_SYSINIT_POSIX_SPINLOCK)
531{
532  assert(_POSIX_Spinlock_Information.maximum == 0);
533  next_step(POSIX_SPINLOCK_PRE);
534}
535
536LAST(RTEMS_SYSINIT_POSIX_SPINLOCK)
537{
538  assert(_POSIX_Spinlock_Information.maximum != 0);
539  next_step(POSIX_SPINLOCK_POST);
540}
541
542static size_t user_extensions_pre_posix_cleanup;
543
544FIRST(RTEMS_SYSINIT_POSIX_CLEANUP)
545{
546  user_extensions_pre_posix_cleanup =
547    _Chain_Node_count_unprotected(&_User_extensions_List.Active);
548  next_step(POSIX_CLEANUP_PRE);
549}
550
551LAST(RTEMS_SYSINIT_POSIX_CLEANUP)
552{
553  assert(
554    user_extensions_pre_posix_cleanup + 1 ==
555      _Chain_Node_count_unprotected(&_User_extensions_List.Active)
556  );
557  next_step(POSIX_CLEANUP_POST);
558}
559
560#endif /* RTEMS_POSIX_API */
561
562FIRST(RTEMS_SYSINIT_POSIX_KEYS)
563{
564  assert(_POSIX_Keys_Information.maximum == 0);
565  next_step(POSIX_KEYS_PRE);
566}
567
568LAST(RTEMS_SYSINIT_POSIX_KEYS)
569{
570  assert(_POSIX_Keys_Information.maximum != 0);
571  next_step(POSIX_KEYS_POST);
572}
573
574FIRST(RTEMS_SYSINIT_IDLE_THREADS)
575{
576  assert(_System_state_Is_before_initialization(_System_state_Get()));
577  next_step(IDLE_THREADS_PRE);
578}
579
580LAST(RTEMS_SYSINIT_IDLE_THREADS)
581{
582  assert(_System_state_Is_before_multitasking(_System_state_Get()));
583  next_step(IDLE_THREADS_POST);
584}
585
586FIRST(RTEMS_SYSINIT_LIBIO)
587{
588  assert(rtems_libio_semaphore == 0);
589  next_step(LIBIO_PRE);
590}
591
592LAST(RTEMS_SYSINIT_LIBIO)
593{
594  assert(rtems_libio_semaphore != 0);
595  next_step(LIBIO_POST);
596}
597
598FIRST(RTEMS_SYSINIT_ROOT_FILESYSTEM)
599{
600  struct stat st;
601  int rv;
602
603  rv = stat("/", &st);
604  assert(rv == -1);
605  next_step(ROOT_FILESYSTEM_PRE);
606}
607
608LAST(RTEMS_SYSINIT_ROOT_FILESYSTEM)
609{
610  struct stat st;
611  int rv;
612
613  rv = stat("/", &st);
614  assert(rv == 0);
615  next_step(ROOT_FILESYSTEM_POST);
616}
617
618FIRST(RTEMS_SYSINIT_BSP_PRE_DRIVERS)
619{
620  /*
621   * Since the work performed here is BSP-specific, there is no way to test pre
622   * and post conditions.
623   */
624  next_step(BSP_PRE_DRIVERS_PRE);
625}
626
627LAST(RTEMS_SYSINIT_BSP_PRE_DRIVERS)
628{
629  next_step(BSP_PRE_DRIVERS_POST);
630}
631
632FIRST(RTEMS_SYSINIT_DEVICE_DRIVERS)
633{
634  assert(!_IO_All_drivers_initialized);
635  next_step(DEVICE_DRIVERS_PRE);
636}
637
638LAST(RTEMS_SYSINIT_DEVICE_DRIVERS)
639{
640  assert(_IO_All_drivers_initialized);
641  next_step(DEVICE_DRIVERS_POST);
642}
643
644FIRST(RTEMS_SYSINIT_CLASSIC_USER_TASKS)
645{
646  _Objects_Allocator_lock();
647  assert(_Objects_Active_count(&_RTEMS_tasks_Information.Objects) == 0);
648  _Objects_Allocator_unlock();
649  next_step(CLASSIC_USER_TASKS_PRE);
650}
651
652LAST(RTEMS_SYSINIT_CLASSIC_USER_TASKS)
653{
654  _Objects_Allocator_lock();
655  assert(_Objects_Active_count(&_RTEMS_tasks_Information.Objects) == 1);
656  _Objects_Allocator_unlock();
657  next_step(CLASSIC_USER_TASKS_POST);
658}
659
660#ifdef RTEMS_POSIX_API
661
662FIRST(RTEMS_SYSINIT_POSIX_USER_THREADS)
663{
664  _Objects_Allocator_lock();
665  assert(_Objects_Active_count(&_POSIX_Threads_Information.Objects) == 0);
666  _Objects_Allocator_unlock();
667  next_step(POSIX_USER_THREADS_PRE);
668}
669
670LAST(RTEMS_SYSINIT_POSIX_USER_THREADS)
671{
672  _Objects_Allocator_lock();
673  assert(_Objects_Active_count(&_POSIX_Threads_Information.Objects) == 1);
674  _Objects_Allocator_unlock();
675  next_step(POSIX_USER_THREADS_POST);
676}
677
678#endif /* RTEMS_POSIX_API */
679
680FIRST(RTEMS_SYSINIT_STD_FILE_DESCRIPTORS)
681{
682  struct stat st;
683  int rv;
684
685  rv = fstat(0, &st);
686  assert(rv == -1);
687  next_step(STD_FILE_DESCRIPTORS_PRE);
688}
689
690LAST(RTEMS_SYSINIT_STD_FILE_DESCRIPTORS)
691{
692  struct stat st;
693  int rv;
694
695  rv = fstat(0, &st);
696  assert(rv == 0);
697  next_step(STD_FILE_DESCRIPTORS_POST);
698}
699
700LAST_STEP(FIRST);
701LAST_STEP(SECOND);
702LAST_STEP(THIRD);
703LAST_STEP(FOURTH);
704LAST_STEP(FIFTH);
705LAST_STEP(SIXTH);
706LAST_STEP(SEVENTH);
707LAST_STEP(EIGHTH);
708LAST_STEP(NINETH);
709LAST_STEP(TENTH);
710LAST_STEP(MIDDLE);
711LAST_STEP(LAST);
712
713static void Init(rtems_task_argument arg)
714{
715#ifdef RTEMS_POSIX_API
716  pthread_cleanup_push(NULL, NULL);
717  pthread_cleanup_pop(0);
718#endif /* RTEMS_POSIX_API */
719  next_step(INIT_TASK);
720  TEST_END();
721  exit(0);
722}
723
724#ifdef RTEMS_POSIX_API
725
726static void *POSIX_Init(void *arg)
727{
728  return NULL;
729}
730
731#endif /* RTEMS_POSIX_API */
732
733#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
734#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
735
736#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
737
738#define CONFIGURE_MAXIMUM_BARRIERS 1
739
740#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
741
742#define CONFIGURE_MAXIMUM_PARTITIONS 1
743
744#define CONFIGURE_MAXIMUM_PERIODS 1
745
746#define CONFIGURE_MAXIMUM_PORTS 1
747
748#define CONFIGURE_MAXIMUM_REGIONS 1
749
750#define CONFIGURE_MAXIMUM_SEMAPHORES 1
751
752#define CONFIGURE_MAXIMUM_TASKS 1
753
754#define CONFIGURE_MAXIMUM_TIMERS 1
755
756#ifdef RTEMS_POSIX_API
757
758#define CONFIGURE_MAXIMUM_POSIX_BARRIERS 1
759
760#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 1
761
762#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 1
763
764#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 1
765
766#define CONFIGURE_MAXIMUM_POSIX_RWLOCKS 1
767
768#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 1
769
770#define CONFIGURE_MAXIMUM_POSIX_SPINLOCKS 1
771
772#define CONFIGURE_MAXIMUM_POSIX_TIMERS 1
773
774#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
775
776#define CONFIGURE_POSIX_INIT_THREAD_TABLE
777
778#endif /* RTEMS_POSIX_API */
779
780#define CONFIGURE_MAXIMUM_POSIX_KEYS 1
781
782#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
783
784#define CONFIGURE_STACK_CHECKER_ENABLED
785
786#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
787
788#define CONFIGURE_INIT
789
790#include <rtems/confdefs.h>
Note: See TracBrowser for help on using the repository browser.