diff -r 000000000000 -r a41df078684a kernel/eka/debug/utrace/inc/traceutils.h --- /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 + +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_*/