diff --git a/testsuites/sptests/ChangeLog b/testsuites/sptests/ChangeLog index fc2c2cd5dd..756d303c51 100644 --- a/testsuites/sptests/ChangeLog +++ b/testsuites/sptests/ChangeLog @@ -1,3 +1,12 @@ +2010-06-22 Joel Sherrill + + * Makefile.am, configure.ac: Add new test to exercise path where using + unlimited object support you are about to allocate more objects than + can be represented in the Id. This test will NOT pass on targets with + insufficient RAM. + * sp71/.cvsignore, sp71/Makefile.am, sp71/init.c, sp71/sp71.doc, + sp71/sp71.scn: New files. + 2010-06-21 Joel Sherrill * Makefile.am, configure.ac: spfatal20 not ready. diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am index a1b45c449c..d25457e41a 100644 --- a/testsuites/sptests/Makefile.am +++ b/testsuites/sptests/Makefile.am @@ -14,7 +14,7 @@ SUBDIRS = \ sp40 sp41 sp42 sp43 sp44 sp45 sp46 sp47 sp48 sp49 \ sp50 sp51 sp52 sp53 sp54 sp55 sp56 sp57 sp58 sp59 \ sp60 sp61 sp62 sp63 sp64 sp65 sp66 sp67 sp68 sp69 \ - sp70 \ + sp70 sp71 \ spchain spclockget spcoverage spobjgetnext spnotepad01 spprintk spsize \ spstkalloc spthreadq01 spwatchdog spwkspace \ spfatal01 spfatal02 spfatal03 spfatal04 spfatal05 spfatal06 spfatal07 \ diff --git a/testsuites/sptests/configure.ac b/testsuites/sptests/configure.ac index 830d07ee28..2b04c497f2 100644 --- a/testsuites/sptests/configure.ac +++ b/testsuites/sptests/configure.ac @@ -96,6 +96,7 @@ sp67/Makefile sp68/Makefile sp69/Makefile sp70/Makefile +sp71/Makefile spchain/Makefile spclockget/Makefile spcoverage/Makefile diff --git a/testsuites/sptests/sp71/.cvsignore b/testsuites/sptests/sp71/.cvsignore new file mode 100644 index 0000000000..282522db03 --- /dev/null +++ b/testsuites/sptests/sp71/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/testsuites/sptests/sp71/Makefile.am b/testsuites/sptests/sp71/Makefile.am new file mode 100644 index 0000000000..be4e42037a --- /dev/null +++ b/testsuites/sptests/sp71/Makefile.am @@ -0,0 +1,26 @@ +## +## $Id$ +## + +MANAGERS = all + +rtems_tests_PROGRAMS = sp71 +sp71_SOURCES = init.c ../../support/src/spin.c + +dist_rtems_tests_DATA = sp71.scn +dist_rtems_tests_DATA += sp71.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(sp71_OBJECTS) $(sp71_LDADD) +LINK_LIBS = $(sp71_LDLIBS) + +sp71$(EXEEXT): $(sp71_OBJECTS) $(sp71_DEPENDENCIES) + @rm -f sp71$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/sptests/sp71/init.c b/testsuites/sptests/sp71/init.c new file mode 100644 index 0000000000..954f21c191 --- /dev/null +++ b/testsuites/sptests/sp71/init.c @@ -0,0 +1,71 @@ +/* + * COPYRIGHT (c) 1989-2010. + * 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 +#include "test_support.h" + +#define PER_ALLOCATION 8000 + +rtems_task Init( + rtems_task_argument argument +) +{ + rtems_status_code status; + rtems_id id; + long created; + + puts( "\n\n*** TEST 71 ***" ); + + created = 0; + do { + status = rtems_port_create( + rtems_build_name( 'P', 'O', 'R', 'T' ), + (void *) 0x1000, + (void *) 0x2000, + 1024, + &id + ); + if ( status == RTEMS_TOO_MANY ) + break; + directive_failed( status, "rtems_task_create" ); + created++; + } while (1); + + printf( + "%ld ports created using %d per allocation -- need %ld\n", + created, + PER_ALLOCATION, + (long) OBJECTS_ID_FINAL_INDEX + ); + + if ( (created + PER_ALLOCATION) > OBJECTS_ID_FINAL_INDEX ) { + puts( "Test case hit" ); + puts( "*** END OF TEST 71 ***" ); + } else { + puts( "Test case NOT hit" ); + } + rtems_test_exit(0); +} + +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 1 +#define CONFIGURE_MAXIMUM_PORTS rtems_resource_unlimited(PER_ALLOCATION) +#define CONFIGURE_UNIFIED_WORK_AREAS +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include +/* end of file */ diff --git a/testsuites/sptests/sp71/sp71.doc b/testsuites/sptests/sp71/sp71.doc new file mode 100644 index 0000000000..9a4020d7c2 --- /dev/null +++ b/testsuites/sptests/sp71/sp71.doc @@ -0,0 +1,22 @@ +# +# $Id$ +# +# COPYRIGHT (c) 1989-2010. +# 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: sp71 + +directives: + + rtems_port_create + +concepts: + ++ Using unlimited objects, create so many that the index field would overflow. diff --git a/testsuites/sptests/sp71/sp71.scn b/testsuites/sptests/sp71/sp71.scn new file mode 100644 index 0000000000..048c5ffbab --- /dev/null +++ b/testsuites/sptests/sp71/sp71.scn @@ -0,0 +1,4 @@ +*** TEST 71 *** +64000 ports created using 8000 per allocation -- need 65535 +Test case hit +*** END OF TEST 71 ***