Mercurial > ecos
comparison packages/kernel/current/include/test/stackmon.h @ 1094:68e9fbe50ee5
Correct stack usage detection for stack checking configurations.
| author | bartv |
|---|---|
| date | Sun, 06 Jul 2003 14:35:36 +0000 |
| parents | c030434df232 |
| children | 74dbf4c3f2e1 |
comparison
equal
deleted
inserted
replaced
| 1093:c04ca65eec48 | 1094:68e9fbe50ee5 |
|---|---|
| 82 // Utility function for actually counting a stack | 82 // Utility function for actually counting a stack |
| 83 | 83 |
| 84 inline void cyg_test_size_a_stack( char *comment, char *format, | 84 inline void cyg_test_size_a_stack( char *comment, char *format, |
| 85 char *base, char *top ) | 85 char *base, char *top ) |
| 86 { | 86 { |
| 87 #ifdef CYGFUN_KERNEL_THREADS_STACK_CHECKING | |
| 88 cyg_uint32* cur32 = (cyg_uint32*) ((((CYG_ADDRWORD)&(base[CYGNUM_KERNEL_THREADS_STACK_CHECK_DATA_SIZE])) + 3) & ~3); | |
| 89 cyg_uint32* top32 = (cyg_uint32*) ((((CYG_ADDRWORD)top) + 3) & ~3); | |
| 90 for ( ; cur32 < top32; cur32++) { | |
| 91 if (*cur32 != 0xDEADBEEF) { | |
| 92 break; | |
| 93 } | |
| 94 } | |
| 95 STACKMON_PRINTF( format, comment, (CYG_ADDRWORD)top32 - (CYG_ADDRWORD)cur32, top - base ); | |
| 96 #else | |
| 87 register char *p; | 97 register char *p; |
| 88 for ( p = base; p < top; p++ ) | 98 for ( p = base; p < top; p++ ) |
| 89 if ( *p ) | 99 if ( *p ) |
| 90 break; | 100 break; |
| 91 STACKMON_PRINTF( format, comment, top - p, top - base ); | 101 STACKMON_PRINTF( format, comment, top - p, top - base ); |
| 102 #endif | |
| 92 } | 103 } |
| 93 | 104 |
| 94 // ------------------------------------------------------------------------ | 105 // ------------------------------------------------------------------------ |
| 95 | 106 |
| 96 inline void cyg_test_dump_stack_stats( char *comment, | 107 inline void cyg_test_dump_stack_stats( char *comment, |
| 198 inline void cyg_test_clear_interrupt_stack( void ) | 209 inline void cyg_test_clear_interrupt_stack( void ) |
| 199 { | 210 { |
| 200 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK | 211 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
| 201 #if defined(HAL_INTERRUPT_STACK_BASE) && defined(HAL_INTERRUPT_STACK_TOP) | 212 #if defined(HAL_INTERRUPT_STACK_BASE) && defined(HAL_INTERRUPT_STACK_TOP) |
| 202 cyg_uint32 old_intr; | 213 cyg_uint32 old_intr; |
| 203 register char *p; | |
| 204 HAL_DISABLE_INTERRUPTS(old_intr); | 214 HAL_DISABLE_INTERRUPTS(old_intr); |
| 205 for ( p = HAL_INTERRUPT_STACK_BASE; p < HAL_INTERRUPT_STACK_TOP; p++ ) | 215 # ifdef CYGFUN_KERNEL_THREADS_STACK_CHECKING |
| 206 *p = 0; // zero it for checking later | 216 { |
| 217 cyg_uint32* cur32 = (cyg_uint32*) ((((CYG_ADDRWORD)HAL_INTERRUPT_STACK_BASE) + 3) & ~3); | |
| 218 cyg_uint32* top32 = (cyg_uint32*) ((((CYG_ADDRWORD)HAL_INTERRUPT_STACK_TOP) + 3) & ~3); | |
| 219 for ( ; cur32 < top32; cur32++) { | |
| 220 *cur32 = 0xDEADBEEF; | |
| 221 } | |
| 222 } | |
| 223 # else | |
| 224 { | |
| 225 register char *p; | |
| 226 for ( p = HAL_INTERRUPT_STACK_BASE; p < HAL_INTERRUPT_STACK_TOP; p++ ) | |
| 227 *p = 0; // zero it for checking later | |
| 228 } | |
| 229 # endif | |
| 207 HAL_RESTORE_INTERRUPTS(old_intr); | 230 HAL_RESTORE_INTERRUPTS(old_intr); |
| 208 #endif | 231 #endif |
| 209 #endif | 232 #endif |
| 210 } | 233 } |
| 211 | 234 |
