[PATCH 02/13] psxtests: Avoid build system defined defines
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Nov 8 14:02:50 UTC 2019
Update #3818.
---
testsuites/psxtests/Makefile.am | 8 +-
testsuites/psxtests/psxsignal03/init.c | 252 +---------------------
testsuites/psxtests/psxsignal03/psxsignal0ximpl.h | 234 ++++++++++++++++++++
testsuites/psxtests/psxsignal04/init.c | 2 +
4 files changed, 241 insertions(+), 255 deletions(-)
create mode 100644 testsuites/psxtests/psxsignal03/psxsignal0ximpl.h
create mode 100644 testsuites/psxtests/psxsignal04/init.c
diff --git a/testsuites/psxtests/Makefile.am b/testsuites/psxtests/Makefile.am
index 536b77f560..42d67e2fd9 100755
--- a/testsuites/psxtests/Makefile.am
+++ b/testsuites/psxtests/Makefile.am
@@ -842,8 +842,7 @@ psx_screens += psxsignal03/psxsignal03.scn
psx_docs += psxsignal03/psxsignal03.doc
psxsignal03_SOURCES = psxsignal03/init.c include/pmacros.h
psxsignal03_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_psxsignal03) \
- $(support_includes) -I$(top_srcdir)/include \
- -DUSE_USER_SIGNALS_PROCESS
+ $(support_includes) -I$(top_srcdir)/include
endif
endif
@@ -852,10 +851,9 @@ if TEST_psxsignal04
psx_tests += psxsignal04
psx_screens += psxsignal04/psxsignal04.scn
psx_docs += psxsignal04/psxsignal04.doc
-psxsignal04_SOURCES = psxsignal03/init.c include/pmacros.h
+psxsignal04_SOURCES = psxsignal04/init.c include/pmacros.h
psxsignal04_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_psxsignal04) \
- $(support_includes) -I$(top_srcdir)/include \
- -DUSE_REAL_TIME_SIGNALS_PROCESS
+ $(support_includes) -I$(top_srcdir)/include
endif
endif
diff --git a/testsuites/psxtests/psxsignal03/init.c b/testsuites/psxtests/psxsignal03/init.c
index fcf7192664..bc9daf8bfb 100644
--- a/testsuites/psxtests/psxsignal03/init.c
+++ b/testsuites/psxtests/psxsignal03/init.c
@@ -1,250 +1,2 @@
-/*
- * COPYRIGHT (c) 1989-2012.
- * On-Line Applications Research Corporation (OAR).
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if defined(USE_USER_SIGNALS_PROCESS)
- #define TEST_NAME "PSXSIGNAL 3"
- #define TEST_STRING "User Signals to Process"
- #define SIGNAL_ONE SIGUSR1
- #define SIGNAL_TWO SIGUSR2
- #define SEND_SIGNAL(_sig) kill( getpid(), _sig )
- #define TO_PROCESS
-
-#elif defined(USE_REAL_TIME_SIGNALS_PROCESS)
- #define TEST_NAME "PSXSIGNAL 4"
- #define TEST_STRING "Real-Time Signals to Process"
- #define SIGNAL_ONE SIGRTMIN
- #define SIGNAL_TWO SIGRTMAX
- #define SEND_SIGNAL(_sig) kill( getpid(), _sig )
- #define TO_PROCESS
-
-#elif defined(USE_USER_SIGNALS_THREAD)
- #define TEST_NAME "PSXSIGNAL 5"
- #define TEST_STRING "User Signals to Thread"
- #define SIGNAL_ONE SIGUSR1
- #define SIGNAL_TWO SIGUSR2
- #define SEND_SIGNAL(_sig) pthread_kill( id, _sig )
- #define TO_THREAD
-
-#elif defined(USE_REAL_TIME_SIGNALS_THREAD)
- #define TEST_NAME "PSXSIGNAL 5"
- #define TEST_STRING "Real-Time Signals to Thread"
- #define SIGNAL_ONE SIGRTMIN
- #define SIGNAL_TWO SIGRTMAX
- #define SEND_SIGNAL(_sig) pthread_kill( id, _sig )
- #define TO_THREAD
-
-#else
- #error "Test Mode not defined"
-#endif
-
-#include <pmacros.h>
-#include <signal.h>
-#include <errno.h>
-#include <pthread.h>
-#include <sched.h>
-
-const char rtems_test_name[] = TEST_NAME;
-
-/* forward declarations to avoid warnings */
-void *POSIX_Init(void *argument);
-void *Test_Thread(void *arg);
-void Signal_handler(int signo, siginfo_t *info, void *arg);
-const char *signal_name(int signo);
-
-volatile bool Signal_occurred;
-volatile pthread_t Signal_thread;
-
-static void block_all_signals(void)
-{
- int sc;
- sigset_t mask;
-
- sc = sigfillset( &mask );
- rtems_test_assert( !sc );
-
- sc = pthread_sigmask( SIG_BLOCK, &mask, NULL );
- rtems_test_assert( !sc );
-}
-
-void Signal_handler(
- int signo,
- siginfo_t *info,
- void *arg
-)
-{
- Signal_occurred = true;
- Signal_thread = pthread_self();
-}
-
-const char *signal_name(int signo)
-{
- if (signo == SIGUSR1)
- return "SIGUSR1";
- if (signo == SIGUSR2)
- return "SIGUSR2";
- if (signo == SIGRTMIN)
- return "SIGRTMIN";
- if (signo == SIGRTMAX)
- return "SIGRTMAX";
- return "unknown-signal";
-}
-
-void *Test_Thread(void *arg)
-{
- bool blocked = *((bool *)arg);
- const char *name;
- int sc;
- sigset_t mask;
- sigset_t wait_mask;
- siginfo_t info;
-
- if ( blocked )
- name = "SignalBlocked";
- else
- name = "SignalNotBlocked";
-
- /* build unblocked mask */
- sc = sigemptyset( &mask );
- rtems_test_assert( !sc );
-
- printf( "%s - Unblock %s\n", name, signal_name(SIGNAL_ONE) );
- sc = sigaddset( &mask, SIGNAL_ONE );
- rtems_test_assert( !sc );
-
- if ( !blocked ) {
- printf( "%s - Unblock %s\n", name, signal_name(SIGNAL_TWO) );
- sc = sigaddset( &mask, SIGNAL_TWO );
- rtems_test_assert( !sc );
- }
-
- /* unblocked signals */
- sc = pthread_sigmask( SIG_UNBLOCK, &mask, NULL );
- rtems_test_assert( !sc );
-
- /* build wait mask */
- sc = sigemptyset( &wait_mask );
- rtems_test_assert( !sc );
-
- sc = sigaddset( &wait_mask, SIGNAL_ONE );
- rtems_test_assert( !sc );
-
- /* wait for a signal */
- memset( &info, 0, sizeof(info) );
-
- printf( "%s - Wait for %s unblocked\n", name, signal_name(SIGNAL_ONE) );
- sigwaitinfo( &wait_mask, &info );
- rtems_test_assert( !sc );
-
- printf( "%s - siginfo.si_signo=%d\n", name, info.si_signo );
- printf( "%s - siginfo.si_code=%d\n", name, info.si_code );
- /* FIXME: Instead of casting to (uintptr_t) and using PRIxPTR, we
- * likely should use %p. However, this would render this test's
- * behavior non-deterministic, because %p's behavior is
- * "implementation defined" */
- printf(
- "%s - siginfo.si_value=0x%08" PRIxPTR "\n",
- name,
- (uintptr_t) info.si_value.sival_ptr
- );
-
- rtems_test_assert( info.si_signo == SIGNAL_TWO );
- rtems_test_assert( info.si_code == SI_USER );
-
- printf( "%s - exiting\n", name );
- return NULL;
-}
-
-void *POSIX_Init(
- void *argument
-)
-{
- int sc;
- pthread_t id;
- struct sigaction act;
- bool trueArg = true;
- bool falseArg = false;
- struct timespec delay_request;
-
- TEST_BEGIN();
- puts( "Init - Variation is: " TEST_STRING );
-
- block_all_signals();
-
- Signal_occurred = false;
-
- act.sa_handler = NULL;
- act.sa_sigaction = Signal_handler;
- act.sa_flags = SA_SIGINFO;
- sigaction( SIGNAL_ONE, &act, NULL );
- sigaction( SIGNAL_TWO, &act, NULL );
-
- /* create threads */
- sc = pthread_create( &id, NULL, Test_Thread, &falseArg );
- rtems_test_assert( !sc );
-
- sc = pthread_create( &id, NULL, Test_Thread, &trueArg );
- rtems_test_assert( !sc );
-
- puts( "Init - sleep - let threads settle - OK" );
- delay_request.tv_sec = 0;
- delay_request.tv_nsec = 5 * 100000000;
- sc = nanosleep( &delay_request, NULL );
- rtems_test_assert( !sc );
-
- puts( "Init - sleep - SignalBlocked thread settle - OK" );
- sc = nanosleep( &delay_request, NULL );
- rtems_test_assert( !sc );
-
- printf( "Init - sending %s - deliver to one thread\n",
- signal_name(SIGNAL_TWO));
- sc = SEND_SIGNAL( SIGNAL_TWO );
- rtems_test_assert( !sc );
-
- printf( "Init - sending %s - deliver to other thread\n",
- signal_name(SIGNAL_TWO));
- sc = SEND_SIGNAL( SIGNAL_TWO );
- rtems_test_assert( !sc );
-
- #if defined(TO_PROCESS)
- printf( "Init - sending %s - expect EAGAIN\n", signal_name(SIGNAL_TWO) );
- sc = SEND_SIGNAL( SIGNAL_TWO );
- rtems_test_assert( sc == -1 );
- rtems_test_assert( errno == EAGAIN );
- #endif
-
- puts( "Init - sleep - let thread report if it unblocked - OK" );
- usleep(500000);
-
- /* we are just sigwait'ing the signal, not delivering it */
- rtems_test_assert( Signal_occurred == true );
-
- TEST_END();
- rtems_test_exit(0);
-
- return NULL; /* just so the compiler thinks we returned something */
-}
-
-/* configuration information */
-
-#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
-#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-
-#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
-
-#define CONFIGURE_MAXIMUM_POSIX_THREADS 3
-#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 1
-
-#define CONFIGURE_POSIX_INIT_THREAD_TABLE
-
-#define CONFIGURE_INIT
-#include <rtems/confdefs.h>
+#define USE_USER_SIGNALS_PROCESS
+#include "psxsignal0ximpl.h"
diff --git a/testsuites/psxtests/psxsignal03/psxsignal0ximpl.h b/testsuites/psxtests/psxsignal03/psxsignal0ximpl.h
new file mode 100644
index 0000000000..6410be1020
--- /dev/null
+++ b/testsuites/psxtests/psxsignal03/psxsignal0ximpl.h
@@ -0,0 +1,234 @@
+/*
+ * COPYRIGHT (c) 1989-2012.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#if defined(USE_USER_SIGNALS_PROCESS)
+ #define TEST_NAME "PSXSIGNAL 3"
+ #define TEST_STRING "User Signals to Process"
+ #define SIGNAL_ONE SIGUSR1
+ #define SIGNAL_TWO SIGUSR2
+ #define SEND_SIGNAL(_sig) kill( getpid(), _sig )
+ #define TO_PROCESS
+
+#elif defined(USE_REAL_TIME_SIGNALS_PROCESS)
+ #define TEST_NAME "PSXSIGNAL 4"
+ #define TEST_STRING "Real-Time Signals to Process"
+ #define SIGNAL_ONE SIGRTMIN
+ #define SIGNAL_TWO SIGRTMAX
+ #define SEND_SIGNAL(_sig) kill( getpid(), _sig )
+ #define TO_PROCESS
+
+#else
+ #error "Test Mode not defined"
+#endif
+
+#include <pmacros.h>
+#include <signal.h>
+#include <errno.h>
+#include <pthread.h>
+#include <sched.h>
+
+const char rtems_test_name[] = TEST_NAME;
+
+/* forward declarations to avoid warnings */
+void *POSIX_Init(void *argument);
+void *Test_Thread(void *arg);
+void Signal_handler(int signo, siginfo_t *info, void *arg);
+const char *signal_name(int signo);
+
+volatile bool Signal_occurred;
+volatile pthread_t Signal_thread;
+
+static void block_all_signals(void)
+{
+ int sc;
+ sigset_t mask;
+
+ sc = sigfillset( &mask );
+ rtems_test_assert( !sc );
+
+ sc = pthread_sigmask( SIG_BLOCK, &mask, NULL );
+ rtems_test_assert( !sc );
+}
+
+void Signal_handler(
+ int signo,
+ siginfo_t *info,
+ void *arg
+)
+{
+ Signal_occurred = true;
+ Signal_thread = pthread_self();
+}
+
+const char *signal_name(int signo)
+{
+ if (signo == SIGUSR1)
+ return "SIGUSR1";
+ if (signo == SIGUSR2)
+ return "SIGUSR2";
+ if (signo == SIGRTMIN)
+ return "SIGRTMIN";
+ if (signo == SIGRTMAX)
+ return "SIGRTMAX";
+ return "unknown-signal";
+}
+
+void *Test_Thread(void *arg)
+{
+ bool blocked = *((bool *)arg);
+ const char *name;
+ int sc;
+ sigset_t mask;
+ sigset_t wait_mask;
+ siginfo_t info;
+
+ if ( blocked )
+ name = "SignalBlocked";
+ else
+ name = "SignalNotBlocked";
+
+ /* build unblocked mask */
+ sc = sigemptyset( &mask );
+ rtems_test_assert( !sc );
+
+ printf( "%s - Unblock %s\n", name, signal_name(SIGNAL_ONE) );
+ sc = sigaddset( &mask, SIGNAL_ONE );
+ rtems_test_assert( !sc );
+
+ if ( !blocked ) {
+ printf( "%s - Unblock %s\n", name, signal_name(SIGNAL_TWO) );
+ sc = sigaddset( &mask, SIGNAL_TWO );
+ rtems_test_assert( !sc );
+ }
+
+ /* unblocked signals */
+ sc = pthread_sigmask( SIG_UNBLOCK, &mask, NULL );
+ rtems_test_assert( !sc );
+
+ /* build wait mask */
+ sc = sigemptyset( &wait_mask );
+ rtems_test_assert( !sc );
+
+ sc = sigaddset( &wait_mask, SIGNAL_ONE );
+ rtems_test_assert( !sc );
+
+ /* wait for a signal */
+ memset( &info, 0, sizeof(info) );
+
+ printf( "%s - Wait for %s unblocked\n", name, signal_name(SIGNAL_ONE) );
+ sigwaitinfo( &wait_mask, &info );
+ rtems_test_assert( !sc );
+
+ printf( "%s - siginfo.si_signo=%d\n", name, info.si_signo );
+ printf( "%s - siginfo.si_code=%d\n", name, info.si_code );
+ /* FIXME: Instead of casting to (uintptr_t) and using PRIxPTR, we
+ * likely should use %p. However, this would render this test's
+ * behavior non-deterministic, because %p's behavior is
+ * "implementation defined" */
+ printf(
+ "%s - siginfo.si_value=0x%08" PRIxPTR "\n",
+ name,
+ (uintptr_t) info.si_value.sival_ptr
+ );
+
+ rtems_test_assert( info.si_signo == SIGNAL_TWO );
+ rtems_test_assert( info.si_code == SI_USER );
+
+ printf( "%s - exiting\n", name );
+ return NULL;
+}
+
+void *POSIX_Init(
+ void *argument
+)
+{
+ int sc;
+ pthread_t id;
+ struct sigaction act;
+ bool trueArg = true;
+ bool falseArg = false;
+ struct timespec delay_request;
+
+ TEST_BEGIN();
+ puts( "Init - Variation is: " TEST_STRING );
+
+ block_all_signals();
+
+ Signal_occurred = false;
+
+ act.sa_handler = NULL;
+ act.sa_sigaction = Signal_handler;
+ act.sa_flags = SA_SIGINFO;
+ sigaction( SIGNAL_ONE, &act, NULL );
+ sigaction( SIGNAL_TWO, &act, NULL );
+
+ /* create threads */
+ sc = pthread_create( &id, NULL, Test_Thread, &falseArg );
+ rtems_test_assert( !sc );
+
+ sc = pthread_create( &id, NULL, Test_Thread, &trueArg );
+ rtems_test_assert( !sc );
+
+ puts( "Init - sleep - let threads settle - OK" );
+ delay_request.tv_sec = 0;
+ delay_request.tv_nsec = 5 * 100000000;
+ sc = nanosleep( &delay_request, NULL );
+ rtems_test_assert( !sc );
+
+ puts( "Init - sleep - SignalBlocked thread settle - OK" );
+ sc = nanosleep( &delay_request, NULL );
+ rtems_test_assert( !sc );
+
+ printf( "Init - sending %s - deliver to one thread\n",
+ signal_name(SIGNAL_TWO));
+ sc = SEND_SIGNAL( SIGNAL_TWO );
+ rtems_test_assert( !sc );
+
+ printf( "Init - sending %s - deliver to other thread\n",
+ signal_name(SIGNAL_TWO));
+ sc = SEND_SIGNAL( SIGNAL_TWO );
+ rtems_test_assert( !sc );
+
+ #if defined(TO_PROCESS)
+ printf( "Init - sending %s - expect EAGAIN\n", signal_name(SIGNAL_TWO) );
+ sc = SEND_SIGNAL( SIGNAL_TWO );
+ rtems_test_assert( sc == -1 );
+ rtems_test_assert( errno == EAGAIN );
+ #endif
+
+ puts( "Init - sleep - let thread report if it unblocked - OK" );
+ usleep(500000);
+
+ /* we are just sigwait'ing the signal, not delivering it */
+ rtems_test_assert( Signal_occurred == true );
+
+ TEST_END();
+ rtems_test_exit(0);
+
+ return NULL; /* just so the compiler thinks we returned something */
+}
+
+/* configuration information */
+
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS 3
+#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 1
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
diff --git a/testsuites/psxtests/psxsignal04/init.c b/testsuites/psxtests/psxsignal04/init.c
new file mode 100644
index 0000000000..449634153a
--- /dev/null
+++ b/testsuites/psxtests/psxsignal04/init.c
@@ -0,0 +1,2 @@
+#define USE_REAL_TIME_SIGNALS_PROCESS
+#include "../psxsignal03/psxsignal0ximpl.h"
--
2.16.4
More information about the devel
mailing list