Mercurial > flash_v2
annotate packages/infra/current/include/cyg_trac.h @ 1777:c16341b1bac6 default tip
* Added execute permissions to files missed in conversion from CVS
| author | alexs |
|---|---|
| date | Mon, 12 Oct 2009 02:26:09 +0100 |
| parents | d2c90368aeef |
| children |
| rev | line source |
|---|---|
| 0 | 1 #ifndef CYGONCE_INFRA_CYG_TRAC_H |
| 2 #define CYGONCE_INFRA_CYG_TRAC_H | |
| 3 | |
| 4 //========================================================================== | |
| 5 // | |
| 2 | 6 // cyg_trac.h |
| 0 | 7 // |
| 2 | 8 // Macros and prototypes for the tracing system |
| 0 | 9 // |
| 10 //========================================================================== | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
11 //####ECOSGPLCOPYRIGHTBEGIN#### |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
12 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
13 // 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:
78
diff
changeset
|
14 // 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:
78
diff
changeset
|
15 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
16 // 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:
78
diff
changeset
|
17 // 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:
78
diff
changeset
|
18 // 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:
78
diff
changeset
|
19 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
20 // 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:
78
diff
changeset
|
21 // 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:
78
diff
changeset
|
22 // 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:
78
diff
changeset
|
23 // for more details. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
24 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
25 // 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:
78
diff
changeset
|
26 // 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:
78
diff
changeset
|
27 // 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:
78
diff
changeset
|
28 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
29 // 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:
78
diff
changeset
|
30 // 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:
78
diff
changeset
|
31 // 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:
78
diff
changeset
|
32 // 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:
78
diff
changeset
|
33 // 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:
78
diff
changeset
|
34 // 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:
78
diff
changeset
|
35 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
36 // 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:
78
diff
changeset
|
37 // 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:
78
diff
changeset
|
38 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
39 // 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
|
40 // 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:
78
diff
changeset
|
41 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
42 //####ECOSGPLCOPYRIGHTEND#### |
| 0 | 43 //========================================================================== |
| 44 //#####DESCRIPTIONBEGIN#### | |
| 45 // | |
| 2 | 46 // Author(s): nickg from an original by hmt |
| 47 // Contributors: nickg | |
| 48 // Date: 1998-04-23 | |
| 49 // Purpose: Use traces to log procedure entry, and "print" stuff | |
| 50 // Description: Runtime logging messages that compile to nothing in | |
| 0 | 51 // release versions of the code, to allow |
| 52 // as-you-go tracing of alternate builds. | |
| 2 | 53 // Usage: #include <cyg/infra/cyg_trac.h> |
| 54 // ... | |
| 55 // CYG_TRACE2( PIPE_TRACE, "pipe %x, data %d", ppipe, oword ); | |
| 0 | 56 // |
| 57 // which can result, for example, in a message of the form: | |
| 58 // "TRACE: pipemgr.cxx:1340, write_pipe(): pipe 0x8004c, data 17" | |
| 59 // | |
| 60 //####DESCRIPTIONEND#### | |
| 61 // | |
| 62 | |
| 63 /**************************************************************************** | |
| 64 | |
| 65 Explicit tracing | |
| 66 ================ | |
| 67 | |
| 68 CYG_TRACE0( bool, msg ); | |
| 69 CYG_TRACE1( bool, msg, arg1 ); | |
| 70 CYG_TRACE2( bool, msg, arg1, arg2 ); | |
| 71 .... | |
| 72 CYG_TRACE8( bool, msg, .... [with 8 args] ); | |
| 73 | |
| 74 In general, the bool controls whether or not the tracing occurs for a | |
| 75 particular invocation of the macro. The msg is a printf-style string, | |
| 76 though exactly which formats are supported depends on the underlying | |
| 77 implementation. Typically, at least %d, %x, %08x, %c and %s will be | |
| 78 supported. Of course a most compact implementation might print | |
| 79 | |
| 80 TRACE:z1dbuff.c[92]get_nextdata(): data pointer %x offset %d: 42BD8 1C | |
| 81 | |
| 82 or some such, leaving you to work it out for yourself. | |
| 83 | |
| 84 It is expected that the boolean would rarely actually be a complex | |
| 85 expression; it is more likely that it would either be "1", tracing being | |
| 86 controlled for the whole compilation unit or subsystem by means of the | |
| 87 CYGDBG_USE_TRACING symbol, or a local symbol for tracing over the whole | |
| 88 file, defined to 0 or to 1. For runtime control of tracing in a debugging | |
| 89 session, it is typical to use symbols defined to expressions such as: | |
| 90 | |
| 91 static int xxx_trace = 0; | |
| 92 #define TL1 (0 < xxx_trace) | |
| 93 #define TL2 (1 < xxx_trace) | |
| 94 | |
| 95 so you set xxx_trace to 1 to enable those messages conditioned by TL1 | |
| 96 (trace level 1) and so on. | |
| 97 | |
| 98 CYG_TRACE1( TL1, "Major argument is %d", zz ); | |
| 99 CYG_TRACE4( TL2, "...minor details %d %d %d %d", m1, m2, m3 ,m4 ); | |
| 100 | |
| 101 To assist with the case where the same symbol or expression is used | |
| 102 throughout a compilation unit, the programmer can define the symbol | |
| 103 CYG_TRACE_USER_BOOL as they choose and then use convenience macros with the | |
| 104 suffix 'B' in the obvious manner: | |
| 105 | |
| 106 #define CYG_TRACE_USER_BOOL (xxx_trace > 0) | |
| 107 CYG_TRACE2B( "Counters are %d, %d", countlo, counthi ); | |
| 108 | |
| 109 For the case where you just want to print a load of numbers in hex, or | |
| 110 decimal, convenience suffices X, D and Y are provided. X uses %08x, D %d | |
| 111 and Y an unadorned %x for each argument. | |
| 112 | |
| 113 CYG_TRACE3D( TL2, m1, m2, d ); | |
| 114 | |
| 115 If you want to do something similar but with a little more comment, the | |
| 116 names (strictly spellings) of the variables you are printing can be used by | |
| 117 appending a V to the X, D or Y. | |
| 118 | |
| 119 CYG_TRACE3DV( TL2, m1, m2, d ); | |
| 120 | |
| 121 might output: | |
| 122 | |
| 123 TRACE:z1dbuff.c[92]get_nextdata(): m1=23 m2=-4 d=55 | |
| 124 | |
| 125 These conveniences can be combined, and they apply equally to tracing with | |
| 126 up to 8 variables; the B for Bool goes last: | |
| 127 | |
| 128 CYG_TRACE4DVB( i, i*i, i*i*i, i*i*i*i ); | |
| 129 | |
| 130 might output: | |
| 131 | |
| 132 TRACE:table.c[12]main(): i=3 i*i=9 i*i*i=27 i*i*i*i=81 | |
| 133 | |
| 134 | |
| 135 Function Tracing | |
| 136 ================ | |
| 137 | |
| 138 There are also facities for easily reporting function entry and exit, | |
| 139 printing the function arguments, and detecting returns without logging (or | |
| 140 without a value!). | |
| 141 | |
| 142 The basic facility is | |
| 143 | |
| 2 | 144 CYG_REPORT_FUNCTION(); |
| 0 | 145 |
| 146 In C, place this between the local variable declarations and the first | |
| 147 statement or errors will ensue. C++ is more flexible; place the macro as | |
| 148 the first line of all functions you wish to trace. The following | |
| 149 variations are also provided: | |
| 150 | |
| 151 CYG_REPORT_FUNCTYPE( exitmsg ) provide a printf string for the type | |
| 2 | 152 of the returned value |
| 0 | 153 CYG_REPORT_FUNCNAME( name ) supply a function name explicitly, for |
| 154 if __FUNCTION__ is not supported | |
| 155 CYG_REPORT_FUNCNAMETYPE( name, exitmsg ) both of the above extensions | |
| 156 | |
| 157 These are unconditional; the assumption is that if function reporting is | |
| 158 used at all it will be used for all functions within a compilation unit. | |
| 159 However, it is useful to be able to control function reporting at finer | |
| 160 grain without editing the source files concerned, at compile time or at | |
| 161 runtime. To support this, conditioned versions (with suffix 'C') are | |
| 162 provided for the above four macros, which only procduce trace output if the | |
| 163 macro CYG_REPORT_USER_BOOL evaluates true. | |
| 164 | |
| 165 CYG_REPORT_FUNCTIONC() | |
| 166 CYG_REPORT_FUNCNAMEC( name ) | |
| 167 CYG_REPORT_FUNCTYPEC( exitmsg ) | |
| 168 CYG_REPORT_FUNCNAMETYPEC( name, exitmsg ) | |
| 169 | |
| 170 You can define CYG_REPORT_USER_BOOL to anything you like before invoking | |
| 171 these macros; using a simple -DCYG_REPORT_USER_BOOL=0 or ...=1 on the | |
| 172 compiler command line would do the trick, but there is more flexibility to | |
| 173 be gained by something like: | |
| 174 | |
| 175 #define CYG_REPORT_USER_BOOL (reporting_bool_FOO) | |
| 176 #ifdef TRACE_FOO | |
| 177 int reporting_bool_FOO = 1; | |
| 178 #else | |
| 179 int reporting_bool_FOO = 0; | |
| 180 #endif | |
| 181 | |
| 182 where FOO relates to the module name. Thus an external symbol sets the | |
| 183 default, but it can be overridden in a debugging session by setting the | |
| 184 variable reporting_bool_FOO. | |
| 185 | |
| 186 Note that the condition applied to the initial CYG_REPORT_FUNC...() macro | |
| 187 controls all function-related reporting (not tracing) from that function; | |
| 188 the underlying mechanisms still operate even if no output is created. Thus | |
| 189 no conditioned variants of CYG_REPORT_FUNCARG[s] nor of CYG_REPORT_RETURN | |
| 190 are needed. | |
| 191 | |
| 192 Examples: | |
| 193 int myfunction() | |
| 194 { | |
| 2 | 195 CYG_REPORT_FUNCTYPE( "recode is %d" ); |
| 0 | 196 |
| 197 A function return is traced using | |
| 198 | |
| 2 | 199 CYG_REPORT_RETURN() a void return |
| 200 CYG_REPORT_RETVAL( value ) returning a value | |
| 0 | 201 |
| 202 With the CYG_REPORT_FUNCTYPE example, the latter might produce a message | |
| 203 like: | |
| 204 | |
| 205 TRACE:myprog.c[40]fact(): enter | |
| 206 TRACE:myprog.c[53]fact(): retcode is 24 | |
| 207 | |
| 208 It is also useful to trace the values of the arguments to a function: | |
| 2 | 209 CYG_REPORT_FUNCARGVOID confirms that the function is void |
| 210 CYG_REPORT_FUNCARG1( format, arg ) printf-style | |
| 211 to | |
| 212 CYG_REPORT_FUNCARG8( format, arg1...arg8 ) printf-style | |
| 0 | 213 |
| 214 The CYG_REPORT_FUNCARG[1-8] macros are also offered with the convenience | |
| 215 extensions: D, X, or Y, and V like the explicit tracing macros. For | |
| 216 example: | |
| 217 | |
| 218 int fact( int number ) | |
| 219 { | |
| 2 | 220 CYG_REPORT_FUNCTYPE( "recode is %d" ); |
| 221 CYG_REPORT_FUNCARG1DV( number ); | |
| 222 int result = number; | |
| 223 while ( --number > 1 ) result *= number | |
| 224 CYG_REPORT_RETVAL( result ); | |
| 0 | 225 return result; |
| 226 } | |
| 227 | |
| 228 might produce: | |
| 229 | |
| 230 TRACE:myprog.c[40]fact(): enter | |
| 231 TRACE:myprog.c[40]fact(): number=4 | |
| 232 TRACE:myprog.c[53]fact(): retcode is 24 | |
| 233 | |
| 234 If no exit message is provided, a default of %08x is used. | |
| 235 | |
| 236 | |
| 237 General Configury | |
| 238 ================= | |
| 239 | |
| 240 If CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO is *not* defined, it is assumed | |
| 241 that __PRETTY_FUNCTION__ or equivalents do not exist, so no function name | |
| 242 tracing is possible; only file and line number. | |
| 243 | |
| 244 If CYGDBG_INFRA_DEBUG_TRACE_MESSAGE is *not* defined, the message and | |
| 245 arguments to all tracing macros are not used; only "execution was here" | |
| 246 type information, by file, function and line number, is available. This | |
| 247 can greatly reduce the size of an image with tracing disabled, which may be | |
| 248 crucial in debugging on actual shipped hardware with limited memory. | |
| 249 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
250 If configured for buffered tracing then CYG_TRACE_PRINT() can be used to |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
251 output the contents of the trace buffer on demand. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
252 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
253 CYG_TRACE_DUMP() outputs a form of "core dump" containing info on the |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
254 scheduler and threads at the time. This information will be invalid if |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
255 the kernel is not running. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
256 |
| 0 | 257 C/C++: in C++ the function reporting is implemented using a class object |
| 258 with a destructor; this allows reporting of a return which has not been | |
| 259 explicitly reported, and detection of accidental multiple return reports. | |
| 260 This helps you write the function reporting correctly. In C it is not | |
| 261 possible to be so sophisticated, so the implementation is not so helpful in | |
| 262 detecting errors in the use of the tracing system. | |
| 263 | |
| 264 Note that for all of the above variations, the internal API to the | |
| 265 functions which are called in consequence of tracing remains the same, so | |
| 266 these variations can be mixed in the same executable, by configuring the | |
| 267 tracing macros differently in different compilation units or subsystems. | |
| 268 | |
| 269 | |
| 270 Summary | |
| 271 ======= | |
| 272 | |
| 273 Explicit tracing | |
| 274 ---------------- | |
| 275 | |
| 276 CYG_TRACE0( bool, msg ) if bool, print msg | |
| 277 CYG_TRACE1( bool, msg, arg ) if bool, printf-style | |
| 2 | 278 to |
| 0 | 279 CYG_TRACE8( bool, msg, arg1...arg8 ) if bool, printf-style |
| 280 | |
| 281 CYG_TRACE0B( msg, args... ) to CYG_TRACE8B() use CYG_TRACE_USER_BOOL | |
| 282 | |
| 2 | 283 CYG_TRACE1X( bool, args... ) to CYG_TRACE8X() print args using %08x |
| 284 CYG_TRACE1Y( bool, args... ) to CYG_TRACE8Y() print args using %x | |
| 285 CYG_TRACE1D( bool, args... ) to CYG_TRACE8D() print args using %d | |
| 0 | 286 |
| 287 CYG_TRACE1XV( bool, args... ) to CYG_TRACE8XV() print args using "arg=%08x" | |
| 288 CYG_TRACE1YV( bool, args... ) to CYG_TRACE8YV() print args using "arg=%x" | |
| 289 CYG_TRACE1DV( bool, args... ) to CYG_TRACE8DV() print args using "arg=%d" | |
| 290 | |
| 2 | 291 CYG_TRACE1XB( args... ) to CYG_TRACE8XB() print using %08x, no bool |
| 292 CYG_TRACE1YB( args... ) to CYG_TRACE8YB() print using %x, no bool | |
| 293 CYG_TRACE1DB( args... ) to CYG_TRACE8DB() print using %d, no bool | |
| 0 | 294 |
| 2 | 295 CYG_TRACE1XVB( args... ) to CYG_TRACE8XVB() use "arg=%08x", no bool |
| 296 CYG_TRACE1YVB( args... ) to CYG_TRACE8YVB() use "arg=%x", no bool | |
| 297 CYG_TRACE1DVB( args... ) to CYG_TRACE8DVB() use "arg=%d", no bool | |
| 0 | 298 |
| 299 Function tracing | |
| 300 ---------------- | |
| 301 | |
| 2 | 302 CYG_REPORT_FUNCTION() default function entry |
| 303 CYG_REPORT_FUNCNAME( name ) name the function | |
| 304 CYG_REPORT_FUNCTYPE( exitmsg ) printf for retval | |
| 305 CYG_REPORT_FUNCNAMETYPE( name, exitmsg ) both | |
| 0 | 306 |
| 2 | 307 CYG_REPORT_FUNCTIONC() as above, but conditional |
| 308 CYG_REPORT_FUNCNAMEC( name ) on CYG_REPORT_USER_BOOL | |
| 309 CYG_REPORT_FUNCTYPEC( exitmsg ) however it is defined | |
| 310 CYG_REPORT_FUNCNAMETYPEC( name, exitmsg ) ... | |
| 0 | 311 |
| 2 | 312 CYG_REPORT_RETURN() void function exit |
| 313 CYG_REPORT_RETVAL( value ) returning value | |
| 0 | 314 |
| 2 | 315 CYG_REPORT_FUNCARGVOID() void function entry |
| 316 CYG_REPORT_FUNCARG1( format, arg ) printf-style | |
| 317 to | |
| 318 CYG_REPORT_FUNCARG8( format, arg1...arg8 ) printf-style | |
| 0 | 319 |
| 320 CYG_REPORT_FUNCARG1X( arg ) | |
| 2 | 321 to |
| 322 CYG_REPORT_FUNCARG8X( arg1...arg8 ) use %08x | |
| 323 CYG_REPORT_FUNCARG1Y... use %x | |
| 324 CYG_REPORT_FUNCARG1D... use %d | |
| 0 | 325 |
| 2 | 326 CYG_REPORT_FUNCARG1XV... use "arg=%08x" |
| 327 CYG_REPORT_FUNCARG1YV... use "arg=%x" | |
| 328 CYG_REPORT_FUNCARG1DV... use "arg=%d" | |
| 0 | 329 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
330 Other |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
331 ----- |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
332 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
333 CYG_TRACE_DUMP() dumps kernel state |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
334 CYG_TRACE_PRINT() prints buffered tracing |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
335 |
| 0 | 336 |
| 337 --------------------------------------------------------------------------- | |
| 338 | |
| 339 Internal Documentation | |
| 340 ====================== | |
| 341 | |
| 342 The required functions which are used by the tracing macros are | |
| 343 | |
| 344 externC void | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
345 cyg_tracenomsg( const char *psz_func, const char *psz_file, |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
346 cyg_uint32 linenum ); |
| 0 | 347 |
| 348 externC void | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
349 cyg_tracemsg( cyg_uint32 what, const char *psz_func, const char *psz_file, |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
350 cyg_uint32 linenum, const char *psz_msg ); |
| 0 | 351 |
| 352 externC void | |
| 353 cyg_tracemsg2( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
354 const char *psz_func, const char *psz_file, |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
78
diff
changeset
|
355 cyg_uint32 linenum, const char *psz_msg, |
| 2 | 356 CYG_ADDRWORD arg0, CYG_ADDRWORD arg1 ); |
| 0 | 357 // extended in the obvious way for 4,6,8 arguments |
| 358 | |
| 359 These functions should expect psz_func and psz_file to possibly be NULL in | |
| 360 case those facilities are not available in the compilation environment, and | |
| 361 do something safe in such cases. A NULL message should really be dealt | |
| 362 with safely also, just logging "execution here" info like cyg_tracenomsg(). | |
| 363 | |
| 364 Discussion of possible underlying implementations | |
| 365 ------------------------------------------------- | |
| 366 | |
| 367 It is intended that the functions that get called can simply print the info | |
| 368 they are given in as fancy a format as you like, or they could do the | |
| 369 printf-type formatting and log the resulting text in a buffer. They get | |
| 370 told the type of event (function-entry, function-arguments, function-exit | |
| 371 or plain tracing info) and so can perform fancy indenting, for example, to | |
| 372 make call stack inspection more obvious to humans. It is also intended | |
| 373 that a more compact logging arrangement be possible, for example one which | |
| 374 records, in 32-bit words (CYG_ADDRWORDs), the addresses of the file, | |
| 375 function and msg strings, the line number and the arguments. This has the | |
| 376 implication that the msg string should not be constructed dynamically but | |
| 377 be static ie. a plain quoted C string. The number of arguments also must | |
| 378 be recorded, and if it is chosen to save string arguments in the buffer | |
| 379 rather than just their addresses (which could be invalid by the time the | |
| 380 logged information is processed) some flagging of which arguments are | |
| 381 strings must be provided. The system could also be extended to deal with | |
| 382 floats of whichever size fir in a CYG_ADDRWORD; these would probably | |
| 383 require special treatment also. With these considerations in mind, the | |
| 384 maximum number of parameters in a single trace message has been set to 8, | |
| 385 so that a byte bitset could be used to indicate which arguments are | |
| 386 strings, another for those which are floats, and the count of arguments | |
| 387 also fits in a byte as number or a bitset. | |
| 388 | |
| 389 | |
| 390 ****************************************************************************/ | |
| 391 | |
| 392 #include <pkgconf/infra.h> | |
| 393 | |
| 394 #include <cyg/infra/cyg_ass.h> | |
| 395 | |
| 396 // ------------------------------------------------------------------------- | |
| 397 // CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO is dealt with in cyg_ass.h. | |
| 398 // ------------------------------------------------------------------------- | |
| 399 | |
| 400 #ifdef CYGDBG_USE_TRACING | |
| 401 | |
| 402 // ------------------------------------------------------------------------- | |
| 403 // We define macros and appropriate prototypes for the trace/fail | |
| 404 // system. These are: | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
405 // CYG_TRACE0..8 - trace if boolean |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
406 // CYG_TRACEPROC - default no comment proc entry |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
407 // CYG_TRACEPROCOUT - default no comment proc exit |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
408 // CYG_TRACE_DUMP - outputs a form of "core dump", including the state |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
409 // of the kernel scheduler, threads, etc. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
410 // CYG_TRACE_PRINT - Forces manual output of any trace info that has |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
411 // been buffered up. |
| 0 | 412 |
| 413 // these are executed to deal with tracing - breakpoint? | |
| 414 | |
| 415 externC void | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
416 cyg_tracenomsg( const char *psz_func, const char *psz_file, cyg_uint32 linenum ); |
| 0 | 417 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
418 externC void |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
419 cyg_trace_dump(void); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
420 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
421 #define CYG_TRACE_DUMP() cyg_trace_dump() |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
422 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
423 #ifdef CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
424 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
425 externC void |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
426 cyg_trace_print(void); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
427 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
428 #define CYG_TRACE_PRINT() cyg_trace_print() |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
429 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
430 #else |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
431 #define CYG_TRACE_PRINT() CYG_EMPTY_STATEMENT |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
432 #endif |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
433 |
| 0 | 434 // provide every other one of these as a space/caller bloat compromise. |
| 435 | |
| 436 # ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 437 | |
| 438 enum cyg_trace_what{ | |
| 439 cyg_trace_trace = 0, | |
| 440 cyg_trace_enter, | |
| 441 cyg_trace_args, | |
| 442 cyg_trace_return, | |
| 443 // cyg_trace_, | |
| 444 // cyg_trace_, | |
| 445 }; | |
| 446 | |
| 447 externC void | |
| 448 cyg_tracemsg( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
449 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:
78
diff
changeset
|
450 const char *psz_msg ); |
| 0 | 451 |
| 452 externC void | |
| 453 cyg_tracemsg2( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
454 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:
78
diff
changeset
|
455 const char *psz_msg, |
| 0 | 456 CYG_ADDRWORD arg0, CYG_ADDRWORD arg1 ); |
| 457 externC void | |
| 458 cyg_tracemsg4( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
459 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:
78
diff
changeset
|
460 const char *psz_msg, |
| 0 | 461 CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, |
| 462 CYG_ADDRWORD arg2, CYG_ADDRWORD arg3 ); | |
| 463 externC void | |
| 464 cyg_tracemsg6( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
465 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:
78
diff
changeset
|
466 const char *psz_msg, |
| 0 | 467 CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, |
| 468 CYG_ADDRWORD arg2, CYG_ADDRWORD arg3, | |
| 469 CYG_ADDRWORD arg4, CYG_ADDRWORD arg5 ); | |
| 470 externC void | |
| 471 cyg_tracemsg8( cyg_uint32 what, | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
472 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:
78
diff
changeset
|
473 const char *psz_msg, |
| 0 | 474 CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, |
| 475 CYG_ADDRWORD arg2, CYG_ADDRWORD arg3, | |
| 476 CYG_ADDRWORD arg4, CYG_ADDRWORD arg5, | |
| 477 CYG_ADDRWORD arg6, CYG_ADDRWORD arg7 ); | |
| 478 | |
| 479 #endif // CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 480 | |
| 481 // ------------------------------------------------------------------------- | |
| 482 | |
| 483 # ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 484 | |
| 485 # define CYG_TRACE_docall0( _msg_ ) \ | |
| 2 | 486 cyg_tracemsg( cyg_trace_trace, \ |
| 0 | 487 __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_ ); |
| 488 | |
| 489 # define CYG_TRACE_docall2( _msg_, _arg0_, _arg1_ ) \ | |
| 2 | 490 cyg_tracemsg2( cyg_trace_trace, \ |
| 0 | 491 __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_, \ |
| 2 | 492 (CYG_ADDRWORD)_arg0_, (CYG_ADDRWORD)_arg1_ ); |
| 0 | 493 |
| 494 # define CYG_TRACE_docall4( _msg_, _arg0_, _arg1_ , _arg2_, _arg3_ ) \ | |
| 2 | 495 cyg_tracemsg4( cyg_trace_trace, \ |
| 0 | 496 __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_, \ |
| 497 (CYG_ADDRWORD)_arg0_, (CYG_ADDRWORD)_arg1_, \ | |
| 498 (CYG_ADDRWORD)_arg2_, (CYG_ADDRWORD)_arg3_ ); | |
| 499 | |
| 500 # define CYG_TRACE_docall6( _msg_, _arg0_, _arg1_ , _arg2_, _arg3_, \ | |
| 2 | 501 _arg4_, _arg5_ ) \ |
| 502 cyg_tracemsg6( cyg_trace_trace, \ | |
| 0 | 503 __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_, \ |
| 504 (CYG_ADDRWORD)_arg0_, (CYG_ADDRWORD)_arg1_, \ | |
| 2 | 505 (CYG_ADDRWORD)_arg2_, (CYG_ADDRWORD)_arg3_, \ |
| 0 | 506 (CYG_ADDRWORD)_arg4_, (CYG_ADDRWORD)_arg5_ ); |
| 507 | |
| 2 | 508 # define CYG_TRACE_docall8( _msg_, _arg0_, _arg1_ , _arg2_, _arg3_, \ |
| 509 _arg4_, _arg5_, _arg6_, _arg7_ ) \ | |
| 510 cyg_tracemsg8( cyg_trace_trace, \ | |
| 0 | 511 __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_, \ |
| 512 (CYG_ADDRWORD)_arg0_, (CYG_ADDRWORD)_arg1_, \ | |
| 2 | 513 (CYG_ADDRWORD)_arg2_, (CYG_ADDRWORD)_arg3_, \ |
| 514 (CYG_ADDRWORD)_arg4_, (CYG_ADDRWORD)_arg5_, \ | |
| 0 | 515 (CYG_ADDRWORD)_arg6_, (CYG_ADDRWORD)_arg7_ ); |
| 516 | |
| 517 # else // do not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 518 | |
| 519 # define CYG_TRACE_docall0( _msg_ ) \ | |
| 520 cyg_tracenomsg( __PRETTY_FUNCTION__, __FILE__, __LINE__ ); | |
| 521 | |
| 522 # define CYG_TRACE_docall2( _msg_, _arg0_, _arg1_ ) \ | |
| 523 cyg_tracenomsg( __PRETTY_FUNCTION__, __FILE__, __LINE__ ); | |
| 524 | |
| 525 # define CYG_TRACE_docall4( _msg_, _arg0_, _arg1_ , _arg2_, _arg3_ ) \ | |
| 526 cyg_tracenomsg( __PRETTY_FUNCTION__, __FILE__, __LINE__ ); | |
| 527 | |
| 528 # define CYG_TRACE_docall6( _msg_, _arg0_, _arg1_ , _arg2_, _arg3_, \ | |
| 2 | 529 _arg4_, _arg5_ ) \ |
| 0 | 530 cyg_tracenomsg( __PRETTY_FUNCTION__, __FILE__, __LINE__ ); |
| 531 | |
| 2 | 532 # define CYG_TRACE_docall8( _msg_, _arg0_, _arg1_, _arg2_, _arg3_, \ |
| 533 _arg4_, _arg5_, _arg6_, _arg7_ ) \ | |
| 0 | 534 cyg_tracenomsg( __PRETTY_FUNCTION__, __FILE__, __LINE__ ); |
| 535 | |
| 536 #endif | |
| 537 | |
| 538 // ------------------------------------------------------------------------- | |
| 539 // Conditioned trace; if the condition is false, fail. | |
| 540 | |
| 2 | 541 #define CYG_TRACE0( _bool_, _msg_ ) \ |
| 542 CYG_MACRO_START \ | |
| 543 if ( ( _bool_ ) ) \ | |
| 544 CYG_TRACE_docall0( _msg_ ); \ | |
| 0 | 545 CYG_MACRO_END |
| 546 | |
| 2 | 547 #define CYG_TRACE1( _bool_, _msg_, a ) \ |
| 548 CYG_MACRO_START \ | |
| 549 if ( ( _bool_ ) ) \ | |
| 550 CYG_TRACE_docall2( _msg_, a, 0 ); \ | |
| 0 | 551 CYG_MACRO_END |
| 552 | |
| 2 | 553 #define CYG_TRACE2( _bool_, _msg_, a, b ) \ |
| 554 CYG_MACRO_START \ | |
| 555 if ( ( _bool_ ) ) \ | |
| 556 CYG_TRACE_docall2( _msg_, a, b ); \ | |
| 0 | 557 CYG_MACRO_END |
| 558 | |
| 2 | 559 #define CYG_TRACE3( _bool_, _msg_, a, b, c ) \ |
| 560 CYG_MACRO_START \ | |
| 561 if ( ( _bool_ ) ) \ | |
| 562 CYG_TRACE_docall4( _msg_, a, b, c, 0 ); \ | |
| 0 | 563 CYG_MACRO_END |
| 564 | |
| 2 | 565 #define CYG_TRACE4( _bool_, _msg_, a, b, c, d ) \ |
| 566 CYG_MACRO_START \ | |
| 567 if ( ( _bool_ ) ) \ | |
| 568 CYG_TRACE_docall4( _msg_, a, b, c, d ); \ | |
| 0 | 569 CYG_MACRO_END |
| 570 | |
| 2 | 571 #define CYG_TRACE5( _bool_, _msg_, a, b, c, d, e ) \ |
| 572 CYG_MACRO_START \ | |
| 573 if ( ( _bool_ ) ) \ | |
| 574 CYG_TRACE_docall6( _msg_, a, b, c, d, e, 0 ); \ | |
| 0 | 575 CYG_MACRO_END |
| 576 | |
| 2 | 577 #define CYG_TRACE6( _bool_, _msg_, a, b, c, d, e, f ) \ |
| 578 CYG_MACRO_START \ | |
| 579 if ( ( _bool_ ) ) \ | |
| 580 CYG_TRACE_docall6( _msg_, a, b, c, d, e, f ); \ | |
| 0 | 581 CYG_MACRO_END |
| 582 | |
| 2 | 583 #define CYG_TRACE7( _bool_, _msg_, a, b, c, d, e, f, g ) \ |
| 584 CYG_MACRO_START \ | |
| 585 if ( ( _bool_ ) ) \ | |
| 586 CYG_TRACE_docall8( _msg_, a, b, c, d, e, f, g, 0 ); \ | |
| 0 | 587 CYG_MACRO_END |
| 588 | |
| 2 | 589 #define CYG_TRACE8( _bool_, _msg_, a, b, c, d, e, f, g, h ) \ |
| 590 CYG_MACRO_START \ | |
| 591 if ( ( _bool_ ) ) \ | |
| 592 CYG_TRACE_docall8( _msg_, a, b, c, d, e, f, g, h ); \ | |
| 0 | 593 CYG_MACRO_END |
| 594 | |
| 595 // ------------------------------------------------------------------------- | |
| 596 // Report function entry and exit. | |
| 597 // In C++ the macro CYG_REPORT_FUNCTION should appear as the first line of | |
| 598 // any function. It will generate a message whenever the function is entered | |
| 599 // and when it is exited. | |
| 600 // In C the macro should appear as the first statement after any local variable | |
| 601 // definitions. No exit message will be generated unless CYG_REPORT_RETURN is | |
| 602 // placed just before each return. | |
| 603 // Where a piece of code is to be compiled with both C and C++, the above | |
| 604 // rules for C should be followed. | |
| 605 | |
| 606 #ifdef CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS | |
| 607 | |
| 608 #ifdef __cplusplus | |
| 609 | |
| 610 class Cyg_TraceFunction_Report_ | |
| 611 { | |
| 612 public: | |
| 613 int cond; | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
614 const char *func; |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
615 const char *file; |
| 0 | 616 cyg_uint32 lnum; |
| 617 #ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 618 char *exitmsg; | |
| 619 CYG_ADDRWORD exitvalue; | |
| 620 enum { UNSET = 0, SET, VOID } exitset; | |
| 621 #endif | |
| 622 | |
| 623 Cyg_TraceFunction_Report_( | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
624 int condition, const char *psz_func, const char *psz_file, |
| 0 | 625 cyg_uint32 linenum) |
| 626 { | |
| 627 cond = condition; | |
| 628 func = psz_func; | |
| 629 file = psz_file; | |
| 630 lnum = linenum; | |
| 631 | |
| 632 #ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 633 exitmsg = NULL; | |
| 634 exitset = UNSET; | |
| 635 if ( cond ) | |
| 636 cyg_tracemsg( cyg_trace_enter, func, file, lnum, "enter"); | |
| 637 #else | |
| 638 if ( cond ) | |
| 639 cyg_tracenomsg( func, file, lnum ); | |
| 640 #endif | |
| 641 }; | |
| 642 | |
| 643 Cyg_TraceFunction_Report_( | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
70
diff
changeset
|
644 int condition, const char *psz_func, const char *psz_file, |
| 0 | 645 cyg_uint32 linenum, char *psz_exitmsg ) |
| 646 { | |
| 647 cond = condition; | |
| 648 func = psz_func; | |
| 649 file = psz_file; | |
| 650 lnum = linenum; | |
| 651 #ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 652 exitmsg = psz_exitmsg; | |
| 653 exitset = UNSET; | |
| 654 if ( cond ) | |
| 655 cyg_tracemsg( cyg_trace_enter, func, file, lnum, "enter"); | |
| 656 #else | |
| 657 CYG_UNUSED_PARAM( char *, psz_exitmsg ); | |
| 658 if ( cond ) | |
| 659 cyg_tracenomsg( func, file, lnum ); | |
| 660 #endif | |
| 661 }; | |
| 662 | |
| 663 inline void set_exitvoid( cyg_uint32 linenum ) | |
| 664 { | |
| 665 lnum = linenum; | |
| 666 #ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 667 CYG_ASSERT( NULL == exitmsg, "exitvoid used in typed function" ); | |
| 668 CYG_ASSERT( UNSET == exitset, "exitvoid used when arg already set" ); | |
| 669 exitset = VOID; | |
| 670 #endif | |
| 671 } | |
| 672 | |
| 673 inline void set_exitvalue( cyg_uint32 linenum, CYG_ADDRWORD retcode ) | |
| 674 { | |
| 675 lnum = linenum; | |
| 676 #ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 677 CYG_ASSERT( UNSET == exitset, "exitvalue used when arg already set" ); | |
| 678 exitvalue = retcode; | |
| 679 exitset = SET; | |
| 680 #else | |
| 681 CYG_UNUSED_PARAM( CYG_ADDRWORD, retcode ); | |
| 682 #endif | |
| 683 } | |
| 684 | |
| 685 ~Cyg_TraceFunction_Report_() | |
| 686 { | |
| 687 if ( cond ) { | |
| 688 #ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 689 if ( VOID == exitset ) | |
| 690 cyg_tracemsg( cyg_trace_return, func, file, lnum, | |
| 691 "return void"); | |
| 692 else if ( UNSET == exitset ) | |
| 693 cyg_tracemsg( cyg_trace_return, func, file, lnum, | |
| 694 "RETURNING UNSET!"); | |
| 695 else if ( NULL == exitmsg ) | |
| 696 cyg_tracemsg2( cyg_trace_return, func, file, lnum, | |
| 697 "return %08x", exitvalue, 0 ); | |
| 698 else | |
| 699 cyg_tracemsg2( cyg_trace_return, func, file, lnum, | |
| 700 exitmsg, exitvalue, 0 ); | |
| 701 #else | |
| 702 cyg_tracenomsg( func, file, lnum ); | |
| 703 #endif | |
| 704 } | |
| 705 } | |
| 706 }; | |
| 707 | |
| 708 // These have no CYG_MACRO_START,END around because it is required | |
| 709 // that the scope of the object be the whole function body. Get it? | |
| 710 | |
| 711 // These are the unconditional versions: | |
| 2 | 712 #define CYG_REPORT_FUNCTION() \ |
| 713 Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ | |
| 714 1, __PRETTY_FUNCTION__, \ | |
| 0 | 715 __FILE__, __LINE__ ) |
| 716 | |
| 2 | 717 #define CYG_REPORT_FUNCTYPE( _exitmsg_ ) \ |
| 718 Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ | |
| 719 1, __PRETTY_FUNCTION__, \ | |
| 0 | 720 __FILE__, __LINE__, _exitmsg_ ) |
| 721 | |
| 2 | 722 #define CYG_REPORT_FUNCNAME( _name_ ) \ |
| 723 Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ | |
| 724 1, _name_, \ | |
| 0 | 725 __FILE__, __LINE__ ) |
| 726 | |
| 2 | 727 #define CYG_REPORT_FUNCNAMETYPE( _name_, _exitmsg_ ) \ |
| 728 Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ | |
| 729 1, _name_, \ | |
| 0 | 730 __FILE__, __LINE__, _exitmsg_ ) |
| 731 | |
| 732 // These are conditioned on macro CYG_REPORT_USER_BOOL | |
| 733 // (which you better have defined) | |
| 2 | 734 #define CYG_REPORT_FUNCTIONC() \ |
| 735 Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ | |
| 736 CYG_REPORT_USER_BOOL, __PRETTY_FUNCTION__, \ | |
| 0 | 737 __FILE__, __LINE__ ) |
| 738 | |
| 2 | 739 #define CYG_REPORT_FUNCTYPEC( _exitmsg_ ) \ |
| 740 Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ | |
| 741 CYG_REPORT_USER_BOOL, __PRETTY_FUNCTION__, \ | |
| 0 | 742 __FILE__, __LINE__, _exitmsg_ ) |
| 743 | |
| 2 | 744 #define CYG_REPORT_FUNCNAMEC( _name_ ) \ |
| 745 Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ | |
| 746 CYG_REPORT_USER_BOOL, _name_, \ | |
| 0 | 747 __FILE__, __LINE__ ) |
| 748 | |
| 2 | 749 #define CYG_REPORT_FUNCNAMETYPEC( _name_, _exitmsg_ ) \ |
| 750 Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ | |
| 751 CYG_REPORT_USER_BOOL, _name_, \ | |
| 0 | 752 __FILE__, __LINE__, _exitmsg_ ) |
| 753 | |
| 754 | |
| 2 | 755 #define CYG_REPORT_RETURN() CYG_MACRO_START \ |
| 756 cyg_tracefunction_report_.set_exitvoid( __LINE__ ); \ | |
| 0 | 757 CYG_MACRO_END |
| 758 | |
| 2 | 759 #define CYG_REPORT_RETVAL( _value_) CYG_MACRO_START \ |
| 760 cyg_tracefunction_report_.set_exitvalue( \ | |
| 761 __LINE__, (CYG_ADDRWORD)(_value_) ); \ | |
| 0 | 762 CYG_MACRO_END |
| 763 | |
| 764 | |
| 765 #else // not __cplusplus | |
| 766 | |
| 767 | |
| 768 struct Cyg_TraceFunction_Report_ | |
| 769 { | |
| 770 int cond; | |
| 771 char *func; | |
| 772 char *file; /* not strictly needed in plain 'C' */ | |
| 773 cyg_uint32 lnum; /* nor this */ | |
| 774 #ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 775 char *exitmsg; | |
| 776 CYG_ADDRWORD exitvalue; | |
| 777 int exitset; | |
| 778 #endif | |
| 779 | |
| 780 }; | |
| 781 | |
| 782 #ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 783 | |
| 2 | 784 #define CYG_REPORT_FUNCTION_ENTER_INTERNAL() CYG_MACRO_START \ |
| 785 if ( cyg_tracefunction_report_.cond ) \ | |
| 786 cyg_tracemsg( cyg_trace_enter, \ | |
| 787 cyg_tracefunction_report_.func, \ | |
| 788 cyg_tracefunction_report_.file, \ | |
| 789 cyg_tracefunction_report_.lnum, \ | |
| 790 "enter" ); \ | |
| 0 | 791 CYG_MACRO_END |
| 792 | |
| 793 #define CYG_REPORT_FUNCTION_CONSTRUCT( _c_, _fn_,_fl_,_l_,_xm_,_xv_,_xs_ ) \ | |
| 2 | 794 { _c_, _fn_, _fl_, _l_, _xm_, _xv_, _xs_ } |
| 0 | 795 |
| 796 #else // do not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 797 | |
| 2 | 798 #define CYG_REPORT_FUNCTION_ENTER_INTERNAL() CYG_MACRO_START \ |
| 799 if ( cyg_tracefunction_report_.cond ) \ | |
| 800 cyg_tracenomsg( cyg_tracefunction_report_.func, \ | |
| 801 cyg_tracefunction_report_.file, \ | |
| 802 cyg_tracefunction_report_.lnum ); \ | |
| 0 | 803 CYG_MACRO_END |
| 804 | |
| 805 #define CYG_REPORT_FUNCTION_CONSTRUCT( _c_, _fn_,_fl_,_l_,_xm_,_xv_,_xs_ ) \ | |
| 2 | 806 { _c_, _fn_, _fl_, _l_ } |
| 0 | 807 |
| 808 #endif // not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 809 | |
| 810 // These have no CYG_MACRO_START,END around because it is required | |
| 811 // that the scope of the object be the whole function body. Get it? | |
| 812 | |
| 813 // These are the unconditional versions: | |
| 2 | 814 #define CYG_REPORT_FUNCTION() \ |
| 815 struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ | |
| 816 CYG_REPORT_FUNCTION_CONSTRUCT( \ | |
| 817 1, __PRETTY_FUNCTION__, __FILE__, __LINE__, NULL, 0, 0 ); \ | |
| 0 | 818 CYG_REPORT_FUNCTION_ENTER_INTERNAL() |
| 819 | |
| 2 | 820 #define CYG_REPORT_FUNCTYPE( _exitmsg_ ) \ |
| 821 struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ | |
| 822 CYG_REPORT_FUNCTION_CONSTRUCT( \ | |
| 823 1, __PRETTY_FUNCTION__, __FILE__, __LINE__, _exitmsg_, 0, 0 ); \ | |
| 0 | 824 CYG_REPORT_FUNCTION_ENTER_INTERNAL() |
| 825 | |
| 2 | 826 #define CYG_REPORT_FUNCNAME( _name_ ) \ |
| 827 struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ | |
| 828 CYG_REPORT_FUNCTION_CONSTRUCT( \ | |
| 829 1, _name_, __FILE__, __LINE__, NULL, 0, 0 ); \ | |
| 0 | 830 CYG_REPORT_FUNCTION_ENTER_INTERNAL() |
| 831 | |
| 2 | 832 #define CYG_REPORT_FUNCNAMETYPE( _name_, _exitmsg_ ) \ |
| 833 struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ | |
| 834 CYG_REPORT_FUNCTION_CONSTRUCT( \ | |
| 835 1, _name_, __FILE__, __LINE__, _exitmsg_, 0, 0 ); \ | |
| 0 | 836 CYG_REPORT_FUNCTION_ENTER_INTERNAL() |
| 837 | |
| 838 // These are conditioned on macro CYG_REPORT_USER_BOOL | |
| 839 // (which you better have defined) | |
| 2 | 840 #define CYG_REPORT_FUNCTIONC() \ |
| 841 struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ | |
| 842 CYG_REPORT_FUNCTION_CONSTRUCT( \ | |
| 843 CYG_REPORT_USER_BOOL, \ | |
| 844 __PRETTY_FUNCTION__, __FILE__, __LINE__, NULL, 0, 0 ); \ | |
| 0 | 845 CYG_REPORT_FUNCTION_ENTER_INTERNAL() |
| 846 | |
| 2 | 847 #define CYG_REPORT_FUNCTYPEC( _exitmsg_ ) \ |
| 848 struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ | |
| 849 CYG_REPORT_FUNCTION_CONSTRUCT( \ | |
| 850 CYG_REPORT_USER_BOOL, \ | |
| 851 __PRETTY_FUNCTION__, __FILE__, __LINE__, _exitmsg_, 0, 0 ); \ | |
| 0 | 852 CYG_REPORT_FUNCTION_ENTER_INTERNAL() |
| 853 | |
| 2 | 854 #define CYG_REPORT_FUNCNAMEC( _name_ ) \ |
| 855 struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ | |
| 856 CYG_REPORT_FUNCTION_CONSTRUCT( \ | |
| 857 CYG_REPORT_USER_BOOL, \ | |
| 858 _name_, __FILE__, __LINE__, NULL, 0, 0 ); \ | |
| 0 | 859 CYG_REPORT_FUNCTION_ENTER_INTERNAL() |
| 860 | |
| 2 | 861 #define CYG_REPORT_FUNCNAMETYPEC( _name_, _exitmsg_ ) \ |
| 862 struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ | |
| 863 CYG_REPORT_FUNCTION_CONSTRUCT( \ | |
| 864 CYG_REPORT_USER_BOOL, \ | |
| 865 _name_, __FILE__, __LINE__, _exitmsg_, 0, 0 ); \ | |
| 0 | 866 CYG_REPORT_FUNCTION_ENTER_INTERNAL() |
| 867 | |
| 868 #ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 869 | |
| 870 #define CYG_REPORT_RETURN() CYG_MACRO_START \ | |
| 2 | 871 CYG_ASSERT( NULL == cyg_tracefunction_report_.exitmsg, \ |
| 872 "exitvoid used in typed function" ); \ | |
| 873 CYG_ASSERT( 0 == cyg_tracefunction_report_.exitset, \ | |
| 874 "exitvoid used when arg already set" ); \ | |
| 875 cyg_tracefunction_report_.lnum = __LINE__; \ | |
| 876 cyg_tracefunction_report_.exitset = 2; \ | |
| 877 if ( cyg_tracefunction_report_.cond ) \ | |
| 878 cyg_tracemsg( cyg_trace_return, \ | |
| 879 cyg_tracefunction_report_.func, \ | |
| 880 cyg_tracefunction_report_.file, \ | |
| 881 cyg_tracefunction_report_.lnum, \ | |
| 882 "return void" ); \ | |
| 0 | 883 CYG_MACRO_END |
| 884 | |
| 885 #define CYG_REPORT_RETVAL( _value_ ) CYG_MACRO_START \ | |
| 2 | 886 CYG_ASSERT( 0 == cyg_tracefunction_report_.exitset, \ |
| 887 "exitvalue used when arg already set" ); \ | |
| 888 cyg_tracefunction_report_.lnum = __LINE__; \ | |
| 889 cyg_tracefunction_report_.exitvalue = (CYG_ADDRWORD)(_value_); \ | |
| 890 cyg_tracefunction_report_.exitset = 1; \ | |
| 891 if ( cyg_tracefunction_report_.cond ) \ | |
| 892 cyg_tracemsg2( cyg_trace_return, \ | |
| 893 cyg_tracefunction_report_.func, \ | |
| 894 cyg_tracefunction_report_.file, \ | |
| 895 cyg_tracefunction_report_.lnum, \ | |
| 896 cyg_tracefunction_report_.exitmsg ? \ | |
| 897 cyg_tracefunction_report_.exitmsg : \ | |
| 898 "return %08x", \ | |
| 899 cyg_tracefunction_report_.exitvalue, 0 ); \ | |
| 0 | 900 CYG_MACRO_END |
| 901 | |
| 902 #else // do not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 903 | |
| 904 #define CYG_REPORT_RETURN() CYG_MACRO_START \ | |
| 2 | 905 cyg_tracefunction_report_.lnum = __LINE__; \ |
| 906 if ( cyg_tracefunction_report_.cond ) \ | |
| 907 cyg_tracenomsg( cyg_tracefunction_report_.func, \ | |
| 908 cyg_tracefunction_report_.file, \ | |
| 909 cyg_tracefunction_report_.lnum ); \ | |
| 0 | 910 CYG_MACRO_END |
| 911 | |
| 912 #define CYG_REPORT_RETVAL( _value_ ) CYG_MACRO_START \ | |
| 2 | 913 CYG_REPORT_RETURN(); \ |
| 0 | 914 CYG_MACRO_END |
| 915 | |
| 916 #endif // not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 917 | |
| 918 #endif // not __cplusplus | |
| 919 | |
| 920 #ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 921 | |
| 2 | 922 #define CYG_REPORT_FUNCARGVOID() CYG_MACRO_START \ |
| 923 if ( cyg_tracefunction_report_.cond ) \ | |
| 924 cyg_tracemsg( cyg_trace_args, \ | |
| 925 cyg_tracefunction_report_.func, \ | |
| 926 cyg_tracefunction_report_.file, \ | |
| 927 cyg_tracefunction_report_.lnum, \ | |
| 928 "(void)" \ | |
| 929 ); \ | |
| 0 | 930 CYG_MACRO_END |
| 931 | |
| 2 | 932 #define CYG_REPORT_FUNCARG1( _format_, a ) CYG_MACRO_START \ |
| 933 if ( cyg_tracefunction_report_.cond ) \ | |
| 934 cyg_tracemsg2( cyg_trace_args, \ | |
| 935 cyg_tracefunction_report_.func, \ | |
| 936 cyg_tracefunction_report_.file, \ | |
| 937 cyg_tracefunction_report_.lnum, \ | |
| 938 (_format_), \ | |
| 939 (CYG_ADDRWORD)a , 0 \ | |
| 940 ); \ | |
| 0 | 941 CYG_MACRO_END |
| 942 | |
| 2 | 943 #define CYG_REPORT_FUNCARG2( _format_, a,b ) CYG_MACRO_START \ |
| 944 if ( cyg_tracefunction_report_.cond ) \ | |
| 945 cyg_tracemsg2( cyg_trace_args, \ | |
| 946 cyg_tracefunction_report_.func, \ | |
| 947 cyg_tracefunction_report_.file, \ | |
| 948 cyg_tracefunction_report_.lnum, \ | |
| 949 (_format_), \ | |
| 950 (CYG_ADDRWORD)a, (CYG_ADDRWORD)b \ | |
| 951 ); \ | |
| 0 | 952 CYG_MACRO_END |
| 953 | |
| 2 | 954 #define CYG_REPORT_FUNCARG3( _format_, a,b,c ) CYG_MACRO_START \ |
| 955 if ( cyg_tracefunction_report_.cond ) \ | |
| 956 cyg_tracemsg4( cyg_trace_args, \ | |
| 957 cyg_tracefunction_report_.func, \ | |
| 958 cyg_tracefunction_report_.file, \ | |
| 959 cyg_tracefunction_report_.lnum, \ | |
| 960 (_format_), \ | |
| 961 (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ | |
| 962 (CYG_ADDRWORD)c , 0 \ | |
| 963 ); \ | |
| 0 | 964 CYG_MACRO_END |
| 965 | |
| 2 | 966 #define CYG_REPORT_FUNCARG4( _format_, a,b,c,d ) CYG_MACRO_START \ |
| 967 if ( cyg_tracefunction_report_.cond ) \ | |
| 968 cyg_tracemsg4( cyg_trace_args, \ | |
| 969 cyg_tracefunction_report_.func, \ | |
| 970 cyg_tracefunction_report_.file, \ | |
| 971 cyg_tracefunction_report_.lnum, \ | |
| 972 (_format_), \ | |
| 973 (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ | |
| 974 (CYG_ADDRWORD)c, (CYG_ADDRWORD)d \ | |
| 975 ); \ | |
| 0 | 976 CYG_MACRO_END |
| 977 | |
| 2 | 978 #define CYG_REPORT_FUNCARG5( _format_, a,b,c,d,e ) CYG_MACRO_START \ |
| 979 if ( cyg_tracefunction_report_.cond ) \ | |
| 980 cyg_tracemsg6( cyg_trace_args, \ | |
| 981 cyg_tracefunction_report_.func, \ | |
| 982 cyg_tracefunction_report_.file, \ | |
| 983 cyg_tracefunction_report_.lnum, \ | |
| 984 (_format_), \ | |
| 985 (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ | |
| 986 (CYG_ADDRWORD)c, (CYG_ADDRWORD)d, \ | |
| 987 (CYG_ADDRWORD)e , 0 \ | |
| 988 ); \ | |
| 0 | 989 CYG_MACRO_END |
| 990 | |
| 2 | 991 #define CYG_REPORT_FUNCARG6( _format_, a,b,c,d,e,f ) CYG_MACRO_START \ |
| 992 if ( cyg_tracefunction_report_.cond ) \ | |
| 993 cyg_tracemsg6( cyg_trace_args, \ | |
| 994 cyg_tracefunction_report_.func, \ | |
| 995 cyg_tracefunction_report_.file, \ | |
| 996 cyg_tracefunction_report_.lnum, \ | |
| 997 (_format_), \ | |
| 998 (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ | |
| 999 (CYG_ADDRWORD)c, (CYG_ADDRWORD)d, \ | |
| 1000 (CYG_ADDRWORD)e, (CYG_ADDRWORD)f \ | |
| 1001 ); \ | |
| 0 | 1002 CYG_MACRO_END |
| 1003 | |
| 2 | 1004 #define CYG_REPORT_FUNCARG7( _format_, a,b,c,d,e,f,g ) CYG_MACRO_START \ |
| 1005 if ( cyg_tracefunction_report_.cond ) \ | |
| 1006 cyg_tracemsg8( cyg_trace_args, \ | |
| 1007 cyg_tracefunction_report_.func, \ | |
| 1008 cyg_tracefunction_report_.file, \ | |
| 1009 cyg_tracefunction_report_.lnum, \ | |
| 1010 (_format_), \ | |
| 1011 (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ | |
| 1012 (CYG_ADDRWORD)c, (CYG_ADDRWORD)d, \ | |
| 1013 (CYG_ADDRWORD)e, (CYG_ADDRWORD)f, \ | |
| 1014 (CYG_ADDRWORD)g , 0 \ | |
| 1015 ); \ | |
| 0 | 1016 CYG_MACRO_END |
| 1017 | |
| 1018 #define CYG_REPORT_FUNCARG8( _format_, a,b,c,d,e,f,g,h ) CYG_MACRO_START\ | |
| 2 | 1019 if ( cyg_tracefunction_report_.cond ) \ |
| 1020 cyg_tracemsg8( cyg_trace_args, \ | |
| 1021 cyg_tracefunction_report_.func, \ | |
| 1022 cyg_tracefunction_report_.file, \ | |
| 1023 cyg_tracefunction_report_.lnum, \ | |
| 1024 (_format_), \ | |
| 1025 (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ | |
| 1026 (CYG_ADDRWORD)c, (CYG_ADDRWORD)d, \ | |
| 1027 (CYG_ADDRWORD)e, (CYG_ADDRWORD)f, \ | |
| 1028 (CYG_ADDRWORD)g, (CYG_ADDRWORD)h \ | |
| 1029 ); \ | |
| 0 | 1030 CYG_MACRO_END |
| 1031 | |
| 1032 | |
| 1033 #else // do not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 1034 | |
| 1035 #define CYG_REPORT_FUNCARGVOID() CYG_EMPTY_STATEMENT | |
| 1036 #define CYG_REPORT_FUNCARG1( _format_, a ) CYG_EMPTY_STATEMENT | |
| 1037 #define CYG_REPORT_FUNCARG2( _format_, a,b ) CYG_EMPTY_STATEMENT | |
| 1038 #define CYG_REPORT_FUNCARG3( _format_, a,b,c ) CYG_EMPTY_STATEMENT | |
| 1039 #define CYG_REPORT_FUNCARG4( _format_, a,b,c,d ) CYG_EMPTY_STATEMENT | |
| 1040 #define CYG_REPORT_FUNCARG5( _format_, a,b,c,d,e ) CYG_EMPTY_STATEMENT | |
| 1041 #define CYG_REPORT_FUNCARG6( _format_, a,b,c,d,e,f ) CYG_EMPTY_STATEMENT | |
| 1042 #define CYG_REPORT_FUNCARG7( _format_, a,b,c,d,e,f,g ) CYG_EMPTY_STATEMENT | |
| 1043 #define CYG_REPORT_FUNCARG8( _format_, a,b,c,d,e,f,g,h ) CYG_EMPTY_STATEMENT | |
| 1044 | |
| 1045 #endif // not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE | |
| 1046 | |
| 1047 #else // no CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS | |
| 1048 | |
| 2 | 1049 #define CYG_REPORT_FUNCTION() CYG_EMPTY_STATEMENT |
| 1050 #define CYG_REPORT_FUNCTYPE( _exitmsg_ ) CYG_EMPTY_STATEMENT | |
| 1051 #define CYG_REPORT_FUNCNAME( _name_ ) CYG_EMPTY_STATEMENT | |
| 1052 #define CYG_REPORT_FUNCNAMETYPE( _name_, _exitmsg_ ) CYG_EMPTY_STATEMENT | |
| 0 | 1053 |
| 2 | 1054 #define CYG_REPORT_FUNCTIONC() CYG_EMPTY_STATEMENT |
| 1055 #define CYG_REPORT_FUNCTYPEC( _exitmsg_ ) CYG_EMPTY_STATEMENT | |
| 1056 #define CYG_REPORT_FUNCNAMEC( _name_ ) CYG_EMPTY_STATEMENT | |
| 1057 #define CYG_REPORT_FUNCNAMETYPEC( _name_, _exitmsg_ ) CYG_EMPTY_STATEMENT | |
| 0 | 1058 |
| 1059 #define CYG_REPORT_FUNCARGVOID() CYG_EMPTY_STATEMENT | |
| 1060 #define CYG_REPORT_FUNCARG1( _format_, a ) CYG_EMPTY_STATEMENT | |
| 1061 #define CYG_REPORT_FUNCARG2( _format_, a,b ) CYG_EMPTY_STATEMENT | |
| 1062 #define CYG_REPORT_FUNCARG3( _format_, a,b,c ) CYG_EMPTY_STATEMENT | |
| 1063 #define CYG_REPORT_FUNCARG4( _format_, a,b,c,d ) CYG_EMPTY_STATEMENT | |
| 1064 #define CYG_REPORT_FUNCARG5( _format_, a,b,c,d,e ) CYG_EMPTY_STATEMENT | |
| 1065 #define CYG_REPORT_FUNCARG6( _format_, a,b,c,d,e,f ) CYG_EMPTY_STATEMENT | |
| 1066 #define CYG_REPORT_FUNCARG7( _format_, a,b,c,d,e,f,g ) CYG_EMPTY_STATEMENT | |
| 1067 #define CYG_REPORT_FUNCARG8( _format_, a,b,c,d,e,f,g,h ) CYG_EMPTY_STATEMENT | |
| 1068 | |
| 2 | 1069 #define CYG_REPORT_RETURN() CYG_EMPTY_STATEMENT |
| 1070 #define CYG_REPORT_RETVAL( _value_ ) CYG_EMPTY_STATEMENT | |
| 0 | 1071 |
| 1072 #endif // CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS | |
| 1073 | |
| 1074 #else // ! CYGDBG_USE_TRACING | |
| 1075 | |
| 1076 // ------------------------------------------------------------------------- | |
| 1077 // No traces: we define empty statements for trace macros. | |
| 1078 | |
| 1079 #define CYG_TRACE0( _bool_, _msg_ ) CYG_EMPTY_STATEMENT | |
| 1080 #define CYG_TRACE1( _bool_, _msg_, a ) CYG_EMPTY_STATEMENT | |
| 1081 #define CYG_TRACE2( _bool_, _msg_, a,b ) CYG_EMPTY_STATEMENT | |
| 1082 #define CYG_TRACE3( _bool_, _msg_, a,b,c ) CYG_EMPTY_STATEMENT | |
| 1083 #define CYG_TRACE4( _bool_, _msg_, a,b,c,d ) CYG_EMPTY_STATEMENT | |
| 1084 #define CYG_TRACE5( _bool_, _msg_, a,b,c,d,e ) CYG_EMPTY_STATEMENT | |
| 1085 #define CYG_TRACE6( _bool_, _msg_, a,b,c,d,e,f ) CYG_EMPTY_STATEMENT | |
| 1086 #define CYG_TRACE7( _bool_, _msg_, a,b,c,d,e,f,g ) CYG_EMPTY_STATEMENT | |
| 1087 #define CYG_TRACE8( _bool_, _msg_, a,b,c,d,e,f,g,h ) CYG_EMPTY_STATEMENT | |
| 1088 | |
| 2 | 1089 #define CYG_REPORT_FUNCTION() CYG_EMPTY_STATEMENT |
| 1090 #define CYG_REPORT_FUNCTYPE( _exitmsg_ ) CYG_EMPTY_STATEMENT | |
| 1091 #define CYG_REPORT_FUNCNAME( _name_ ) CYG_EMPTY_STATEMENT | |
| 1092 #define CYG_REPORT_FUNCNAMETYPE( _name_, _exitmsg_ ) CYG_EMPTY_STATEMENT | |
| 0 | 1093 |
| 2 | 1094 #define CYG_REPORT_FUNCTIONC() CYG_EMPTY_STATEMENT |
| 1095 #define CYG_REPORT_FUNCTYPEC( _exitmsg_ ) CYG_EMPTY_STATEMENT | |
| 1096 #define CYG_REPORT_FUNCNAMEC( _name_ ) CYG_EMPTY_STATEMENT | |
| 1097 #define CYG_REPORT_FUNCNAMETYPEC( _name_, _exitmsg_ ) CYG_EMPTY_STATEMENT | |
| 0 | 1098 |
| 1099 #define CYG_REPORT_FUNCARGVOID() CYG_EMPTY_STATEMENT | |
| 1100 #define CYG_REPORT_FUNCARG1( _format_, a ) CYG_EMPTY_STATEMENT | |
| 1101 #define CYG_REPORT_FUNCARG2( _format_, a,b ) CYG_EMPTY_STATEMENT | |
| 1102 #define CYG_REPORT_FUNCARG3( _format_, a,b,c ) CYG_EMPTY_STATEMENT | |
| 1103 #define CYG_REPORT_FUNCARG4( _format_, a,b,c,d ) CYG_EMPTY_STATEMENT | |
| 1104 #define CYG_REPORT_FUNCARG5( _format_, a,b,c,d,e ) CYG_EMPTY_STATEMENT | |
| 1105 #define CYG_REPORT_FUNCARG6( _format_, a,b,c,d,e,f ) CYG_EMPTY_STATEMENT | |
| 1106 #define CYG_REPORT_FUNCARG7( _format_, a,b,c,d,e,f,g ) CYG_EMPTY_STATEMENT | |
| 1107 #define CYG_REPORT_FUNCARG8( _format_, a,b,c,d,e,f,g,h ) CYG_EMPTY_STATEMENT | |
| 1108 | |
| 2 | 1109 #define CYG_REPORT_RETURN() CYG_EMPTY_STATEMENT |
| 1110 #define CYG_REPORT_RETVAL( _value_ ) CYG_EMPTY_STATEMENT | |
| 0 | 1111 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
1112 #define CYG_TRACE_PRINT() CYG_EMPTY_STATEMENT |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
1113 #define CYG_TRACE_DUMP() CYG_EMPTY_STATEMENT |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
66
diff
changeset
|
1114 |
| 0 | 1115 #endif // ! CYGDBG_USE_TRACING |
| 1116 | |
| 1117 // ------------------------------------------------------------------------- | |
| 1118 // | |
| 1119 // CYG_TRACEn{[XDY]{V}}{B} | |
| 1120 // | |
| 1121 // Convenience macros: these fall into a few dimensions, with suffix letters: | |
| 1122 // First option: | |
| 1123 // X: user need not supply a format string, %08x is used | |
| 1124 // D: ditto but signed decimal, %d | |
| 1125 // Y: ditto but just plain %x | |
| 1126 // Second option, only meaningful with one of XDY: | |
| 1127 // V: "<var> = %..." is used, by stringifying the argument | |
| 1128 // Third option: | |
| 1129 // B: user need not supply a bool; the symbol CYG_TRACE_USER_BOOL is | |
| 1130 // used (which we do not define, user must do this) | |
| 1131 | |
| 1132 #define CYG_TRACE0B( _msg_ ) \ | |
| 2 | 1133 CYG_TRACE0( CYG_TRACE_USER_BOOL, _msg_ ) |
| 0 | 1134 #define CYG_TRACE1B( _msg_, a ) \ |
| 2 | 1135 CYG_TRACE1( CYG_TRACE_USER_BOOL, _msg_, a ) |
| 0 | 1136 #define CYG_TRACE2B( _msg_, a,b ) \ |
| 2 | 1137 CYG_TRACE2( CYG_TRACE_USER_BOOL, _msg_, a,b ) |
| 0 | 1138 #define CYG_TRACE3B( _msg_, a,b,c ) \ |
| 2 | 1139 CYG_TRACE3( CYG_TRACE_USER_BOOL, _msg_, a,b,c ) |
| 0 | 1140 #define CYG_TRACE4B( _msg_, a,b,c,d ) \ |
| 2 | 1141 CYG_TRACE4( CYG_TRACE_USER_BOOL, _msg_, a,b,c,d ) |
| 0 | 1142 #define CYG_TRACE5B( _msg_, a,b,c,d,e ) \ |
| 2 | 1143 CYG_TRACE5( CYG_TRACE_USER_BOOL, _msg_, a,b,c,d,e ) |
| 0 | 1144 #define CYG_TRACE6B( _msg_, a,b,c,d,e,f ) \ |
| 2 | 1145 CYG_TRACE6( CYG_TRACE_USER_BOOL, _msg_, a,b,c,d,e,f ) |
| 0 | 1146 #define CYG_TRACE7B( _msg_, a,b,c,d,e,f,g ) \ |
| 2 | 1147 CYG_TRACE7( CYG_TRACE_USER_BOOL, _msg_, a,b,c,d,e,f,g ) |
| 0 | 1148 #define CYG_TRACE8B( _msg_, a,b,c,d,e,f,g,h ) \ |
| 2 | 1149 CYG_TRACE8( CYG_TRACE_USER_BOOL, _msg_, a,b,c,d,e,f,g,h ) |
| 0 | 1150 |
| 1151 // long hex versions | |
| 1152 | |
| 1153 #define CYG_TRACE1X( _bool_, a ) \ | |
| 2 | 1154 CYG_TRACE1( _bool_, "%08x", a ) |
| 0 | 1155 #define CYG_TRACE2X( _bool_, a,b ) \ |
| 2 | 1156 CYG_TRACE2( _bool_, "%08x %08x", a,b ) |
| 0 | 1157 #define CYG_TRACE3X( _bool_, a,b,c ) \ |
| 2 | 1158 CYG_TRACE3( _bool_, "%08x %08x %08x", a,b,c ) |
| 0 | 1159 #define CYG_TRACE4X( _bool_, a,b,c,d ) \ |
| 2 | 1160 CYG_TRACE4( _bool_, "%08x %08x %08x %08x", a,b,c,d ) |
| 0 | 1161 #define CYG_TRACE5X( _bool_, a,b,c,d,e ) \ |
| 2 | 1162 CYG_TRACE5( _bool_, "%08x %08x %08x %08x %08x", a,b,c,d,e ) |
| 0 | 1163 #define CYG_TRACE6X( _bool_, a,b,c,d,e,f ) \ |
| 2 | 1164 CYG_TRACE6( _bool_, "%08x %08x %08x %08x %08x %08x", \ |
| 0 | 1165 a,b,c,d,e,f ) |
| 1166 #define CYG_TRACE7X( _bool_, a,b,c,d,e,f,g ) \ | |
| 2 | 1167 CYG_TRACE7( _bool_, "%08x %08x %08x %08x %08x %08x %08x", \ |
| 0 | 1168 a,b,c,d,e,f,g ) |
| 1169 #define CYG_TRACE8X( _bool_, a,b,c,d,e,f,g,h ) \ | |
| 2 | 1170 CYG_TRACE8( _bool_, "%08x %08x %08x %08x %08x %08x %08x %08x", \ |
| 0 | 1171 a,b,c,d,e,f,g,h ) |
| 1172 | |
| 1173 #define CYG_TRACE1XV( _bool_, a ) \ | |
| 2 | 1174 CYG_TRACE1( _bool_, # a "=%08x ", a ) |
| 0 | 1175 #define CYG_TRACE2XV( _bool_, a,b ) \ |
| 2 | 1176 CYG_TRACE2( _bool_, \ |
| 0 | 1177 # a "=%08x " # b "=%08x " , a,b ) |
| 1178 #define CYG_TRACE3XV( _bool_, a,b,c ) \ | |
| 2 | 1179 CYG_TRACE3( _bool_, \ |
| 0 | 1180 # a "=%08x " # b "=%08x " # c "=%08x " , a,b,c ) |
| 1181 #define CYG_TRACE4XV( _bool_, a,b,c,d ) \ | |
| 2 | 1182 CYG_TRACE4( _bool_, \ |
| 0 | 1183 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1184 , a,b,c,d ) | |
| 1185 #define CYG_TRACE5XV( _bool_, a,b,c,d,e ) \ | |
| 2 | 1186 CYG_TRACE5( _bool_, \ |
| 0 | 1187 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1188 # e "=%08x " \ | |
| 1189 , a,b,c,d,e ) | |
| 1190 #define CYG_TRACE6XV( _bool_, a,b,c,d,e,f ) \ | |
| 2 | 1191 CYG_TRACE6( _bool_, \ |
| 0 | 1192 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1193 # e "=%08x " # f "=%08x " \ | |
| 1194 , a,b,c,d,e,f ) | |
| 1195 #define CYG_TRACE7XV( _bool_, a,b,c,d,e,f,g ) \ | |
| 2 | 1196 CYG_TRACE7( _bool_, \ |
| 0 | 1197 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1198 # e "=%08x " # f "=%08x " # g "=%08x " \ | |
| 1199 , a,b,c,d,e,f,g ) | |
| 1200 #define CYG_TRACE8XV( _bool_, a,b,c,d,e,f,g,h ) \ | |
| 2 | 1201 CYG_TRACE8( _bool_, \ |
| 0 | 1202 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1203 # e "=%08x " # f "=%08x " # g "=%08x " # h "=%08x " \ | |
| 1204 , a,b,c,d,e,f,g,h ) | |
| 1205 | |
| 1206 #define CYG_TRACE1XB( a ) \ | |
| 2 | 1207 CYG_TRACE1( CYG_TRACE_USER_BOOL, "%08x", a ) |
| 0 | 1208 #define CYG_TRACE2XB( a,b ) \ |
| 2 | 1209 CYG_TRACE2( CYG_TRACE_USER_BOOL, "%08x %08x", a,b ) |
| 0 | 1210 #define CYG_TRACE3XB( a,b,c ) \ |
| 2 | 1211 CYG_TRACE3( CYG_TRACE_USER_BOOL, "%08x %08x %08x", a,b,c ) |
| 0 | 1212 #define CYG_TRACE4XB( a,b,c,d ) \ |
| 2 | 1213 CYG_TRACE4( CYG_TRACE_USER_BOOL, "%08x %08x %08x %08x", a,b,c,d ) |
| 0 | 1214 #define CYG_TRACE5XB( a,b,c,d,e ) \ |
| 2 | 1215 CYG_TRACE5( CYG_TRACE_USER_BOOL, "%08x %08x %08x %08x %08x", a,b,c,d,e ) |
| 0 | 1216 #define CYG_TRACE6XB( a,b,c,d,e,f ) \ |
| 2 | 1217 CYG_TRACE6( CYG_TRACE_USER_BOOL, "%08x %08x %08x %08x %08x %08x", \ |
| 0 | 1218 a,b,c,d,e,f ) |
| 1219 #define CYG_TRACE7XB( a,b,c,d,e,f,g ) \ | |
| 2 | 1220 CYG_TRACE7( CYG_TRACE_USER_BOOL, "%08x %08x %08x %08x %08x %08x %08x", \ |
| 0 | 1221 a,b,c,d,e,f,g ) |
| 1222 #define CYG_TRACE8XB( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1223 CYG_TRACE8( CYG_TRACE_USER_BOOL, "%08x %08x %08x %08x %08x %08x %08x %08x", \ |
| 0 | 1224 a,b,c,d,e,f,g,h ) |
| 1225 | |
| 1226 #define CYG_TRACE1XVB( a ) \ | |
| 2 | 1227 CYG_TRACE1( CYG_TRACE_USER_BOOL, # a "=%08x ", a ) |
| 0 | 1228 #define CYG_TRACE2XVB( a,b ) \ |
| 2 | 1229 CYG_TRACE2( CYG_TRACE_USER_BOOL, \ |
| 0 | 1230 # a "=%08x " # b "=%08x " , a,b ) |
| 1231 #define CYG_TRACE3XVB( a,b,c ) \ | |
| 2 | 1232 CYG_TRACE3( CYG_TRACE_USER_BOOL, \ |
| 0 | 1233 # a "=%08x " # b "=%08x " # c "=%08x " , a,b,c ) |
| 1234 #define CYG_TRACE4XVB( a,b,c,d ) \ | |
| 2 | 1235 CYG_TRACE4( CYG_TRACE_USER_BOOL, \ |
| 0 | 1236 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1237 , a,b,c,d ) | |
| 1238 #define CYG_TRACE5XVB( a,b,c,d,e ) \ | |
| 2 | 1239 CYG_TRACE5( CYG_TRACE_USER_BOOL, \ |
| 0 | 1240 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1241 # e "=%08x " \ | |
| 1242 , a,b,c,d,e ) | |
| 1243 #define CYG_TRACE6XVB( a,b,c,d,e,f ) \ | |
| 2 | 1244 CYG_TRACE6( CYG_TRACE_USER_BOOL, \ |
| 0 | 1245 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1246 # e "=%08x " # f "=%08x " \ | |
| 1247 , a,b,c,d,e,f ) | |
| 1248 #define CYG_TRACE7XVB( a,b,c,d,e,f,g ) \ | |
| 2 | 1249 CYG_TRACE7( CYG_TRACE_USER_BOOL, \ |
| 0 | 1250 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1251 # e "=%08x " # f "=%08x " # g "=%08x " \ | |
| 1252 , a,b,c,d,e,f,g ) | |
| 1253 #define CYG_TRACE8XVB( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1254 CYG_TRACE8( CYG_TRACE_USER_BOOL, \ |
| 0 | 1255 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1256 # e "=%08x " # f "=%08x " # g "=%08x " # h "=%08x " \ | |
| 1257 , a,b,c,d,e,f,g,h ) | |
| 1258 | |
| 1259 // decimal versions | |
| 1260 | |
| 1261 #define CYG_TRACE1D( _bool_, a ) \ | |
| 2 | 1262 CYG_TRACE1( _bool_, "%d", a ) |
| 0 | 1263 #define CYG_TRACE2D( _bool_, a,b ) \ |
| 2 | 1264 CYG_TRACE2( _bool_, "%d %d", a,b ) |
| 0 | 1265 #define CYG_TRACE3D( _bool_, a,b,c ) \ |
| 2 | 1266 CYG_TRACE3( _bool_, "%d %d %d", a,b,c ) |
| 0 | 1267 #define CYG_TRACE4D( _bool_, a,b,c,d ) \ |
| 2 | 1268 CYG_TRACE4( _bool_, "%d %d %d %d", a,b,c,d ) |
| 0 | 1269 #define CYG_TRACE5D( _bool_, a,b,c,d,e ) \ |
| 2 | 1270 CYG_TRACE5( _bool_, "%d %d %d %d %d", a,b,c,d,e ) |
| 0 | 1271 #define CYG_TRACE6D( _bool_, a,b,c,d,e,f ) \ |
| 2 | 1272 CYG_TRACE6( _bool_, "%d %d %d %d %d %d", \ |
| 0 | 1273 a,b,c,d,e,f ) |
| 1274 #define CYG_TRACE7D( _bool_, a,b,c,d,e,f,g ) \ | |
| 2 | 1275 CYG_TRACE7( _bool_, "%d %d %d %d %d %d %d", \ |
| 0 | 1276 a,b,c,d,e,f,g ) |
| 1277 #define CYG_TRACE8D( _bool_, a,b,c,d,e,f,g,h ) \ | |
| 2 | 1278 CYG_TRACE8( _bool_, "%d %d %d %d %d %d %d %d", \ |
| 0 | 1279 a,b,c,d,e,f,g,h ) |
| 1280 | |
| 1281 #define CYG_TRACE1DV( _bool_, a ) \ | |
| 2 | 1282 CYG_TRACE1( _bool_, # a "=%d ", a ) |
| 0 | 1283 #define CYG_TRACE2DV( _bool_, a,b ) \ |
| 2 | 1284 CYG_TRACE2( _bool_, \ |
| 0 | 1285 # a "=%d " # b "=%d " , a,b ) |
| 1286 #define CYG_TRACE3DV( _bool_, a,b,c ) \ | |
| 2 | 1287 CYG_TRACE3( _bool_, \ |
| 0 | 1288 # a "=%d " # b "=%d " # c "=%d " , a,b,c ) |
| 1289 #define CYG_TRACE4DV( _bool_, a,b,c,d ) \ | |
| 2 | 1290 CYG_TRACE4( _bool_, \ |
| 0 | 1291 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1292 , a,b,c,d ) | |
| 1293 #define CYG_TRACE5DV( _bool_, a,b,c,d,e ) \ | |
| 2 | 1294 CYG_TRACE5( _bool_, \ |
| 0 | 1295 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1296 # e "=%d " \ | |
| 1297 , a,b,c,d,e ) | |
| 1298 #define CYG_TRACE6DV( _bool_, a,b,c,d,e,f ) \ | |
| 2 | 1299 CYG_TRACE6( _bool_, \ |
| 0 | 1300 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1301 # e "=%d " # f "=%d " \ | |
| 1302 , a,b,c,d,e,f ) | |
| 1303 #define CYG_TRACE7DV( _bool_, a,b,c,d,e,f,g ) \ | |
| 2 | 1304 CYG_TRACE7( _bool_, \ |
| 0 | 1305 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1306 # e "=%d " # f "=%d " # g "=%d " \ | |
| 1307 , a,b,c,d,e,f,g ) | |
| 1308 #define CYG_TRACE8DV( _bool_, a,b,c,d,e,f,g,h ) \ | |
| 2 | 1309 CYG_TRACE8( _bool_, \ |
| 0 | 1310 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1311 # e "=%d " # f "=%d " # g "=%d " # h "=%d " \ | |
| 1312 , a,b,c,d,e,f,g,h ) | |
| 1313 | |
| 1314 #define CYG_TRACE1DB( a ) \ | |
| 2 | 1315 CYG_TRACE1( CYG_TRACE_USER_BOOL, "%d", a ) |
| 0 | 1316 #define CYG_TRACE2DB( a,b ) \ |
| 2 | 1317 CYG_TRACE2( CYG_TRACE_USER_BOOL, "%d %d", a,b ) |
| 0 | 1318 #define CYG_TRACE3DB( a,b,c ) \ |
| 2 | 1319 CYG_TRACE3( CYG_TRACE_USER_BOOL, "%d %d %d", a,b,c ) |
| 0 | 1320 #define CYG_TRACE4DB( a,b,c,d ) \ |
| 2 | 1321 CYG_TRACE4( CYG_TRACE_USER_BOOL, "%d %d %d %d", a,b,c,d ) |
| 0 | 1322 #define CYG_TRACE5DB( a,b,c,d,e ) \ |
| 2 | 1323 CYG_TRACE5( CYG_TRACE_USER_BOOL, "%d %d %d %d %d", a,b,c,d,e ) |
| 0 | 1324 #define CYG_TRACE6DB( a,b,c,d,e,f ) \ |
| 2 | 1325 CYG_TRACE6( CYG_TRACE_USER_BOOL, "%d %d %d %d %d %d", \ |
| 0 | 1326 a,b,c,d,e,f ) |
| 1327 #define CYG_TRACE7DB( a,b,c,d,e,f,g ) \ | |
| 2 | 1328 CYG_TRACE7( CYG_TRACE_USER_BOOL, "%d %d %d %d %d %d %d", \ |
| 0 | 1329 a,b,c,d,e,f,g ) |
| 1330 #define CYG_TRACE8DB( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1331 CYG_TRACE8( CYG_TRACE_USER_BOOL, "%d %d %d %d %d %d %d %d", \ |
| 0 | 1332 a,b,c,d,e,f,g,h ) |
| 1333 | |
| 1334 #define CYG_TRACE1DVB( a ) \ | |
| 2 | 1335 CYG_TRACE1( CYG_TRACE_USER_BOOL, # a "=%d ", a ) |
| 0 | 1336 #define CYG_TRACE2DVB( a,b ) \ |
| 2 | 1337 CYG_TRACE2( CYG_TRACE_USER_BOOL, \ |
| 0 | 1338 # a "=%d " # b "=%d " , a,b ) |
| 1339 #define CYG_TRACE3DVB( a,b,c ) \ | |
| 2 | 1340 CYG_TRACE3( CYG_TRACE_USER_BOOL, \ |
| 0 | 1341 # a "=%d " # b "=%d " # c "=%d " , a,b,c ) |
| 1342 #define CYG_TRACE4DVB( a,b,c,d ) \ | |
| 2 | 1343 CYG_TRACE4( CYG_TRACE_USER_BOOL, \ |
| 0 | 1344 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1345 , a,b,c,d ) | |
| 1346 #define CYG_TRACE5DVB( a,b,c,d,e ) \ | |
| 2 | 1347 CYG_TRACE5( CYG_TRACE_USER_BOOL, \ |
| 0 | 1348 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1349 # e "=%d " \ | |
| 1350 , a,b,c,d,e ) | |
| 1351 #define CYG_TRACE6DVB( a,b,c,d,e,f ) \ | |
| 2 | 1352 CYG_TRACE6( CYG_TRACE_USER_BOOL, \ |
| 0 | 1353 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1354 # e "=%d " # f "=%d " \ | |
| 1355 , a,b,c,d,e,f ) | |
| 1356 #define CYG_TRACE7DVB( a,b,c,d,e,f,g ) \ | |
| 2 | 1357 CYG_TRACE7( CYG_TRACE_USER_BOOL, \ |
| 0 | 1358 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1359 # e "=%d " # f "=%d " # g "=%d " \ | |
| 1360 , a,b,c,d,e,f,g ) | |
| 1361 #define CYG_TRACE8DVB( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1362 CYG_TRACE8( CYG_TRACE_USER_BOOL, \ |
| 0 | 1363 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1364 # e "=%d " # f "=%d " # g "=%d " # h "=%d " \ | |
| 1365 , a,b,c,d,e,f,g,h ) | |
| 1366 | |
| 1367 // short hex versions | |
| 1368 | |
| 1369 #define CYG_TRACE1Y( _bool_, a ) \ | |
| 2 | 1370 CYG_TRACE1( _bool_, "%x", a ) |
| 0 | 1371 #define CYG_TRACE2Y( _bool_, a,b ) \ |
| 2 | 1372 CYG_TRACE2( _bool_, "%x %x", a,b ) |
| 0 | 1373 #define CYG_TRACE3Y( _bool_, a,b,c ) \ |
| 2 | 1374 CYG_TRACE3( _bool_, "%x %x %x", a,b,c ) |
| 0 | 1375 #define CYG_TRACE4Y( _bool_, a,b,c,d ) \ |
| 2 | 1376 CYG_TRACE4( _bool_, "%x %x %x %x", a,b,c,d ) |
| 0 | 1377 #define CYG_TRACE5Y( _bool_, a,b,c,d,e ) \ |
| 2 | 1378 CYG_TRACE5( _bool_, "%x %x %x %x %x", a,b,c,d,e ) |
| 0 | 1379 #define CYG_TRACE6Y( _bool_, a,b,c,d,e,f ) \ |
| 2 | 1380 CYG_TRACE6( _bool_, "%x %x %x %x %x %x", \ |
| 0 | 1381 a,b,c,d,e,f ) |
| 1382 #define CYG_TRACE7Y( _bool_, a,b,c,d,e,f,g ) \ | |
| 2 | 1383 CYG_TRACE7( _bool_, "%x %x %x %x %x %x %x", \ |
| 0 | 1384 a,b,c,d,e,f,g ) |
| 1385 #define CYG_TRACE8Y( _bool_, a,b,c,d,e,f,g,h ) \ | |
| 2 | 1386 CYG_TRACE8( _bool_, "%x %x %x %x %x %x %x %x", \ |
| 0 | 1387 a,b,c,d,e,f,g,h ) |
| 1388 | |
| 1389 #define CYG_TRACE1YV( _bool_, a ) \ | |
| 2 | 1390 CYG_TRACE1( _bool_, # a "=%x ", a ) |
| 0 | 1391 #define CYG_TRACE2YV( _bool_, a,b ) \ |
| 2 | 1392 CYG_TRACE2( _bool_, \ |
| 0 | 1393 # a "=%x " # b "=%x " , a,b ) |
| 1394 #define CYG_TRACE3YV( _bool_, a,b,c ) \ | |
| 2 | 1395 CYG_TRACE3( _bool_, \ |
| 0 | 1396 # a "=%x " # b "=%x " # c "=%x " , a,b,c ) |
| 1397 #define CYG_TRACE4YV( _bool_, a,b,c,d ) \ | |
| 2 | 1398 CYG_TRACE4( _bool_, \ |
| 0 | 1399 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1400 , a,b,c,d ) | |
| 1401 #define CYG_TRACE5YV( _bool_, a,b,c,d,e ) \ | |
| 2 | 1402 CYG_TRACE5( _bool_, \ |
| 0 | 1403 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1404 # e "=%x " \ | |
| 1405 , a,b,c,d,e ) | |
| 1406 #define CYG_TRACE6YV( _bool_, a,b,c,d,e,f ) \ | |
| 2 | 1407 CYG_TRACE6( _bool_, \ |
| 0 | 1408 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1409 # e "=%x " # f "=%x " \ | |
| 1410 , a,b,c,d,e,f ) | |
| 1411 #define CYG_TRACE7YV( _bool_, a,b,c,d,e,f,g ) \ | |
| 2 | 1412 CYG_TRACE7( _bool_, \ |
| 0 | 1413 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1414 # e "=%x " # f "=%x " # g "=%x " \ | |
| 1415 , a,b,c,d,e,f,g ) | |
| 1416 #define CYG_TRACE8YV( _bool_, a,b,c,d,e,f,g,h ) \ | |
| 2 | 1417 CYG_TRACE8( _bool_, \ |
| 0 | 1418 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1419 # e "=%x " # f "=%x " # g "=%x " # h "=%x " \ | |
| 1420 , a,b,c,d,e,f,g,h ) | |
| 1421 | |
| 1422 #define CYG_TRACE1YB( a ) \ | |
| 2 | 1423 CYG_TRACE1( CYG_TRACE_USER_BOOL, "%x", a ) |
| 0 | 1424 #define CYG_TRACE2YB( a,b ) \ |
| 2 | 1425 CYG_TRACE2( CYG_TRACE_USER_BOOL, "%x %x", a,b ) |
| 0 | 1426 #define CYG_TRACE3YB( a,b,c ) \ |
| 2 | 1427 CYG_TRACE3( CYG_TRACE_USER_BOOL, "%x %x %x", a,b,c ) |
| 0 | 1428 #define CYG_TRACE4YB( a,b,c,d ) \ |
| 2 | 1429 CYG_TRACE4( CYG_TRACE_USER_BOOL, "%x %x %x %x", a,b,c,d ) |
| 0 | 1430 #define CYG_TRACE5YB( a,b,c,d,e ) \ |
| 2 | 1431 CYG_TRACE5( CYG_TRACE_USER_BOOL, "%x %x %x %x %x", a,b,c,d,e ) |
| 0 | 1432 #define CYG_TRACE6YB( a,b,c,d,e,f ) \ |
| 2 | 1433 CYG_TRACE6( CYG_TRACE_USER_BOOL, "%x %x %x %x %x %x", \ |
| 0 | 1434 a,b,c,d,e,f ) |
| 1435 #define CYG_TRACE7YB( a,b,c,d,e,f,g ) \ | |
| 2 | 1436 CYG_TRACE7( CYG_TRACE_USER_BOOL, "%x %x %x %x %x %x %x", \ |
| 0 | 1437 a,b,c,d,e,f,g ) |
| 1438 #define CYG_TRACE8YB( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1439 CYG_TRACE8( CYG_TRACE_USER_BOOL, "%x %x %x %x %x %x %x %x", \ |
| 0 | 1440 a,b,c,d,e,f,g,h ) |
| 1441 | |
| 1442 #define CYG_TRACE1YVB( a ) \ | |
| 2 | 1443 CYG_TRACE1( CYG_TRACE_USER_BOOL, # a "=%x ", a ) |
| 0 | 1444 #define CYG_TRACE2YVB( a,b ) \ |
| 2 | 1445 CYG_TRACE2( CYG_TRACE_USER_BOOL, \ |
| 0 | 1446 # a "=%x " # b "=%x " , a,b ) |
| 1447 #define CYG_TRACE3YVB( a,b,c ) \ | |
| 2 | 1448 CYG_TRACE3( CYG_TRACE_USER_BOOL, \ |
| 0 | 1449 # a "=%x " # b "=%x " # c "=%x " , a,b,c ) |
| 1450 #define CYG_TRACE4YVB( a,b,c,d ) \ | |
| 2 | 1451 CYG_TRACE4( CYG_TRACE_USER_BOOL, \ |
| 0 | 1452 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1453 , a,b,c,d ) | |
| 1454 #define CYG_TRACE5YVB( a,b,c,d,e ) \ | |
| 2 | 1455 CYG_TRACE5( CYG_TRACE_USER_BOOL, \ |
| 0 | 1456 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1457 # e "=%x " \ | |
| 1458 , a,b,c,d,e ) | |
| 1459 #define CYG_TRACE6YVB( a,b,c,d,e,f ) \ | |
| 2 | 1460 CYG_TRACE6( CYG_TRACE_USER_BOOL, \ |
| 0 | 1461 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1462 # e "=%x " # f "=%x " \ | |
| 1463 , a,b,c,d,e,f ) | |
| 1464 #define CYG_TRACE7YVB( a,b,c,d,e,f,g ) \ | |
| 2 | 1465 CYG_TRACE7( CYG_TRACE_USER_BOOL, \ |
| 0 | 1466 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1467 # e "=%x " # f "=%x " # g "=%x " \ | |
| 1468 , a,b,c,d,e,f,g ) | |
| 1469 #define CYG_TRACE8YVB( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1470 CYG_TRACE8( CYG_TRACE_USER_BOOL, \ |
| 0 | 1471 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1472 # e "=%x " # f "=%x " # g "=%x " # h "=%x " \ | |
| 1473 , a,b,c,d,e,f,g,h ) | |
| 1474 | |
| 1475 // ------------------------------------------------------------------------- | |
| 1476 // | |
| 1477 // CYG_REPORT_FUNCARGn{[XDY]{V}} | |
| 1478 // | |
| 1479 // Convenience macros two: these fall into a few dimensions, with suffix letters: | |
| 1480 // First option: | |
| 1481 // X: user need not supply a format string, %08x is used | |
| 1482 // D: ditto but signed decimal, %d | |
| 1483 // Y: ditto but just plain %x | |
| 1484 // Second option, only meaningful with one of XDY: | |
| 1485 // V: "<var> = %..." is used, by stringifying the argument | |
| 1486 | |
| 1487 // long hex versions | |
| 1488 | |
| 1489 #define CYG_REPORT_FUNCARG1X( a ) \ | |
| 2 | 1490 CYG_REPORT_FUNCARG1( "%08x", a ) |
| 0 | 1491 #define CYG_REPORT_FUNCARG2X( a,b ) \ |
| 2 | 1492 CYG_REPORT_FUNCARG2( "%08x %08x", a,b ) |
| 0 | 1493 #define CYG_REPORT_FUNCARG3X( a,b,c ) \ |
| 2 | 1494 CYG_REPORT_FUNCARG3( "%08x %08x %08x", a,b,c ) |
| 0 | 1495 #define CYG_REPORT_FUNCARG4X( a,b,c,d ) \ |
| 2 | 1496 CYG_REPORT_FUNCARG4( "%08x %08x %08x %08x", a,b,c,d ) |
| 0 | 1497 #define CYG_REPORT_FUNCARG5X( a,b,c,d,e ) \ |
| 2 | 1498 CYG_REPORT_FUNCARG5( "%08x %08x %08x %08x %08x", a,b,c,d,e ) |
| 0 | 1499 #define CYG_REPORT_FUNCARG6X( a,b,c,d,e,f ) \ |
| 2 | 1500 CYG_REPORT_FUNCARG6( "%08x %08x %08x %08x %08x %08x", \ |
| 0 | 1501 a,b,c,d,e,f ) |
| 1502 #define CYG_REPORT_FUNCARG7X( a,b,c,d,e,f,g ) \ | |
| 2 | 1503 CYG_REPORT_FUNCARG7( "%08x %08x %08x %08x %08x %08x %08x", \ |
| 0 | 1504 a,b,c,d,e,f,g ) |
| 1505 #define CYG_REPORT_FUNCARG8X( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1506 CYG_REPORT_FUNCARG8( "%08x %08x %08x %08x %08x %08x %08x %08x", \ |
| 0 | 1507 a,b,c,d,e,f,g,h ) |
| 1508 | |
| 1509 #define CYG_REPORT_FUNCARG1XV( a ) \ | |
| 2 | 1510 CYG_REPORT_FUNCARG1( # a "=%08x ", a ) |
| 0 | 1511 #define CYG_REPORT_FUNCARG2XV( a,b ) \ |
| 2 | 1512 CYG_REPORT_FUNCARG2( \ |
| 0 | 1513 # a "=%08x " # b "=%08x " , a,b ) |
| 1514 #define CYG_REPORT_FUNCARG3XV( a,b,c ) \ | |
| 2 | 1515 CYG_REPORT_FUNCARG3( \ |
| 0 | 1516 # a "=%08x " # b "=%08x " # c "=%08x " , a,b,c ) |
| 1517 #define CYG_REPORT_FUNCARG4XV( a,b,c,d ) \ | |
| 2 | 1518 CYG_REPORT_FUNCARG4( \ |
| 0 | 1519 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1520 , a,b,c,d ) | |
| 1521 #define CYG_REPORT_FUNCARG5XV( a,b,c,d,e ) \ | |
| 2 | 1522 CYG_REPORT_FUNCARG5( \ |
| 0 | 1523 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1524 # e "=%08x " \ | |
| 1525 , a,b,c,d,e ) | |
| 1526 #define CYG_REPORT_FUNCARG6XV( a,b,c,d,e,f ) \ | |
| 2 | 1527 CYG_REPORT_FUNCARG6( \ |
| 0 | 1528 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1529 # e "=%08x " # f "=%08x " \ | |
| 1530 , a,b,c,d,e,f ) | |
| 1531 #define CYG_REPORT_FUNCARG7XV( a,b,c,d,e,f,g ) \ | |
| 2 | 1532 CYG_REPORT_FUNCARG7( \ |
| 0 | 1533 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1534 # e "=%08x " # f "=%08x " # g "=%08x " \ | |
| 1535 , a,b,c,d,e,f,g ) | |
| 1536 #define CYG_REPORT_FUNCARG8XV( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1537 CYG_REPORT_FUNCARG8( \ |
| 0 | 1538 # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ |
| 1539 # e "=%08x " # f "=%08x " # g "=%08x " # h "=%08x " \ | |
| 1540 , a,b,c,d,e,f,g,h ) | |
| 1541 | |
| 1542 // decimal versions | |
| 1543 | |
| 1544 | |
| 1545 #define CYG_REPORT_FUNCARG1D( a ) \ | |
| 2 | 1546 CYG_REPORT_FUNCARG1( "%d", a ) |
| 0 | 1547 #define CYG_REPORT_FUNCARG2D( a,b ) \ |
| 2 | 1548 CYG_REPORT_FUNCARG2( "%d %d", a,b ) |
| 0 | 1549 #define CYG_REPORT_FUNCARG3D( a,b,c ) \ |
| 2 | 1550 CYG_REPORT_FUNCARG3( "%d %d %d", a,b,c ) |
| 0 | 1551 #define CYG_REPORT_FUNCARG4D( a,b,c,d ) \ |
| 2 | 1552 CYG_REPORT_FUNCARG4( "%d %d %d %d", a,b,c,d ) |
| 0 | 1553 #define CYG_REPORT_FUNCARG5D( a,b,c,d,e ) \ |
| 2 | 1554 CYG_REPORT_FUNCARG5( "%d %d %d %d %d", a,b,c,d,e ) |
| 0 | 1555 #define CYG_REPORT_FUNCARG6D( a,b,c,d,e,f ) \ |
| 2 | 1556 CYG_REPORT_FUNCARG6( "%d %d %d %d %d %d", \ |
| 0 | 1557 a,b,c,d,e,f ) |
| 1558 #define CYG_REPORT_FUNCARG7D( a,b,c,d,e,f,g ) \ | |
| 2 | 1559 CYG_REPORT_FUNCARG7( "%d %d %d %d %d %d %d", \ |
| 0 | 1560 a,b,c,d,e,f,g ) |
| 1561 #define CYG_REPORT_FUNCARG8D( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1562 CYG_REPORT_FUNCARG8( "%d %d %d %d %d %d %d %d", \ |
| 0 | 1563 a,b,c,d,e,f,g,h ) |
| 1564 | |
| 1565 #define CYG_REPORT_FUNCARG1DV( a ) \ | |
| 2 | 1566 CYG_REPORT_FUNCARG1( # a "=%d ", a ) |
| 0 | 1567 #define CYG_REPORT_FUNCARG2DV( a,b ) \ |
| 2 | 1568 CYG_REPORT_FUNCARG2( \ |
| 0 | 1569 # a "=%d " # b "=%d " , a,b ) |
| 1570 #define CYG_REPORT_FUNCARG3DV( a,b,c ) \ | |
| 2 | 1571 CYG_REPORT_FUNCARG3( \ |
| 0 | 1572 # a "=%d " # b "=%d " # c "=%d " , a,b,c ) |
| 1573 #define CYG_REPORT_FUNCARG4DV( a,b,c,d ) \ | |
| 2 | 1574 CYG_REPORT_FUNCARG4( \ |
| 0 | 1575 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1576 , a,b,c,d ) | |
| 1577 #define CYG_REPORT_FUNCARG5DV( a,b,c,d,e ) \ | |
| 2 | 1578 CYG_REPORT_FUNCARG5( \ |
| 0 | 1579 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1580 # e "=%d " \ | |
| 1581 , a,b,c,d,e ) | |
| 1582 #define CYG_REPORT_FUNCARG6DV( a,b,c,d,e,f ) \ | |
| 2 | 1583 CYG_REPORT_FUNCARG6( \ |
| 0 | 1584 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1585 # e "=%d " # f "=%d " \ | |
| 1586 , a,b,c,d,e,f ) | |
| 1587 #define CYG_REPORT_FUNCARG7DV( a,b,c,d,e,f,g ) \ | |
| 2 | 1588 CYG_REPORT_FUNCARG7( \ |
| 0 | 1589 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1590 # e "=%d " # f "=%d " # g "=%d " \ | |
| 1591 , a,b,c,d,e,f,g ) | |
| 1592 #define CYG_REPORT_FUNCARG8DV( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1593 CYG_REPORT_FUNCARG8( \ |
| 0 | 1594 # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ |
| 1595 # e "=%d " # f "=%d " # g "=%d " # h "=%d " \ | |
| 1596 , a,b,c,d,e,f,g,h ) | |
| 1597 | |
| 1598 // short hex versions | |
| 1599 | |
| 1600 #define CYG_REPORT_FUNCARG1Y( a ) \ | |
| 2 | 1601 CYG_REPORT_FUNCARG1( "%x", a ) |
| 0 | 1602 #define CYG_REPORT_FUNCARG2Y( a,b ) \ |
| 2 | 1603 CYG_REPORT_FUNCARG2( "%x %x", a,b ) |
| 0 | 1604 #define CYG_REPORT_FUNCARG3Y( a,b,c ) \ |
| 2 | 1605 CYG_REPORT_FUNCARG3( "%x %x %x", a,b,c ) |
| 0 | 1606 #define CYG_REPORT_FUNCARG4Y( a,b,c,d ) \ |
| 2 | 1607 CYG_REPORT_FUNCARG4( "%x %x %x %x", a,b,c,d ) |
| 0 | 1608 #define CYG_REPORT_FUNCARG5Y( a,b,c,d,e ) \ |
| 2 | 1609 CYG_REPORT_FUNCARG5( "%x %x %x %x %x", a,b,c,d,e ) |
| 0 | 1610 #define CYG_REPORT_FUNCARG6Y( a,b,c,d,e,f ) \ |
| 2 | 1611 CYG_REPORT_FUNCARG6( "%x %x %x %x %x %x", \ |
| 0 | 1612 a,b,c,d,e,f ) |
| 1613 #define CYG_REPORT_FUNCARG7Y( a,b,c,d,e,f,g ) \ | |
| 2 | 1614 CYG_REPORT_FUNCARG7( "%x %x %x %x %x %x %x", \ |
| 0 | 1615 a,b,c,d,e,f,g ) |
| 1616 #define CYG_REPORT_FUNCARG8Y( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1617 CYG_REPORT_FUNCARG8( "%x %x %x %x %x %x %x %x", \ |
| 0 | 1618 a,b,c,d,e,f,g,h ) |
| 1619 | |
| 1620 #define CYG_REPORT_FUNCARG1YV( a ) \ | |
| 2 | 1621 CYG_REPORT_FUNCARG1( # a "=%x ", a ) |
| 0 | 1622 #define CYG_REPORT_FUNCARG2YV( a,b ) \ |
| 2 | 1623 CYG_REPORT_FUNCARG2( \ |
| 0 | 1624 # a "=%x " # b "=%x " , a,b ) |
| 1625 #define CYG_REPORT_FUNCARG3YV( a,b,c ) \ | |
| 2 | 1626 CYG_REPORT_FUNCARG3( \ |
| 0 | 1627 # a "=%x " # b "=%x " # c "=%x " , a,b,c ) |
| 1628 #define CYG_REPORT_FUNCARG4YV( a,b,c,d ) \ | |
| 2 | 1629 CYG_REPORT_FUNCARG4( \ |
| 0 | 1630 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1631 , a,b,c,d ) | |
| 1632 #define CYG_REPORT_FUNCARG5YV( a,b,c,d,e ) \ | |
| 2 | 1633 CYG_REPORT_FUNCARG5( \ |
| 0 | 1634 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1635 # e "=%x " \ | |
| 1636 , a,b,c,d,e ) | |
| 1637 #define CYG_REPORT_FUNCARG6YV( a,b,c,d,e,f ) \ | |
| 2 | 1638 CYG_REPORT_FUNCARG6( \ |
| 0 | 1639 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1640 # e "=%x " # f "=%x " \ | |
| 1641 , a,b,c,d,e,f ) | |
| 1642 #define CYG_REPORT_FUNCARG7YV( a,b,c,d,e,f,g ) \ | |
| 2 | 1643 CYG_REPORT_FUNCARG7( \ |
| 0 | 1644 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1645 # e "=%x " # f "=%x " # g "=%x " \ | |
| 1646 , a,b,c,d,e,f,g ) | |
| 1647 #define CYG_REPORT_FUNCARG8YV( a,b,c,d,e,f,g,h ) \ | |
| 2 | 1648 CYG_REPORT_FUNCARG8( \ |
| 0 | 1649 # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ |
| 1650 # e "=%x " # f "=%x " # g "=%x " # h "=%x " \ | |
| 1651 , a,b,c,d,e,f,g,h ) | |
| 1652 | |
| 1653 | |
| 1654 #endif // CYGONCE_INFRA_CYG_TRAC_H multiple inclusion protection | |
| 1655 // EOF cyg_trac.h |
