diff options
author | Daniel Ramirez <javamonn@gmail.com> | 2013-12-03 18:30:39 +1100 |
---|---|---|
committer | Gedare Bloom <gedare@rtems.org> | 2013-12-03 09:12:31 -0500 |
commit | b9287a15aaabbfcc19994bc9751a07b114a17a5a (patch) | |
tree | 3cf2e0b5405b5b746f6a7bd06ff1a77288c108f4 /c/src/lib/libbsp/sparc/shared/startup | |
parent | arm: Clear reservations (diff) | |
download | rtems-b9287a15aaabbfcc19994bc9751a07b114a17a5a.tar.bz2 |
libbsp: refactored sparc/shared/bspgetworkarea.c to sparc/shared/startup/bspgetworkarea.c
* refactored sparc/shared/bspgetworkarea.c to sparc/shared/startup/bspgetworkarea.c
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared/startup')
-rw-r--r-- | c/src/lib/libbsp/sparc/shared/startup/bspgetworkarea.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/startup/bspgetworkarea.c b/c/src/lib/libbsp/sparc/shared/startup/bspgetworkarea.c new file mode 100644 index 0000000000..d799800d61 --- /dev/null +++ b/c/src/lib/libbsp/sparc/shared/startup/bspgetworkarea.c @@ -0,0 +1,67 @@ +/* + * 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.com/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; + +/* Must be aligned to 8, _end is aligned to 8 */ +unsigned int early_mem = (unsigned int)&end; + +/* + * 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 *)early_mem; + uintptr_t work_area_size = + (uintptr_t)rdb_start - (uintptr_t)early_mem - STACK_SIZE; + early_mem = ~0; /* Signal bsp_early_malloc not to be used anymore */ + + /* + * 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); +} |