diff options
Diffstat (limited to 'c/src/tests/libtests/malloctest')
-rw-r--r-- | c/src/tests/libtests/malloctest/Makefile.in | 60 | ||||
-rw-r--r-- | c/src/tests/libtests/malloctest/init.c | 114 | ||||
-rw-r--r-- | c/src/tests/libtests/malloctest/system.h | 49 | ||||
-rw-r--r-- | c/src/tests/libtests/malloctest/task1.c | 67 |
4 files changed, 290 insertions, 0 deletions
diff --git a/c/src/tests/libtests/malloctest/Makefile.in b/c/src/tests/libtests/malloctest/Makefile.in new file mode 100644 index 0000000000..dc78b897af --- /dev/null +++ b/c/src/tests/libtests/malloctest/Makefile.in @@ -0,0 +1,60 @@ +# +# $Id$ +# + +@SET_MAKE@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH=@srcdir@ + +TEST=malloctest + +MANAGERS=io + +# C source names, if any, go here -- minus the .c +C_PIECES=init task1 +C_FILES=$(C_PIECES:%=%.c) +C_O_FILES=$(C_PIECES:%=${ARCH}/%.o) + +H_FILES=system.h + +DOCTYPES= +DOCS=$(DOCTYPES:%=$(TEST).%) + +SRCS=$(DOCS) $(C_FILES) $(CC_FILES) $(H_FILES) $(S_FILES) +OBJS=$(C_O_FILES) $(CC_O_FILES) $(S_O_FILES) + +PRINT_SRCS=$(DOCS) + +PGM=${ARCH}/$(TEST).exe + +include $(RTEMS_CUSTOM) +include $(PROJECT_ROOT)/make/leaf.cfg + +# +# (OPTIONAL) Add local stuff here using += +# + +DEFINES += +CPPFLAGS += +CFLAGS += + +LD_PATHS += +LD_LIBS += +LDFLAGS += + +# +# Add your list of files to delete here. The config files +# already know how to delete some stuff, so you may want +# to just run 'make clean' first to see what gets missed. +# 'make clobber' already includes 'make clean' +# + +CLEAN_ADDITIONS += +CLOBBER_ADDITIONS += + +all: ${ARCH} $(SRCS) $(PGM) + $(INSTALL_VARIANT) -m 555 ${PGM} ${PROJECT_RELEASE}/tests + +${PGM}: $(OBJS) $(LINK_FILES) + $(make-exe) diff --git a/c/src/tests/libtests/malloctest/init.c b/c/src/tests/libtests/malloctest/init.c new file mode 100644 index 0000000000..a43766d3c6 --- /dev/null +++ b/c/src/tests/libtests/malloctest/init.c @@ -0,0 +1,114 @@ +/* Init + * + * This routine is the initialization task for this test program. + * It is a user initialization task and has the responsibility for creating + * and starting the tasks that make up the test. If the time of day + * clock is required for the test, it should also be set to a known + * value by this function. + * + * Input parameters: + * argument - task argument + * + * Output parameters: NONE + * + * COPYRIGHT (c) 1989-1997. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may in + * the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#define TEST_INIT +#include "system.h" + +rtems_task Init( + rtems_task_argument argument +) +{ + rtems_time_of_day time; + rtems_status_code status; + + puts( "\n\n*** MALLOC TEST ***" ); + + build_time( &time, 12, 31, 1988, 9, 0, 0, 0 ); + status = rtems_clock_set( &time ); + directive_failed( status, "rtems_clock_set" ); + + Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ); + Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' ); + Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' ); + Task_name[ 4 ] = rtems_build_name( 'T', 'A', '4', ' ' ); + Task_name[ 5 ] = rtems_build_name( 'T', 'A', '5', ' ' ); + + status = rtems_task_create( + Task_name[ 1 ], + 1, + TASK_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &Task_id[ 1 ] + ); + directive_failed( status, "rtems_task_create of TA1" ); + + status = rtems_task_create( + Task_name[ 2 ], + 1, + TASK_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &Task_id[ 2 ] + ); + directive_failed( status, "rtems_task_create of TA2" ); + + status = rtems_task_create( + Task_name[ 3 ], + 1, + TASK_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &Task_id[ 3 ] + ); + directive_failed( status, "rtems_task_create of TA3" ); + + status = rtems_task_create( + Task_name[ 4 ], + 1, + TASK_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &Task_id[ 4 ] + ); + directive_failed( status, "rtems_task_create of TA4" ); + + status = rtems_task_create( + Task_name[ 5 ], + 1, + TASK_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &Task_id[ 5 ] + ); + directive_failed( status, "rtems_task_create of TA5" ); + + status = rtems_task_start( Task_id[ 1 ], Task_1_through_5, 0 ); + directive_failed( status, "rtems_task_start of TA1" ); + + status = rtems_task_start( Task_id[ 2 ], Task_1_through_5, 0 ); + directive_failed( status, "rtems_task_start of TA2" ); + + status = rtems_task_start( Task_id[ 3 ], Task_1_through_5, 0 ); + directive_failed( status, "rtems_task_start of TA3" ); + + status = rtems_task_start( Task_id[ 4 ], Task_1_through_5, 0 ); + directive_failed( status, "rtems_task_start of TA4" ); + + status = rtems_task_start( Task_id[ 5 ], Task_1_through_5, 0 ); + directive_failed( status, "rtems_task_start of TA5" ); + + status = rtems_task_delete( RTEMS_SELF ); + directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); +} diff --git a/c/src/tests/libtests/malloctest/system.h b/c/src/tests/libtests/malloctest/system.h new file mode 100644 index 0000000000..7b81f2adb9 --- /dev/null +++ b/c/src/tests/libtests/malloctest/system.h @@ -0,0 +1,49 @@ +/* system.h + * + * This include file contains information that is included in every + * function in the test set. + * + * COPYRIGHT (c) 1989-1997. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may in + * the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include <tmacros.h> + +/* macros */ + +#define TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE*3) + +/* functions */ + +rtems_task Init( + rtems_task_argument argument +); + +rtems_task Task_1_through_5( + rtems_task_argument argument +); + +void blow_stack( void ); + +/* configuration information */ + +#define CONFIGURE_SPTEST + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER + +#include <confdefs.h> + +/* global variables */ + +TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */ +TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */ + +/* end of include file */ diff --git a/c/src/tests/libtests/malloctest/task1.c b/c/src/tests/libtests/malloctest/task1.c new file mode 100644 index 0000000000..d18a748c25 --- /dev/null +++ b/c/src/tests/libtests/malloctest/task1.c @@ -0,0 +1,67 @@ +/* task1.c + * + * This set of three tasks do some simple task switching for about + * 15 seconds and then call a routine to "blow the stack". + * + * COPYRIGHT (c) 1989-1997. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may in + * the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include "system.h" +#include <libcsupport.h> /* for malloc_dump, malloc_walk */ +#include <string.h> /* for memset */ + +#define NUM_PASSES 100 + +rtems_task Task_1_through_5( + rtems_task_argument argument +) +{ + int i; + unsigned int passes = 0; + rtems_id tid; + rtems_time_of_day time; + rtems_status_code status; + unsigned char *mem_ptr; + int mem_amt; + + status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid ); + directive_failed( status, "rtems_task_ident" ); + + while (TRUE) + { + if ( passes++ > NUM_PASSES ) + exit(0); + + status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time ); + directive_failed( status, "rtems_clock_get" ); + + put_name( Task_name[ task_number( tid ) ], FALSE ); + print_time( " - rtems_clock_get - ", &time, "\n" ); + + mem_amt = rand() * task_number( tid ); + printf("mallocing %d bytes\n",mem_amt); + mem_ptr = malloc ( mem_amt); + memset( mem_ptr, mem_amt, mem_amt ); + malloc_dump(); + malloc_walk(1,FALSE); + status = rtems_task_wake_after( task_number( tid ) * 1 * TICKS_PER_SECOND/4 ); + for (i=0; i < mem_amt; i++) + { + if ( mem_ptr[i] != (mem_amt & 0xff)) + { + printf("failed %d, %d, 0x%x, 0x%x\n",i,mem_amt,mem_ptr[i],mem_amt&0xff); + exit(1); + } + } + directive_failed( status, "rtems_task_wake_after" ); + free( mem_ptr ); + } +} |