forked from Imagelibrary/rtems
libbsp: refactored sparc/shared/bspgetworkarea.c to sparc/shared/startup/bspgetworkarea.c
* refactored sparc/shared/bspgetworkarea.c to sparc/shared/startup/bspgetworkarea.c
This commit is contained in:
committed by
Gedare Bloom
parent
b4e83061e3
commit
b9287a15aa
67
c/src/lib/libbsp/sparc/shared/startup/bspgetworkarea.c
Normal file
67
c/src/lib/libbsp/sparc/shared/startup/bspgetworkarea.c
Normal file
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user