Index: testsuites/sptests/ChangeLog
===================================================================
--- testsuites/sptests/ChangeLog	(revision 9fa3cf0db84cbabdb639cdeb7565f4c3ca3bc562)
+++ testsuites/sptests/ChangeLog	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
@@ -1,2 +1,10 @@
+2011-12-14	Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+	PR 1924/cpukit
+	* spstkalloc02/.cvsignore, spstkalloc02/Makefile.am,
+	spstkalloc02/init.c, spstkalloc02/spstkalloc02.doc,
+	spstkalloc02/spstkalloc02.scn: New files.
+	* Makefile.am, configure.ac: Reflect changes above.
+
 2011-12-13	Ralf CorsÃ©pius <ralf.corsepius@rtems.org>
 
Index: testsuites/sptests/Makefile.am
===================================================================
--- testsuites/sptests/Makefile.am	(revision 9fa3cf0db84cbabdb639cdeb7565f4c3ca3bc562)
+++ testsuites/sptests/Makefile.am	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
@@ -18,5 +18,5 @@
     spassoc01 spchain spclockget spcoverage spobjgetnext \
     spnotepad01 spprintk spprivenv01 sprbtree01 spsize spstkalloc \
-		spthreadq01 spwatchdog spwkspace \
+    spstkalloc02 spthreadq01 spwatchdog spwkspace \
     sperror01 sperror02 sperror03 \
     spfatal01 spfatal02 spfatal03 spfatal04 spfatal05 spfatal06 spfatal07 \
Index: testsuites/sptests/configure.ac
===================================================================
--- testsuites/sptests/configure.ac	(revision 9fa3cf0db84cbabdb639cdeb7565f4c3ca3bc562)
+++ testsuites/sptests/configure.ac	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
@@ -181,4 +181,5 @@
 spsize/Makefile
 spstkalloc/Makefile
+spstkalloc02/Makefile
 spthreadq01/Makefile
 spwatchdog/Makefile
Index: testsuites/sptests/spstkalloc02/.cvsignore
===================================================================
--- testsuites/sptests/spstkalloc02/.cvsignore	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
+++ testsuites/sptests/spstkalloc02/.cvsignore	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
Index: testsuites/sptests/spstkalloc02/Makefile.am
===================================================================
--- testsuites/sptests/spstkalloc02/Makefile.am	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
+++ testsuites/sptests/spstkalloc02/Makefile.am	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
@@ -0,0 +1,26 @@
+##
+## $Id$
+##
+
+
+rtems_tests_PROGRAMS = spstkalloc02
+spstkalloc02_SOURCES = init.c
+
+dist_rtems_tests_DATA = spstkalloc02.scn
+dist_rtems_tests_DATA += spstkalloc02.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 = $(spstkalloc02_OBJECTS)
+LINK_LIBS = $(spstkalloc02_LDLIBS)
+
+spstkalloc02$(EXEEXT): $(spstkalloc02_OBJECTS) $(spstkalloc02_DEPENDENCIES)
+	@rm -f spstkalloc02$(EXEEXT)
+	$(make-exe)
+
+include $(top_srcdir)/../automake/local.am
Index: testsuites/sptests/spstkalloc02/init.c
===================================================================
--- testsuites/sptests/spstkalloc02/init.c	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
+++ testsuites/sptests/spstkalloc02/init.c	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
@@ -0,0 +1,162 @@
+/**
+ * @file
+ *
+ * @ingroup sptests
+ *
+ * @brief Test that the task stack allocator works.
+ */
+
+/*
+ * Copyright (c) 2011 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * 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$
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <tmacros.h>
+
+#include <stdio.h>
+#include <inttypes.h>
+
+#include <rtems/score/heap.h>
+
+#define TASK_COUNT 5
+
+#define PAGE_SIZE 1024
+
+static Heap_Control task_stack_heap;
+
+static void task_stack_init(size_t stack_space_size);
+
+static void *task_stack_allocate(size_t stack_size);
+
+static void task_stack_free(void *addr);
+
+static void print_info(void)
+{
+  Heap_Information_block info;
+
+  _Heap_Get_information(&task_stack_heap, &info);
+
+  printf(
+    "used blocks = %" PRIu32 ", "
+    "largest used block = %" PRIu32 ", "
+    "used space = %" PRIu32 "\n"
+    "free blocks = %" PRIu32 ", "
+    "largest free block = %" PRIu32 ", "
+    "free space = %" PRIu32 "\n",
+    info.Used.number,
+    info.Used.largest,
+    info.Used.total,
+    info.Free.number,
+    info.Free.largest,
+    info.Free.total
+  );
+}
+
+static rtems_task Init(rtems_task_argument argument)
+{
+  rtems_status_code sc = RTEMS_SUCCESSFUL;
+  rtems_name name = rtems_build_name('S', 'T', 'K', 'A');
+  rtems_id id = RTEMS_ID_NONE;
+  int i = 0;
+
+  puts("\n\n*** POSIX TEST STKALLOC 02 ***");
+
+  print_info();
+
+  for (i = 2; i < TASK_COUNT; ++i) {
+    sc = rtems_task_create(
+      name,
+      RTEMS_MINIMUM_PRIORITY,
+      RTEMS_MINIMUM_STACK_SIZE,
+      RTEMS_DEFAULT_MODES,
+      RTEMS_DEFAULT_ATTRIBUTES,
+      &id
+    );
+    directive_failed(sc, "rtems_task_create");
+  }
+
+  sc = rtems_task_create(
+    name,
+    RTEMS_MINIMUM_PRIORITY,
+    2 * RTEMS_MINIMUM_STACK_SIZE,
+    RTEMS_DEFAULT_MODES,
+    RTEMS_DEFAULT_ATTRIBUTES,
+    &id
+  );
+  fatal_directive_status(sc, RTEMS_UNSATISFIED, "rtems_task_create");
+
+  sc = rtems_task_create(
+    name,
+    RTEMS_MINIMUM_PRIORITY,
+    RTEMS_MINIMUM_STACK_SIZE,
+    RTEMS_DEFAULT_MODES,
+    RTEMS_DEFAULT_ATTRIBUTES,
+    &id
+  );
+  directive_failed(sc, "rtems_task_create");
+
+  print_info();
+
+  puts("*** END OF POSIX TEST STKALLOC 02 ***");
+
+  rtems_test_exit(0);
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS TASK_COUNT
+
+#define CONFIGURE_TASK_STACK_ALLOCATOR_INIT task_stack_init
+#define CONFIGURE_TASK_STACK_ALLOCATOR task_stack_allocate
+#define CONFIGURE_TASK_STACK_DEALLOCATOR task_stack_free
+#define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
+#define CONFIGURE_TASK_STACK_FROM_ALLOCATOR(stack_size) \
+  ((stack_size) + HEAP_BLOCK_HEADER_SIZE + PAGE_SIZE - 1)
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
+
+static char task_stack_space
+  [CONFIGURE_TASK_STACK_FROM_ALLOCATOR(CONFIGURE_STACK_SPACE_SIZE)];
+
+static void task_stack_init(size_t stack_space_size)
+{
+  bool ok = _Heap_Initialize(
+    &task_stack_heap,
+    task_stack_space,
+    sizeof(task_stack_space),
+    PAGE_SIZE
+  );
+
+  rtems_test_assert(stack_space_size == CONFIGURE_STACK_SPACE_SIZE);
+  rtems_test_assert(ok);
+}
+
+static void *task_stack_allocate(size_t stack_size)
+{
+  return _Heap_Allocate(&task_stack_heap, stack_size);
+}
+
+static void task_stack_free(void *addr)
+{
+  _Heap_Free(&task_stack_heap, addr);
+}
Index: testsuites/sptests/spstkalloc02/spstkalloc02.scn
===================================================================
--- testsuites/sptests/spstkalloc02/spstkalloc02.scn	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
+++ testsuites/sptests/spstkalloc02/spstkalloc02.scn	(revision 46231e13303196ca65bbe21c624eb6d5663739bc)
@@ -0,0 +1,6 @@
+*** POSIX TEST STKALLOC 02 ***
+used blocks = 2, largest used block = 5120, used space = 10240
+free blocks = 1, largest free block = 20480, free space = 20480
+used blocks = 6, largest used block = 5120, used space = 30720
+free blocks = 0, largest free block = 0, free space = 0
+*** END OF POSIX TEST STKALLOC 02 ***
