1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/kernelhwsrv/kerneltest/e32test/debug/d_eventtracker.cia Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,97 @@
1.4 +// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of the License "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// e32test\debug\d_eventtracker.cia
1.18 +//
1.19 +//
1.20 +
1.21 +#include <arm.h>
1.22 +#include "d_eventtracker.h"
1.23 +
1.24 +//////////////////////////////////////////////////////////////////////////////
1.25 +
1.26 +// CIA symbol macros for Gcc98r2
1.27 +#if defined(__GCC32__)
1.28 +
1.29 +#define CSM_ZN13DEventTracker11HandleEventE12TKernelEventPvS1 " HandleEvent__13DEventTracker12TKernelEventPvT2"
1.30 +
1.31 +// CIA symbol macros for RVCT
1.32 +#elif defined(__ARMCC__)
1.33 +
1.34 +#define CSM_ZN13DEventTracker11HandleEventE12TKernelEventPvS1 " __cpp(DEventTracker::HandleEvent)"
1.35 +
1.36 +// CIA symbol macros for EABI assemblers
1.37 +#else
1.38 +
1.39 +#define CSM_ZN13DEventTracker11HandleEventE12TKernelEventPvS1 " _ZN13DEventTracker11HandleEventE12TKernelEventPvS1_"
1.40 +
1.41 +#endif
1.42 +
1.43 +//////////////////////////////////////////////////////////////////////////////
1.44 +
1.45 +__NAKED__ void DEventTracker::BranchToEventHandler()
1.46 +//
1.47 +// Breakpoint to call our event handler
1.48 +//
1.49 + {
1.50 + asm("breakstart: "); // start of breakpoint.
1.51 + asm("mov r3, r2"); // set up regs for call to our handler...
1.52 + asm("mov r2, r1"); //
1.53 + asm("mov r1, r0"); //
1.54 + asm("ldr r0, __TheEventTracker "); // fiddle this pointer
1.55 + asm("ldr r0, [r0] "); // load from TheEventTracker
1.56 + asm("ldr pc, [pc, #-4]" ); // do an absolute jump...
1.57 + asm(".word " CSM_ZN13DEventTracker11HandleEventE12TKernelEventPvS1 ); // to DEventTracker::HandleEvent
1.58 + asm("__TheEventTracker: "); // address of global variable:
1.59 + asm(".word %a0" : : "i" (&TheEventTracker)); // TheEventTracker
1.60 + asm("breakend: "); // end of breakpoint.
1.61 + }
1.62 +
1.63 +__NAKED__ TUint DEventTracker::BreakPointSize()
1.64 +//
1.65 +// Size of breakpoint
1.66 +//
1.67 + {
1.68 + asm("ldr r0, = breakend - breakstart");
1.69 + __JUMP(,lr);
1.70 + }
1.71 +
1.72 +__NAKED__ TUint DEventTracker::DummyHandler(TKernelEvent /*aEvent*/, TAny* /*a1*/, TAny* /*a2*/)
1.73 +//
1.74 +// Debugger breakpoint-able callback. Will be copied into RAM
1.75 +//
1.76 + {
1.77 + //
1.78 + // r0=aEvent, r1=a1, r2=a2
1.79 + //
1.80 + asm("dummystart: "); // start of fn.
1.81 + asm("nop"); // breakpoint-able instruction for the debugger to replace
1.82 + asm("nop"); // landing zone
1.83 + asm("nop"); // landing zone
1.84 + asm("nop"); // landing zone
1.85 + asm("nop"); // landing zone
1.86 + asm("nop"); // landing zone
1.87 + asm("nop"); // landing zone
1.88 + asm("mov r0, #%a0" : : "i" (DKernelEventHandler::ERunNext)); // return value
1.89 + __JUMP(,lr); // return
1.90 + asm("dummyend:"); // end of fn.
1.91 + }
1.92 +
1.93 +__NAKED__ TUint DEventTracker::DummyHandlerSize()
1.94 +//
1.95 +// Size of debugger breakpoint-able callback.
1.96 +//
1.97 + {
1.98 + asm("ldr r0, = dummyend - dummystart");
1.99 + __JUMP(,lr);
1.100 + }