diff options
Diffstat (limited to 'bsps/sparc/shared/start/bspgetworkarea.c')
-rw-r--r-- | bsps/sparc/shared/start/bspgetworkarea.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/bsps/sparc/shared/start/bspgetworkarea.c b/bsps/sparc/shared/start/bspgetworkarea.c new file mode 100644 index 0000000000..b05113d9eb --- /dev/null +++ b/bsps/sparc/shared/start/bspgetworkarea.c @@ -0,0 +1,63 @@ +/* + * This set of routines are the BSP specific initialization + * support routines. + * + * COPYRIGHT (c) 1989-2008. + * 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.org/license/LICENSE. + */ + +/* #define BSP_GET_WORK_AREA_DEBUG */ +#include <bsp.h> +#include <bsp/bootcard.h> +#ifdef BSP_GET_WORK_AREA_DEBUG + #include <rtems/bspIo.h> +#endif + +/* Tells us where to put the workspace in case remote debugger is present. */ +extern uint32_t rdb_start; + +/* + * This method returns the base address and size of the area which + * is to be allocated between the RTEMS Workspace and the C Program + * Heap. + */ +void bsp_work_area_initialize(void) +{ + /* must be identical to STACK_SIZE in start.S */ + #define STACK_SIZE (16 * 1024) + + /* Early dynamic memory allocator is placed just above _end */ + void *work_area_start = (void *)&end; + uintptr_t work_area_size = + (uintptr_t)rdb_start - (uintptr_t)&end - STACK_SIZE; + + /* + * The following may be helpful in debugging what goes wrong when + * you are allocating the Work Area in a new BSP. + */ + #ifdef BSP_GET_WORK_AREA_DEBUG + { + void *sp = __builtin_frame_address(0); + void *end = *work_area_start + *work_area_size; + printk( + "work_area_start = 0x%p\n" + "work_area_size = %d 0x%08x\n" + "end = 0x%p\n" + "current stack pointer = 0x%p%s\n", + work_area_start, + work_area_size, /* decimal */ + work_area_size, /* hexadecimal */ + end, + sp, + ((sp >= *work_area_start && sp <= end) ? " OVERLAPS!" : "") + ); + printk( "rdb_start = 0x%08x\n", rdb_start ); + } + #endif + + bsp_work_area_initialize_default(work_area_start, work_area_size); +} |