Mercurial > flash_v2
annotate packages/infra/current/src/fancy.cxx @ 210:d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
| author | jlarmour |
|---|---|
| date | Thu, 23 May 2002 22:59:51 +0000 |
| parents | e0c0827131d1 |
| children | b43ec5f18a97 |
| rev | line source |
|---|---|
| 0 | 1 //========================================================================== |
| 2 // | |
| 2 | 3 // fancy.cxx |
| 0 | 4 // |
| 5 // Fancy formatting trace and assert functions | |
| 6 // | |
| 7 //========================================================================== | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
8 //####ECOSGPLCOPYRIGHTBEGIN#### |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
9 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
10 // This file is part of eCos, the Embedded Configurable Operating System. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
12 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
13 // eCos is free software; you can redistribute it and/or modify it under |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
14 // the terms of the GNU General Public License as published by the Free |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
15 // Software Foundation; either version 2 or (at your option) any later version. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
16 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
20 // for more details. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
21 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
22 // You should have received a copy of the GNU General Public License along |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
23 // with eCos; if not, write to the Free Software Foundation, Inc., |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
25 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
26 // As a special exception, if other files instantiate templates or use macros |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
27 // or inline functions from this file, or you compile this file and link it |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
28 // with other works to produce a work based on this file, this file does not |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
29 // by itself cause the resulting work to be covered by the GNU General Public |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
30 // License. However the source code for this file must still be made available |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
31 // in accordance with section (3) of the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
32 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
33 // This exception does not invalidate any other reasons why a work based on |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
34 // this file might be covered by the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
35 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
37 // at http://sources.redhat.com/ecos/ecos-license/ |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
38 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
39 //####ECOSGPLCOPYRIGHTEND#### |
| 0 | 40 //========================================================================== |
| 41 //#####DESCRIPTIONBEGIN#### | |
| 42 // | |
| 2 | 43 // Author(s): nickg |
| 44 // Contributors: nickg | |
| 45 // Date: 1997-12-04 | |
| 46 // Purpose: Fancy Trace and assert functions | |
| 47 // Description: The functions in this file are fancy implementations of the | |
| 0 | 48 // standard trace and assert functions. These do printf |
| 49 // style formatting, printing the string and arguments. | |
| 50 // | |
| 51 //####DESCRIPTIONEND#### | |
| 52 // | |
| 53 //========================================================================== | |
| 54 | |
| 55 #include <pkgconf/system.h> | |
| 56 #include <pkgconf/infra.h> | |
| 57 | |
| 58 #ifdef CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY | |
| 59 | |
| 60 #include <cyg/infra/cyg_type.h> // base types | |
| 61 #include <cyg/infra/cyg_trac.h> // tracing macros | |
| 62 #include <cyg/infra/cyg_ass.h> // assertion macros | |
| 63 | |
| 64 #include <pkgconf/hal.h> // HAL configury | |
| 65 #include <cyg/infra/diag.h> // HAL polled output | |
| 66 #include <cyg/hal/hal_arch.h> // architectural stuff for... | |
| 67 #include <cyg/hal/hal_intr.h> // interrupt control | |
| 68 | |
| 69 #ifdef CYGPKG_KERNEL | |
| 70 #include <pkgconf/kernel.h> // kernel configury | |
| 71 #include <cyg/kernel/thread.hxx> // thread id to print | |
| 72 #include <cyg/kernel/sched.hxx> // ancillaries for above | |
| 73 #include <cyg/kernel/thread.inl> // ancillaries for above | |
| 74 #endif | |
| 75 | |
| 76 // ------------------------------------------------------------------------- | |
| 77 // Local Configuration: hack me! | |
| 78 | |
| 79 // these are generally: | |
| 2 | 80 // if 0, feature is disabled |
| 81 // if 1, feature is enabled, printing is default width | |
| 82 // if >1, field is padded up to that width if necessary | |
| 83 // (not truncated ever) | |
| 0 | 84 |
| 2 | 85 #define CYG_FILENAME 20 |
| 86 #define CYG_THREADID 0 // DO NOT SET IF NO KERNEL | |
| 87 #define CYG_LINENUM 4 | |
| 88 #define CYG_FUNCNAME 100 | |
| 0 | 89 #define CYG_DIAG_PRINTF 1 |
| 90 #define CYG_FUNC_INDENT 2 | |
| 91 | |
| 92 #ifndef CYGPKG_KERNEL | |
| 93 # undef CYG_THREADID | |
| 94 # define CYG_THREADID 0 | |
| 95 #endif | |
| 96 | |
| 97 #if CYG_FUNCNAME == 1 | |
| 98 #define CYG_FBUF_SIZE 100 | |
| 99 #else | |
| 100 #define CYG_FBUF_SIZE (CYG_FUNCNAME+20) | |
| 101 #endif | |
| 102 | |
| 103 // ------------------------------------------------------------------------- | |
| 104 // Functions to trim file names and function names down to printable lengths | |
| 105 // (these are shared between trace and assert functions) | |
| 106 | |
| 107 #ifdef CYGDBG_USE_TRACING | |
| 108 | |
| 109 #if 0 | |
| 110 static char * tracepremsgs[] = { | |
| 111 " INFO:", | |
| 112 "ENTER :", | |
| 113 "ARGS :", | |
| 114 "RETURN:", | |
| 115 "bad code" | |
| 116 }; | |
| 117 #endif | |
| 118 | |
| 119 static char * tracepremsgs[] = { | |
| 120 "'", | |
| 121 "{{", | |
| 122 "((", | |
| 123 "}}", | |
| 124 "bad code" | |
| 125 }; | |
| 126 | |
| 127 static char * tracepostmsgs[] = { | |
| 128 "'", | |
| 129 "", | |
| 130 "))", | |
| 131 "", | |
| 132 "bad code" | |
| 133 }; | |
| 134 | |
| 135 static void | |
| 136 write_whattrace( cyg_uint32 what ) | |
| 137 { | |
| 138 #if CYG_FUNC_INDENT | |
| 139 static cyg_uint32 cyg_indent = 0; | |
| 140 if ( 3 == what ) | |
| 141 cyg_indent -= CYG_FUNC_INDENT; | |
| 142 cyg_uint32 i = cyg_indent; | |
| 143 for ( ; i > 0; i-- ) | |
| 144 diag_write_string( " " ); | |
| 145 #endif // CYG_FUNC_INDENT | |
| 146 diag_write_string( tracepremsgs[ what > 4 ? 4 : what ] ); | |
| 147 #if CYG_FUNC_INDENT | |
| 148 if ( 1 == what ) | |
| 149 cyg_indent += CYG_FUNC_INDENT; | |
| 150 #endif // CYG_FUNC_INDENT | |
| 151 } | |
| 152 | |
| 153 static void | |
| 154 write_whattracepost( cyg_uint32 what ) | |
| 155 { | |
| 156 diag_write_string( tracepostmsgs[ what > 4 ? 4 : what ] ); | |
| 157 } | |
| 158 #endif // CYGDBG_USE_TRACING | |
| 159 | |
| 2 | 160 static const char *trim_file(const char *file) |
| 0 | 161 { |
| 162 #if CYG_FILENAME | |
| 163 if ( NULL == file ) | |
| 164 file = "<nofile>"; | |
| 165 | |
| 166 #if 1 == CYG_FILENAME | |
| 2 | 167 const char *f = file; |
| 0 | 168 while( *f ) f++; |
| 169 while( *f != '/' && f != file ) f--; | |
| 170 return f==file?f:(f+1); | |
| 171 #else | |
| 172 static char fbuf2[100]; | |
| 2 | 173 const char *f = file; |
| 174 char *g = fbuf2; | |
| 0 | 175 while( *f ) f++; |
| 176 while( *f != '/' && f != file ) f--; | |
| 177 if ( f > file ) f++; | |
| 178 while( *f ) *g++ = *f++; | |
| 179 while( CYG_FILENAME > (g - fbuf2) ) *g++ = ' '; | |
| 180 *g = 0; | |
| 181 return fbuf2; | |
| 182 #endif | |
| 183 #else | |
| 184 return ""; | |
| 185 #endif | |
| 186 } | |
| 187 | |
| 2 | 188 static const char *trim_func(const char *func) |
| 0 | 189 { |
| 190 #if CYG_FUNCNAME | |
| 191 static char fbuf[CYG_FBUF_SIZE]; | |
| 192 int i; | |
| 193 | |
| 194 if ( NULL == func ) | |
| 195 func = "<nofunc>"; | |
| 196 | |
| 197 for( i = 0; func[i] && func[i] != '(' && i < CYG_FBUF_SIZE-4 ; i++ ) | |
| 198 fbuf[i] = func[i]; | |
| 199 | |
| 200 fbuf[i++] = '('; | |
| 201 fbuf[i++] = ')'; | |
| 202 fbuf[i ] = 0; | |
| 2 | 203 i=0; |
| 0 | 204 #if 1 == CYG_FUNCNAME |
| 205 return &fbuf[i]; | |
| 206 #else | |
| 207 char *p = &fbuf[i]; | |
| 208 while ( *p ) p++; | |
| 209 while ( CYG_FUNCNAME > (p - (&fbuf[i])) ) *p++ = ' '; | |
| 210 *p = 0; | |
| 211 return &fbuf[i]; | |
| 212 #endif | |
| 213 #else | |
| 214 return ""; | |
| 215 #endif | |
| 216 } | |
| 217 | |
| 218 void write_lnum( cyg_uint32 lnum) | |
| 219 { | |
| 220 #if CYG_LINENUM | |
| 221 diag_write_char('['); | |
| 222 #if 1 < CYG_LINENUM | |
| 223 cyg_uint32 i, j; | |
| 224 for ( i = 2, j = 100; i < CYG_LINENUM ; i++, j *= 10 ) | |
| 225 if ( lnum < j ) | |
| 226 diag_write_char(' '); | |
| 227 #endif | |
| 228 diag_write_dec(lnum); | |
| 229 diag_write_char(']'); | |
| 230 diag_write_char(' '); | |
| 231 #endif | |
| 232 } | |
| 233 | |
| 234 void write_thread_id() | |
| 235 { | |
| 236 #if CYG_THREADID | |
| 237 Cyg_Thread *t = Cyg_Thread::self(); | |
| 238 cyg_uint16 tid = 0xFFFF; | |
| 239 | |
| 240 if( t != NULL ) tid = t->get_unique_id(); | |
| 241 | |
| 242 diag_write_char('<'); | |
| 243 diag_write_hex(tid); | |
| 244 diag_write_char('>'); | |
| 245 #endif | |
| 246 } | |
| 247 | |
| 248 // ------------------------------------------------------------------------- | |
| 249 // Trace functions: | |
| 250 | |
| 251 #ifdef CYGDBG_USE_TRACING | |
| 252 | |
| 253 externC void | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
74
diff
changeset
|
254 cyg_tracenomsg( const char *psz_func, const char *psz_file, cyg_uint32 linenum ) |
| 0 | 255 { |
| 256 cyg_uint32 old_ints; | |
| 257 | |
| 258 HAL_DISABLE_INTERRUPTS(old_ints); | |
| 259 DIAG_DEVICE_START_SYNC(); | |
| 260 | |
| 261 diag_write_string("TRACE: "); | |
| 262 write_thread_id(); | |
| 263 diag_write_string(trim_file(psz_file)); | |
| 264 write_lnum(linenum); | |
| 265 diag_write_string(trim_func(psz_func)); | |
| 266 diag_write_char('\n'); | |
| 267 | |
| 268 DIAG_DEVICE_END_SYNC(); | |
| 269 HAL_RESTORE_INTERRUPTS(old_ints); | |
| 270 | |
| 271 }; | |
| 272 | |
| 273 // provide every other one of these as a space/caller bloat compromise. | |
| 274 | |
| 275 externC void | |
| 276 cyg_tracemsg( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
74
diff
changeset
|
277 const char *psz_func, const char *psz_file, cyg_uint32 linenum, |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
278 const char *psz_msg ) |
| 0 | 279 { |
| 280 cyg_uint32 old_ints; | |
| 281 | |
| 282 HAL_DISABLE_INTERRUPTS(old_ints); | |
| 283 DIAG_DEVICE_START_SYNC(); | |
| 284 | |
| 285 if ( NULL == psz_msg ) | |
| 286 psz_msg = "<nomsg>"; | |
| 287 | |
| 288 diag_write_string( "TRACE: " ); | |
| 289 write_thread_id(); | |
| 290 diag_write_string(trim_file(psz_file)); | |
| 291 write_lnum(linenum); | |
| 292 diag_write_string(trim_func(psz_func)); | |
| 293 diag_write_char(' '); | |
| 294 write_whattrace( what ); | |
| 295 diag_write_string(psz_msg); | |
| 296 write_whattracepost( what ); | |
| 297 diag_write_char('\n'); | |
| 298 | |
| 299 DIAG_DEVICE_END_SYNC(); | |
| 300 HAL_RESTORE_INTERRUPTS(old_ints); | |
| 301 | |
| 302 }; | |
| 303 | |
| 304 externC void | |
| 305 cyg_tracemsg2( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
74
diff
changeset
|
306 const char *psz_func, const char *psz_file, cyg_uint32 linenum, |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
307 const char *psz_msg, |
| 0 | 308 CYG_ADDRWORD arg0, CYG_ADDRWORD arg1 ) |
| 309 { | |
| 310 cyg_uint32 old_ints; | |
| 311 | |
| 312 HAL_DISABLE_INTERRUPTS(old_ints); | |
| 313 DIAG_DEVICE_START_SYNC(); | |
| 314 | |
| 315 if ( NULL == psz_msg ) | |
| 316 psz_msg = "<nomsg>"; | |
| 317 | |
| 318 diag_write_string( "TRACE: " ); | |
| 319 write_thread_id(); | |
| 320 diag_write_string(trim_file(psz_file)); | |
| 321 write_lnum(linenum); | |
| 322 diag_write_string(trim_func(psz_func)); | |
| 323 diag_write_char(' '); | |
| 324 write_whattrace( what ); | |
| 325 #if CYG_DIAG_PRINTF | |
| 326 diag_printf( psz_msg, arg0, arg1 ); | |
| 327 #else | |
| 328 diag_write_string(psz_msg); | |
| 329 diag_write_char(' '); | |
| 330 diag_write_hex(arg0); | |
| 331 diag_write_char(' '); | |
| 332 diag_write_hex(arg1); | |
| 333 #endif | |
| 334 write_whattracepost( what ); | |
| 335 diag_write_char('\n'); | |
| 336 DIAG_DEVICE_END_SYNC(); | |
| 337 HAL_RESTORE_INTERRUPTS(old_ints); | |
| 338 }; | |
| 339 | |
| 340 externC void | |
| 341 cyg_tracemsg4( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
74
diff
changeset
|
342 const char *psz_func, const char *psz_file, cyg_uint32 linenum, |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
343 const char *psz_msg, |
| 0 | 344 CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, |
| 345 CYG_ADDRWORD arg2, CYG_ADDRWORD arg3 ) | |
| 346 { | |
| 347 cyg_uint32 old_ints; | |
| 348 | |
| 349 HAL_DISABLE_INTERRUPTS(old_ints); | |
| 350 DIAG_DEVICE_START_SYNC(); | |
| 351 | |
| 352 if ( NULL == psz_msg ) | |
| 353 psz_msg = "<nomsg>"; | |
| 354 | |
| 355 diag_write_string( "TRACE: " ); | |
| 356 write_thread_id(); | |
| 357 diag_write_string(trim_file(psz_file)); | |
| 358 write_lnum(linenum); | |
| 359 diag_write_string(trim_func(psz_func)); | |
| 360 diag_write_char(' '); | |
| 361 write_whattrace( what ); | |
| 362 #if CYG_DIAG_PRINTF | |
| 363 diag_printf( psz_msg, arg0, arg1, arg2, arg3 ); | |
| 364 #else | |
| 365 diag_write_string(psz_msg); | |
| 366 diag_write_char(' '); | |
| 367 diag_write_hex(arg0); | |
| 368 diag_write_char(' '); | |
| 369 diag_write_hex(arg1); | |
| 370 diag_write_char(' '); | |
| 371 diag_write_hex(arg2); | |
| 372 diag_write_char(' '); | |
| 373 diag_write_hex(arg3); | |
| 374 #endif | |
| 375 write_whattracepost( what ); | |
| 376 diag_write_char('\n'); | |
| 377 | |
| 378 DIAG_DEVICE_END_SYNC(); | |
| 379 HAL_RESTORE_INTERRUPTS(old_ints); | |
| 380 }; | |
| 381 | |
| 382 externC void | |
| 383 cyg_tracemsg6( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
74
diff
changeset
|
384 const char *psz_func, const char *psz_file, cyg_uint32 linenum, |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
385 const char *psz_msg, |
| 0 | 386 CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, |
| 387 CYG_ADDRWORD arg2, CYG_ADDRWORD arg3, | |
| 388 CYG_ADDRWORD arg4, CYG_ADDRWORD arg5 ) | |
| 389 { | |
| 390 cyg_uint32 old_ints; | |
| 391 | |
| 392 HAL_DISABLE_INTERRUPTS(old_ints); | |
| 393 DIAG_DEVICE_START_SYNC(); | |
| 394 | |
| 395 if ( NULL == psz_msg ) | |
| 396 psz_msg = "<nomsg>"; | |
| 397 | |
| 398 diag_write_string( "TRACE: " ); | |
| 399 write_thread_id(); | |
| 400 diag_write_string(trim_file(psz_file)); | |
| 401 write_lnum(linenum); | |
| 402 diag_write_string(trim_func(psz_func)); | |
| 403 diag_write_char(' '); | |
| 404 write_whattrace( what ); | |
| 405 #if CYG_DIAG_PRINTF | |
| 406 diag_printf( psz_msg, arg0, arg1, arg2, arg3, arg4, arg5 ); | |
| 407 #else | |
| 408 diag_write_string(psz_msg); | |
| 409 diag_write_char(' '); | |
| 410 diag_write_hex(arg0); | |
| 411 diag_write_char(' '); | |
| 412 diag_write_hex(arg1); | |
| 413 diag_write_char(' '); | |
| 414 diag_write_hex(arg2); | |
| 415 diag_write_char(' '); | |
| 416 diag_write_hex(arg3); | |
| 417 diag_write_char(' '); | |
| 418 diag_write_hex(arg4); | |
| 419 diag_write_char(' '); | |
| 420 diag_write_hex(arg5); | |
| 421 #endif | |
| 422 write_whattracepost( what ); | |
| 423 diag_write_char('\n'); | |
| 424 | |
| 425 DIAG_DEVICE_END_SYNC(); | |
| 426 HAL_RESTORE_INTERRUPTS(old_ints); | |
| 427 }; | |
| 428 | |
| 429 externC void | |
| 430 cyg_tracemsg8( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
74
diff
changeset
|
431 const char *psz_func, const char *psz_file, cyg_uint32 linenum, |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
182
diff
changeset
|
432 const char *psz_msg, |
| 0 | 433 CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, |
| 434 CYG_ADDRWORD arg2, CYG_ADDRWORD arg3, | |
| 435 CYG_ADDRWORD arg4, CYG_ADDRWORD arg5, | |
| 436 CYG_ADDRWORD arg6, CYG_ADDRWORD arg7 ) | |
| 437 { | |
| 438 cyg_uint32 old_ints; | |
| 439 | |
| 440 HAL_DISABLE_INTERRUPTS(old_ints); | |
| 441 DIAG_DEVICE_START_SYNC(); | |
| 442 | |
| 443 if ( NULL == psz_msg ) | |
| 444 psz_msg = "<nomsg>"; | |
| 445 | |
| 446 diag_write_string( "TRACE: " ); | |
| 447 write_thread_id(); | |
| 448 diag_write_string(trim_file(psz_file)); | |
| 449 write_lnum(linenum); | |
| 450 diag_write_string(trim_func(psz_func)); | |
| 451 diag_write_char(' '); | |
| 452 write_whattrace( what ); | |
| 453 #if CYG_DIAG_PRINTF | |
| 454 diag_printf( psz_msg, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 ); | |
| 455 #else | |
| 456 diag_write_string(psz_msg); | |
| 457 diag_write_char(' '); | |
| 458 diag_write_hex(arg0); | |
| 459 diag_write_char(' '); | |
| 460 diag_write_hex(arg1); | |
| 461 diag_write_char(' '); | |
| 462 diag_write_hex(arg2); | |
| 463 diag_write_char(' '); | |
| 464 diag_write_hex(arg3); | |
| 465 diag_write_char(' '); | |
| 466 diag_write_hex(arg4); | |
| 467 diag_write_char(' '); | |
| 468 diag_write_hex(arg5); | |
| 469 diag_write_char(' '); | |
| 470 diag_write_hex(arg6); | |
| 471 diag_write_char(' '); | |
| 472 diag_write_hex(arg7); | |
| 473 #endif | |
| 474 write_whattracepost( what ); | |
| 475 diag_write_char('\n'); | |
| 476 | |
| 477 DIAG_DEVICE_END_SYNC(); | |
| 478 HAL_RESTORE_INTERRUPTS(old_ints); | |
| 479 }; | |
| 480 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
481 // ------------------------------------------------------------------------- |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
482 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
483 externC void |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
484 cyg_trace_dump(void) |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
485 { |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
486 #if defined(CYGPKG_KERNEL) && defined(CYG_DIAG_PRINTF) |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
487 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
488 { |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
489 diag_printf("\nScheduler:\n\n"); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
490 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
491 Cyg_Scheduler *sched = &Cyg_Scheduler::scheduler; |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
492 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
493 diag_printf("Lock: %d\n",sched->get_sched_lock() ); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
494 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
495 # ifdef CYGVAR_KERNEL_THREADS_NAME |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
496 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
497 diag_printf("Current Thread: %s\n",sched->get_current_thread()->get_name()); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
498 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
499 # else |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
500 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
501 diag_printf("Current Thread: %d\n",sched->get_current_thread()->get_unique_id()); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
502 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
503 # endif |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
504 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
505 } |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
506 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
507 # ifdef CYGVAR_KERNEL_THREADS_LIST |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
508 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
509 { |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
510 Cyg_Thread *t = Cyg_Thread::get_list_head(); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
511 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
512 diag_printf("\nThreads:\n\n"); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
513 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
514 while( NULL != t ) |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
515 { |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
516 cyg_uint32 state = t->get_state(); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
517 char tstate[7]; |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
518 char *tstate1 = "SCUKX"; |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
519 static char *(reasons[8]) = |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
520 { |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
521 "NONE", // No recorded reason |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
522 "WAIT", // Wait with no timeout |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
523 "DELAY", // Simple time delay |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
524 "TIMEOUT", // Wait with timeout/timeout expired |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
525 "BREAK", // forced break out of sleep |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
526 "DESTRUCT", // wait object destroyed[note] |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
527 "EXIT", // forced termination |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
528 "DONE" // Wait/delay complete |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
529 }; |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
530 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
531 if( 0 != state ) |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
532 { |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
533 // Knock out chars that do not correspond to set bits. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
534 for( int i = 0; i < 6 ; i++ ) |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
535 if( 0 == (state & (1<<i)) ) |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
536 tstate[i] = ' '; |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
537 else tstate[i] = tstate1[i]; |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
538 tstate[6] = 0; |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
539 } |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
540 else tstate[0] = 'R', tstate[1] = 0; |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
541 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
542 # ifdef CYGVAR_KERNEL_THREADS_NAME |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
543 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
544 diag_printf( "%20s pri = %3d state = %6s id = %3d\n", |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
545 t->get_name(), |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
546 t->get_priority(), |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
547 tstate, |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
548 t->get_unique_id() |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
549 ); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
550 # else |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
551 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
552 diag_printf( "Thread %3d pri = %3d state = %6s\n", |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
553 t->get_unique_id(), |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
554 t->get_priority(), |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
555 tstate |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
556 ); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
557 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
558 # endif |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
559 diag_printf( "%20s stack base = %08x ptr = %08x size = %08x\n", |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
560 "", |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
561 t->get_stack_base(), |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
562 #ifdef CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
563 t->get_saved_context(), |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
564 #else |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
565 0, |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
566 #endif |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
567 t->get_stack_size() |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
568 ); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
569 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
570 diag_printf( "%20s sleep reason %8s wake reason %8s\n", |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
571 "", |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
572 reasons[t->get_sleep_reason()], |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
573 reasons[t->get_wake_reason()] |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
574 ); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
575 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
576 diag_printf( "%20s queue = %08x wait info = %08x\n", |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
577 "", |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
578 t->get_current_queue(), |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
579 t->get_wait_info() |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
580 ); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
581 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
582 diag_printf("\n"); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
583 t = t->get_list_next(); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
584 } |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
585 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
586 } |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
587 # endif // CYGVAR_KERNEL_THREADS_LIST |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
588 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
589 #endif // CYG_DIAG_PRINTF |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
590 } |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
591 |
| 0 | 592 #endif // CYGDBG_USE_TRACING |
| 593 | |
| 594 // ------------------------------------------------------------------------- | |
| 595 // Assert functions: | |
| 596 | |
| 597 #ifdef CYGDBG_USE_ASSERTS | |
| 598 | |
| 599 externC void | |
| 2 | 600 cyg_assert_fail( const char *psz_func, const char *psz_file, |
|
182
f62680ef1804
Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents:
115
diff
changeset
|
601 cyg_uint32 linenum, const char *psz_msg ) __THROW |
| 0 | 602 { |
| 603 cyg_uint32 old_ints; | |
| 604 | |
| 605 HAL_DISABLE_INTERRUPTS(old_ints); | |
| 606 DIAG_DEVICE_START_SYNC(); | |
| 607 | |
| 608 diag_write_string("ASSERT FAIL: "); | |
| 609 write_thread_id(); | |
| 610 diag_write_string(trim_file(psz_file)); | |
| 611 write_lnum(linenum); | |
| 612 diag_write_string(trim_func(psz_func)); | |
| 613 diag_write_char(' '); | |
| 614 diag_write_string(psz_msg); | |
| 615 diag_write_char('\n'); | |
| 616 | |
|
74
9c122302a886
Merge from eCos master repository on 2000-02-18-15:21:53-GMT
jlarmour
parents:
70
diff
changeset
|
617 #ifdef CYGHWR_TEST_PROGRAM_EXIT |
|
9c122302a886
Merge from eCos master repository on 2000-02-18-15:21:53-GMT
jlarmour
parents:
70
diff
changeset
|
618 CYGHWR_TEST_PROGRAM_EXIT(); |
|
9c122302a886
Merge from eCos master repository on 2000-02-18-15:21:53-GMT
jlarmour
parents:
70
diff
changeset
|
619 #endif |
| 0 | 620 for(;;); |
| 621 | |
| 622 // DIAG_DEVICE_END_SYNC(); | |
| 623 // HAL_RESTORE_INTERRUPTS(old_ints); | |
| 624 }; | |
| 625 | |
| 626 extern "C" | |
| 627 { | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
78
diff
changeset
|
628 extern unsigned long _stext; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
78
diff
changeset
|
629 extern unsigned long _etext; |
| 0 | 630 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
78
diff
changeset
|
631 unsigned long stext_addr = (unsigned long)&_stext; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
78
diff
changeset
|
632 unsigned long etext_addr = (unsigned long)&_etext; |
| 0 | 633 }; |
| 634 | |
| 635 externC cyg_bool cyg_check_data_ptr(void *ptr) | |
| 636 { | |
| 637 unsigned long p = (unsigned long)ptr; | |
| 638 | |
| 639 if( p == 0 ) return false; | |
| 640 | |
| 641 if( p > stext_addr && p < etext_addr ) return false; | |
| 642 | |
| 643 return true; | |
| 644 } | |
| 645 | |
| 646 externC cyg_bool cyg_check_func_ptr(void (*ptr)(void)) | |
| 647 { | |
| 648 unsigned long p = (unsigned long)ptr; | |
| 649 | |
| 650 if( p == 0 ) return false; | |
| 651 | |
| 652 if( p < stext_addr && p > etext_addr ) return false; | |
| 653 | |
| 654 return true; | |
| 655 } | |
| 656 | |
| 657 #endif // CYGDBG_USE_ASSERTS | |
| 658 | |
| 659 #endif // CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY | |
| 660 | |
| 661 // ------------------------------------------------------------------------- | |
| 662 // EOF fancy.cxx |
