source: rtems/testsuites/psxtests/psxconfig01/init.c @ c499856

4.115
Last change on this file since c499856 was c499856, checked in by Chris Johns <chrisj@…>, on 03/20/14 at 21:10:47

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 15.0 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup psxtests
5 *
6 * @brief Test that the workspace size estimate is correct.
7 */
8
9/*
10 * Copyright (c) 2011-2012 embedded brains GmbH.  All rights reserved.
11 *
12 *  embedded brains GmbH
13 *  Obere Lagerstr. 30
14 *  82178 Puchheim
15 *  Germany
16 *  <rtems@embedded-brains.de>
17 *
18 * The license and distribution terms for this file may be
19 * found in the file LICENSE in this distribution or at
20 * http://www.rtems.org/license/LICENSE.
21 */
22
23#ifdef HAVE_CONFIG_H
24  #include "config.h"
25#endif
26
27#include <tmacros.h>
28
29#include <sys/stat.h>
30#include <fcntl.h>
31#include <inttypes.h>
32#include <mqueue.h>
33#include <pthread.h>
34#include <semaphore.h>
35#include <signal.h>
36#include <stdio.h>
37#include <time.h>
38#include <limits.h>
39
40#include <rtems/libcsupport.h>
41
42#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 5
43
44#define CONFIGURE_MAXIMUM_BARRIERS 2
45#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 7
46#define CONFIGURE_MAXIMUM_PARTITIONS 37
47#define CONFIGURE_MAXIMUM_PERIODS 41
48#define CONFIGURE_MAXIMUM_REGIONS 43
49#define CONFIGURE_MAXIMUM_SEMAPHORES 47
50#define CONFIGURE_MAXIMUM_TASKS 11
51#define CONFIGURE_MAXIMUM_TASK_VARIABLES 13
52#define CONFIGURE_MAXIMUM_TIMERS 59
53#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 17
54
55#define CONFIGURE_MAXIMUM_POSIX_BARRIERS 31
56#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 29
57#define CONFIGURE_MAXIMUM_POSIX_KEYS 23
58#define POSIX_MQ_COUNT 5
59#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 19
60#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 7
61#define CONFIGURE_MAXIMUM_POSIX_RWLOCKS 31
62#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 41
63#define CONFIGURE_MAXIMUM_POSIX_SPINLOCKS 17
64#define CONFIGURE_MAXIMUM_POSIX_THREADS 3
65#define CONFIGURE_MAXIMUM_POSIX_TIMERS 47
66
67#ifndef CONFIGURE_MAXIMUM_TASKS
68  #define CONFIGURE_MAXIMUM_TASKS 1
69#endif
70
71#ifdef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
72  #define MQ_0_COUNT 2
73  #define MQ_1_COUNT 3
74  #define MQ_2_COUNT 5
75  #define MQ_3_COUNT 7
76  #define MQ_4_COUNT 11
77  #define MQ_5_COUNT 13
78  #define MQ_6_COUNT 17
79
80  #define MQ_0_SIZE 101
81  #define MQ_1_SIZE 103
82  #define MQ_2_SIZE 107
83  #define MQ_3_SIZE 109
84  #define MQ_4_SIZE 113
85  #define MQ_5_SIZE 127
86  #define MQ_6_SIZE 131
87
88  #define MQ_BUFFER_MEMORY \
89    (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_0_COUNT, MQ_0_SIZE) \
90      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_1_COUNT, MQ_1_SIZE) \
91      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_2_COUNT, MQ_2_SIZE) \
92      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_3_COUNT, MQ_3_SIZE) \
93      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_4_COUNT, MQ_4_SIZE) \
94      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_5_COUNT, MQ_5_SIZE) \
95      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_6_COUNT, MQ_6_SIZE))
96
97  static const uint8_t mq_counts [CONFIGURE_MAXIMUM_MESSAGE_QUEUES] = {
98    MQ_0_COUNT,
99    MQ_1_COUNT,
100    MQ_2_COUNT,
101    MQ_3_COUNT,
102    MQ_4_COUNT,
103    MQ_5_COUNT,
104    MQ_6_COUNT
105  };
106
107  static const uint8_t mq_sizes [CONFIGURE_MAXIMUM_MESSAGE_QUEUES] = {
108    MQ_0_SIZE,
109    MQ_1_SIZE,
110    MQ_2_SIZE,
111    MQ_3_SIZE,
112    MQ_4_SIZE,
113    MQ_5_SIZE,
114    MQ_6_SIZE
115  };
116#else
117  #define MQ_BUFFER_MEMORY 0
118#endif
119
120#ifdef POSIX_MQ_COUNT
121  #define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS POSIX_MQ_COUNT
122  #define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES POSIX_MQ_COUNT
123
124  #define POSIX_MQ_0_COUNT 2
125  #define POSIX_MQ_1_COUNT 3
126  #define POSIX_MQ_2_COUNT 5
127  #define POSIX_MQ_3_COUNT 7
128  #define POSIX_MQ_4_COUNT 11
129
130  #define POSIX_MQ_0_SIZE 137
131  #define POSIX_MQ_1_SIZE 139
132  #define POSIX_MQ_2_SIZE 149
133  #define POSIX_MQ_3_SIZE 151
134  #define POSIX_MQ_4_SIZE 157
135
136  #define POSIX_MQ_BUFFER_MEMORY \
137    (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(POSIX_MQ_0_COUNT, POSIX_MQ_0_SIZE) \
138      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(POSIX_MQ_1_COUNT, POSIX_MQ_1_SIZE) \
139      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(POSIX_MQ_2_COUNT, POSIX_MQ_2_SIZE) \
140      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(POSIX_MQ_3_COUNT, POSIX_MQ_3_SIZE) \
141      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(POSIX_MQ_4_COUNT, POSIX_MQ_4_SIZE))
142
143  static const uint8_t posix_mq_counts [POSIX_MQ_COUNT] = {
144    POSIX_MQ_0_COUNT,
145    POSIX_MQ_1_COUNT,
146    POSIX_MQ_2_COUNT,
147    POSIX_MQ_3_COUNT,
148    POSIX_MQ_4_COUNT
149  };
150
151  static const uint8_t posix_mq_sizes [POSIX_MQ_COUNT] = {
152    POSIX_MQ_0_SIZE,
153    POSIX_MQ_1_SIZE,
154    POSIX_MQ_2_SIZE,
155    POSIX_MQ_3_SIZE,
156    POSIX_MQ_4_SIZE
157  };
158#else
159  #define POSIX_MQ_BUFFER_MEMORY 0
160#endif
161
162#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
163  (MQ_BUFFER_MEMORY + POSIX_MQ_BUFFER_MEMORY)
164
165#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
166#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
167
168#define CONFIGURE_MAXIMUM_DRIVERS 2
169
170#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
171
172#define CONFIGURE_INIT
173
174static rtems_task Init(rtems_task_argument argument);
175
176#include <rtems/confdefs.h>
177
178typedef struct {
179  uint64_t data [16];
180} area;
181
182#ifdef CONFIGURE_MAXIMUM_PARTITIONS
183  static area partition_areas [CONFIGURE_MAXIMUM_PARTITIONS];
184#endif
185
186#ifdef CONFIGURE_MAXIMUM_REGIONS
187  static area region_areas [CONFIGURE_MAXIMUM_REGIONS];
188#endif
189
190static char posix_name [NAME_MAX];
191
192static void *task_var;
193
194static char *get_posix_name(char a, char b, char c, int i)
195{
196  posix_name [NAME_MAX - 5] = a;
197  posix_name [NAME_MAX - 4] = b;
198  posix_name [NAME_MAX - 3] = c;
199  posix_name [NAME_MAX - 2] = 'A' + i;
200
201  return posix_name;
202}
203
204static void task_var_dtor(void *var __attribute__((unused)))
205{
206  /* Do nothing */
207}
208
209static void *posix_thread(void *arg __attribute__((unused)))
210{
211  rtems_test_assert(0);
212}
213
214static void posix_key_dtor(void *key __attribute__((unused)))
215{
216  /* Do nothing */
217}
218
219static void print_info(void)
220{
221  Heap_Information_block info;
222  bool ok = rtems_workspace_get_information(&info);
223  rtems_test_assert(ok);
224
225  printf(
226    "used blocks = %" PRIu32 ", "
227    "largest used block = %" PRIu32 ", "
228    "used space = %" PRIu32 "\n"
229    "free blocks = %" PRIu32 ", "
230    "largest free block = %" PRIu32 ", "
231    "free space = %" PRIu32 "\n",
232    info.Used.number,
233    info.Used.largest,
234    info.Used.total,
235    info.Free.number,
236    info.Free.largest,
237    info.Free.total
238  );
239}
240
241static rtems_task Init(rtems_task_argument argument)
242{
243  rtems_status_code sc = RTEMS_SUCCESSFUL;
244  int eno = 0;
245  int rv = 0;
246  rtems_id id = RTEMS_ID_NONE;
247  rtems_name name = rtems_build_name('C', 'O', 'N', 'F');
248  rtems_extensions_table table;
249  rtems_resource_snapshot snapshot;
250  int i = 0;
251
252  puts("\n\n*** POSIX TEST CONFIG 01 ***");
253
254  memset(posix_name, 'P', sizeof(posix_name) - 1);
255
256  print_info();
257
258  rtems_resource_snapshot_take(&snapshot);
259  rtems_test_assert(rtems_resource_snapshot_equal(&snapshot, &snapshot));
260  rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
261
262#ifdef CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
263  for (i = 3; i < CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS; ++i) {
264    int oflag = O_WRONLY | O_CREAT | O_TRUNC;
265    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
266    char path [] = { 'F', 'I', 'L', 'E', 'A' + i, '\0' };
267    int fd = open(path, oflag, mode);
268    rtems_test_assert(fd == i);
269  }
270  rtems_resource_snapshot_take(&snapshot);
271  rtems_test_assert(
272    snapshot.open_files == CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
273  );
274#endif
275
276#ifdef CONFIGURE_MAXIMUM_USER_EXTENSIONS
277  memset(&table, 0, sizeof(table));
278  for (i = 0; i < CONFIGURE_MAXIMUM_USER_EXTENSIONS; ++i) {
279    sc = rtems_extension_create(name, &table, &id);
280    directive_failed(sc, "rtems_extension_create");
281  }
282  rtems_resource_snapshot_take(&snapshot);
283  rtems_test_assert(
284    snapshot.rtems_api.active_extensions == CONFIGURE_MAXIMUM_USER_EXTENSIONS
285  );
286#endif
287
288#ifdef CONFIGURE_MAXIMUM_BARRIERS
289  for (i = 0; i < CONFIGURE_MAXIMUM_BARRIERS; ++i) {
290    sc = rtems_barrier_create(name, RTEMS_DEFAULT_ATTRIBUTES, 1, &id);
291    directive_failed(sc, "rtems_barrier_create");
292  }
293  rtems_resource_snapshot_take(&snapshot);
294  rtems_test_assert(
295    snapshot.rtems_api.active_barriers == CONFIGURE_MAXIMUM_BARRIERS
296  );
297#endif
298
299#ifdef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
300  for (i = 0; i < CONFIGURE_MAXIMUM_MESSAGE_QUEUES; ++i) {
301    sc = rtems_message_queue_create(
302      name,
303      mq_counts [i],
304      mq_sizes [i],
305      RTEMS_DEFAULT_ATTRIBUTES,
306      &id
307    );
308    directive_failed(sc, "rtems_message_queue_create");
309  }
310  rtems_resource_snapshot_take(&snapshot);
311  rtems_test_assert(
312    snapshot.rtems_api.active_message_queues
313      == CONFIGURE_MAXIMUM_MESSAGE_QUEUES
314  );
315#endif
316
317#ifdef CONFIGURE_MAXIMUM_PARTITIONS
318  for (i = 0; i < CONFIGURE_MAXIMUM_PARTITIONS; ++i) {
319    sc = rtems_partition_create(
320      name,
321      partition_areas + i,
322      sizeof(partition_areas [0]),
323      sizeof(partition_areas [0]),
324      RTEMS_DEFAULT_ATTRIBUTES,
325      &id
326    );
327    directive_failed(sc, "rtems_partition_create");
328  }
329  rtems_resource_snapshot_take(&snapshot);
330  rtems_test_assert(
331    snapshot.rtems_api.active_partitions == CONFIGURE_MAXIMUM_PARTITIONS
332  );
333#endif
334
335#ifdef CONFIGURE_MAXIMUM_PERIODS
336  for (i = 0; i < CONFIGURE_MAXIMUM_PERIODS; ++i) {
337    sc = rtems_rate_monotonic_create(name, &id);
338    directive_failed(sc, "rtems_rate_monotonic_create");
339  }
340  rtems_resource_snapshot_take(&snapshot);
341  rtems_test_assert(
342    snapshot.rtems_api.active_periods == CONFIGURE_MAXIMUM_PERIODS
343  );
344#endif
345
346#ifdef CONFIGURE_MAXIMUM_REGIONS
347  for (i = 0; i < CONFIGURE_MAXIMUM_REGIONS; ++i) {
348    sc = rtems_region_create(
349      name,
350      region_areas + i,
351      sizeof(region_areas [0]),
352      1,
353      RTEMS_DEFAULT_ATTRIBUTES,
354      &id
355    );
356    directive_failed(sc, "rtems_region_create");
357  }
358  rtems_resource_snapshot_take(&snapshot);
359  rtems_test_assert(
360    snapshot.rtems_api.active_regions == CONFIGURE_MAXIMUM_REGIONS
361  );
362#endif
363
364#ifdef CONFIGURE_MAXIMUM_SEMAPHORES
365  for (i = 0; i < CONFIGURE_MAXIMUM_SEMAPHORES; ++i) {
366    sc = rtems_semaphore_create(
367      name,
368      0,
369      RTEMS_DEFAULT_ATTRIBUTES,
370      0,
371      &id
372    );
373    directive_failed(sc, "rtems_semaphore_create");
374  }
375  rtems_resource_snapshot_take(&snapshot);
376  rtems_test_assert(
377    snapshot.rtems_api.active_semaphores >= CONFIGURE_MAXIMUM_SEMAPHORES
378  );
379#endif
380
381#ifdef CONFIGURE_MAXIMUM_TASKS
382  for (i = 1; i < CONFIGURE_MAXIMUM_TASKS; ++i) {
383    sc = rtems_task_create(
384      name,
385      RTEMS_MINIMUM_PRIORITY,
386      RTEMS_MINIMUM_STACK_SIZE,
387      RTEMS_DEFAULT_MODES,
388      RTEMS_LOCAL | RTEMS_FLOATING_POINT,
389      &id
390    );
391    directive_failed(sc, "rtems_task_create");
392  }
393  rtems_resource_snapshot_take(&snapshot);
394  rtems_test_assert(
395    snapshot.rtems_api.active_tasks == CONFIGURE_MAXIMUM_TASKS
396  );
397#endif
398
399#ifdef CONFIGURE_MAXIMUM_TASK_VARIABLES
400  for (i = 0; i < CONFIGURE_MAXIMUM_TASK_VARIABLES; ++i) {
401    sc = rtems_task_variable_add(RTEMS_SELF, &task_var, task_var_dtor);
402    directive_failed(sc, "rtems_task_variable_add");
403  }
404#endif
405
406#ifdef CONFIGURE_MAXIMUM_TIMERS
407  for (i = 0; i < CONFIGURE_MAXIMUM_TIMERS; ++i) {
408    sc = rtems_timer_create(name, &id);
409    directive_failed(sc, "rtems_timer_create");
410  }
411  rtems_resource_snapshot_take(&snapshot);
412  rtems_test_assert(
413    snapshot.rtems_api.active_timers == CONFIGURE_MAXIMUM_TIMERS
414  );
415#endif
416
417#ifdef CONFIGURE_MAXIMUM_POSIX_BARRIERS
418  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_BARRIERS; ++i) {
419    pthread_barrier_t barrier;
420    eno = pthread_barrier_init(&barrier, NULL, 1);
421    rtems_test_assert(eno == 0);
422  }
423  rtems_resource_snapshot_take(&snapshot);
424  rtems_test_assert(
425    snapshot.posix_api.active_barriers == CONFIGURE_MAXIMUM_POSIX_BARRIERS
426  );
427#endif
428
429#ifdef CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
430  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES; ++i) {
431    pthread_cond_t cond;
432    eno = pthread_cond_init(&cond, NULL);
433    rtems_test_assert(eno == 0);
434  }
435  rtems_resource_snapshot_take(&snapshot);
436  rtems_test_assert(
437    snapshot.posix_api.active_condition_variables
438      == CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
439  );
440#endif
441
442#ifdef CONFIGURE_MAXIMUM_POSIX_KEYS
443  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_KEYS; ++i) {
444    pthread_key_t key;
445    eno = pthread_key_create(&key, posix_key_dtor);
446    rtems_test_assert(eno == 0);
447  }
448  rtems_resource_snapshot_take(&snapshot);
449  rtems_test_assert(
450    snapshot.posix_api.active_keys == CONFIGURE_MAXIMUM_POSIX_KEYS
451  );
452#endif
453
454#ifdef POSIX_MQ_COUNT
455  for (i = 0; i < POSIX_MQ_COUNT; ++i) {
456    int oflag = O_RDWR | O_CREAT | O_EXCL;
457    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
458    struct mq_attr attr = {
459      .mq_maxmsg = posix_mq_counts [i],
460      .mq_msgsize = posix_mq_sizes [i]
461    };
462    char *path = get_posix_name('M', 'S', 'Q', i);
463    mqd_t mq = mq_open(path, oflag, mode, &attr);
464    rtems_test_assert(mq >= 0);
465  }
466  rtems_resource_snapshot_take(&snapshot);
467  rtems_test_assert(
468    snapshot.posix_api.active_message_queue_descriptors
469      == CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
470  );
471  rtems_test_assert(
472    snapshot.posix_api.active_message_queues
473      == CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
474  );
475#endif
476
477#ifdef CONFIGURE_MAXIMUM_POSIX_MUTEXES
478  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_MUTEXES; ++i) {
479    pthread_mutex_t mutex;
480    eno = pthread_mutex_init(&mutex, NULL);
481    rtems_test_assert(eno == 0);
482  }
483  rtems_resource_snapshot_take(&snapshot);
484  rtems_test_assert(
485    snapshot.posix_api.active_mutexes == CONFIGURE_MAXIMUM_POSIX_MUTEXES
486  );
487#endif
488
489#ifdef CONFIGURE_MAXIMUM_POSIX_RWLOCKS
490  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_RWLOCKS; ++i) {
491    pthread_rwlock_t rwlock;
492    eno = pthread_rwlock_init(&rwlock, NULL);
493    rtems_test_assert(eno == 0);
494  }
495  rtems_resource_snapshot_take(&snapshot);
496  rtems_test_assert(
497    snapshot.posix_api.active_rwlocks == CONFIGURE_MAXIMUM_POSIX_RWLOCKS
498  );
499#endif
500
501#ifdef CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
502  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_SEMAPHORES; ++i) {
503    int oflag = O_RDWR | O_CREAT | O_EXCL;
504    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
505    unsigned int value = 0;
506    char *path = get_posix_name('S', 'E', 'M', i);
507    sem_t *sem = sem_open(path, oflag, mode, value);
508    rtems_test_assert(sem != SEM_FAILED);
509  }
510  rtems_resource_snapshot_take(&snapshot);
511  rtems_test_assert(
512    snapshot.posix_api.active_semaphores == CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
513  );
514#endif
515
516#ifdef CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
517  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_SPINLOCKS; ++i) {
518    pthread_spinlock_t spinlock;
519    eno = pthread_spin_init(&spinlock, 0);
520    rtems_test_assert(eno == 0);
521  }
522  rtems_resource_snapshot_take(&snapshot);
523  rtems_test_assert(
524    snapshot.posix_api.active_spinlocks == CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
525  );
526#endif
527
528#ifdef CONFIGURE_MAXIMUM_POSIX_THREADS
529  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_THREADS; ++i) {
530    pthread_t thread;
531    eno = pthread_create(&thread, NULL, posix_thread, NULL);
532    rtems_test_assert(eno == 0);
533  }
534  rtems_resource_snapshot_take(&snapshot);
535  rtems_test_assert(
536    snapshot.posix_api.active_threads == CONFIGURE_MAXIMUM_POSIX_THREADS
537  );
538#endif
539
540#ifdef CONFIGURE_MAXIMUM_POSIX_TIMERS
541  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_TIMERS; ++i) {
542    timer_t timer_id;
543    rv = timer_create(CLOCK_REALTIME, NULL, &timer_id);
544    rtems_test_assert(rv == 0);
545  }
546  rtems_resource_snapshot_take(&snapshot);
547  rtems_test_assert(
548    snapshot.posix_api.active_timers == CONFIGURE_MAXIMUM_POSIX_TIMERS
549  );
550#endif
551
552  printf("object creation done\n");
553  print_info();
554
555  puts("*** END OF POSIX TEST CONFIG 01 ***");
556
557  rtems_test_exit(0);
558}
Note: See TracBrowser for help on using the repository browser.