summaryrefslogtreecommitdiffstats
path: root/c/src/tests/libtests/malloctest
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/tests/libtests/malloctest')
-rw-r--r--c/src/tests/libtests/malloctest/Makefile.in60
-rw-r--r--c/src/tests/libtests/malloctest/init.c114
-rw-r--r--c/src/tests/libtests/malloctest/system.h49
-rw-r--r--c/src/tests/libtests/malloctest/task1.c67
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 );
+ }
+}