From fd5471b6b7761a03e87a11808b57dd123ae49e31 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 1 Dec 2017 22:37:06 +0100 Subject: ada: Check C and POSIX types Update #3256. --- testsuites/ada/sptests/sp01/sp01.adb | 125 ++++++++++++++++++++++++++++++++ testsuites/ada/sptests/sp01/sptest.adb | 3 - testsuites/ada/support/init.c | 55 ++++++++++++++ testsuites/ada/support/test_support.ads | 7 ++ 4 files changed, 187 insertions(+), 3 deletions(-) diff --git a/testsuites/ada/sptests/sp01/sp01.adb b/testsuites/ada/sptests/sp01/sp01.adb index 656a6ff009..34dd39e8ca 100644 --- a/testsuites/ada/sptests/sp01/sp01.adb +++ b/testsuites/ada/sptests/sp01/sp01.adb @@ -21,12 +21,137 @@ with RTEMS; with RTEMS.TASKS; with SPTEST; with TEST_SUPPORT; +with TEXT_IO; +with System.OS_Interface; procedure SP01 is INIT_ID : RTEMS.ID; STATUS : RTEMS.STATUS_CODES; + obj_clockid_t : System.OS_Interface.clockid_t; + pragma Warnings (Off, obj_clockid_t); + obj_pid_t : System.OS_Interface.pid_t; + pragma Warnings (Off, obj_pid_t); + obj_pthread_attr_t : System.OS_Interface.pthread_attr_t; + pragma Warnings (Off, obj_pthread_attr_t); + obj_pthread_condattr_t : System.OS_Interface.pthread_condattr_t; + pragma Warnings (Off, obj_pthread_condattr_t); + obj_pthread_cond_t : System.OS_Interface.pthread_cond_t; + pragma Warnings (Off, obj_pthread_cond_t); + obj_pthread_key_t : System.OS_Interface.pthread_key_t; + pragma Warnings (Off, obj_pthread_key_t); + obj_pthread_mutexattr_t : System.OS_Interface.pthread_mutexattr_t; + pragma Warnings (Off, obj_pthread_mutexattr_t); + obj_pthread_mutex_t : System.OS_Interface.pthread_mutex_t; + pragma Warnings (Off, obj_pthread_mutex_t); + obj_pthread_rwlockattr_t : System.OS_Interface.pthread_rwlockattr_t; + pragma Warnings (Off, obj_pthread_rwlockattr_t); + obj_pthread_rwlock_t : System.OS_Interface.pthread_rwlock_t; + pragma Warnings (Off, obj_pthread_rwlock_t); + obj_pthread_t : System.OS_Interface.pthread_t; + pragma Warnings (Off, obj_pthread_t); + obj_rtems_id : System.OS_Interface.rtems_id; + pragma Warnings (Off, obj_rtems_id); + obj_sigset_t : System.OS_Interface.sigset_t; + pragma Warnings (Off, obj_sigset_t); + obj_stack_t : System.OS_Interface.stack_t; + pragma Warnings (Off, obj_stack_t); + obj_struct_sched_param : System.OS_Interface.struct_sched_param; + pragma Warnings (Off, obj_struct_sched_param); + obj_struct_sigaction : System.OS_Interface.struct_sigaction; + pragma Warnings (Off, obj_struct_sigaction); + obj_timespec : System.OS_Interface.timespec; + pragma Warnings (Off, obj_timespec); begin + TEXT_IO.NEW_LINE( 2 ); + TEST_SUPPORT.ADA_TEST_BEGIN; + + TEST_SUPPORT.Check_Type( + 0, + obj_clockid_t'Size, + obj_clockid_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 1, + obj_pid_t'Size, + obj_pid_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 2, + obj_pthread_attr_t'Size, + obj_pthread_attr_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 3, + obj_pthread_condattr_t'Size, + obj_pthread_condattr_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 4, + obj_pthread_cond_t'Size, + obj_pthread_cond_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 5, + obj_pthread_key_t'Size, + obj_pthread_key_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 6, + obj_pthread_mutexattr_t'Size, + obj_pthread_mutexattr_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 7, + obj_pthread_mutex_t'Size, + obj_pthread_mutex_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 8, + obj_pthread_rwlockattr_t'Size, + obj_pthread_rwlockattr_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 9, + obj_pthread_rwlock_t'Size, + obj_pthread_rwlock_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 10, + obj_pthread_t'Size, + obj_pthread_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 11, + obj_rtems_id'Size, + obj_rtems_id'Alignment + ); + TEST_SUPPORT.Check_Type( + 12, + obj_sigset_t'Size, + obj_sigset_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 13, + obj_stack_t'Size, + obj_stack_t'Alignment + ); + TEST_SUPPORT.Check_Type( + 14, + obj_struct_sched_param'Size, + obj_struct_sched_param'Alignment + ); + TEST_SUPPORT.Check_Type( + 15, + obj_struct_sigaction'Size, + obj_struct_sigaction'Alignment + ); + TEST_SUPPORT.Check_Type( + 16, + obj_timespec'Size, + obj_timespec'Alignment + ); + RTEMS.TASKS.CREATE( RTEMS.BUILD_NAME( 'I', 'N', 'I', 'T' ), 1, diff --git a/testsuites/ada/sptests/sp01/sptest.adb b/testsuites/ada/sptests/sp01/sptest.adb index eb7497bd9d..9ba4207205 100644 --- a/testsuites/ada/sptests/sp01/sptest.adb +++ b/testsuites/ada/sptests/sp01/sptest.adb @@ -37,9 +37,6 @@ package body SPTEST is STATUS : RTEMS.STATUS_CODES; begin - TEXT_IO.NEW_LINE( 2 ); - TEST_SUPPORT.ADA_TEST_BEGIN; - TIME := ( 1988, 12, 31, 9, 0, 0, 0 ); RTEMS.CLOCK.SET( TIME, STATUS ); diff --git a/testsuites/ada/support/init.c b/testsuites/ada/support/init.c index 4fabad5825..3e395fc15f 100644 --- a/testsuites/ada/support/init.c +++ b/testsuites/ada/support/init.c @@ -3,8 +3,13 @@ * On-Line Applications Research Corporation (OAR). */ +#include +#include +#include +#include #include +#include #include #include @@ -34,6 +39,7 @@ uint32_t work_space_size(void); uint32_t is_configured_multiprocessing(void); uint32_t get_node(void); rtems_id tcb_to_id(Thread_Control *tcb); +void check_type(long type, long size, long alignment); /* * By putting this in brackets rather than quotes, we get the search @@ -99,3 +105,52 @@ uint32_t get_node(void) return _Objects_Local_node; } +typedef struct { + const char *name; + long size; + long alignment; +} type_spec; + +#define TYPE_SPEC(t) { #t, sizeof(t) * CHAR_BIT, _Alignof(t) } + +static const type_spec types[] = { + TYPE_SPEC(clockid_t), + TYPE_SPEC(pid_t), + TYPE_SPEC(pthread_attr_t), + TYPE_SPEC(pthread_condattr_t), + TYPE_SPEC(pthread_cond_t), + TYPE_SPEC(pthread_key_t), + TYPE_SPEC(pthread_mutexattr_t), + TYPE_SPEC(pthread_mutex_t), + TYPE_SPEC(pthread_rwlockattr_t), + TYPE_SPEC(pthread_rwlock_t), + TYPE_SPEC(pthread_t), + TYPE_SPEC(rtems_id), + TYPE_SPEC(sigset_t), + TYPE_SPEC(stack_t), + TYPE_SPEC(struct sched_param), + TYPE_SPEC(struct sigaction), + TYPE_SPEC(struct timespec) +}; + +void check_type(long type, long size, long alignment) +{ + if (type >= 0 && type < (long) RTEMS_ARRAY_SIZE(types)) { + const type_spec *ts; + + ts = &types[type]; + printf( + "%s: size %li == %li, alignment %li == %li\n", + ts->name, + ts->size, + size, + ts->alignment, + alignment + ); + if (ts->size != size || ts->alignment != alignment) { + exit(0); + } + } else { + exit(0); + } +} diff --git a/testsuites/ada/support/test_support.ads b/testsuites/ada/support/test_support.ads index b1f2f55280..e3a71a33a0 100644 --- a/testsuites/ada/support/test_support.ads +++ b/testsuites/ada/support/test_support.ads @@ -28,6 +28,13 @@ package Test_Support is procedure Ada_Test_End; pragma Import (C, Ada_Test_End, "ada_test_end"); + procedure Check_Type( + t : in Long_Integer; + s : in Long_Integer; + a : in Long_Integer + ); + pragma Import (C, Check_Type, "check_type"); + -- -- Fatal_Directive_Status -- -- cgit v1.2.3