--- /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_*/