Hello,
I changed the test runner API a bit. Now it is also possible to test the
system initialization for example. The test output of the attached
example test (derived from sptests/spsysinit01):
A:sysinit
S:Platform:RTEMS
S:Compiler:7.3.0 20180125 (RTEMS 5, RSB
30da0c720b78eba16a3f5272206c07415368617b, Newlib
2ab57ad59bc35dafffa69cd4da5e228971de069f)
S:Version:5.0.0.9c792752178ce9bfaffec0ae3d2f150d8f01821f
S:BSP:erc32
S:RTEMS_DEBUG:1
S:RTEMS_MULTIPROCESSING:0
S:RTEMS_POSIX_API:0
S:RTEMS_PROFILING:0
S:RTEMS_SMP:1
B:sysinit
P:0:0:?:test-sysinit.c:243
P:1:0:?:test-sysinit.c:252
P:2:0:?:test-sysinit.c:257
P:3:0:?:test-sysinit.c:262
P:4:0:?:test-sysinit.c:263
P:5:0:?:test-sysinit.c:268
P:6:0:?:test-sysinit.c:269
P:7:0:?:test-sysinit.c:274
P:8:0:?:test-sysinit.c:275
P:9:0:?:test-sysinit.c:280
P:10:0:?:test-sysinit.c:281
P:11:0:?:test-sysinit.c:286
P:12:0:?:test-sysinit.c:287
P:13:0:?:test-sysinit.c:292
P:14:0:?:test-sysinit.c:293
P:15:0:?:test-sysinit.c:298
P:16:0:?:test-sysinit.c:299
P:17:0:?:test-sysinit.c:304
P:18:0:?:test-sysinit.c:305
P:19:0:?:test-sysinit.c:310
P:20:0:?:test-sysinit.c:311
P:21:0:?:test-sysinit.c:316
P:22:0:?:test-sysinit.c:317
P:23:0:?:test-sysinit.c:323
P:24:0:?:test-sysinit.c:328
P:25:0:?:test-sysinit.c:334
P:26:0:?:test-sysinit.c:339
P:27:0:?:test-sysinit.c:344
P:28:0:?:test-sysinit.c:345
P:29:0:?:test-sysinit.c:350
P:30:0:?:test-sysinit.c:351
P:31:0:?:test-sysinit.c:356
P:32:0:?:test-sysinit.c:357
P:33:0:?:test-sysinit.c:362
P:34:0:?:test-sysinit.c:363
P:35:0:?:test-sysinit.c:368
P:36:0:?:test-sysinit.c:369
P:37:0:?:test-sysinit.c:374
P:38:0:?:test-sysinit.c:375
P:39:0:?:test-sysinit.c:380
P:40:0:?:test-sysinit.c:381
P:41:0:?:test-sysinit.c:386
P:42:0:?:test-sysinit.c:387
P:43:0:?:test-sysinit.c:392
P:44:0:?:test-sysinit.c:393
P:45:0:?:test-sysinit.c:398
P:46:0:?:test-sysinit.c:399
P:47:0:?:test-sysinit.c:404
P:48:0:?:test-sysinit.c:405
P:49:0:?:test-sysinit.c:410
P:50:0:?:test-sysinit.c:411
P:51:0:?:test-sysinit.c:416
P:52:0:?:test-sysinit.c:417
P:53:0:?:test-sysinit.c:422
P:54:0:?:test-sysinit.c:423
P:55:0:?:test-sysinit.c:450
P:56:0:?:test-sysinit.c:451
P:57:0:?:test-sysinit.c:456
P:58:0:?:test-sysinit.c:457
P:59:0:?:test-sysinit.c:462
P:60:0:?:test-sysinit.c:463
P:61:0:?:test-sysinit.c:468
P:62:0:?:test-sysinit.c:469
P:63:0:?:test-sysinit.c:474
P:64:0:?:test-sysinit.c:475
P:65:0:?:test-sysinit.c:480
P:66:0:?:test-sysinit.c:481
P:67:0:?:test-sysinit.c:500
P:68:0:?:test-sysinit.c:501
P:69:0:?:test-sysinit.c:506
P:70:0:?:test-sysinit.c:507
P:71:0:?:test-sysinit.c:530
P:72:0:?:test-sysinit.c:531
P:73:0:?:test-sysinit.c:536
P:74:0:?:test-sysinit.c:537
P:75:0:?:test-sysinit.c:516
P:76:0:?:test-sysinit.c:524
P:77:0:?:test-sysinit.c:525
P:78:0:?:test-sysinit.c:542
P:79:0:?:test-sysinit.c:543
P:80:0:IDLE:test-sysinit.c:548
P:81:0:IDLE:test-sysinit.c:549
P:82:0:IDLE:test-sysinit.c:554
P:83:0:IDLE:test-sysinit.c:555
P:84:0:IDLE:test-sysinit.c:560
P:85:0:IDLE:test-sysinit.c:561
P:86:0:IDLE:test-sysinit.c:571
P:87:0:IDLE:test-sysinit.c:572
P:88:0:IDLE:test-sysinit.c:581
P:89:0:IDLE:test-sysinit.c:582
P:90:0:IDLE:test-sysinit.c:591
P:91:0:IDLE:test-sysinit.c:596
P:92:0:IDLE:test-sysinit.c:601
P:93:0:IDLE:test-sysinit.c:602
P:94:0:IDLE:test-sysinit.c:607
P:95:0:IDLE:test-sysinit.c:608
P:96:0:IDLE:test-sysinit.c:614
P:97:0:IDLE:test-sysinit.c:616
P:98:0:IDLE:test-sysinit.c:622
P:99:0:IDLE:test-sysinit.c:624
P:100:0:IDLE:test-sysinit.c:630
P:101:0:IDLE:test-sysinit.c:632
P:102:0:IDLE:test-sysinit.c:638
P:103:0:IDLE:test-sysinit.c:640
P:104:0:IDLE:test-sysinit.c:650
P:105:0:IDLE:test-sysinit.c:651
P:106:0:IDLE:test-sysinit.c:660
P:107:0:IDLE:test-sysinit.c:661
P:108:0:IDLE:test-sysinit.c:664
P:109:0:IDLE:test-sysinit.c:665
P:110:0:IDLE:test-sysinit.c:666
P:111:0:IDLE:test-sysinit.c:667
P:112:0:IDLE:test-sysinit.c:668
P:113:0:IDLE:test-sysinit.c:669
P:114:0:IDLE:test-sysinit.c:670
P:115:0:IDLE:test-sysinit.c:671
P:116:0:IDLE:test-sysinit.c:672
P:117:0:IDLE:test-sysinit.c:673
P:118:0:IDLE:test-sysinit.c:674
P:119:0:IDLE:test-sysinit.c:675
P:120:0:UI1:test-sysinit.c:682
Y:sysinit:N:121:F:0
Z:sysinit:C:1:N:121:F:0
*** FATAL ***
fatal source: 5 (RTEMS_FATAL_SOURCE_EXIT)
fatal code: 0 (0x00000000)
RTEMS version: 5.0.0.9c792752178ce9bfaffec0ae3d2f150d8f01821f
RTEMS tools: 7.3.0 20180125 (RTEMS 5, RSB
30da0c720b78eba16a3f5272206c07415368617b, Newlib
2ab57ad59bc35dafffa69cd4da5e228971de069f)
executing thread ID: 0x08a010001
executing thread name: UI1
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.hu...@embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
/*
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (C) 2015, 2018 embedded brains GmbH
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#undef __STRICT_ANSI__
#include <sys/types.h>
#include <sys/stat.h>
#include <pthread.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <rtems.h>
#include <rtems/ioimpl.h>
#include <rtems/libio_.h>
#include <rtems/sysinit.h>
#include <rtems/extensionimpl.h>
#include <rtems/posix/barrierimpl.h>
#include <rtems/posix/mqueueimpl.h>
#include <rtems/posix/muteximpl.h>
#ifdef RTEMS_POSIX_API
#include <rtems/posix/psignalimpl.h>
#endif /* RTEMS_POSIX_API */
#include <rtems/posix/pthreadimpl.h>
#include <rtems/posix/rwlockimpl.h>
#include <rtems/posix/semaphoreimpl.h>
#include <rtems/posix/shmimpl.h>
#ifdef RTEMS_POSIX_API
#include <rtems/posix/timerimpl.h>
#endif /* RTEMS_POSIX_API */
#include <rtems/posix/keyimpl.h>
#include <rtems/rtems/barrierimpl.h>
#include <rtems/rtems/dpmemimpl.h>
#include <rtems/rtems/messageimpl.h>
#include <rtems/rtems/partimpl.h>
#include <rtems/rtems/ratemonimpl.h>
#include <rtems/rtems/regionimpl.h>
#include <rtems/rtems/semimpl.h>
#include <rtems/rtems/tasksimpl.h>
#include <rtems/rtems/timerimpl.h>
#include <rtems/score/apimutex.h>
#include <rtems/score/chainimpl.h>
#include <rtems/score/sysstate.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#include <t.h>
static const T_configuration config = {
.name = "sysinit",
.verbosity = T_VERBOSE
};
#define assert_object_max_eq_0(info) \
T_eq_uint(_Objects_Get_maximum_index(info), 0)
#define assert_object_max_ne_0(info) \
T_ne_uint(_Objects_Get_maximum_index(info), 0)
typedef enum {
BSP_WORK_AREAS_PRE,
BSP_WORK_AREAS_POST,
BSP_START_PRE,
BSP_START_POST,
CPU_COUNTER_PRE,
CPU_COUNTER_POST,
INITIAL_EXTENSIONS_PRE,
INITIAL_EXTENSIONS_POST,
DATA_STRUCTURES_PRE,
DATA_STRUCTURES_POST,
USER_EXTENSIONS_PRE,
USER_EXTENSIONS_POST,
CLASSIC_TASKS_PRE,
CLASSIC_TASKS_POST,
CLASSIC_TIMER_PRE,
CLASSIC_TIMER_POST,
CLASSIC_SIGNAL_PRE,
CLASSIC_SIGNAL_POST,
CLASSIC_EVENT_PRE,
CLASSIC_EVENT_POST,
CLASSIC_MESSAGE_QUEUE_PRE,
CLASSIC_MESSAGE_QUEUE_POST,
CLASSIC_SEMAPHORE_PRE,
CLASSIC_SEMAPHORE_POST,
CLASSIC_PARTITION_PRE,
CLASSIC_PARTITION_POST,
CLASSIC_REGION_PRE,
CLASSIC_REGION_POST,
CLASSIC_DUAL_PORTED_MEMORY_PRE,
CLASSIC_DUAL_PORTED_MEMORY_POST,
CLASSIC_RATE_MONOTONIC_PRE,
CLASSIC_RATE_MONOTONIC_POST,
CLASSIC_BARRIER_PRE,
CLASSIC_BARRIER_POST,
#ifdef RTEMS_POSIX_API
POSIX_SIGNALS_PRE,
POSIX_SIGNALS_POST,
#endif /* RTEMS_POSIX_API */
POSIX_THREADS_PRE,
POSIX_THREADS_POST,
POSIX_MESSAGE_QUEUE_PRE,
POSIX_MESSAGE_QUEUE_POST,
POSIX_SEMAPHORE_PRE,
POSIX_SEMAPHORE_POST,
#ifdef RTEMS_POSIX_API
POSIX_TIMER_PRE,
POSIX_TIMER_POST,
#endif /* RTEMS_POSIX_API */
POSIX_SHM_PRE,
POSIX_SHM_POST,
POSIX_KEYS_PRE,
POSIX_KEYS_POST,
POSIX_CLEANUP_PRE,
POSIX_CLEANUP_POST,
IDLE_THREADS_PRE,
IDLE_THREADS_POST,
LIBIO_PRE,
LIBIO_POST,
ROOT_FILESYSTEM_PRE,
ROOT_FILESYSTEM_POST,
BSP_PRE_DRIVERS_PRE,
BSP_PRE_DRIVERS_POST,
DEVICE_DRIVERS_PRE,
DEVICE_DRIVERS_POST,
CLASSIC_USER_TASKS_PRE,
CLASSIC_USER_TASKS_POST,
POSIX_USER_THREADS_PRE,
POSIX_USER_THREADS_POST,
STD_FILE_DESCRIPTORS_PRE,
STD_FILE_DESCRIPTORS_POST,
LAST_FIRST,
LAST_SECOND,
LAST_THIRD,
LAST_FOURTH,
LAST_FIFTH,
LAST_SIXTH,
LAST_SEVENTH,
LAST_EIGHTH,
LAST_NINETH,
LAST_TENTH,
LAST_MIDDLE,
LAST_LAST,
INIT_TASK,
DONE
} init_step;
#define FIRST(x) \
static void x##_first(void); \
RTEMS_SYSINIT_ITEM( \
x##_first, \
x, \
RTEMS_SYSINIT_ORDER_FIRST \
); \
static void x##_first(void)
#define LAST(x) \
static void x##_last(void); \
RTEMS_SYSINIT_ITEM( \
x##_last, \
x, \
RTEMS_SYSINIT_ORDER_LAST \
); \
static void x##_last(void)
#define LAST_STEP(x) \
static void last_##x(void) \
{ \
T_eq_int(step(), LAST_##x); \
} \
RTEMS_SYSINIT_ITEM( \
last_##x, \
RTEMS_SYSINIT_LAST, \
RTEMS_SYSINIT_ORDER_##x \
)
static init_step step_counter;
static init_step step(void)
{
init_step current;
current = step_counter;
step_counter = current + 1;
return current;
}
FIRST(RTEMS_SYSINIT_BSP_WORK_AREAS)
{
T_eq_ulong(_Workspace_Area.area_begin, 0);
T_eq_int(step(), BSP_WORK_AREAS_PRE);
}
LAST(RTEMS_SYSINIT_BSP_WORK_AREAS)
{
T_ne_ulong(_Workspace_Area.area_begin, 0);
T_eq_int(step(), BSP_WORK_AREAS_POST);
}
FIRST(RTEMS_SYSINIT_BSP_START)
{
/*
* Since the work performed here is BSP-specific, there is no way to test pre
* and post conditions.
*/
T_eq_int(step(), BSP_START_PRE);
}
LAST(RTEMS_SYSINIT_BSP_START)
{
/*
* Some BSPs initialize the printk() support in bsp_start(). So, print begin
* of test after bsp_start().
*/
T_run_initialize(&config);
T_test_case_begin("sysinit", NULL);
T_eq_int(step(), BSP_START_POST);
}
FIRST(RTEMS_SYSINIT_CPU_COUNTER)
{
/*
* Since the work performed here is BSP-specific, there is no way to test pre
* and post conditions.
*/
T_eq_int(step(), CPU_COUNTER_PRE);
}
LAST(RTEMS_SYSINIT_CPU_COUNTER)
{
T_eq_int(step(), CPU_COUNTER_POST);
}
FIRST(RTEMS_SYSINIT_INITIAL_EXTENSIONS)
{
T_true(_Chain_Is_empty(&_User_extensions_Switches_list), "ext");
T_eq_int(step(), INITIAL_EXTENSIONS_PRE);
}
LAST(RTEMS_SYSINIT_INITIAL_EXTENSIONS)
{
T_false(_Chain_Is_empty(&_User_extensions_Switches_list), "ext");
T_eq_int(step(), INITIAL_EXTENSIONS_POST);
}
FIRST(RTEMS_SYSINIT_DATA_STRUCTURES)
{
assert_object_max_eq_0(&_Thread_Internal_information.Objects)
T_eq_int(step(), DATA_STRUCTURES_PRE);
}
LAST(RTEMS_SYSINIT_DATA_STRUCTURES)
{
assert_object_max_ne_0(&_Thread_Internal_information.Objects)
T_eq_int(step(), DATA_STRUCTURES_POST);
}
FIRST(RTEMS_SYSINIT_USER_EXTENSIONS)
{
assert_object_max_eq_0(&_Extension_Information)
T_eq_int(step(), USER_EXTENSIONS_PRE);
}
LAST(RTEMS_SYSINIT_USER_EXTENSIONS)
{
assert_object_max_ne_0(&_Extension_Information)
T_eq_int(step(), USER_EXTENSIONS_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_TASKS)
{
assert_object_max_eq_0(&_RTEMS_tasks_Information.Objects)
T_eq_int(step(), CLASSIC_TASKS_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_TASKS)
{
assert_object_max_ne_0(&_RTEMS_tasks_Information.Objects)
T_eq_int(step(), CLASSIC_TASKS_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_TIMER)
{
assert_object_max_eq_0(&_Timer_Information)
T_eq_int(step(), CLASSIC_TIMER_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_TIMER)
{
assert_object_max_ne_0(&_Timer_Information)
T_eq_int(step(), CLASSIC_TIMER_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_SIGNAL)
{
/* There is nothing to do in case RTEMS_MULTIPROCESSING is not defined */
T_eq_int(step(), CLASSIC_SIGNAL_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_SIGNAL)
{
T_eq_int(step(), CLASSIC_SIGNAL_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_EVENT)
{
/* There is nothing to do in case RTEMS_MULTIPROCESSING is not defined */
T_eq_int(step(), CLASSIC_EVENT_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_EVENT)
{
T_eq_int(step(), CLASSIC_EVENT_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE)
{
assert_object_max_eq_0(&_Message_queue_Information)
T_eq_int(step(), CLASSIC_MESSAGE_QUEUE_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE)
{
assert_object_max_ne_0(&_Message_queue_Information)
T_eq_int(step(), CLASSIC_MESSAGE_QUEUE_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE)
{
assert_object_max_eq_0(&_Semaphore_Information)
T_eq_int(step(), CLASSIC_SEMAPHORE_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE)
{
assert_object_max_ne_0(&_Semaphore_Information)
T_eq_int(step(), CLASSIC_SEMAPHORE_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_PARTITION)
{
assert_object_max_eq_0(&_Partition_Information)
T_eq_int(step(), CLASSIC_PARTITION_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_PARTITION)
{
assert_object_max_ne_0(&_Partition_Information)
T_eq_int(step(), CLASSIC_PARTITION_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_REGION)
{
assert_object_max_eq_0(&_Region_Information)
T_eq_int(step(), CLASSIC_REGION_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_REGION)
{
assert_object_max_ne_0(&_Region_Information)
T_eq_int(step(), CLASSIC_REGION_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_DUAL_PORTED_MEMORY)
{
assert_object_max_eq_0(&_Dual_ported_memory_Information)
T_eq_int(step(), CLASSIC_DUAL_PORTED_MEMORY_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_DUAL_PORTED_MEMORY)
{
assert_object_max_ne_0(&_Dual_ported_memory_Information)
T_eq_int(step(), CLASSIC_DUAL_PORTED_MEMORY_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_RATE_MONOTONIC)
{
assert_object_max_eq_0(&_Rate_monotonic_Information)
T_eq_int(step(), CLASSIC_RATE_MONOTONIC_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_RATE_MONOTONIC)
{
assert_object_max_ne_0(&_Rate_monotonic_Information)
T_eq_int(step(), CLASSIC_RATE_MONOTONIC_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_BARRIER)
{
assert_object_max_eq_0(&_Barrier_Information)
T_eq_int(step(), CLASSIC_BARRIER_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_BARRIER)
{
assert_object_max_ne_0(&_Barrier_Information)
T_eq_int(step(), CLASSIC_BARRIER_POST);
}
#ifdef RTEMS_POSIX_API
FIRST(RTEMS_SYSINIT_POSIX_SIGNALS)
{
T_ne_mem(
&_POSIX_signals_Vectors,
_POSIX_signals_Default_vectors,
sizeof(_POSIX_signals_Vectors)
);
T_eq_int(step(), POSIX_SIGNALS_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_SIGNALS)
{
T_eq_mem(
&_POSIX_signals_Vectors,
_POSIX_signals_Default_vectors,
sizeof(_POSIX_signals_Vectors)
);
T_eq_int(step(), POSIX_SIGNALS_POST);
}
#endif /* RTEMS_POSIX_API */
FIRST(RTEMS_SYSINIT_POSIX_THREADS)
{
assert_object_max_eq_0(&_POSIX_Threads_Information.Objects)
T_eq_int(step(), POSIX_THREADS_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_THREADS)
{
assert_object_max_ne_0(&_POSIX_Threads_Information.Objects)
T_eq_int(step(), POSIX_THREADS_POST);
}
FIRST(RTEMS_SYSINIT_POSIX_MESSAGE_QUEUE)
{
assert_object_max_eq_0(&_POSIX_Message_queue_Information)
T_eq_int(step(), POSIX_MESSAGE_QUEUE_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_MESSAGE_QUEUE)
{
assert_object_max_ne_0(&_POSIX_Message_queue_Information)
T_eq_int(step(), POSIX_MESSAGE_QUEUE_POST);
}
FIRST(RTEMS_SYSINIT_POSIX_SEMAPHORE)
{
assert_object_max_eq_0(&_POSIX_Semaphore_Information)
T_eq_int(step(), POSIX_SEMAPHORE_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_SEMAPHORE)
{
assert_object_max_ne_0(&_POSIX_Semaphore_Information)
T_eq_int(step(), POSIX_SEMAPHORE_POST);
}
#ifdef RTEMS_POSIX_API
FIRST(RTEMS_SYSINIT_POSIX_TIMER)
{
assert_object_max_eq_0(&_POSIX_Timer_Information)
T_eq_int(step(), POSIX_TIMER_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_TIMER)
{
assert_object_max_ne_0(&_POSIX_Timer_Information)
T_eq_int(step(), POSIX_TIMER_POST);
}
#endif /* RTEMS_POSIX_API */
FIRST(RTEMS_SYSINIT_POSIX_SHM)
{
assert_object_max_eq_0(&_POSIX_Shm_Information)
T_eq_int(step(), POSIX_SHM_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_SHM)
{
assert_object_max_ne_0(&_POSIX_Shm_Information)
T_eq_int(step(), POSIX_SHM_POST);
}
static size_t user_extensions_pre_posix_cleanup;
FIRST(RTEMS_SYSINIT_POSIX_CLEANUP)
{
user_extensions_pre_posix_cleanup =
_Chain_Node_count_unprotected(&_User_extensions_List.Active);
T_eq_int(step(), POSIX_CLEANUP_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_CLEANUP)
{
T_eq_ulong(
user_extensions_pre_posix_cleanup + 1,
_Chain_Node_count_unprotected(&_User_extensions_List.Active)
);
T_eq_int(step(), POSIX_CLEANUP_POST);
}
FIRST(RTEMS_SYSINIT_POSIX_KEYS)
{
assert_object_max_eq_0(&_POSIX_Keys_Information)
T_eq_int(step(), POSIX_KEYS_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_KEYS)
{
assert_object_max_ne_0(&_POSIX_Keys_Information)
T_eq_int(step(), POSIX_KEYS_POST);
}
FIRST(RTEMS_SYSINIT_IDLE_THREADS)
{
T_true(_System_state_Is_before_initialization(_System_state_Get()), "idle");
T_eq_int(step(), IDLE_THREADS_PRE);
}
LAST(RTEMS_SYSINIT_IDLE_THREADS)
{
T_true(_System_state_Is_before_multitasking(_System_state_Get()), "idle");
T_eq_int(step(), IDLE_THREADS_POST);
}
FIRST(RTEMS_SYSINIT_LIBIO)
{
T_null(rtems_libio_iop_free_head);
T_eq_int(step(), LIBIO_PRE);
}
LAST(RTEMS_SYSINIT_LIBIO)
{
T_eq_ptr(rtems_libio_iop_free_head, &rtems_libio_iops[0]);
T_eq_int(step(), LIBIO_POST);
}
FIRST(RTEMS_SYSINIT_ROOT_FILESYSTEM)
{
struct stat st;
int rv;
errno = 0;
rv = stat("/", &st);
T_psx_error(rv, ENXIO);
T_eq_int(step(), ROOT_FILESYSTEM_PRE);
}
LAST(RTEMS_SYSINIT_ROOT_FILESYSTEM)
{
struct stat st;
int rv;
rv = stat("/", &st);
T_psx_success(rv);
T_eq_int(step(), ROOT_FILESYSTEM_POST);
}
FIRST(RTEMS_SYSINIT_BSP_PRE_DRIVERS)
{
/*
* Since the work performed here is BSP-specific, there is no way to test pre
* and post conditions.
*/
T_eq_int(step(), BSP_PRE_DRIVERS_PRE);
}
LAST(RTEMS_SYSINIT_BSP_PRE_DRIVERS)
{
T_eq_int(step(), BSP_PRE_DRIVERS_POST);
}
FIRST(RTEMS_SYSINIT_DEVICE_DRIVERS)
{
T_false(_IO_All_drivers_initialized, "drivers");
T_eq_int(step(), DEVICE_DRIVERS_PRE);
}
LAST(RTEMS_SYSINIT_DEVICE_DRIVERS)
{
T_true(_IO_All_drivers_initialized, "drivers");
T_eq_int(step(), DEVICE_DRIVERS_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_USER_TASKS)
{
_Objects_Allocator_lock();
T_eq_uint(_Objects_Active_count(&_RTEMS_tasks_Information.Objects), 0);
_Objects_Allocator_unlock();
T_eq_int(step(), CLASSIC_USER_TASKS_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_USER_TASKS)
{
_Objects_Allocator_lock();
T_eq_uint(_Objects_Active_count(&_RTEMS_tasks_Information.Objects), 1);
_Objects_Allocator_unlock();
T_eq_int(step(), CLASSIC_USER_TASKS_POST);
}
FIRST(RTEMS_SYSINIT_POSIX_USER_THREADS)
{
_Objects_Allocator_lock();
T_eq_uint(_Objects_Active_count(&_POSIX_Threads_Information.Objects), 0);
_Objects_Allocator_unlock();
T_eq_int(step(), POSIX_USER_THREADS_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_USER_THREADS)
{
_Objects_Allocator_lock();
T_eq_uint(_Objects_Active_count(&_POSIX_Threads_Information.Objects), 1);
_Objects_Allocator_unlock();
T_eq_int(step(), POSIX_USER_THREADS_POST);
}
FIRST(RTEMS_SYSINIT_STD_FILE_DESCRIPTORS)
{
struct stat st;
int rv;
errno = 0;
rv = fstat(0, &st);
T_psx_error(rv, EBADF);
T_eq_int(step(), STD_FILE_DESCRIPTORS_PRE);
}
LAST(RTEMS_SYSINIT_STD_FILE_DESCRIPTORS)
{
struct stat st;
int rv;
rv = fstat(0, &st);
T_psx_success(rv);
T_eq_int(step(), STD_FILE_DESCRIPTORS_POST);
}
LAST_STEP(FIRST);
LAST_STEP(SECOND);
LAST_STEP(THIRD);
LAST_STEP(FOURTH);
LAST_STEP(FIFTH);
LAST_STEP(SIXTH);
LAST_STEP(SEVENTH);
LAST_STEP(EIGHTH);
LAST_STEP(NINETH);
LAST_STEP(TENTH);
LAST_STEP(MIDDLE);
LAST_STEP(LAST);
static void Init(rtems_task_argument arg)
{
(void) arg;
pthread_cleanup_push(NULL, NULL);
pthread_cleanup_pop(0);
T_eq_int(step(), INIT_TASK);
T_test_case_end();
T_run_finalize();
exit(0);
}
static void *POSIX_Init(void *arg)
{
(void) arg;
return NULL;
}
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_MAXIMUM_BARRIERS 1
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
#define CONFIGURE_MAXIMUM_PARTITIONS 1
#define CONFIGURE_MAXIMUM_PERIODS 1
#define CONFIGURE_MAXIMUM_PORTS 1
#define CONFIGURE_MAXIMUM_REGIONS 1
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_MAXIMUM_TIMERS 1
#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 1
#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 1
#define CONFIGURE_MAXIMUM_POSIX_SHMS 1
#ifdef RTEMS_POSIX_API
#define CONFIGURE_MAXIMUM_POSIX_TIMERS 1
#endif /* RTEMS_POSIX_API */
#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
#define CONFIGURE_MAXIMUM_POSIX_KEYS 1
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_STACK_CHECKER_ENABLED
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel