os/kernelhwsrv/userlibandfileserver/fileserver/ftrace/f32trace.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of the License "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
sl@0
    16
/**
sl@0
    17
 @file
sl@0
    18
 @internalTechnology
sl@0
    19
 @prototype
sl@0
    20
*/
sl@0
    21
sl@0
    22
#if !defined(__FTRACE_H__)
sl@0
    23
#define __FTRACE_H__
sl@0
    24
sl@0
    25
#include <e32cmn.h>
sl@0
    26
#include <e32btrace.h>
sl@0
    27
sl@0
    28
sl@0
    29
#ifndef __KERNEL_MODE__
sl@0
    30
	#include <e32std.h>
sl@0
    31
#endif
sl@0
    32
sl@0
    33
#include "f32tracedef.h"
sl@0
    34
sl@0
    35
#if defined(__EABI__)
sl@0
    36
#pragma diag_suppress 1446		// non-POD class type passed through ellipsis
sl@0
    37
#endif
sl@0
    38
sl@0
    39
/**
sl@0
    40
@internalComponent
sl@0
    41
@prototype
sl@0
    42
*/
sl@0
    43
sl@0
    44
#if ((defined (_DEBUG) && defined (SYMBIAN_FTRACE_ENABLE_UDEB)) ||		\
sl@0
    45
	(!defined(_DEBUG) && defined (SYMBIAN_FTRACE_ENABLE_UREL)))
sl@0
    46
	#define SYMBIAN_FTRACE_ENABLE
sl@0
    47
#endif
sl@0
    48
sl@0
    49
sl@0
    50
sl@0
    51
inline TBool Trace1(TClassification aClassification, TFormatId aFormatId, TModuleUid aUid, TUint a1)
sl@0
    52
	{
sl@0
    53
	return BTraceFilteredContext12(
sl@0
    54
		aClassification,					// Category
sl@0
    55
		0,								// Sub-category
sl@0
    56
		aUid,		// UID
sl@0
    57
		aFormatId,
sl@0
    58
		a1);							
sl@0
    59
	}
sl@0
    60
sl@0
    61
inline TBool TraceN(TClassification aClassification, TFormatId aFormatId,  TModuleUid aUid, TInt aArgCount, TUint a1, ...)
sl@0
    62
	{
sl@0
    63
	const TInt KMaxArgs = 8;
sl@0
    64
	if (aArgCount > KMaxArgs)
sl@0
    65
		return EFalse;
sl@0
    66
	TUint args[KMaxArgs];
sl@0
    67
	TInt argLen = aArgCount << 2;
sl@0
    68
	memcpy(args, &a1, argLen);
sl@0
    69
	
sl@0
    70
	return BTraceFilteredContextN(
sl@0
    71
		aClassification,					// Category
sl@0
    72
		0,									// Sub-category
sl@0
    73
		aUid,		// UID
sl@0
    74
		aFormatId,
sl@0
    75
		args,
sl@0
    76
		argLen);								
sl@0
    77
	}
sl@0
    78
sl@0
    79
sl@0
    80
inline TBool TraceStr(TClassification aClassification, TFormatId aFormatId,  TModuleUid aUid, const TAny* aData, TInt aDataSize)
sl@0
    81
	{
sl@0
    82
	// NB This will truncate the data (!!!) - 
sl@0
    83
	// we can't use BTraceFilteredContextBig for this as it doesn't have room for the format Id
sl@0
    84
	return BTraceFilteredContextN(		
sl@0
    85
		aClassification,					// Category
sl@0
    86
		0,								// Sub-category
sl@0
    87
		aUid,		// UID
sl@0
    88
		aFormatId,
sl@0
    89
		aData, 
sl@0
    90
		aDataSize);							
sl@0
    91
	}
sl@0
    92
sl@0
    93
sl@0
    94
sl@0
    95
sl@0
    96
sl@0
    97
sl@0
    98
sl@0
    99
class RFTrace : public RBusLogicalChannel
sl@0
   100
	{
sl@0
   101
public:
sl@0
   102
	enum {EMajorVersionNumber=1,EMinorVersionNumber=0,EBuildVersionNumber=1};
sl@0
   103
	enum TControl
sl@0
   104
        {
sl@0
   105
		ETraceMultiple,
sl@0
   106
		};
sl@0
   107
sl@0
   108
#ifndef __KERNEL_MODE__
sl@0
   109
sl@0
   110
public:
sl@0
   111
	inline TInt Open(TOwnerType aType)
sl@0
   112
		{return DoCreate(_L("FTrace"),TVersion(),0,NULL,NULL,aType);}
sl@0
   113
sl@0
   114
	inline 	TBool TraceMultiple(TClassification aClassification, TFormatId aFormatId, TUint32 aUid, TInt aDescriptorCount, TUint64 aParam1, ...)
sl@0
   115
		{
sl@0
   116
		if (Handle() == NULL)
sl@0
   117
			return EFalse;
sl@0
   118
		// ARM passes first 4 parameters in registers, so....
sl@0
   119
		// parcel-up the first four parameters in an array and pass a pointer to the array to the LDD; 
sl@0
   120
		// the next parameter(s) should be on the stack, so we can just pass a pointer to the first element 
sl@0
   121
		TUint args[4] = {aClassification, aFormatId, aUid, aDescriptorCount};
sl@0
   122
		TUint64* pArg1 = &aParam1;
sl@0
   123
		TInt r = DoControl(ETraceMultiple, (TAny*) args, pArg1);
sl@0
   124
		if (r |= KErrNone)
sl@0
   125
			User::Panic(_L("FSCLIENT Trace panic"), 0);
sl@0
   126
		return ETrue;
sl@0
   127
		}
sl@0
   128
sl@0
   129
	static inline TUint64 PkgData(const TDesC16& aDes)	{return MAKE_TUINT64( ((TUint) aDes.Ptr()), (aDes.Length()<<1) | (EPtrC<<KShiftDesType));}
sl@0
   130
	static inline TUint64 PkgData(const TDesC8& aDes)	{return MAKE_TUINT64( ((TUint) aDes.Ptr()), aDes.Length() | (EPtrC<<KShiftDesType));}
sl@0
   131
sl@0
   132
	static inline TUint64 PkgData(TChar aVal)			{return MAKE_TUINT64(aVal, sizeof(aVal));}
sl@0
   133
	static inline TUint64 PkgData(TUint8 aVal)			{return MAKE_TUINT64(aVal, sizeof(aVal));}
sl@0
   134
	static inline TUint64 PkgData(TInt8 aVal)			{return MAKE_TUINT64(aVal, sizeof(aVal));}
sl@0
   135
	static inline TUint64 PkgData(TUint16 aVal)			{return MAKE_TUINT64(aVal, sizeof(aVal));}
sl@0
   136
	static inline TUint64 PkgData(TInt16 aVal)			{return MAKE_TUINT64(aVal, sizeof(aVal));}
sl@0
   137
	static inline TUint64 PkgData(TUint32 aVal)			{return MAKE_TUINT64(aVal, sizeof(aVal));}
sl@0
   138
	static inline TUint64 PkgData(TInt32 aVal)			{return MAKE_TUINT64(aVal, sizeof(aVal));}
sl@0
   139
	static inline TUint64 PkgData(TUint aVal)			{return MAKE_TUINT64(aVal, sizeof(aVal));}
sl@0
   140
	static inline TUint64 PkgData(TInt aVal)			{return MAKE_TUINT64(aVal, sizeof(aVal));}
sl@0
   141
	
sl@0
   142
#endif	// __KERNEL_MODE__
sl@0
   143
sl@0
   144
private:
sl@0
   145
sl@0
   146
	};
sl@0
   147
sl@0
   148
// This class is used to reconstruct an RMessage2 object from a message handle so that we can 
sl@0
   149
// call RMessagePtr2::Client() and then RThread::Id() to retrieve the client's thread Id.
sl@0
   150
// This is useful for matching client requests to calls to the proxydrive
sl@0
   151
class RDummyMessage : public RMessage2
sl@0
   152
	{
sl@0
   153
public:
sl@0
   154
	inline RDummyMessage(TInt aHandle) {iHandle = aHandle; iFunction=-1;}
sl@0
   155
	};
sl@0
   156
sl@0
   157
sl@0
   158
sl@0
   159
#ifdef SYMBIAN_FTRACE_ENABLE
sl@0
   160
sl@0
   161
	// Use these macros for tracing 1-8 TUints...
sl@0
   162
	#define TRACE0(aClassification, aFormatId, aUid)								Trace1(aClassification, aFormatId, aUid, 0)
sl@0
   163
	#define TRACE1(aClassification, aFormatId, aUid, a1)							Trace1(aClassification, aFormatId, aUid, (TUint) a1)
sl@0
   164
	#define TRACE2(aClassification, aFormatId, aUid, a1, a2)						TraceN(aClassification, aFormatId, aUid, 2, (TUint) a1, (TUint) a2)
sl@0
   165
	#define TRACE3(aClassification, aFormatId, aUid, a1, a2, a3)					TraceN(aClassification, aFormatId, aUid, 3, (TUint) a1, (TUint) a2, (TUint) a3)
sl@0
   166
	#define TRACE4(aClassification, aFormatId, aUid, a1, a2, a3, a4)				TraceN(aClassification, aFormatId, aUid, 4, (TUint) a1, (TUint) a2, (TUint) a3, (TUint) a4)
sl@0
   167
	#define TRACE5(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5)			TraceN(aClassification, aFormatId, aUid, 5, (TUint) a1, (TUint) a2, (TUint) a3, (TUint) a4, (TUint) a5)
sl@0
   168
	#define TRACE6(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6)		TraceN(aClassification, aFormatId, aUid, 6, (TUint) a1, (TUint) a2, (TUint) a3, (TUint) a4, (TUint) a5, (TUint) a6)
sl@0
   169
	#define TRACE7(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6, a7)	TraceN(aClassification, aFormatId, aUid, 7, (TUint) a1, (TUint) a2, (TUint) a3, (TUint) a4, (TUint) a5, (TUint) a6, (TUint) a7)
sl@0
   170
	#define TRACE8(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6, a7, a8)TraceN(aClassification, aFormatId, aUid, 8, (TUint) a1, (TUint) a2, (TUint) a3, (TUint) a4, (TUint) a5, (TUint) a6, (TUint) a7, (TUint) a8)
sl@0
   171
sl@0
   172
	#define TRACESTR(aClassification, aFormatId, aUid, aData, aDataSize)			TraceStr(aClassification, aFormatId, aUid, aData, aDataSize)
sl@0
   173
sl@0
   174
	#define RFTRACE_LOAD							\
sl@0
   175
		User::LoadLogicalDevice(_L("D_FTRACE"));	
sl@0
   176
sl@0
   177
	// macros for opening and closing the trace LDD, which is used for tracing arbitrary data types....
sl@0
   178
#if defined(__DLL__)
sl@0
   179
	#define RFTRACE_OPEN							\
sl@0
   180
		RFTrace TheFtrace;							\
sl@0
   181
		TheFtrace.SetHandle((TInt) Dll::Tls());		\
sl@0
   182
		if (TheFtrace.Handle() == NULL)				\
sl@0
   183
			{										\
sl@0
   184
			TheFtrace.Open(EOwnerThread);			\
sl@0
   185
			Dll::SetTls((TAny*) TheFtrace.Handle());\
sl@0
   186
			}
sl@0
   187
sl@0
   188
	#define RFTRACE_CLOSE							\
sl@0
   189
		{											\
sl@0
   190
		RFTrace ftrace;								\
sl@0
   191
		TInt handle = (TInt) Dll::Tls();			\
sl@0
   192
		ftrace.SetHandle(handle);					\
sl@0
   193
		ftrace.Close();								\
sl@0
   194
		Dll::SetTls(NULL);							\
sl@0
   195
		}		
sl@0
   196
#else
sl@0
   197
	extern RFTrace TheFtrace;
sl@0
   198
	#define RFTRACE_OPEN
sl@0
   199
	#define RFTRACE_CLOSE 
sl@0
   200
#endif
sl@0
   201
	
sl@0
   202
	// Use these macros for tracing 1-8 arbitrary data types....
sl@0
   203
	#define TRACEMULT1(aClassification, aFormatId, aUid, a1)						\
sl@0
   204
		if (BTrace::CheckFilter2(aClassification, aUid))								\
sl@0
   205
			{																			\
sl@0
   206
			RFTRACE_OPEN																\
sl@0
   207
			TheFtrace.TraceMultiple(aClassification,aFormatId,aUid,1,RFTrace::PkgData(a1));	\
sl@0
   208
			}
sl@0
   209
sl@0
   210
	#define TRACEMULT2(aClassification, aFormatId, aUid, a1, a2)					\
sl@0
   211
		if (BTrace::CheckFilter2(aClassification, aUid))								\
sl@0
   212
			{																			\
sl@0
   213
			RFTRACE_OPEN																\
sl@0
   214
			TheFtrace.TraceMultiple(aClassification,aFormatId,aUid,2,RFTrace::PkgData(a1),RFTrace::PkgData(a2));	\
sl@0
   215
			}
sl@0
   216
sl@0
   217
	#define TRACEMULT3(aClassification, aFormatId, aUid, a1, a2, a3)				\
sl@0
   218
		if (BTrace::CheckFilter2(aClassification, aUid))								\
sl@0
   219
			{																			\
sl@0
   220
			RFTRACE_OPEN																\
sl@0
   221
			TheFtrace.TraceMultiple(aClassification,aFormatId,aUid,3,RFTrace::PkgData(a1),RFTrace::PkgData(a2),RFTrace::PkgData(a3)); \
sl@0
   222
			}
sl@0
   223
sl@0
   224
	#define TRACEMULT4(aClassification, aFormatId, aUid, a1, a2, a3, a4)			\
sl@0
   225
		if (BTrace::CheckFilter2(aClassification, aUid))								\
sl@0
   226
			{																			\
sl@0
   227
			RFTRACE_OPEN																\
sl@0
   228
			TheFtrace.TraceMultiple(aClassification,aFormatId,aUid,4,RFTrace::PkgData(a1),RFTrace::PkgData(a2),RFTrace::PkgData(a3),RFTrace::PkgData(a4)); \
sl@0
   229
			}
sl@0
   230
sl@0
   231
	#define TRACEMULT5(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5)		\
sl@0
   232
		if (BTrace::CheckFilter2(aClassification, aUid))								\
sl@0
   233
			{																			\
sl@0
   234
			RFTRACE_OPEN																\
sl@0
   235
			TheFtrace.TraceMultiple(aClassification,aFormatId,aUid,5,RFTrace::PkgData(a1),RFTrace::PkgData(a2),RFTrace::PkgData(a3),RFTrace::PkgData(a4),RFTrace::PkgData(a5)); \
sl@0
   236
			}
sl@0
   237
sl@0
   238
	#define TRACEMULT6(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6)	\
sl@0
   239
		if (BTrace::CheckFilter2(aClassification, aUid))								\
sl@0
   240
			{																			\
sl@0
   241
			RFTRACE_OPEN																\
sl@0
   242
			TheFtrace.TraceMultiple(aClassification,aFormatId,aUid,6,RFTrace::PkgData(a1),RFTrace::PkgData(a2),RFTrace::PkgData(a3),RFTrace::PkgData(a4),RFTrace::PkgData(a5),RFTrace::PkgData(a6)); \
sl@0
   243
			}
sl@0
   244
sl@0
   245
	#define TRACEMULT7(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6, a7)\
sl@0
   246
		if (BTrace::CheckFilter2(aClassification, aUid))								\
sl@0
   247
			{																			\
sl@0
   248
			RFTRACE_OPEN																\
sl@0
   249
			TheFtrace.TraceMultiple(aClassification,aFormatId,aUid,7,RFTrace::PkgData(a1),RFTrace::PkgData(a2),RFTrace::PkgData(a3),RFTrace::PkgData(a4),RFTrace::PkgData(a5),RFTrace::PkgData(a6),RFTrace::PkgData(a7)); \
sl@0
   250
			}
sl@0
   251
sl@0
   252
	#define TRACEMULT8(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6, a7, a8)\
sl@0
   253
		if (BTrace::CheckFilter2(aClassification, aUid))								\
sl@0
   254
			{																			\
sl@0
   255
			RFTRACE_OPEN																\
sl@0
   256
			TheFtrace.TraceMultiple(aClassification,aFormatId,aUid,8,RFTrace::PkgData(a1),RFTrace::PkgData(a2),RFTrace::PkgData(a3),RFTrace::PkgData(a4),RFTrace::PkgData(a5),RFTrace::PkgData(a6),RFTrace::PkgData(a7),RFTrace::PkgData(a8)); \
sl@0
   257
			}
sl@0
   258
sl@0
   259
sl@0
   260
	// This macro retrieves the client thread ID from a message, which is useful for 
sl@0
   261
	// associating server-side requests with client threads
sl@0
   262
	#define TRACETHREADID(aMsg)												\
sl@0
   263
		RThread clientThread;												\
sl@0
   264
		TInt64 threadId = KLocalMessageHandle;								\
sl@0
   265
		if (aMsg.Handle()!=KLocalMessageHandle)								\
sl@0
   266
			{																\
sl@0
   267
			if (aMsg.Client(clientThread) == KErrNone)						\
sl@0
   268
				{															\
sl@0
   269
				threadId = clientThread.Id();								\
sl@0
   270
				clientThread.Close();										\
sl@0
   271
				}															\
sl@0
   272
			}																
sl@0
   273
sl@0
   274
	// This macro retrieves the client thread ID from a message handle
sl@0
   275
	#define TRACETHREADIDH(aMsgHandle)			\
sl@0
   276
		RDummyMessage msg(aMsgHandle);			\
sl@0
   277
		TRACETHREADID(msg);		
sl@0
   278
sl@0
   279
sl@0
   280
	// Use these macros for tracing a return code followed by 1-7 TUints...
sl@0
   281
	// If the return code is negative the UTF::EError classification is used IF ENABLED  - otherwise the passed classification is used
sl@0
   282
	#define TRACERET1(aClassification, aFormatId, aUid, r)								TRACE1( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r);
sl@0
   283
	#define TRACERET2(aClassification, aFormatId, aUid, r, a2)							TRACE2( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2)
sl@0
   284
	#define TRACERET3(aClassification, aFormatId, aUid, r, a2, a3)						TRACE3( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3)
sl@0
   285
	#define TRACERET4(aClassification, aFormatId, aUid, r, a2, a3, a4)					TRACE4( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3, a4)
sl@0
   286
	#define TRACERET5(aClassification, aFormatId, aUid, r, a2, a3, a4, a5)				TRACE5( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3, a4, a5)
sl@0
   287
	#define TRACERET6(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6)			TRACE6( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3, a4, a5, a6)
sl@0
   288
	#define TRACERET7(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6, a7)		TRACE7( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3, a4, a5, a6, a7)
sl@0
   289
	#define TRACERET8(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6, a7, a8)	TRACE8( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3, a4, a5, a6, a7, a8)
sl@0
   290
sl@0
   291
	// Use these macros for tracing a return code followed by 1-7 arbitrary data types....
sl@0
   292
	// If the return code is negative the UTF::EError classification is used IF ENABLED  - otherwise the passed classification is used
sl@0
   293
	#define TRACERETMULT1(aClassification, aFormatId, aUid, r)								TRACEMULT1( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r);
sl@0
   294
	#define TRACERETMULT2(aClassification, aFormatId, aUid, r, a2)							TRACEMULT2( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2)
sl@0
   295
	#define TRACERETMULT3(aClassification, aFormatId, aUid, r, a2, a3)						TRACEMULT3( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3)
sl@0
   296
	#define TRACERETMULT4(aClassification, aFormatId, aUid, r, a2, a3, a4)					TRACEMULT4( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3, a4)
sl@0
   297
	#define TRACERETMULT5(aClassification, aFormatId, aUid, r, a2, a3, a4, a5)				TRACEMULT5( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3, a4, a5)
sl@0
   298
	#define TRACERETMULT6(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6)			TRACEMULT6( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3, a4, a5, a6)
sl@0
   299
	#define TRACERETMULT7(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6, a7)		TRACEMULT7( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3, a4, a5, a6, a7)
sl@0
   300
	#define TRACERETMULT8(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6, a7, a8)	TRACEMULT8( (TClassification) ((r < 0 && BTrace::CheckFilter2(UTF::EError, aUid)) ? UTF::EError : aClassification), aFormatId, aUid, r, a2, a3, a4, a5, a6, a7, a8)
sl@0
   301
sl@0
   302
sl@0
   303
#else		// #ifdef SYMBIAN_FTRACE_ENABLE
sl@0
   304
	#define TRACE0(aClassification, aFormatId, aUid)
sl@0
   305
	#define TRACE1(aClassification, aFormatId, aUid, a1)
sl@0
   306
	#define TRACE2(aClassification, aFormatId, aUid, a1, a2)
sl@0
   307
	#define TRACE3(aClassification, aFormatId, aUid, a1, a2, a3)
sl@0
   308
	#define TRACE4(aClassification, aFormatId, aUid, a1, a2, a3, a4)
sl@0
   309
	#define TRACE5(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5)
sl@0
   310
	#define TRACE6(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6)
sl@0
   311
	#define TRACE7(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6, a7)
sl@0
   312
	#define TRACE8(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6, a7, a8)
sl@0
   313
	#define TRACESTR(aClassification, aFormatId, aUid, aData, aDataSize)
sl@0
   314
sl@0
   315
	#define RFTRACE_LOAD
sl@0
   316
	#define RFTRACE_OPEN
sl@0
   317
	#define RFTRACE_CLOSE
sl@0
   318
sl@0
   319
	#define TRACEMULT1(aClassification, aFormatId, aUid, a1)
sl@0
   320
	#define TRACEMULT2(aClassification, aFormatId, aUid, a1, a2)
sl@0
   321
	#define TRACEMULT3(aClassification, aFormatId, aUid, a1, a2, a3)
sl@0
   322
	#define TRACEMULT4(aClassification, aFormatId, aUid, a1, a2, a3, a4)
sl@0
   323
	#define TRACEMULT5(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5)
sl@0
   324
	#define TRACEMULT6(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6)
sl@0
   325
	#define TRACEMULT7(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6, a7)
sl@0
   326
	#define TRACEMULT8(aClassification, aFormatId, aUid, a1, a2, a3, a4, a5, a6, a7, a8)
sl@0
   327
	#define TRACETHREADID(aMsg)
sl@0
   328
	#define TRACETHREADIDH(aMsgHandle)
sl@0
   329
sl@0
   330
	#define TRACERET1(aClassification, aFormatId, aUid, r)
sl@0
   331
	#define TRACERET2(aClassification, aFormatId, aUid, r, a2)
sl@0
   332
	#define TRACERET3(aClassification, aFormatId, aUid, r, a2, a3)
sl@0
   333
	#define TRACERET4(aClassification, aFormatId, aUid, r, a2, a3, a4)
sl@0
   334
	#define TRACERET5(aClassification, aFormatId, aUid, r, a2, a3, a4, a5)
sl@0
   335
	#define TRACERET6(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6)
sl@0
   336
	#define TRACERET7(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6, a7)
sl@0
   337
	#define TRACERET8(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6, a7, a8)
sl@0
   338
sl@0
   339
	#define TRACERETMULT1(aClassification, aFormatId, aUid, r)
sl@0
   340
	#define TRACERETMULT2(aClassification, aFormatId, aUid, r, a2)
sl@0
   341
	#define TRACERETMULT3(aClassification, aFormatId, aUid, r, a2, a3)
sl@0
   342
	#define TRACERETMULT4(aClassification, aFormatId, aUid, r, a2, a3, a4)
sl@0
   343
	#define TRACERETMULT5(aClassification, aFormatId, aUid, r, a2, a3, a4, a5)
sl@0
   344
	#define TRACERETMULT6(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6)
sl@0
   345
	#define TRACERETMULT7(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6, a7)
sl@0
   346
	#define TRACERETMULT8(aClassification, aFormatId, aUid, r, a2, a3, a4, a5, a6, a7, a8)
sl@0
   347
#endif
sl@0
   348
sl@0
   349
sl@0
   350
sl@0
   351
sl@0
   352
#endif
sl@0
   353