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
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