1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/kernelhwsrv/kernel/eka/debug/utrace/src/e32utrace.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,535 @@
1.4 +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of the License "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// Trace API
1.18 +//
1.19 +
1.20 +#include <e32utf.h>
1.21 +#include "traceutils.h"
1.22 +
1.23 +
1.24 +//Add the Doxygen macro so that Doxygen doesn't need to know about the SYMBIAN_TRACE_EXECUTABLE_IS_INCLUDED define.
1.25 +//This allows doxygen to pick up the comments for the enabled implementation of the trace API.
1.26 +#ifdef __DOXYGEN__
1.27 + #define SYMBIAN_TRACE_EXECUTABLE_IS_INCLUDED
1.28 +#endif //__DOXYGEN__
1.29 +
1.30 +
1.31 +namespace UTF
1.32 +{
1.33 +
1.34 +
1.35 +/**
1.36 + * This method currently returns 0 until a fix is provided
1.37 + * for:
1.38 + * DPDEF110067 [Trace STP][ADP37] No Way for The Secondary Category to Be Set To Default
1.39 + * DEF119891 [TraceSTP] 1.4.1 Default the ModuleUid
1.40 + * This will in the future return the UID3 of the executable.
1.41 + *
1.42 + * @return Returns 0.
1.43 + */
1.44 +EXPORT_C TModuleUid TTraceContext::DefaultModuleUid()
1.45 + {
1.46 + return 0;
1.47 + }
1.48 +
1.49 +
1.50 +/**
1.51 + * Check if thread identification will be added by default.
1.52 + */
1.53 +EXPORT_C THasThreadIdentification TTraceContext::HasThreadIdentification() const
1.54 + {
1.55 + return iHasThreadIdentification;
1.56 + };
1.57 +
1.58 +/**
1.59 + * Check if PC will be added by default.
1.60 + */
1.61 +EXPORT_C THasProgramCounter TTraceContext::HasProgramCounter() const
1.62 + {
1.63 + return iHasProgramCounter;
1.64 + };
1.65 +
1.66 +
1.67 +/**
1.68 + * Get the current classification
1.69 + *
1.70 + * @return The current classification of the trace point context.
1.71 + */
1.72 +EXPORT_C TClassification TTraceContext::Classification() const
1.73 + {
1.74 + return iClassification;
1.75 + };
1.76 +
1.77 +/**
1.78 + * Get the current module Uid
1.79 + *
1.80 + * @return The currently set module Uid
1.81 + */
1.82 +EXPORT_C TModuleUid TTraceContext::ModuleUid() const
1.83 + {
1.84 + return iModuleUid;
1.85 + }
1.86 +
1.87 +
1.88 +//--------------------- UTrace compiled in ------------------------
1.89 +#ifdef SYMBIAN_TRACE_EXECUTABLE_IS_INCLUDED
1.90 +
1.91 +
1.92 +
1.93 +// --------- printf ------------
1.94 +
1.95 +/**
1.96 +Prints a string by outputting a trace packet with the format id KFormatPrintf.
1.97 +
1.98 +If the specified string is too long to fit into a single trace packet
1.99 +a multipart trace is generated.
1.100 +
1.101 +@param aContext The trace packet context. @see TTraceContext
1.102 +@param aDes The string. This can be of variable length.
1.103 +
1.104 +@return The trace packet was/was not output.
1.105 +
1.106 +@See BTrace::TMultipart
1.107 +*/
1.108 +EXPORT_C TBool Print(const TTraceContext& aContext, const TDesC8& aDes)
1.109 + {
1.110 + if(WouldBeTracedNow(aContext))
1.111 + {
1.112 + GET_PC(pc);
1.113 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, KFormatPrintf, aDes.Ptr(), aDes.Size());
1.114 + }
1.115 + return EFalse;
1.116 + };
1.117 +
1.118 +
1.119 +#ifdef __KERNEL_MODE__
1.120 +
1.121 +/**
1.122 +Prints a formatted string in kernel mode only by outputting a trace packet with the format id KFormatPrintf.
1.123 +
1.124 +The function uses Kern::AppendFormat() to do the formatting.
1.125 +
1.126 +Although it is safe to call this function from an ISR, it polls the output
1.127 +serial port and may take a long time to complete, invalidating any
1.128 +real-time guarantee.
1.129 +
1.130 +If called from an ISR, it is possible for output text to be intermingled
1.131 +with other output text if one set of output interrupts or preempts another.
1.132 +
1.133 +Some of the formatting options may not work inside an ISR.
1.134 +
1.135 +Be careful not to use a string that is too long to fit onto the stack.
1.136 +If the specified string is too long to fit into a single trace packet
1.137 +a multipart trace is generated.
1.138 +
1.139 +
1.140 +@param aContext The trace packet context. @see TTraceContext
1.141 +@param aFmt The format string. This must not be longer than 256 characters.
1.142 +@param ... A variable number of arguments to be converted to text as dictated
1.143 + by the format string.
1.144 +
1.145 +@return The trace packet was/was not output.
1.146 +
1.147 +@pre Calling thread can either be in a critical section or not.
1.148 +@pre Interrupts must be enabled.
1.149 +@pre Kernel must be unlocked
1.150 +@pre Call in any context.
1.151 +@pre Suitable for use in a device driver
1.152 +
1.153 +@see Kern::AppendFormat()
1.154 +@See BTrace::TMultipart
1.155 +
1.156 +Note: Until the Utrace packet format is changed this call will not add the
1.157 +FormatId to the trace packet for kernel side traces.
1.158 +*/
1.159 +EXPORT_C TBool Printf(const TTraceContext& aContext, const char* aFmt, ...)
1.160 + {
1.161 + if(WouldBeTracedNow(aContext))
1.162 + {
1.163 + GET_PC(pc);
1.164 + TBuf8<KMaxPrintfSize> buf;
1.165 + VA_LIST list;
1.166 + VA_START(list,aFmt);
1.167 + Kern::AppendFormat(buf,aFmt,list);
1.168 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, KFormatPrintf, buf.Ptr(), buf.Size());
1.169 + }
1.170 + return EFalse;
1.171 + }
1.172 +
1.173 +/**
1.174 +Prints a formatted string by outputting a trace packet with the format id KFormatPrintf.
1.175 +
1.176 +If the specified string is too long to fit into a single trace packet
1.177 +a multipart trace is generated.
1.178 +
1.179 +@param aContext The trace packet context. @see TTraceContext
1.180 +@param aFmt The format string. This must not be longer than 256 characters.
1.181 +@param ... A variable number of arguments to be converted to text as dictated
1.182 + by the format string.
1.183 +
1.184 +@return The trace packet was/was not output.
1.185 +
1.186 +@See BTrace::TMultipart
1.187 +*/
1.188 +EXPORT_C TBool Printf(const TTraceContext& aContext, TRefByValue<const TDesC8> aFmt,...)
1.189 + {
1.190 + if(WouldBeTracedNow(aContext))
1.191 + {
1.192 + GET_PC(pc);
1.193 + TBuf8<KMaxPrintfSize> buf;
1.194 + VA_LIST list;
1.195 + VA_START(list,aFmt);
1.196 + TDesC8 fmt = aFmt;
1.197 + Kern::AppendFormat(buf,(char*)fmt.Ptr(),list);
1.198 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, KFormatPrintf, buf.Ptr(), buf.Size());
1.199 + }
1.200 + return EFalse;
1.201 + }
1.202 +
1.203 +#endif // __KERNEL_MODE__
1.204 +#ifndef __KERNEL_MODE__
1.205 +
1.206 +/**
1.207 +Prints a formatted string by outputting a trace packet with the format id KFormatPrintf.
1.208 +
1.209 +
1.210 +If the specified string is too long to fit into a single trace packet
1.211 +a multipart trace is generated.
1.212 +
1.213 +@param aContext The trace packet context. @see TTraceContext
1.214 +@param aFmt The format string. This must not be longer than 256 characters.
1.215 +@param ... A variable number of arguments to be converted to text as dictated
1.216 + by the format string.
1.217 +
1.218 +@return The trace packet was/was not output.
1.219 +
1.220 +@See BTrace::TMultipart
1.221 +*/
1.222 +EXPORT_C TBool Printf(const TTraceContext& aContext, const char* aFmt, ...)
1.223 + {
1.224 + if(WouldBeTracedNow(aContext))
1.225 + {
1.226 + GET_PC(pc);
1.227 + TTruncateOverflow8 overflow;
1.228 + VA_LIST list;
1.229 + VA_START(list,aFmt);
1.230 + TPtrC8 fmt((const TText8*)aFmt);
1.231 + TBuf8<KMaxPrintfSize> buf;
1.232 + // coverity[uninit_use_in_call]
1.233 + buf.AppendFormatList(fmt,list,&overflow);
1.234 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, KFormatPrintf, buf.Ptr(), buf.Size());
1.235 + }
1.236 + return EFalse;
1.237 + };
1.238 +
1.239 +/**
1.240 +Prints a formatted string by outputting a trace packet with the format id KFormatPrintf.
1.241 +
1.242 +If the specified string is too long to fit into a single trace packet
1.243 +a multipart trace is generated.
1.244 +
1.245 +@param aContext The trace packet context. @see TTraceContext
1.246 +@param aFmt The format string. This must not be longer than 256 characters.
1.247 +@param ... A variable number of arguments to be converted to text as dictated
1.248 + by the format string.
1.249 +
1.250 +@return The trace packet was/was not output.
1.251 +
1.252 +@See BTrace::TMultipart
1.253 +*/
1.254 +EXPORT_C TBool Printf(const TTraceContext& aContext, TRefByValue<const TDesC8> aFmt,...)
1.255 + {
1.256 + if(WouldBeTracedNow(aContext))
1.257 + {
1.258 + GET_PC(pc);
1.259 + TTruncateOverflow8 overflow;
1.260 + VA_LIST list;
1.261 + VA_START(list,aFmt);
1.262 + TBuf8<KMaxPrintfSize> buf;
1.263 + // coverity[uninit_use_in_call]
1.264 + buf.AppendFormatList(aFmt,list,&overflow);
1.265 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, KFormatPrintf, buf.Ptr(), buf.Size());
1.266 + }
1.267 + return EFalse;
1.268 + }
1.269 +
1.270 +/**
1.271 +Prints a formatted string by outputting a trace packet with the format id
1.272 +KFormatPrintfUnicode for unicode strings and KFormatPrintf for other strings.
1.273 +
1.274 +If the specified string is too long to fit into a single trace packet
1.275 +a multipart trace is generated.
1.276 +
1.277 +@param aContext The trace packet context. @see TTraceContext
1.278 +@param aFmt The format string. This must not be longer than 256 characters.
1.279 +@param ... A variable number of arguments to be converted to text as dictated
1.280 + by the format string.
1.281 +
1.282 +@return The trace packet was/was not output.
1.283 +
1.284 +@See BTrace::TMultipart
1.285 +*/
1.286 +EXPORT_C TBool Printf(const TTraceContext& aContext, TRefByValue<const TDesC16> aFmt,...)
1.287 + {
1.288 + if(WouldBeTracedNow(aContext))
1.289 + {
1.290 + GET_PC(pc);
1.291 + TTruncateOverflow16 overflow;
1.292 + VA_LIST list;
1.293 + VA_START(list,aFmt);
1.294 + TBuf<KMaxPrintfSize> buf;
1.295 + // coverity[uninit_use_in_call]
1.296 + buf.AppendFormatList(aFmt,list,&overflow);
1.297 + #ifndef _UNICODE
1.298 + TPtr8 p(buf.Collapse());
1.299 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), myPc, KFormatPrintf, buf.PtrZ(), p.Size());
1.300 + #else //_UNICODE
1.301 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, KFormatPrintfUnicode, buf.PtrZ(), buf.Size());
1.302 + #endif //_UNICODE
1.303 + }
1.304 + return EFalse;
1.305 + };
1.306 +
1.307 +
1.308 +/**
1.309 +Prints a string by outputting a trace packet with the format id KFormatPrintf
1.310 +
1.311 +If the specified string is too long to fit into a single trace packet
1.312 +a multipart trace is generated.
1.313 +
1.314 +@param aContext The trace packet context. @see TTraceContext
1.315 +@param aDes The string. This must not be longer than 256 characters.
1.316 +
1.317 +@return The trace packet was/was not output.
1.318 +
1.319 +@See BTrace::TMultipart
1.320 +*/
1.321 +EXPORT_C TBool Print(const TTraceContext& aContext, const TDesC16& aDes)
1.322 + {
1.323 + if(WouldBeTracedNow(aContext))
1.324 + {
1.325 + GET_PC(pc);
1.326 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, KFormatPrintfUnicode, aDes.Ptr(), aDes.Size());
1.327 + }
1.328 + return EFalse;
1.329 + }
1.330 +#endif // __KERNEL_MODE__
1.331 +
1.332 +
1.333 +// --------- trace ------------
1.334 +
1.335 +/**
1.336 +Outputs a trace packet containing no payload data.
1.337 +
1.338 +@param aContext The trace packet context. @see TTraceContext
1.339 +@param aFormatId A format identifier as specified by @see TFormatId
1.340 +
1.341 +@return The trace packet was/was not output.
1.342 +*/
1.343 +EXPORT_C TBool Trace(const TTraceContext& aContext, TFormatId aFormatId)
1.344 + {
1.345 + GET_PC(pc);
1.346 + return UTRACE_SECONDARY_0(aContext.Classification(),aContext.ModuleUid(),aContext.HasThreadIdentification(),aContext.HasProgramCounter(), pc, aFormatId);
1.347 + }
1.348 +
1.349 +/**
1.350 +Outputs a trace packet containing 4 bytes of data.
1.351 +
1.352 +@param aContext The trace packet context. @see TTraceContext
1.353 +@param aFormatId A format identifier as specified by @see TFormatId
1.354 +@param aData 4 bytes of data
1.355 +
1.356 +@return The trace packet was/was not output.
1.357 +*/
1.358 +EXPORT_C TBool Trace(const TTraceContext& aContext, TFormatId aFormatId, TUint32 aData)
1.359 + {
1.360 + GET_PC(pc);
1.361 + return UTRACE_SECONDARY_1(aContext.Classification(),aContext.ModuleUid(),aContext.HasThreadIdentification(),aContext.HasProgramCounter(),pc,aFormatId,aData);
1.362 + }
1.363 +
1.364 +/**
1.365 +Outputs a trace packet containing 8 bytes of data.
1.366 +
1.367 +@param aContext The trace packet context. @see TTraceContext
1.368 +@param aFormatId A format identifier as specified by @see TFormatId
1.369 +@param aData1 4 bytes of data
1.370 +@param aData2 4 bytes of data
1.371 +
1.372 +@return The trace packet was/was not output.
1.373 +*/
1.374 +EXPORT_C TBool Trace(const TTraceContext& aContext, TFormatId aFormatId, TUint32 aData1, TUint32 aData2)
1.375 + {
1.376 + GET_PC(pc);
1.377 + TUint32 packet[2];
1.378 + packet[0] = aData1;
1.379 + packet[1] = aData2;
1.380 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, aFormatId, &packet, 8);
1.381 + }
1.382 +
1.383 +/**
1.384 +Outputs a trace packet containing variable length data.
1.385 +
1.386 +If the specified data is too big to fit into a single
1.387 +trace packet a multipart trace is generated.
1.388 +
1.389 +
1.390 +@param aContext The trace packet context. @see TTraceContext
1.391 +@param aFormatId A format identifier as specified by @see TFormatId
1.392 +@param aData Address of additional data to add to trace packet.
1.393 + Must be word aligned, i.e. a multiple of 4.
1.394 +@param aSize Number of bytes of additional data.
1.395 +
1.396 +@return The trace packet was/was not output.
1.397 +
1.398 +@See BTrace::TMultipart
1.399 +*/
1.400 +EXPORT_C TBool Trace(const TTraceContext& aContext, TFormatId aFormatId, const TAny* aData, TInt aSize)
1.401 + {
1.402 + if(WouldBeTracedNow(aContext))
1.403 + {
1.404 + GET_PC(pc);
1.405 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, aFormatId, aData, aSize);
1.406 + }
1.407 + return EFalse;
1.408 + }
1.409 +
1.410 +/**
1.411 +Outputs a trace packet containing 4 bytes of data.
1.412 +
1.413 +@param aContext The trace packet context. @see TTraceContext
1.414 +@param aFormatId A format identifier as specified by @see TFormatId
1.415 +@param aData 4 bytes of data
1.416 +
1.417 +@return The trace packet was/was not output.
1.418 +*/
1.419 +EXPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TUint16 aData)
1.420 + {
1.421 + GET_PC(pc);
1.422 + return UTRACE_SECONDARY_1(aContext.Classification(),aContext.ModuleUid(),aContext.HasThreadIdentification(),aContext.HasProgramCounter(),pc,aFormatId,aData);
1.423 + }
1.424 +
1.425 +/**
1.426 +Outputs a trace packet containing 4 bytes of data.
1.427 +
1.428 +@param aContext The trace packet context. @see TTraceContext
1.429 +@param aFormatId A format identifier as specified by @see TFormatId
1.430 +@param aData 4 bytes of data
1.431 +
1.432 +@return The trace packet was/was not output.
1.433 +*/
1.434 +EXPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TUint8 aData)
1.435 + {
1.436 + GET_PC(pc);
1.437 + return UTRACE_SECONDARY_1(aContext.Classification(),aContext.ModuleUid(),aContext.HasThreadIdentification(),aContext.HasProgramCounter(),pc,aFormatId,aData);
1.438 + }
1.439 +
1.440 +#ifndef __KERNEL_MODE__
1.441 +/**
1.442 +Outputs a trace packet containing variable length data.
1.443 +
1.444 +If the specified data is too big to fit into a single
1.445 +trace record a multipart trace is generated.
1.446 +
1.447 +@param aContext Attributes of the trace point.
1.448 +@param aFormatId A format identifier as specified by @see TFormatId
1.449 +@param aData Additional data to add to trace packet.
1.450 + Must be word aligned, i.e. a multiple of 4.
1.451 +
1.452 +@return The trace packet was/was not logged.
1.453 +
1.454 +@See BTrace::TMultipart
1.455 +*/
1.456 +EXPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TDesC16& aData)
1.457 + {
1.458 + if(WouldBeTracedNow(aContext))
1.459 + {
1.460 + GET_PC(pc);
1.461 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, aFormatId, aData.Ptr(), aData.Size());
1.462 + }
1.463 + return EFalse;
1.464 + }
1.465 +#endif //__KERNEL_MODE__
1.466 +
1.467 +/**
1.468 +Outputs a trace packet containing variable length data.
1.469 +
1.470 +If the specified data is too big to fit into a single
1.471 +trace record a multipart trace is generated.
1.472 +
1.473 +@param aContext Attributes of the trace point.
1.474 +@param aFormatId A format identifier as specified by @see TFormatId
1.475 +@param aData Additional data to add to trace packet.
1.476 + Must be word aligned, i.e. a multiple of 4.
1.477 +
1.478 +@return The trace packet was/was not logged.
1.479 +
1.480 +@See BTrace::TMultipart
1.481 +*/
1.482 +EXPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TDesC8& aData)
1.483 + {
1.484 + if(WouldBeTracedNow(aContext))
1.485 + {
1.486 + GET_PC(pc);
1.487 + return UTRACE_SECONDARY_ANY(aContext.Classification(), aContext.ModuleUid(), aContext.HasThreadIdentification(), aContext.HasProgramCounter(), pc, aFormatId, aData.Ptr(), aData.Size());
1.488 + }
1.489 + return EFalse;
1.490 + }
1.491 +
1.492 +
1.493 +
1.494 +/**
1.495 + * Check whether a trace packet would be traced or not.
1.496 + *
1.497 + * @param aContext The context of the trace packet(s) to be checked.
1.498 + * @return Returns whether the trace packet would be traced or not.
1.499 + * Note: The value should never be stored since the filters can be changed without warning.
1.500 + */
1.501 +EXPORT_C TBool WouldBeTracedNow(const TTraceContext& aContext)
1.502 + {
1.503 + return BTrace::CheckFilter2(aContext.Classification(), aContext.ModuleUid());
1.504 + };
1.505 +
1.506 +//--------------------- UTrace compiled out ------------------------
1.507 +
1.508 +#else //SYMBIAN_TRACE_EXECUTABLE_IS_INCLUDED
1.509 +
1.510 +//--------printf
1.511 +EXPORT_C TBool Printf(const TTraceContext&, const char*, ...) { return EFalse; }
1.512 +EXPORT_C TBool Print(const TTraceContext&, const TDesC8&) { return EFalse; }
1.513 +EXPORT_C TBool Printf(const TTraceContext&, TRefByValue<const TDesC8> ,...) { return EFalse; }
1.514 +#ifndef __KERNEL_MODE__
1.515 +EXPORT_C TBool Printf(const TTraceContext&, TRefByValue<const TDesC16>,...) { return EFalse; }
1.516 +EXPORT_C TBool Print(const TTraceContext&, const TDesC16&) { return EFalse; }
1.517 +#endif //__KERNEL_MODE__
1.518 +
1.519 +//--------trace
1.520 +EXPORT_C TBool Trace(const TTraceContext&, TFormatId) { return EFalse; }
1.521 +EXPORT_C TBool Trace(const TTraceContext&, TFormatId, TUint32) { return EFalse; }
1.522 +EXPORT_C TBool Trace(const TTraceContext&, TFormatId, TUint32, TUint32) { return EFalse; }
1.523 +EXPORT_C TBool Trace(const TTraceContext&, TFormatId, const TAny*, TInt) { return EFalse; }
1.524 +
1.525 +EXPORT_C TBool Trace(const TTraceContext&, const TFormatId, const TUint8) { return EFalse; }
1.526 +EXPORT_C TBool Trace(const TTraceContext&, const TFormatId, const TUint16) { return EFalse; }
1.527 +EXPORT_C TBool Trace(const TTraceContext&, const TFormatId, const TDesC8&) { return EFalse; }
1.528 +#ifndef __KERNEL_MODE__
1.529 +EXPORT_C TBool Trace(const TTraceContext&, const TFormatId, const TDesC16&) { return EFalse; }
1.530 +#endif
1.531 +EXPORT_C TBool WouldBeTracedNow(const TTraceContext&) { return EFalse; }
1.532 +
1.533 +
1.534 +#endif //SYMBIAN_TRACE_EXECUTABLE_IS_INCLUDED
1.535 +
1.536 +}//namespace UTF
1.537 +
1.538 +