Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h)
Have multiple extension sections in the bld.inf, one for each version
of the compiler. The RVCT version building the tools will build the
runtime libraries for its version, but make sure we extract all the other
versions from zip archives. Also add the archive for RVCT4.
// Copyright (c) 2004-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:
//
/**
@file
@internalTechnology
@released
*/
#ifndef __RM_DEBUG_KERNELDRIVER_H__
#define __RM_DEBUG_KERNELDRIVER_H__
#include <rm_debug_api.h>
/**
Used to store a value read from or written to an ARM register
*/
typedef TUint32 T4ByteRegisterValue;
/**
Provides static methods for accessing the information stored in a TRegisterInfo
object.
*/
class Register
{
public:
static TBool IsCoreReg(const Debug::TRegisterInfo aRegister);
static TBool IsCoproReg(const Debug::TRegisterInfo aRegister);
static TUint32 GetCoreRegId(const Debug::TRegisterInfo aRegister);
static TUint32 GetCRm(const Debug::TRegisterInfo aRegister);
static TUint32 GetCRn(const Debug::TRegisterInfo aRegister);
static TUint32 GetOpcode1(const Debug::TRegisterInfo aRegister);
static TUint32 GetOpcode2(const Debug::TRegisterInfo aRegister);
static TUint32 GetCoproNum(const Debug::TRegisterInfo aRegister);
};
/**
Identify whether aRegister is a core register
@param aRegister register ID to analyse
@return ETrue if core register, EFalse otherwise
*/
inline TBool Register::IsCoreReg(const Debug::TRegisterInfo aRegister)
{
return ((aRegister & 0xff) == 0x0);
}
/**
Identify whether aRegister is a coprocessor register
@param aRegister register ID to analyse
@return ETrue if coprocessor register, EFalse otherwise
*/
inline TBool Register::IsCoproReg(const Debug::TRegisterInfo aRegister)
{
return ((aRegister & 0xff) == 0x1);
}
/**
Get the ID of the core register
@param aRegister register ID to analyse
@return ID of the core register
*/
inline TUint32 Register::GetCoreRegId(const Debug::TRegisterInfo aRegister)
{
return ((aRegister >> 8) & 0xff);
}
/**
Get the CRm value of a coprocessor register
@param aRegister register ID to analyse
@return the CRm value of a coprocessor register
*/
inline TUint32 Register::GetCRm(const Debug::TRegisterInfo aRegister)
{
return ((aRegister >> 16) & 0xf);
}
/**
Get the CRm value of a coprocessor register
@param aRegister register ID to analyse
@return the CRm value of a coprocessor register
*/
inline TUint32 Register::GetCRn(const Debug::TRegisterInfo aRegister)
{
return ((aRegister >> 20) & 0xf);
}
/**
Get the Opcode1 value of a coprocessor register
@param aRegister register ID to analyse
@return the Opcode1 value of a coprocessor register
*/
inline TUint32 Register::GetOpcode1(const Debug::TRegisterInfo aRegister)
{
return ((aRegister >> 24) & 0x8);
}
/**
Get the Opcode2 value of a coprocessor register
@param aRegister register ID to analyse
@return the Opcode2 value of a coprocessor register
*/
inline TUint32 Register::GetOpcode2(const Debug::TRegisterInfo aRegister)
{
return ((aRegister >> 27) & 0x8);
}
/**
Get the coprocessor number of a coprocessor register
@param aRegister register ID to analyse
@return the coprocessor number of a coprocessor register
*/
inline TUint32 Register::GetCoproNum(const Debug::TRegisterInfo aRegister)
{
return ((aRegister >> 8) & 0xff);
}
//
// class TCapsRM_DebugDriver
//
class TCapsRM_DebugDriver
{
public:
TVersion iVersion;
};
/**
Stores listings information for passing between the DSS and the kernel driver
*/
class TListInformation
{
public:
inline TListInformation(const Debug::TListId aType=(Debug::TListId)NULL, const Debug::TListScope aListScope=(Debug::TListScope)NULL, TDes8* aBuffer=NULL, TUint32* aDataSize=NULL, TUint64 aTargetId=0)
: iType(aType),
iListScope(aListScope),
iBuffer(aBuffer),
iDataSize(aDataSize),
iTargetId(aTargetId) {};
public:
Debug::TListId iType;
Debug::TListScope iListScope;
TDes8* iBuffer;
TUint32* iDataSize;
TUint64 iTargetId;
};
/**
Data structure to hold information to the crash flash
(Possibly: Could be expanded to hold on configuration data too)
*/
class TFlashInfo
{
public:
inline TFlashInfo(TUint32 aPos, TUint32* aSize, TDes8* aData)
:iPos(aPos),
iSize(aSize),
iData(aData){};
public:
TUint32 iPos;
TUint32* iSize;
TDes8* iData;
};
//
// class TRM_DebugMemoryInfo
//
class TRM_DebugMemoryInfo
{
public:
inline TRM_DebugMemoryInfo(const TUint32 aAddress, const TUint32 aLength, TDesC8 *aData)
: iAddress(aAddress),
iLength(aLength),
iData(aData) {};
public:
TUint32 iAddress;
TUint32 iLength;
TDesC8* iData;
};
/**
@deprecated
This class is only used by TRK phase 1 functions.
@see TRM_DebugRegisterInformation which offers similar storage suitable for use
with the TRK pahse 2 API.
*/
class TRM_DebugRegisterInfo
{
public:
inline TRM_DebugRegisterInfo(const TInt16 aFirstRegister, const TInt16 aLastRegister, TDesC8 *aValues)
: iFirstRegister(aFirstRegister),
iLastRegister(aLastRegister),
iValues(aValues) {};
public:
TInt16 iFirstRegister;
TInt16 iLastRegister;
TDesC8* iValues;
};
/**
Structure used to store information about registers
*/
class TRM_DebugRegisterInformation
{
public:
inline TRM_DebugRegisterInformation(const TDes8 *aRegisterIds=NULL, TDes8 *aRegisterValues=NULL, TDes8 *aRegisterFlags=NULL)
: iRegisterIds(aRegisterIds),
iRegisterValues(aRegisterValues),
iRegisterFlags(aRegisterFlags) {};
public:
const TDes8* iRegisterIds;
TDes8* iRegisterValues;
TDes8* iRegisterFlags;
};
//
// class TRM_DebugTaskInfo
//
class TRM_DebugTaskInfo
{
public:
inline TRM_DebugTaskInfo(TUint32 aOtherId)
: iId(0),
iOtherId(aOtherId),
iPriority(0) { iName.FillZ(); };
public:
TUint32 iId;
TUint32 iOtherId;
TUint32 iPriority;
TBuf8<KMaxName> iName;
};
//
// class TRM_DebugStepInfo
//
class TRM_DebugStepInfo
{
public:
inline TRM_DebugStepInfo(const TUint32 aStartAddress, const TUint32 aStopAddress, const TBool aStepInto)
: iStartAddress(aStartAddress),
iStopAddress(aStopAddress),
iStepInto(aStepInto) {};
public:
TUint32 iStartAddress;
TUint32 iStopAddress;
TBool iStepInto;
};
//
// class TRM_DebugDriverInfo
//
class TRM_DebugDriverInfo
{
public:
TUint32 iPanic1Address;
TUint32 iPanic2Address;
TUint32 iException1Address;
TUint32 iException2Address;
TUint32 iLibraryLoadedAddress;
TUint32 iUserLibraryEnd;
};
//
// class TRM_DebugProcessInfo
//
class TRM_DebugProcessInfo
{
public:
inline TRM_DebugProcessInfo(TUint32 *aCodeAddress, TUint32 *aDataAddress)
: iCodeAddress(aCodeAddress),
iDataAddress(aDataAddress) {};
public:
TUint32* iCodeAddress;
TUint32* iDataAddress;
};
//
// class TRM_DebugEventActionInfo
//
class TRM_DebugEventActionInfo
{
public:
inline TRM_DebugEventActionInfo(TUint32 aEvent, TUint32 aAction, TUint64 aAgentId)
: iEvent(aEvent),
iAction(aAction),
iAgentId(aAgentId) {};
public:
TUint32 iEvent;
TUint32 iAction;
TUint64 iAgentId;
};
//
// class TRM_DebugEventInfo
//
class TRM_DebugEventInfo
{
public:
inline TRM_DebugEventInfo(TDesC8& aProcessName, TUint32& aBufSize)
: iProcessName(aProcessName),
iBufSize(aBufSize) {};
public:
TDesC8& iProcessName;
TUint32& iBufSize;
};
//
// class TRMD_DebugAgentId
//
class TRM_DebugAgentId
{
public:
inline TRM_DebugAgentId(TUint64 aAgentId)
: iAgentId(aAgentId) {};
public:
TUint64 iAgentId;
};
//
// Class TRMD_DebugCancelInfo
//
class TRMD_DebugCancelInfo
{
public:
inline TRMD_DebugCancelInfo(TUint32 aCancelRequest,TDesC8& aProcessName, TUint64 aAgentId)
: iCancelRequest(aCancelRequest),
iProcessName(aProcessName),
iAgentId(aAgentId) {};
inline TRMD_DebugCancelInfo(void)
: iCancelRequest(0),
iAgentId(0)
{
};
public:
TUint32 iCancelRequest;
TBuf8<KMaxName> iProcessName;
TUint64 iAgentId;
};
class TEventMetaData
{
public:
TBuf8<KMaxName> iTargetProcessName;
TUint64 iDebugAgentProcessId;
};
/**
@internalComponent
*/
class TSetBreakInfo
{
public:
inline TSetBreakInfo(Debug::TBreakId* aBreakId,
TUint64 aId,\
TUint32 aAddress,\
Debug::TArchitectureMode aMode,
TBool aThreadSpecific)
: iBreakId(aBreakId),
iId(aId),
iAddress(aAddress),
iMode(aMode),
iThreadSpecific(aThreadSpecific) {};
inline TSetBreakInfo(void)
: iBreakId((Debug::TBreakId*)0),
iId(0),
iAddress(0),
iMode(Debug::EArmMode),
iThreadSpecific(ETrue) {};
public:
Debug::TBreakId* iBreakId;
TUint64 iId;
TUint32 iAddress;
Debug::TArchitectureMode iMode;
TBool iThreadSpecific;
};
/**
@internalComponent
*/
class TModifyBreakInfo
{
public:
inline TModifyBreakInfo(Debug::TBreakId aBreakId,\
const TUint64 aThreadId,\
const TUint32 aAddress,\
const Debug::TArchitectureMode aMode)
: iBreakId(aBreakId),
iThreadId(aThreadId),
iAddress(aAddress),
iMode(aMode) {};
public:
const Debug::TBreakId iBreakId;
const TUint64 iThreadId;
const TUint32 iAddress;
const Debug::TArchitectureMode iMode;
};
/**
@internalComponent
*/
class TModifyProcessBreakInfo
{
public:
inline TModifyProcessBreakInfo(Debug::TBreakId aBreakId,\
const TUint64 aProcessId,\
const TUint32 aAddress,\
const Debug::TArchitectureMode aMode)
: iBreakId(aBreakId),
iProcessId(aProcessId),
iAddress(aAddress),
iMode(aMode) {};
public:
const Debug::TBreakId iBreakId;
const TUint64 iProcessId;
const TUint32 iAddress;
const Debug::TArchitectureMode iMode;
};
/**
@internalComponent
*/
class TGetBreakInfo
{
public:
inline TGetBreakInfo(Debug::TBreakId aBreakId,\
TUint64& aId,\
TUint32& aAddress,\
Debug::TArchitectureMode& aMode,
TBool& aThreadSpecific)
: iBreakId(aBreakId),
iId(&aId),
iAddress(&aAddress),
iMode(&aMode),
iThreadSpecific(&aThreadSpecific) {};
inline TGetBreakInfo()
: iBreakId((Debug::TBreakId)0),
iId((TUint64*)0),
iAddress((TUint32*)0),
iMode((Debug::TArchitectureMode*)0),
iThreadSpecific((TBool*)0) {};
public:
const Debug::TBreakId iBreakId;
TUint64* iId;
TUint32* iAddress;
Debug::TArchitectureMode* iMode;
TBool* iThreadSpecific;
};
//
// class RRM_DebugDriver
//
class RRM_DebugDriver : public RBusLogicalChannel
{
public:
enum TControl
{
EControlSetBreak = 0,
EControlClearBreak,
EControlModifyBreak,
EControlBreakInfo,
EControlSuspendThread,
EControlResumeThread,
EControlStepRange,
EControlReadMemory,
EControlWriteMemory,
EControlReadRegisters,
EControlWriteRegisters,
EControlGetStaticLibraryInfo,
EControlGetDebugFunctionalityBufSize,
EControlGetDebugFunctionality,
EControlReadRegistersLegacy,
EControlWriteRegistersLegacy,
EControlGetMemoryOperationMaxBlockSize,
EControlAttachProcess,
EControlDetachProcess,
EControlDetachAgent,
EControlSetEventAction,
EControlGetList,
EControlStep,
EControlIsDebuggable,
EControlKillProcess,
EControlModifyProcessBreak,
};
enum TRequest
{
ERequestGetEvent=0x0, ERequestGetEventCancel=0x1
};
public:
inline TInt Open(const TRM_DebugDriverInfo aDriverInfo);
inline TInt SetBreak(Debug::TBreakId &aBreakId,const TUint32 aThreadId, const TUint32 aAddress, const Debug::TArchitectureMode aThumbMode );
inline TInt SetProcessBreak(Debug::TBreakId &aBreakId,const TUint32 aProcessId, const TUint32 aAddress, const Debug::TArchitectureMode aThumbMode );
inline TInt ClearBreak(const TInt32 aBreakId);
inline TInt ModifyBreak(const Debug::TBreakId aBreakId, const TUint32 aThreadId, const TUint32 aAddress, const Debug::TArchitectureMode aArchitectureMode );
inline TInt ModifyProcessBreak(const Debug::TBreakId aBreakId, const TUint32 aProcessId, const TUint32 aAddress, const Debug::TArchitectureMode aArchitectureMode );
inline TInt BreakInfo(const Debug::TBreakId aBreakId, TUint64& aId, TUint32& aAddress, Debug::TArchitectureMode& aMode, TBool& aThreadSpecific);
inline TInt SuspendThread(const TUint32 aThreadId);
inline TInt ResumeThread(const TUint32 aThreadId);
inline TInt StepRange(const TUint32 aThreadId, const TUint32 aStartAddress, const TUint32 aStopAddress, TBool aStepInto);
inline TInt ReadMemory(const TUint32 aThreadId, const TUint32 aAddress, const TUint32 aLength, TDes8 &aData);
inline TInt WriteMemory(const TUint32 aThreadId, const TUint32 aAddress, const TUint32 aLength, const TDesC8 &aData);
inline TInt ReadRegisters(const TUint32 aThreadId, const TDes8 &aRegisterIds, TDes8 &aRegisterValues, TDes8 &aRegisterFlags);
inline TInt WriteRegisters(const TUint32 aThreadId, const TDes8 &aRegisterIds, const TDes8 &aRegisterValues, TDes8 &aRegisterFlags);
inline TInt ReadRegisters(const TUint32 aThreadId, const TInt32 aFirstRegister, const TInt32 aLastRegister, TDes8 &aValues);
inline TInt WriteRegisters(const TUint32 aThreadId, const TInt32 aFirstRegister, const TInt32 aLastRegister, TDesC8 &aValues);
inline void GetEvent(TDesC8& aProcessName, TUint64 aAgentId, TRequestStatus &aStatus, Debug::TEventInfo &aEventInfo);
inline void CancelGetEvent(TDesC8& aProcessName, TUint64 aAgentId);
// inline TInt GetProcessInfo(const TInt aIndex, TRM_DebugTaskInfo &aInfo);
// inline TInt GetThreadInfo(const TInt aIndex, TRM_DebugTaskInfo &aInfo);
inline TInt GetStaticLibraryInfo(const TInt aIndex, Debug::TEventInfo &aInfo);
inline TInt GetDebugFunctionalityBufSize(TUint32 &aBufSize);
inline TInt GetDebugFunctionality(TDes8& aDebugFunctionality);
inline TInt GetMemoryOperationMaxBlockSize(TUint32 &aMaxSize);
inline TInt AttachProcess(TDesC8& aProcessName, TUint64 aAgentId);
inline TInt DetachProcess(TDesC8& aProcessName, TUint64 aAgentId);
inline TInt DetachAgent(TUint64 aAgentId);
inline TInt SetEventAction(TDesC8& aProcessName, Debug::TEventType aEvent, Debug::TKernelEventAction aEventAction, TUint64 aAgentId);
inline TInt GetList(const Debug::TListId aType, const Debug::TListScope aListScope, const TUint64 aTargetId, const TUint64 aDebugProcessId, TDes8& aBuffer, TUint32& aDataSize);
inline TInt Step(const TUint32 aThreadId, const TUint32 aNumSteps);
inline TInt IsDebuggable(const TUint32 aProcessId);
inline TInt KillProcess(const TUint32 aProcessId, const TInt32 aReason);
};
_LIT(KRM_DebugDriverName,"RM Debug Driver");
//priority set equal to that of KDfcThread0Priority defined in e32/kernel/sinit.cpp
const TInt KRmDebugDriverThreadPriority = 27;
// Version information
const TInt KMajorVersionNumber=2;
const TInt KMinorVersionNumber=1;
const TInt KBuildVersionNumber=0;
inline TInt RRM_DebugDriver::Open(const TRM_DebugDriverInfo aDriverInfo)
{
TBuf8<32> buf;
buf.Append((TUint8*)&aDriverInfo.iPanic1Address, 4);
buf.Append((TUint8*)&aDriverInfo.iPanic2Address, 4);
buf.Append((TUint8*)&aDriverInfo.iException1Address, 4);
buf.Append((TUint8*)&aDriverInfo.iException2Address, 4);
buf.Append((TUint8*)&aDriverInfo.iLibraryLoadedAddress, 4);
buf.Append((TUint8*)&aDriverInfo.iUserLibraryEnd, 4);
#ifdef EKA2
return DoCreate(KRM_DebugDriverName, TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber), KNullUnit, NULL, &buf);
#else
return DoCreate(KRM_DebugDriverName, TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber), NULL, KNullUnit, NULL, &buf);
#endif
}
inline TInt RRM_DebugDriver::SetBreak(Debug::TBreakId &aBreakId, const TUint32 aThreadId, const TUint32 aAddress, const Debug::TArchitectureMode aMode )
{
TSetBreakInfo info(&aBreakId, aThreadId, aAddress, aMode, ETrue);
return DoSvControl(EControlSetBreak, reinterpret_cast<TAny*>(&info),0);
}
inline TInt RRM_DebugDriver::SetProcessBreak(Debug::TBreakId &aBreakId, const TUint32 aProcessId, const TUint32 aAddress, const Debug::TArchitectureMode aMode )
{
TSetBreakInfo info(&aBreakId, aProcessId, aAddress, aMode, EFalse);
return DoSvControl(EControlSetBreak, reinterpret_cast<TAny*>(&info),0);
}
inline TInt RRM_DebugDriver::ClearBreak(const Debug::TBreakId aBreakId)
{
return DoSvControl(EControlClearBreak, reinterpret_cast<TAny*>(aBreakId), 0);
}
inline TInt RRM_DebugDriver::ModifyBreak(const Debug::TBreakId aBreakId, const TUint32 aThreadId, const TUint32 aAddress, const Debug::TArchitectureMode aMode)
{
TModifyBreakInfo info(aBreakId, aThreadId, aAddress, aMode);
return DoControl(EControlModifyBreak, reinterpret_cast<TAny*>(&info), 0);
}
inline TInt RRM_DebugDriver::ModifyProcessBreak(const Debug::TBreakId aBreakId, const TUint32 aProcessId, const TUint32 aAddress, const Debug::TArchitectureMode aMode)
{
TModifyProcessBreakInfo info(aBreakId, aProcessId, aAddress, aMode);
return DoControl(EControlModifyProcessBreak, reinterpret_cast<TAny*>(&info), 0);
}
inline TInt RRM_DebugDriver::BreakInfo(const Debug::TBreakId aBreakId, TUint64& aId, TUint32& aAddress, Debug::TArchitectureMode& aMode, TBool& aThreadSpecific)
{
TGetBreakInfo info(aBreakId, aId, aAddress, aMode, aThreadSpecific);
return DoControl(EControlBreakInfo, reinterpret_cast<TAny*>(&info), 0);
}
inline TInt RRM_DebugDriver::SuspendThread(const TUint32 aThreadId)
{
return DoControl(EControlSuspendThread, reinterpret_cast<TAny*>(aThreadId));
}
inline TInt RRM_DebugDriver::ResumeThread(const TUint32 aThreadId)
{
return DoSvControl(EControlResumeThread, reinterpret_cast<TAny*>(aThreadId));
}
inline TInt RRM_DebugDriver::StepRange(const TUint32 aThreadId, const TUint32 aStartAddress, const TUint32 aStopAddress, TBool aStepInto)
{
TRM_DebugStepInfo info(aStartAddress, aStopAddress, aStepInto);
return DoSvControl(EControlStepRange, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
}
inline TInt RRM_DebugDriver::ReadMemory(const TUint32 aThreadId, const TUint32 aAddress, const TUint32 aLength, TDes8 &aData)
{
TRM_DebugMemoryInfo info(aAddress, aLength, &aData);
return DoControl(EControlReadMemory, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
}
inline TInt RRM_DebugDriver::WriteMemory(const TUint32 aThreadId, const TUint32 aAddress, const TUint32 aLength, const TDesC8 &aData)
{
TRM_DebugMemoryInfo info(aAddress, aLength, (TDesC8*)&aData);
return DoControl(EControlWriteMemory, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
}
inline TInt RRM_DebugDriver::ReadRegisters(const TUint32 aThreadId, const TDes8 &aRegisterIds, TDes8 &aRegisterValues, TDes8 &aRegisterFlags)
{
TRM_DebugRegisterInformation info(&aRegisterIds, &aRegisterValues, &aRegisterFlags);
return DoControl(EControlReadRegisters, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
}
inline TInt RRM_DebugDriver::WriteRegisters(const TUint32 aThreadId, const TDes8 &aRegisterIds, const TDes8 &aRegisterValues, TDes8 &aRegisterFlags)
{
TRM_DebugRegisterInformation info(&aRegisterIds, (TDes8*)&aRegisterValues, &aRegisterFlags);
return DoControl(EControlWriteRegisters, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
}
inline TInt RRM_DebugDriver::ReadRegisters(const TUint32 aThreadId, const TInt32 aFirstRegister, const TInt32 aLastRegister, TDes8 &aValues)
{
TRM_DebugRegisterInfo info(aFirstRegister, aLastRegister, &aValues);
return DoControl(EControlReadRegistersLegacy, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
}
inline TInt RRM_DebugDriver::WriteRegisters(const TUint32 aThreadId, const TInt32 aFirstRegister, const TInt32 aLastRegister, TDesC8 &aValues)
{
TRM_DebugRegisterInfo info(aFirstRegister, aLastRegister, &aValues);
return DoControl(EControlWriteRegistersLegacy, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
}
inline void RRM_DebugDriver::GetEvent(TDesC8& aProcessName, TUint64 aAgentId, TRequestStatus &aStatus, Debug::TEventInfo &aEventInfo)
{
// temporary object not needed beyond the DoRequest call
TEventMetaData eventMetaData;
eventMetaData.iTargetProcessName.Copy(aProcessName);
eventMetaData.iDebugAgentProcessId = aAgentId;
DoRequest(ERequestGetEvent, aStatus, (TAny*)&aEventInfo, (TAny*)&eventMetaData);
}
inline void RRM_DebugDriver::CancelGetEvent(TDesC8& aProcessName, TUint64 aAgentId)
{
TRMD_DebugCancelInfo info(ERequestGetEventCancel,aProcessName,aAgentId);
DoCancel(reinterpret_cast<TInt>(&info));
}
inline TInt RRM_DebugDriver::GetStaticLibraryInfo(const TInt aIndex, Debug::TEventInfo &aInfo)
{
return DoControl(EControlGetStaticLibraryInfo, reinterpret_cast<TAny*>(aIndex), (TAny*)&aInfo);
}
inline TInt RRM_DebugDriver::GetDebugFunctionalityBufSize(TUint32 &aBufSize)
{
return DoControl(EControlGetDebugFunctionalityBufSize, reinterpret_cast<TAny*>(&aBufSize));
}
inline TInt RRM_DebugDriver::GetDebugFunctionality(TDes8& aDebugFunctionality)
{
return DoControl(EControlGetDebugFunctionality,reinterpret_cast<TAny*>(&aDebugFunctionality));
}
inline TInt RRM_DebugDriver::GetMemoryOperationMaxBlockSize(TUint32 &aMaxSize)
{
return DoControl(EControlGetMemoryOperationMaxBlockSize, reinterpret_cast<TAny*>(&aMaxSize));
}
inline TInt RRM_DebugDriver::AttachProcess(TDesC8& aProcessName, TUint64 aAgentId)
{
TRM_DebugAgentId info(aAgentId);
return DoControl(EControlAttachProcess,reinterpret_cast<TAny*>(&aProcessName),reinterpret_cast<TAny*>(&info));
}
inline TInt RRM_DebugDriver::DetachProcess(TDesC8& aProcessName, TUint64 aAgentId)
{
TRM_DebugAgentId info(aAgentId);
return DoControl(EControlDetachProcess,reinterpret_cast<TAny*>(&aProcessName),reinterpret_cast<TAny*>(&info));
}
inline TInt RRM_DebugDriver::DetachAgent(TUint64 aAgentId)
{
TRM_DebugAgentId info(aAgentId);
return DoControl(EControlDetachAgent,reinterpret_cast<TAny*>(&info),0);
}
inline TInt RRM_DebugDriver::SetEventAction(TDesC8& aProcessName, Debug::TEventType aEvent, Debug::TKernelEventAction aEventAction, TUint64 aAgentId)
{
TRM_DebugEventActionInfo info (aEvent,aEventAction, aAgentId);
return DoControl(EControlSetEventAction,reinterpret_cast<TAny*>(&aProcessName),(TAny*)&info);
}
inline TInt RRM_DebugDriver::GetList(const Debug::TListId aType, const Debug::TListScope aListScope, const TUint64 aTargetId, const TUint64 aDebugProcessId, TDes8& aBuffer, TUint32& aDataSize)
{
TListInformation info(aType, aListScope, &aBuffer, &aDataSize, aTargetId);
return DoControl(EControlGetList, (TAny*)&info);
}
inline TInt RRM_DebugDriver::Step(const TUint32 aThreadId, const TUint32 aNumSteps)
{
return DoControl(EControlStep,reinterpret_cast<TAny*>(aThreadId),reinterpret_cast<TAny*>(aNumSteps));
}
inline TInt RRM_DebugDriver::IsDebuggable(const TUint32 aProcessId)
{
return DoControl(EControlIsDebuggable,reinterpret_cast<TAny*>(aProcessId),NULL);
}
inline TInt RRM_DebugDriver::KillProcess(const TUint32 aProcessId, const TInt32 aReason)
{
return DoControl(EControlKillProcess,reinterpret_cast<TAny*>(aProcessId),reinterpret_cast<TAny*>(aReason));
}
#endif // __RM_DEBUG_KERNELDRIVER_H__