From 4a5e65186b31d4ed8d11b413fec17d803f53f0e3 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 18 Sep 1996 21:06:49 +0000 Subject: new test submitted by Craig Lebakken (lebakken@minn.net) and Derrick Ostertag (ostertag@transition.com) --- c/src/tests/libtests/malloctest/init.c | 114 +++++++++++++++++++++++++++++++ c/src/tests/libtests/malloctest/system.h | 49 +++++++++++++ c/src/tests/libtests/malloctest/task1.c | 67 ++++++++++++++++++ 3 files changed, 230 insertions(+) create mode 100644 c/src/tests/libtests/malloctest/init.c create mode 100644 c/src/tests/libtests/malloctest/system.h create mode 100644 c/src/tests/libtests/malloctest/task1.c (limited to 'c/src') diff --git a/c/src/tests/libtests/malloctest/init.c b/c/src/tests/libtests/malloctest/init.c new file mode 100644 index 0000000000..4df539a90f --- /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, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $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..9fce9f14aa --- /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, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#include + +/* 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 + +/* 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..35ffe6f639 --- /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, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#include "system.h" +#include /* for malloc_dump, malloc_walk */ +#include /* 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 ); + } +} -- cgit v1.2.3