diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-02-27 15:09:37 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-02-27 15:09:37 +0000 |
commit | 5d01560bb42cbec06de27c1ab486115fa99f4ac1 (patch) | |
tree | c35b3a776d6fd878b461ae9800a911be553d43d0 | |
parent | 2009-02-27 Joel Sherrill <joel.sherrill@OARcorp.com> (diff) | |
download | rtems-5d01560bb42cbec06de27c1ab486115fa99f4ac1.tar.bz2 |
2009-02-27 Joel Sherrill <joel.sherrill@OARcorp.com>
* bspgetworkarea.c: Add check to determine if current stack pointer is
in work area.
-rw-r--r-- | c/src/lib/libbsp/shared/ChangeLog | 5 | ||||
-rw-r--r-- | c/src/lib/libbsp/shared/bspgetworkarea.c | 29 |
2 files changed, 29 insertions, 5 deletions
diff --git a/c/src/lib/libbsp/shared/ChangeLog b/c/src/lib/libbsp/shared/ChangeLog index 5edba1f3f4..22b042f350 100644 --- a/c/src/lib/libbsp/shared/ChangeLog +++ b/c/src/lib/libbsp/shared/ChangeLog @@ -1,3 +1,8 @@ +2009-02-27 Joel Sherrill <joel.sherrill@OARcorp.com> + + * bspgetworkarea.c: Add check to determine if current stack pointer is + in work area. + 2009-02-27 Sebastian Huber <sebastian.huber@embedded-brains.de> * include/utility.h: Added define. diff --git a/c/src/lib/libbsp/shared/bspgetworkarea.c b/c/src/lib/libbsp/shared/bspgetworkarea.c index db03d1e3e7..d3ed83c033 100644 --- a/c/src/lib/libbsp/shared/bspgetworkarea.c +++ b/c/src/lib/libbsp/shared/bspgetworkarea.c @@ -63,11 +63,30 @@ void bsp_get_work_area( *heap_start = BSP_BOOTCARD_HEAP_USES_WORK_AREA; *heap_size = (ssize_t) HeapSize; + /* + * 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 - printk( "work_area_start = %p\n", *work_area_start ); - printk( "work_area_size = %d 0x%08x\n", *work_area_size, *work_area_size ); - printk( "end = %p\n", *work_area_start + *work_area_size ); - printk( "heap_start = %p\n", *heap_start ); - printk( "heap_size = %d\n", *heap_size ); + { + 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" + "heap_start = 0x%p\n" + "heap_size = %d\n" + "current stack pointer = 0x%p%s\n", + *work_area_start, + *work_area_size, /* decimal */ + *work_area_size, /* hexadecimal */ + end, + *heap_start, + *heap_size, + sp, + ((sp >= *work_area_start && sp <= end) ? " OVERLAPS!" : "") + ); + } #endif } |