Mercurial > nand-ecoscentric
diff 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 |
line wrap: on
line diff
--- a/packages/kernel/current/include/test/stackmon.h +++ b/packages/kernel/current/include/test/stackmon.h @@ -84,11 +84,22 @@ inline void cyg_test_size_a_stack( char *comment, char *format, char *base, char *top ) { +#ifdef CYGFUN_KERNEL_THREADS_STACK_CHECKING + cyg_uint32* cur32 = (cyg_uint32*) ((((CYG_ADDRWORD)&(base[CYGNUM_KERNEL_THREADS_STACK_CHECK_DATA_SIZE])) + 3) & ~3); + cyg_uint32* top32 = (cyg_uint32*) ((((CYG_ADDRWORD)top) + 3) & ~3); + for ( ; cur32 < top32; cur32++) { + if (*cur32 != 0xDEADBEEF) { + break; + } + } + STACKMON_PRINTF( format, comment, (CYG_ADDRWORD)top32 - (CYG_ADDRWORD)cur32, top - base ); +#else register char *p; for ( p = base; p < top; p++ ) if ( *p ) break; STACKMON_PRINTF( format, comment, top - p, top - base ); +#endif } // ------------------------------------------------------------------------ @@ -200,10 +211,22 @@ inline void cyg_test_clear_interrupt_sta #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK #if defined(HAL_INTERRUPT_STACK_BASE) && defined(HAL_INTERRUPT_STACK_TOP) cyg_uint32 old_intr; - register char *p; HAL_DISABLE_INTERRUPTS(old_intr); - for ( p = HAL_INTERRUPT_STACK_BASE; p < HAL_INTERRUPT_STACK_TOP; p++ ) - *p = 0; // zero it for checking later +# ifdef CYGFUN_KERNEL_THREADS_STACK_CHECKING + { + cyg_uint32* cur32 = (cyg_uint32*) ((((CYG_ADDRWORD)HAL_INTERRUPT_STACK_BASE) + 3) & ~3); + cyg_uint32* top32 = (cyg_uint32*) ((((CYG_ADDRWORD)HAL_INTERRUPT_STACK_TOP) + 3) & ~3); + for ( ; cur32 < top32; cur32++) { + *cur32 = 0xDEADBEEF; + } + } +# else + { + register char *p; + for ( p = HAL_INTERRUPT_STACK_BASE; p < HAL_INTERRUPT_STACK_TOP; p++ ) + *p = 0; // zero it for checking later + } +# endif HAL_RESTORE_INTERRUPTS(old_intr); #endif #endif
