author | Mike Kinghan <mikek@symbian.org> |
Thu, 25 Nov 2010 14:35:45 +0000 | |
branch | GCC_SURGE |
changeset 305 | 1ba12ef4ef89 |
parent 160 | 30e086416910 |
permissions | -rw-r--r-- |
0 | 1 |
// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). |
2 |
// All rights reserved. |
|
3 |
// This component and the accompanying materials are made available |
|
4 |
// under the terms of the License "Eclipse Public License v1.0" |
|
5 |
// which accompanies this distribution, and is available |
|
6 |
// at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 |
// |
|
8 |
// Initial Contributors: |
|
9 |
// Nokia Corporation - initial contribution. |
|
10 |
// |
|
11 |
// Contributors: |
|
12 |
// |
|
13 |
// Description: |
|
14 |
// Trace API |
|
15 |
// @internalTechnology |
|
16 |
// @prototype |
|
17 |
// |
|
18 |
||
19 |
#ifndef TRACEUTILS_H_ |
|
20 |
#define TRACEUTILS_H_ |
|
21 |
#include <e32btrace.h> |
|
22 |
||
23 |
namespace UTF |
|
24 |
{ |
|
25 |
||
26 |
/** |
|
27 |
Maximum length of a formatted string |
|
28 |
*/ |
|
29 |
const static TInt KMaxPrintfSize = 256; |
|
30 |
||
31 |
/** |
|
32 |
Dummy class to toss away overflow |
|
33 |
@internalComponent |
|
34 |
*/ |
|
35 |
#ifndef __KERNEL_MODE__ |
|
36 |
class TTruncateOverflow16 : public TDes16Overflow |
|
37 |
{ |
|
38 |
public: |
|
39 |
virtual void Overflow(TDes&) {}; |
|
40 |
}; |
|
41 |
||
42 |
/** |
|
43 |
Dummy class to toss away overflow |
|
44 |
@internalComponent |
|
45 |
*/ |
|
46 |
class TTruncateOverflow8 : public TDes8Overflow |
|
47 |
{ |
|
48 |
public: |
|
49 |
virtual void Overflow(TDes8&) {}; |
|
50 |
}; |
|
51 |
#endif //__KERNEL_MODE__ |
|
52 |
||
53 |
||
54 |
/**@internalComponent*/ |
|
55 |
#define UTRACE_HEADER(aSize,aClassification,aContext,aPc) \ |
|
56 |
((((aSize) + (aContext?4:0) + (aPc?4:0)) << BTrace::ESizeIndex*8) \ |
|
57 |
+(((aContext?BTrace::EContextIdPresent:0) | (aPc?BTrace::EPcPresent:0)) << BTrace::EFlagsIndex*8) \ |
|
58 |
+((aClassification) << BTrace::ECategoryIndex*8) \ |
|
59 |
+((0) << BTrace::ESubCategoryIndex*8)) |
|
60 |
||
61 |
||
62 |
/**@internalComponent*/ |
|
63 |
#define UTRACE_SECONDARY_0(aClassification,aModuleUid,aThreadIdPresent,aPcPresent,aPc,aFormatId) \ |
|
64 |
BTrace::OutFilteredPcFormatBig(UTRACE_HEADER(8,aClassification,aThreadIdPresent,aPcPresent),(TUint32)(aModuleUid),aPc,aFormatId,0,0) |
|
65 |
||
66 |
/** @internalComponent */ |
|
67 |
#define UTRACE_SECONDARY_1(aClassification,aModuleUid,aThreadIdPresent,aPcPresent,aPc,aFormatId, aData1) \ |
|
68 |
BTrace::OutFilteredPcFormatBig(UTRACE_HEADER(8,aClassification,aThreadIdPresent,aPcPresent),(TUint32)(aModuleUid),aPc,aFormatId,&aData1,4) |
|
69 |
||
70 |
/** |
|
71 |
* @internalComponent |
|
72 |
* @prototype |
|
73 |
*/ |
|
74 |
#define UTRACE_SECONDARY_ANY(aClassification, aModuleUid, aThreadIdPresent, aPcPresent, aPc, aFormatId, aData, aDataSize) \ |
|
75 |
BTrace::OutFilteredPcFormatBig(UTRACE_HEADER(8,aClassification,aThreadIdPresent,aPcPresent),(TUint32)(aModuleUid),aPc,aFormatId,aData,(TInt)(aDataSize)) |
|
76 |
||
77 |
||
78 |
#ifdef __MARM_ARMV5__ |
|
79 |
//armv5 |
|
160
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
80 |
#if defined(__GCCE__) |
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
81 |
#define GET_PC(pc) \ |
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
82 |
TUint32 pc = 0; \ |
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
83 |
asm("mov %[res], %[val]" : [res] "=r" (pc) : [val] "r" (__builtin_return_address(0))) |
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
84 |
#elif defined(__ARMCC__) |
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
85 |
#define GET_PC(pc) \ |
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
86 |
TUint32 pc = 0; \ |
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
87 |
asm("mov pc, __return_address()") |
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
88 |
#else |
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
89 |
#error What compiler? |
30e086416910
Fix for Bug 2984 - [GCCE] Illegal inline assembler in kernel/eka/debug/utrace/src/e32utrace.cpp
mikek
parents:
0
diff
changeset
|
90 |
#endif |
0 | 91 |
#elif __MARM_ARM4__ |
92 |
//arm4 not implemented yet! |
|
93 |
#define GET_PC(pc) \ |
|
94 |
TUint32 pc = 0; |
|
95 |
#elif __WINS__ |
|
96 |
//wins |
|
97 |
#define GET_PC(pc) \ |
|
98 |
TUint32 pc = 0; \ |
|
99 |
_asm push edx \ |
|
100 |
_asm mov edx, [ebp+4] \ |
|
101 |
_asm mov [pc], edx \ |
|
102 |
_asm pop edx |
|
103 |
//This is instead of doing "asm(mov pc, ebp+4)" as that gives warnings about registers being spilled. |
|
104 |
#elif __X86__ |
|
105 |
//x86 not implemented yet! |
|
106 |
#define GET_PC(pc) \ |
|
107 |
TUint32 pc = 0; |
|
108 |
/* asm("push edx"); \ |
|
109 |
asm("mov %0, [edx+4]": "=r" (pc)); \ |
|
110 |
asm("pop edx") */ |
|
111 |
#else |
|
112 |
//other platforms |
|
113 |
#define GET_PC(pc) \ |
|
114 |
TUint32 pc = 0; |
|
115 |
#endif |
|
116 |
||
117 |
}//namespace UTF |
|
118 |
#endif /*TRACEUTILS_H_*/ |