kernel/eka/debug/utrace/inc/traceutils.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/debug/utrace/inc/traceutils.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,110 @@
+// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Trace API
+// @internalTechnology
+// @prototype
+//
+
+#ifndef TRACEUTILS_H_
+#define TRACEUTILS_H_
+#include <e32btrace.h>
+
+namespace UTF
+{
+
+/**
+Maximum length of a formatted string
+*/
+const static TInt KMaxPrintfSize = 256;
+
+/**
+Dummy class to toss away overflow
+@internalComponent
+*/
+#ifndef __KERNEL_MODE__
+class TTruncateOverflow16 : public TDes16Overflow
+	{
+	public:
+	virtual void Overflow(TDes&) {};
+	};
+
+/**
+Dummy class to toss away overflow
+@internalComponent
+*/
+class TTruncateOverflow8 : public TDes8Overflow
+	{
+	public:
+	virtual void Overflow(TDes8&) {};
+	};
+#endif  //__KERNEL_MODE__
+
+
+/**@internalComponent*/
+#define UTRACE_HEADER(aSize,aClassification,aContext,aPc)																\
+	((((aSize) + (aContext?4:0) + (aPc?4:0)) << BTrace::ESizeIndex*8)										\
+	+(((aContext?BTrace::EContextIdPresent:0) | (aPc?BTrace::EPcPresent:0)) << BTrace::EFlagsIndex*8)			\
+	+((aClassification) << BTrace::ECategoryIndex*8)																				\
+	+((0) << BTrace::ESubCategoryIndex*8))
+
+
+/**@internalComponent*/
+#define UTRACE_SECONDARY_0(aClassification,aModuleUid,aThreadIdPresent,aPcPresent,aPc,aFormatId)	\
+	BTrace::OutFilteredPcFormatBig(UTRACE_HEADER(8,aClassification,aThreadIdPresent,aPcPresent),(TUint32)(aModuleUid),aPc,aFormatId,0,0)
+
+/** @internalComponent */
+#define UTRACE_SECONDARY_1(aClassification,aModuleUid,aThreadIdPresent,aPcPresent,aPc,aFormatId, aData1) \
+	BTrace::OutFilteredPcFormatBig(UTRACE_HEADER(8,aClassification,aThreadIdPresent,aPcPresent),(TUint32)(aModuleUid),aPc,aFormatId,&aData1,4)
+
+/**
+ * @internalComponent
+ * @prototype
+ */
+#define UTRACE_SECONDARY_ANY(aClassification, aModuleUid, aThreadIdPresent, aPcPresent, aPc, aFormatId, aData, aDataSize) \
+	BTrace::OutFilteredPcFormatBig(UTRACE_HEADER(8,aClassification,aThreadIdPresent,aPcPresent),(TUint32)(aModuleUid),aPc,aFormatId,aData,(TInt)(aDataSize))
+
+
+#ifdef __MARM_ARMV5__
+	//armv5
+#define GET_PC(pc) \
+	TUint32 pc = 0; \
+	asm("mov pc, __return_address()")
+#elif __MARM_ARM4__
+	//arm4 not implemented yet!
+#define GET_PC(pc) \
+	TUint32 pc = 0;
+#elif __WINS__
+	//wins
+#define GET_PC(pc) \
+	TUint32 pc = 0; \
+	_asm push edx \
+	_asm mov edx, [ebp+4] \
+	_asm mov [pc], edx \
+	_asm pop edx
+	//This is instead of doing "asm(mov pc, ebp+4)" as that gives warnings about registers being spilled.
+#elif __X86__ 
+	//x86 not implemented yet!
+#define GET_PC(pc) \
+	TUint32 pc = 0;
+/*	asm("push edx"); \
+	asm("mov %0, [edx+4]": "=r" (pc)); \
+	asm("pop edx") */
+#else
+//other platforms
+#define GET_PC(pc) \
+	TUint32 pc = 0;
+#endif
+
+}//namespace UTF
+#endif /*TRACEUTILS_H_*/