diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2007-07-11 20:56:10 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2007-07-11 20:56:10 +0000 |
commit | 55d7626db75b1b5323aa5ba16b3cbc0a985462fe (patch) | |
tree | c4268b9ad2466b12170205743fd97d425da18e8a /cpukit/score/src/heapwalk.c | |
parent | 2007-07-11 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-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.c | 53 |
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) */ |