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

5
Last change on this file since c42be504 was c42be504, checked in by Sebastian Huber <sebastian.huber@…>, on 11/16/16 at 13:50:09

posix: Add self-contained pthread spinlock

Turn pthread_spinlock_t into a self-contained object. On uni-processor
configurations, interrupts are disabled in the lock/trylock operations
and the previous interrupt status is restored in the corresponding
unlock operations. On SMP configurations, a ticket lock is a acquired
and released in addition.

The self-contained pthread_spinlock_t object is defined by Newlib in
<sys/_pthreadtypes.h>.

typedef struct {

struct _Ticket_lock_Control _lock;
uint32_t _interrupt_state;

} pthread_spinlock_t;

This implementation is simple and efficient. However, this test case of
the Linux Test Project would fail due to call of printf() and sleep()
during spin lock ownership:

https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_spin_lock/1-2.c

There is only limited support for profiling on SMP configurations.

Delete CORE spinlock implementation.

Update #2674.

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