summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/heapwalk.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2007-07-11 20:56:10 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2007-07-11 20:56:10 +0000
commit55d7626db75b1b5323aa5ba16b3cbc0a985462fe (patch)
treec4268b9ad2466b12170205743fd97d425da18e8a /cpukit/score/src/heapwalk.c
parent2007-07-11 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-55d7626db75b1b5323aa5ba16b3cbc0a985462fe.tar.bz2
2007-07-11 Joel Sherrill <joel.sherrill@oarcorp.com>
* libcsupport/src/malloc.c: Clean up Malloc debug code. * score/include/rtems/score/heap.h: Spacing. * score/inline/rtems/score/thread.inl: * score/src/heapfree.c. Clean up and add explicit check of the address being freed actually being in the heap. * score/src/heapwalk.c: Switch to printk and do not call abort.
Diffstat (limited to 'cpukit/score/src/heapwalk.c')
-rw-r--r--cpukit/score/src/heapwalk.c53
1 files changed, 29 insertions, 24 deletions
diff --git a/cpukit/score/src/heapwalk.c b/cpukit/score/src/heapwalk.c
index 424a1302dd..db8555cd87 100644
--- a/cpukit/score/src/heapwalk.c
+++ b/cpukit/score/src/heapwalk.c
@@ -1,7 +1,7 @@
/*
* Heap Handler
*
- * COPYRIGHT (c) 1989-1999.
+ * COPYRIGHT (c) 1989-2007.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
@@ -20,6 +20,8 @@
#include <rtems/system.h>
#include <rtems/score/sysstate.h>
#include <rtems/score/heap.h>
+#include <rtems/score/interr.h>
+#include <rtems/bspIo.h>
/*PAGE
*
@@ -62,20 +64,23 @@ boolean _Heap_Walk(
int error = 0;
int passes = 0;
+ do_dump = FALSE;
/*
* We don't want to allow walking the heap until we have
* transferred control to the user task so we watch the
* system state.
*/
+/*
if ( !_System_state_Is_up( _System_state_Get() ) )
- return FALSE;
+ return TRUE;
+*/
if (source < 0)
source = the_heap->stats.instance;
if (do_dump == TRUE)
- printf("\nPASS: %d start %p final %p first %p last %p begin %p end %p\n",
+ printk("\nPASS: %d start %p final %p first %p last %p begin %p end %p\n",
source, the_block, end,
_Heap_First(the_heap), _Heap_Last(the_heap),
the_heap->begin, the_heap->end);
@@ -85,12 +90,12 @@ boolean _Heap_Walk(
*/
if (!_Heap_Is_prev_used(the_block)) {
- printf("PASS: %d !HEAP_PREV_USED flag of 1st block isn't set\n", source);
+ printk("PASS: %d !HEAP_PREV_USED flag of 1st block isn't set\n", source);
error = 1;
}
if (the_block->prev_size != the_heap->page_size) {
- printf("PASS: %d !prev_size of 1st block isn't page_size\n", source);
+ printk("PASS: %d !prev_size of 1st block isn't page_size\n", source);
error = 1;
}
@@ -100,32 +105,32 @@ boolean _Heap_Walk(
boolean prev_used = _Heap_Is_prev_used(the_block);
if (do_dump) {
- printf("PASS: %d block %p size %d(%c)",
+ printk("PASS: %d block %p size %d(%c)",
source, the_block, the_size, (prev_used ? 'U' : 'F'));
if (prev_used)
- printf(" prev_size %d", the_block->prev_size);
+ printk(" prev_size %d", the_block->prev_size);
else
- printf(" (prev_size) %d", the_block->prev_size);
+ printk(" (prev_size) %d", the_block->prev_size);
}
if (!_Heap_Is_block_in(the_heap, next_block)) {
- if (do_dump) printf("\n");
- printf("PASS: %d !block %p is out of heap\n", source, next_block);
+ if (do_dump) printk("\n");
+ printk("PASS: %d !block %p is out of heap\n", source, next_block);
error = 1;
break;
}
if (!_Heap_Is_prev_used(next_block)) {
if (do_dump)
- printf( " prev %p next %p", the_block->prev, the_block->next);
+ printk( " prev %p next %p", the_block->prev, the_block->next);
if (_Heap_Block_size(the_block) != next_block->prev_size) {
- if (do_dump) printf("\n");
- printf("PASS: %d !front and back sizes don't match", source);
+ if (do_dump) printk("\n");
+ printk("PASS: %d !front and back sizes don't match", source);
error = 1;
}
if (!prev_used) {
- if (do_dump || error) printf("\n");
- printf("PASS: %d !two consecutive blocks are free", source);
+ if (do_dump || error) printk("\n");
+ printk("PASS: %d !two consecutive blocks are free", source);
error = 1;
}
@@ -134,22 +139,22 @@ boolean _Heap_Walk(
while(block != the_block && block != tail)
block = block->next;
if(block != the_block) {
- if (do_dump || error) printf("\n");
- printf("PASS: %d !the_block not in the free list", source);
+ if (do_dump || error) printk("\n");
+ printk("PASS: %d !the_block not in the free list", source);
error = 1;
}
}
}
- if (do_dump || error) printf("\n");
+ if (do_dump || error) printk("\n");
if (the_size < the_heap->min_block_size) {
- printf("PASS: %d !block size is too small\n", source);
+ printk("PASS: %d !block size is too small\n", source);
error = 1;
break;
}
if (!_Heap_Is_aligned( the_size, the_heap->page_size)) {
- printf("PASS: %d !block size is misaligned\n", source);
+ printk("PASS: %d !block size is misaligned\n", source);
error = 1;
}
@@ -160,19 +165,19 @@ boolean _Heap_Walk(
}
if (the_block != end) {
- printf("PASS: %d !last block address isn't equal to 'final'\n", source);
+ printk("PASS: %d !last block address isn't equal to 'final'\n", source);
error = 1;
}
if (_Heap_Block_size(the_block) != the_heap->page_size) {
- printf("PASS: %d !last block's size isn't page_size\n", source);
+ printk("PASS: %d !last block's size isn't page_size\n", source);
error = 1;
}
if(do_dump && error)
- abort();
+ _Internal_error_Occurred( INTERNAL_ERROR_CORE, TRUE, 0xffff0000 );
- return error == 0;
+ return error;
}
#endif /* defined(RTEMS_HEAP_DEBUG) */