2011-03-08 Joel Sherrill <joel.sherrilL@OARcorp.com>

PR 1759/cpukit
	* Makefile.am, configure.ac: Add test to use some pthread calls with
	Classic Tasks.
	* psxclassic01/.cvsignore, psxclassic01/Makefile.am,
	psxclassic01/init.c, psxclassic01/psxclassic01.doc,
	psxclassic01/psxclassic01.scn: New files.
This commit is contained in:
Joel Sherrill
2011-03-08 22:10:39 +00:00
parent 5f6e7415b7
commit 408eea8879
8 changed files with 229 additions and 1 deletions
+9
View File
@@ -1,3 +1,12 @@
2011-03-08 Joel Sherrill <joel.sherrilL@OARcorp.com>
PR 1759/cpukit
* Makefile.am, configure.ac: Add test to use some pthread calls with
Classic Tasks.
* psxclassic01/.cvsignore, psxclassic01/Makefile.am,
psxclassic01/init.c, psxclassic01/psxclassic01.doc,
psxclassic01/psxclassic01.scn: New files.
2011-02-22 Ralf Corsépius <ralf.corsepius@rtems.org>
* configure.ac: Add AC_CONFIG_HEADER(config.h).
+1 -1
View File
@@ -9,7 +9,7 @@ if HAS_POSIX
SUBDIRS += psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \
psx10 psx11 psx12 psx13 psx14 psx15 psxaio01 psxaio02 psxaio03 \
psxalarm01 psxautoinit01 psxautoinit02 psxbarrier01 \
psxcancel psxcancel01 psxcleanup psxcleanup01 \
psxcancel psxcancel01 psxclassic01 psxcleanup psxcleanup01 \
psxcond01 psxenosys psxkey01 psxkey02 psxkey03 \
psxitimer psxmsgq01 psxmsgq02 psxmsgq03 psxmsgq04 \
psxmutexattr01 psxobj01 psxrwlock01 psxsem01 psxsignal01 psxsignal02 \
+1
View File
@@ -106,6 +106,7 @@ psxbarrier01/Makefile
psxcancel/Makefile
psxcancel01/Makefile
psxchroot01/Makefile
psxclassic01/Makefile
psxcleanup/Makefile
psxcleanup01/Makefile
psxclock/Makefile
@@ -0,0 +1,2 @@
Makefile
Makefile.in
@@ -0,0 +1,28 @@
##
## $Id$
##
MANAGERS = all
rtems_tests_PROGRAMS = psxclassic01
psxclassic01_SOURCES = init.c ../include/pmacros.h
dist_rtems_tests_DATA = psxclassic01.scn
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
include $(top_srcdir)/../automake/compile.am
include $(top_srcdir)/../automake/leaf.am
psxclassic01_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
AM_CPPFLAGS += -I$(top_srcdir)/include
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
LINK_OBJS = $(psxclassic01_OBJECTS) $(psxclassic01_LDADD)
LINK_LIBS = $(psxclassic01_LDLIBS)
psxclassic01$(EXEEXT): $(psxclassic01_OBJECTS) $(psxclassic01_DEPENDENCIES)
@rm -f psxclassic01$(EXEEXT)
$(make-exe)
include $(top_srcdir)/../automake/local.am
+153
View File
@@ -0,0 +1,153 @@
/*
* Based upon user code supplied in conjunction with PR1759
*
* COPYRIGHT (c) 1989-2011.
* 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.com/license/LICENSE.
*
* $Id$
*/
#include "tmacros.h"
#include <stdio.h>
#include <rtems.h>
#include <pthread.h>
#include <unistd.h>
#include <errno.h>
int Caught_signo = -1;
siginfo_t Caught_siginfo = { -1, -1, };
void handler(int signo)
{
Caught_signo = signo;
}
void handler_info(int signo, siginfo_t *info, void *context)
{
Caught_signo = signo;
Caught_siginfo = *info;
}
rtems_task test_task(rtems_task_argument arg)
{
int sc;
struct sigaction new_action;
sigset_t mask;
printf("test_task starting...\n");
sc = sigemptyset (&new_action.sa_mask);
rtems_test_assert( sc == 0 );
sc = sigfillset (&new_action.sa_mask);
rtems_test_assert( sc == 0 );
sc = sigdelset (&new_action.sa_mask, SIGUSR1);
rtems_test_assert( sc == 0 );
new_action.sa_handler = handler;
new_action.sa_flags = SA_SIGINFO;
new_action.sa_sigaction = handler_info;
sc = sigaction(SIGUSR1,&new_action,NULL);
rtems_test_assert( sc == 0 );
sc = sigemptyset(&mask);
rtems_test_assert( sc == 0 );
sc = sigaddset(&mask, SIGUSR1);
rtems_test_assert( sc == 0 );
sc = pthread_sigmask( SIG_UNBLOCK, &mask, NULL);
rtems_test_assert( sc == 0 );
printf("test_task waiting for signal...\n");
while(1) {
sleep(1);
if ( Caught_siginfo.si_signo != -1 ) {
printf( "Signal_info: %d si_signo= %d si_code= %d value= %d\n",
Caught_signo,
Caught_siginfo.si_signo,
Caught_siginfo.si_code,
Caught_siginfo.si_value.sival_int
);
break;
}
if ( Caught_signo != -1 ) {
printf( "Signal: %d caught\n", Caught_signo );
break;
}
}
puts( "test_task exiting thread" );
pthread_exit( 0 );
}
rtems_task Init(rtems_task_argument arg)
{
rtems_status_code sc;
rtems_id task_id;
int status;
void *retval;
puts( "*** START OF CLASSIC API TEST OF POSIX 01 ***" );
sc = rtems_task_create(
rtems_build_name('T','E','S','T'),
1,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&task_id
);
rtems_test_assert( sc == RTEMS_SUCCESSFUL );
sc = rtems_task_start( task_id, test_task, 0 );
rtems_test_assert( sc == RTEMS_SUCCESSFUL );
puts( "Init - pthread_equal on Classic Ids" );
status = pthread_equal( task_id, task_id );
rtems_test_assert( status != 0 );
puts( "Init - pthread_cancel on Classic Task" );
status = pthread_cancel( task_id );
rtems_test_assert( status == 0 );
status = pthread_detach( task_id );
rtems_test_assert( status == 0 );
status = pthread_join( task_id, &retval );
if ( status != EINVAL ) printf( "JOIN %s\n", strerror( status ) );
rtems_test_assert( status == EINVAL );
status = pthread_kill( task_id, SIGUSR1 );
rtems_test_assert( status == 0 );
puts( "*** END OF CLASSIC API TEST OF POSIX 01 ***" );
exit(0);
}
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 2
#define CONFIGURE_INIT_TASK_INITIAL_MODES \
(RTEMS_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_ASR | RTEMS_INTERRUPT_LEVEL(0))
#define CONFIGURE_INIT_TASK_PRIORITY 4
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_UNIFIED_WORK_AREAS
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
/* end of file */
@@ -0,0 +1,27 @@
#
# $Id$
#
# COPYRIGHT (c) 1989-2019.
# 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.com/license/LICENSE.
#
This file describes the directives and concepts tested by this test set.
test set name: Classic API Task Using POSIX Services
directives:
+ pthread_equal
+ pthread_cancel
+ pthread_detach
+ pthread_join
+ pthread_kill
concepts:
+ Ensure that Classic API tasks can be operated upon by the above listed
services.
@@ -0,0 +1,8 @@
*** START OF CLASSIC API TEST OF POSIX 01 ***
test_task starting...
test_task waiting for signal...
Init - pthread_equal on Classic Ids
Init - pthread_cancel on Classic Task
Signal_info: 25 si_signo= 0 si_code= 0 value= 0
test_task exiting thread
*** END OF CLASSIC API TEST OF POSIX 01 ***