diff -r c1f20ce4abcf -r 3e88ff8f41d5 kernel/eka/include/sm_debug_api.h --- a/kernel/eka/include/sm_debug_api.h Tue Aug 31 16:34:26 2010 +0300 +++ b/kernel/eka/include/sm_debug_api.h Wed Sep 01 12:34:56 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2002-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" @@ -23,1454 +23,11 @@ #ifndef D_STOP_MODE_API_H #define D_STOP_MODE_API_H +#include #include -#include -#include - namespace Debug - { - - -/** This is the maximum size in bytes a user trace can be */ -const TInt TUserTraceSize = 256; - -/** - Information in the debug functionality block is represented as a concatenation - of pairs of TTagHeader structures and arrays of TTag objects. - @see TTagHeader - @see RSecuritySvrSession::GetDebugFunctionality - */ -struct TTag -{ - /** Tag ID, value identifying this tag. */ - TUint32 iTagId; - /** - Values correspond to TTagType enumerators. - @see TTagType - */ - TUint16 iType; - /** Size of external data associated with this tag. */ - TUint16 iSize; - /** Data associated with this tag. */ - TUint32 iValue; -}; - -/** - Enumeration defining the supported tag types. These enumerators are used in TTag.iTagId. - @see TTag - */ -enum TTagType -{ - /** Indicates that the iValue field of a TTag structure will contain either ETrue or EFalse. */ - ETagTypeBoolean = 0, - /** Indicates that the iValue field of a TTag structure will contain a value in the TUint32 range. */ - ETagTypeTUint32 = 1, - /** Indicates that the iValue field of a TTag structure will contain values from an enumeration. */ - ETagTypeEnum = 2, - /** Indicates that the iValue field of a TTag structure should be interpreted as a bit field. */ - ETagTypeBitField = 3, - /** Indicates that the type of the iValue field of a TTag structure is unknown. */ - ETagTypeUnknown = 4, - /** Indicates that the iValue field of a TTag structure will contain a pointer. */ - ETagTypePointer = 5 -}; - -/** - Information in the debug functionality block is represented as a concatenation - of pairs of TTagHeader structures and arrays of TTag objects. - @see TTag - @see RSecuritySvrSession::GetDebugFunctionality - */ -struct TTagHeader -{ - /** Value identifying the contents of this TTagHeader, should be interpreted as an enumerator from TTagHeaderId. - @see TTagHeaderId - */ - TUint16 iTagHdrId; - /** The number of TTag elements in the array associated with this TTagHeader. */ - TUint16 iNumTags; -}; - -/** - Enumeration used to identify TTagHeader structures, TTagHeader::iTagHdrId elements take these enumerators as values. - @see TTagHeader - */ -enum TTagHeaderId -{ - ETagHeaderIdCore = 0, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityCore. */ - ETagHeaderIdMemory = 1, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityMemory. */ - /** - Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityRegister. - These values are defined as in the document Symbian Core Dump File Format Appendix C - (see SGL.TS0028.027 - Symbian Core Dump File Format v1.0.doc). - The TTag objects in the associated array have an iSize value corresponding to the size of the register's data in bytes. - */ - ETagHeaderIdRegistersCore = 2, - /** - Identifies a TTagHeader with associated TTag elements with iTagId values corresponding to coprocessor register identifiers. - Coprocessor registers are defined as in the document Symbian Core Dump File Format Appendix C as follows - (see SGL.TS0028.027 - Symbian Core Dump File Format v1.0.doc): - - For each 32-bit data word defining a co-pro register, the definition of the meaning of the bits follows - the ARM Architecture Reference manual instruction coding - - Upper Halfword Lower Halfword - Opcode 2 CRm - - For example: The Domain Access Control Register is Register 3 of co-processor 15. The encoding is therefore - CRm = 3 - Opcode2 = 0 - - Therefore the functionality tag would be: - TagID: 15 // co-processor number - Type: ETagTypeTUint32 - Data: 0x00000003 // Opcode2 = 0, CRm = 3 - */ - ETagHeaderIdCoProRegisters = 3, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityRegister. */ - ETagHeaderIdBreakpoints = 4, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityBreakpoint. */ - ETagHeaderIdStepping = 5, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityStep. */ - ETagHeaderIdExecution = 6, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityExec. */ - ETagHeaderIdEvents = 7, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TEventType. */ - ETagHeaderIdApiConstants = 8, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityApiConstants.*/ - ETagHeaderList = 9, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TListId. */ - ETagHeaderIdKillObjects = 10, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityKillObject. */ - ETagHeaderIdSecurity = 11, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalitySecurity */ - ETagHeaderIdBuffers = 12, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TBufferType. */ - ETagHeaderIdStopModeFunctions = 13, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityStopModeFunctions. */ -}; - -/** - This structure is not used in the run-mode debug API. - @deprecated - */ -struct TSubBlock -{ - /** Header to identify the TSubBlock. */ - TTagHeader iHeader; - /** Pointer to array of TTag values associated with this TSubBlock. */ - TTag* iTagArray; -}; - -/** - These tags define what kinds of core functionality are supported by the run-mode debug subsystem. - TTag structures associated with the ETagHeaderIdCore sub-block will have iTagId values from this enumeration. - See each enumerator for an explanation of how a TTag with that iTagId should be interpreted. - */ -enum TFunctionalityCore -{ - ECoreEvents = 0, /**< Indicates whether events processing is supported. */ - ECoreStartStop = 1, /**< Indicates whether suspending and resuming threads is supported. */ - ECoreMemory = 2, /**< Indicates whether reading and writing memory is supported. */ - ECoreRegister = 3, /**< Indicates whether reading and writing register values is supported. */ - ECoreBreakpoint = 4, /**< Indicates whether breakpoints are supported. */ - ECoreStepping = 5, /**< Indicates whether stepping is supported. */ - ECoreLists = 6, /**< Indicates whether listings are supported. */ - ECoreLogging = 7, /**< Indicates whether logging is supported. */ - ECoreHardware = 8, /**< Indicates whether hardware support is supported. */ - ECoreApiConstants = 9, /**< Indicates whether the information in the ETagHeaderIdApiConstants sub-block is relevant. */ - ECoreKillObjects = 10, /**< Indicates whether killing objects (i.e. threads and processes) is supported. */ - ECoreSecurity = 11, /**< Indicates whether OEM Debug token support or other security info is supported. */ - ECoreStopModeFunctions = 12, /**< Indicates whether Stop Mode function calling is supported. */ - ECoreStopModeBuffers = 13, /**< Indicates whether Stop Mode buffers are supported. */ - - /** - @internalTechnology - A debug agent should find the number of core tags from the DFBlock rather than this enumerator. - */ - ECoreLast -}; - -/** - These tags define what kind of memory operations can be performed. - TTag structures associated with the ETagHeaderIdMemory sub-block will have iTagId values from this enumeration. - See each enumerator for an explanation of how a TTag with that iTagId should be interpreted. - */ -enum TFunctionalityMemory -{ - EMemoryRead = 0, /**< Indicates whether reading memory is supported. */ - EMemoryWrite = 1, /**< Indicates whether writing memory is supported. */ - EMemoryAccess64 = 2, /**< Indicates whether 64 bit memory access is supported. */ - EMemoryAccess32 = 3, /**< Indicates whether 32 bit memory access is supported. */ - EMemoryAccess16 = 4, /**< Indicates whether 16 bit memory access is supported. */ - EMemoryAccess8 = 5, /**< Indicates whether 8 bit memory access is supported. */ - EMemoryBE8 = 6, /**< Indicates whether reading memory as 8 bit big-endian values is supported. */ - EMemoryBE32 = 7, /**< Indicates whether reading memory as 32 bit big-endian values is supported. */ - EMemoryLE8 = 8, /**< Indicates whether reading memory as 8 bit little-endian values is supported. */ - EMemoryMaxBlockSize = 9, /**< Corresponds to the maximum size of a block of memory which can be requested. */ - /** - @internalTechnology - A debug agent should find the number of memory tags from the DFBlock rather than this enumerator. - */ - EMemoryLast -}; - -/** - These tags define which objects can be killed by the device driver. - TTag structures associated with the ETagHeaderIdKillObjects sub-block will have iTagId values from this enumeration. - See each enumerator for an explanation of how a TTag with that iTagId should be interpreted. - */ -enum TFunctionalityKillObject -{ - EFunctionalityKillThread = 0, /**< Indicates whether killing threads is supported. */ - EFunctionalityKillProcess = 1, /**< Indicates whether killing processes is supported. */ - /** - @internalTechnology - A debug agent should find the number of kill object tags from the DFBlock rather than this enumerator. - */ - EFunctionalityKillObjectLast -}; - -/** - A TTag with an id from the TFunctionalityRegister enum will have a value from this enumeration. - The values define how a register can be accessed, if at all. - */ -enum TFunctionalityAccess -{ - EAccessNone = 0, /**< Indicates that a register cannot be accessed. */ - EAccessReadOnly = 1, /**< Indicates that a register can be read, but not written to. */ - EAccessWriteOnly = 2, /**< Indicates that a register can be written to, but not read. */ - EAccessReadWrite = 3, /**< Indicates that a register can be both read and written to. */ - EAccessUnknown = 4, /**< Indicates that it is unspecified whether reading or writing to a register is possible. */ -}; - -/** - These enumerators act as core register identifiers. - TTag structures associated with the ETagHeaderIdRegistersCore sub-block will have iTagId values from this enumeration. - The numeric value of each enumerator identifies the register according to the definitions in the Symbian Core Dump File Format Appendix B - (see SGL.TS0028.027 - Symbian Core Dump File Format v1.0.doc). - */ -enum TFunctionalityRegister -{ - ERegisterR0 = 0x00000000, /**< Identifier for user mode register R0. */ - ERegisterR1 = 0x00000100, /**< Identifier for user mode register R1. */ - ERegisterR2 = 0x00000200, /**< Identifier for user mode register R2. */ - ERegisterR3 = 0x00000300, /**< Identifier for user mode register R3. */ - ERegisterR4 = 0x00000400, /**< Identifier for user mode register R4. */ - ERegisterR5 = 0x00000500, /**< Identifier for user mode register R5. */ - ERegisterR6 = 0x00000600, /**< Identifier for user mode register R6. */ - ERegisterR7 = 0x00000700, /**< Identifier for user mode register R7. */ - ERegisterR8 = 0x00000800, /**< Identifier for user mode register R8. */ - ERegisterR9 = 0x00000900, /**< Identifier for user mode register R9. */ - ERegisterR10 = 0x00000a00, /**< Identifier for user mode register R10. */ - ERegisterR11 = 0x00000b00, /**< Identifier for user mode register R11. */ - ERegisterR12 = 0x00000c00, /**< Identifier for user mode register R12. */ - ERegisterR13 = 0x00000d00, /**< Identifier for user mode register R13. */ - ERegisterR14 = 0x00000e00, /**< Identifier for user mode register R14. */ - ERegisterR15 = 0x00000f00, /**< Identifier for user mode register R15. */ - ERegisterCpsr = 0x00001000, /**< Identifier for CPSR. */ - ERegisterR13Svc = 0x00001100, /**< Identifier for R13 supervisor mode banked register. */ - ERegisterR14Svc = 0x00001200, /**< Identifier for R14 supervisor mode banked register. */ - ERegisterSpsrSvc = 0x00001300, /**< Identifier for SPSR supervisor mode banked register. */ - ERegisterR13Abt = 0x00001400, /**< Identifier for R13 Abort mode banked register. */ - ERegisterR14Abt = 0x00001500, /**< Identifier for R14 Abort mode banked register. */ - ERegisterSpsrAbt = 0x00001600, /**< Identifier for SPSR Abort mode banked register. */ - ERegisterR13Und = 0x00001700, /**< Identifier for R13 Undefined mode banked register. */ - ERegisterR14Und = 0x00001800, /**< Identifier for R14 Undefined mode banked register. */ - ERegisterSpsrUnd = 0x00001900, /**< Identifier for SPSR Undefined mode banked register. */ - ERegisterR13Irq = 0x00001a00, /**< Identifier for R13 Interrupt mode banked register. */ - ERegisterR14Irq = 0x00001b00, /**< Identifier for R14 Interrupt mode banked register. */ - ERegisterSpsrIrq = 0x00001c00, /**< Identifier for SPSR Interrupt mode banked register. */ - ERegisterR8Fiq = 0x00001d00, /**< Identifier for R8 Fast Interrupt mode banked register. */ - ERegisterR9Fiq = 0x00001e00, /**< Identifier for R9 Fast Interrupt mode banked register. */ - ERegisterR10Fiq = 0x00001f00, /**< Identifier for R10 Fast Interrupt mode banked register. */ - ERegisterR11Fiq = 0x00002000, /**< Identifier for R11 Fast Interrupt mode banked register. */ - ERegisterR12Fiq = 0x00002100, /**< Identifier for R12 Fast Interrupt mode banked register. */ - ERegisterR13Fiq = 0x00002200, /**< Identifier for R13 Fast Interrupt mode banked register. */ - ERegisterR14Fiq = 0x00002300, /**< Identifier for R14 Fast Interrupt mode banked register. */ - ERegisterSpsrFiq = 0x00002400, /**< Identifier for SPSR Fast Interrupt mode banked register. */ - /** - @internalTechnology - A debug agent should find the number of core registers from the DFBlock rather than this enumerator. - */ - ERegisterLast = 37 -}; - - -/** - These tags define the kind of breakpoints that are supported. - TTag structures associated with the ETagHeaderIdBreakpoints sub-block will have iTagId values from this enumeration. - See each enumerator for an explanation of how a TTag with that iTagId should be interpreted. - */ -enum TFunctionalityBreakpoint -{ - EBreakpointThread = 0, /**< Indicates whether thread specific breakpoints are supported. */ - EBreakpointProcess = 1, /**< Indicates whether process specific breakpoints are supported. */ - EBreakpointSystem = 2, /**< Indicates whether system wide breakpoints are supported. */ - EBreakpointArm = 3, /**< Indicates whether ARM mode breakpoints are supported. */ - EBreakpointThumb = 4, /**< Indicates whether Thumb mode breakpoints are supported. */ - EBreakpointT2EE = 5, /**< Indicates whether Thumb2 mode breakpoints are supported. */ - EBreakpointArmInst = 6, /**< Reserved for future use. */ - EBreakpointThumbInst = 7, /**< Reserved for future use. */ - EBreakpointT2EEInst = 8, /**< Reserved for future use. */ - EBreakpointSetArmInst = 9, /**< Reserved for future use. */ - EBreakpointSetThumbInst = 10, /**< Reserved for future use. */ - EBreakpointSetT2EEInst = 11, /**< Reserved for future use. */ - /** - @internalTechnology - A debug agent should find the number of breakpoint tags from the DFBlock rather than this enumerator. - */ - EBreakpointLast -}; - -/** - These enumerators provide information about the stepping capabilities of the debug sub-system. - TTag structures associated with the ETagHeaderIdStepping sub-block will have iTagId values from this enumeration. - See each enumerator for an explanation of how a TTag with that iTagId should be interpreted. - */ -enum TFunctionalityStep -{ - EStep = 0, /**< Indicates whether instruction stepping is supported. */ - /** - @internalTechnology - A debug agent should find the number of stepping tags from the DFBlock rather than this enumerator. - */ - EStepLast -}; - -/** - These enumerators provide information about the execution control capabilities of the debug sub-system. - TTag structures associated with the ETagHeaderIdExecution sub-block will have iTagId values from this enumeration. - See each enumerator for an explanation of how a TTag with that iTagId should be interpreted. - */ -enum TFunctionalityExec -{ - EExecThreadSuspendResume = 0, /**< Indicates whether suspending and resuming threads is supported. */ - EExecProcessSuspendResume = 1, /**< Indicates whether suspending and resuming processes is supported. */ - EExecSystemSuspendResume = 2, /**< Indicates whether suspending and resuming the entire system is supported. */ - /** - @internalTechnology - A debug agent should find the number of execution control tags from the DFBlock rather than this enumerator. - */ - EExecLast -}; - -/** - This enumeration defines the event types supported by the debug sub-system. - TTag structures associated with the ETagHeaderIdEvents sub-block will have - iTagId values from this enumeration, and iValue values from the TKernelEventAction enumeration. - - These enumerators are also used by the RSecuritySvrSession API to identify events. - @see RSecuritySvrSession - @see TKernelEventAction - */ -enum TEventType -{ - EEventsBreakPoint = 0, /**< Identifies a breakpoint event. */ - EEventsSwExc = 1, /**< Identifies a software exception event. */ - EEventsHwExc = 2, /**< Identifies a hardware exception event. */ - EEventsKillThread = 3, /**< Identifies a kill thread event. */ - EEventsAddLibrary = 4, /**< Identifies an add library event. */ - EEventsRemoveLibrary = 5, /**< Identifies a remove library event. */ - /** - If an event is generated and there is only a single space remaining in the events queue then - an event of type EEventsBufferFull will be stored in the queue and the generated event will - be discarded. If further events occur while the buffer is full the events will be discarded. - As such an event of type EEventsBufferFull being returned signifies that one or more events - were discarded. An event of this type has no valid data associated with it. - */ - EEventsBufferFull = 6, - EEventsUnknown = 7, /**< Identifies an event of unknown type. */ - EEventsUserTrace = 8, /**< Identifies a user trace. */ - EEventsProcessBreakPoint = 9, /**< Identifies a process breakpoint event. */ - EEventsStartThread = 10, /**< Identifies a start thread event. */ - EEventsUserTracesLost = 11, /**< Identifies user traces being lost. */ - EEventsAddProcess = 12, /**< Identifies an AddProcess event */ - EEventsRemoveProcess = 13, /**< Identifies a RemoveProcess event */ - /** - @internalTechnology - A debug agent should find the number of event types from the DFBlock rather than this enumerator. - */ - EEventsLast -}; - -/** - These enumerators provide information about constants which are used in the RSecuritySvrSession API. - TTag structures associated with the ETagHeaderIdApiConstants sub-block will have iTagId values from this enumeration. - See each enumerator for an explanation of how a TTag with that iTagId should be interpreted. - */ -enum TFunctionalityApiConstants - { - /** - Corresponds to the size of a buffer required to store a TEventInfo. - @see TEventInfo - */ - EApiConstantsTEventInfoSize = 0, - /** - @internalTechnology - A debug agent should find the number of API constants tags from the DFBlock rather than this enumerator. - */ - EApiConstantsLast, - }; - -/** - The set of possible actions which could be taken when a kernel event occurs. - Not all actions are possible for all events. The debug functionality sub-block with header id ETagHeaderIdEvents - indicates which values are permitted for each event. The value given for that event should be - considered as the most intrusive action the debugger may set: with the definition that EActionSuspend is more - intrusive than EActionContinue, which is more intrusive than EActionIgnore. - @see RSecuritySvrSession - */ -enum TKernelEventAction -{ - /** If an event action is set to this value then events of that type will be - ignored, and not reported to the debugger. */ - EActionIgnore = 0, - /** If an event action is set to this value then events of that type will be - reported to the debugger and the thread which generated the event will be - allowed to continue executing. */ - EActionContinue = 1, - /** If an event action is set to this value then events of that type will be - reported to the debugger and the thread which generated the event will be - suspended. */ - EActionSuspend = 2, - /** - @internalTechnology - Count of event actions. - */ - EActionLast -}; - -/** - These enumerators provide information about the ability of the debug subsystem to support OEM Debug tokens. - TTag structures associated with the ETagHeaderIdSecurity sub-block will have iTagId values from this enumeration. - See each enumerator for an explanation of how a TTag with that iTagId should be interpreted. - */ -enum TFunctionalitySecurity -{ - ESecurityOEMDebugToken = 0, /**< Indicates whether the DSS supports the use of OEM Debug Tokens. */ - - /** - @internalTechnology - A debug agent should find the number of tags from the DFBlock rather than this enumerator. - */ - ESecurityLast -}; - -/** - Used for storing the contents of a 32 bit register - */ -typedef TUint32 TRegisterValue32; - - -/** - * Processor mode - */ -enum TArmProcessorModes -{ - EUserMode=0x10, //!< EUserMode - EFiqMode=0x11, //!< EFiqMode - EIrqMode=0x12, //!< EIrqMode - ESvcMode=0x13, //!< ESvcMode - EAbortMode=0x17, //!< EAbortMode - EUndefMode=0x1b, //!< EUndefMode - EMaskMode=0x1f //!< EMaskMode -}; - - - -/** - Structure containing information about the state of the registers when a - hardware exception occurred - */ -class TRmdArmExcInfo - { -public: - /** Enumeration detailing the types of exception which may occur. */ - enum TExceptionType - { - /** Enumerator signifying that a prefetch abort error has occurred. */ - EPrefetchAbort = 0, - /** Enumerator signifying that a data abort error has occurred. */ - EDataAbort = 1, - /** Enumerator signifying that an undefined instruction error has occurred. */ - EUndef =2 - }; - - /** Value of CPSR. */ - TRegisterValue32 iCpsr; - /** Type of exception which has occurred. */ - TExceptionType iExcCode; - /** Value of R13 supervisor mode banked register. */ - TRegisterValue32 iR13Svc; - /** Value of user mode register R4. */ - TRegisterValue32 iR4; - /** Value of user mode register R5. */ - TRegisterValue32 iR5; - /** Value of user mode register R6. */ - TRegisterValue32 iR6; - /** Value of user mode register R7. */ - TRegisterValue32 iR7; - /** Value of user mode register R8. */ - TRegisterValue32 iR8; - /** Value of user mode register R9. */ - TRegisterValue32 iR9; - /** Value of user mode register R10. */ - TRegisterValue32 iR10; - /** Value of user mode register R11. */ - TRegisterValue32 iR11; - /** Value of R14 supervisor mode banked register. */ - TRegisterValue32 iR14Svc; - /** Address which caused exception (System Control Coprocessor Fault Address Register) */ - TRegisterValue32 iFaultAddress; - /** Value of System Control Coprocessor Fault Status Register. */ - TRegisterValue32 iFaultStatus; - /** Value of SPSR supervisor mode banked register. */ - TRegisterValue32 iSpsrSvc; - /** Value of user mode register R13. */ - TRegisterValue32 iR13; - /** Value of user mode register R14. */ - TRegisterValue32 iR14; - /** Value of user mode register R0. */ - TRegisterValue32 iR0; - /** Value of user mode register R1. */ - TRegisterValue32 iR1; - /** Value of user mode register R2. */ - TRegisterValue32 iR2; - /** Value of user mode register R3. */ - TRegisterValue32 iR3; - /** Value of user mode register R12. */ - TRegisterValue32 iR12; - /** Value of user mode register R15, points to instruction which caused exception. */ - TRegisterValue32 iR15; - }; - -/** - The maximum size, in bytes, of the panic category string returned as part of a - TEventInfo object. - - @see TEventInfo - @see TThreadKillInfo - */ -const TInt KPanicCategoryMaxName = KMaxName; - -/** - Event specific information returned as part of a TEventInfo object when - an agent set breakpoint is hit. - */ -class TThreadBreakPointInfo - { -public: - /** Identifies the type of exception. */ - TExcType iExceptionNumber; - /** Structure containing information about the ARM register values. */ - TRmdArmExcInfo iRmdArmExcInfo; - }; - -/** - Event specific information returned as part of a TEventInfo object when - a software exception occurs. - */ -class TThreadSwExceptionInfo - { -public: - /** The value of the program counter. */ - TUint32 iCurrentPC; - /** Identifies the type of exception. */ - TExcType iExceptionNumber; - }; - -/** - Event specific information returned as part of a TEventInfo object when - a hardware exception occurs. - */ -class TThreadHwExceptionInfo - { -public: - /** Identifies the type of exception. */ - TExcType iExceptionNumber; - /** Structure containing information about the ARM register values. */ - TRmdArmExcInfo iRmdArmExcInfo; - }; - -/** - Event specific information returned as part of a TEventInfo object when - a thread kill event occurs. - */ -class TThreadKillInfo - { -public: - /** The value of the program counter. */ - TUint32 iCurrentPC; - /** Specifies the reason for the kill thread event, this value is specific to the killed thread and does not correspond to a standard Symbian enumeration. */ - TInt iExitReason; - /** Specifies the type of the thread kill event, values correspond to elements of TExitType. */ - TUint8 iExitType; - /** The panic category of the killed thread. */ - TUint8 iPanicCategory[KPanicCategoryMaxName]; - /** Contains the length in bytes of the initialised data in iPanicCategory. */ - TInt iPanicCategoryLength; - }; - -/** - Event specific information returned as part of a TEventInfo object when - a library load event occurs. - */ -class TLibraryLoadedInfo - { -public: - /** The name of the file that the library was loaded from. */ - TUint8 iFileName[KMaxName]; - /** Contains the length in bytes of the initialised data in iFileName. */ - TInt iFileNameLength; - /** The code base address (.text). */ - TUint32 iCodeAddress; - /** The base address of the initialised data section (.data). */ - TUint32 iDataAddress; - }; - -/** - Event specific information returned as part of a TEventInfo object when - a thread is started - */ -class TStartThreadInfo - { -public: - /** The name of the file that the process owning the thread was created from. */ - TUint8 iFileName[KMaxName]; - /** Contains the length in bytes of the initialised data in iFileName. */ - TInt iFileNameLength; - }; - -/** - Event specific information returned as part of a TEventInfo object when - a process is added. Note that the Process may not be fully constructed, - e.g. no threads. - */ -class TAddProcessInfo - { -public: - /** The name of the file that the process was created from. */ - TUint8 iFileName[KMaxName]; - /** Contains the length in bytes of the initialised data in iFileName. */ - TInt iFileNameLength; - /** The UID3 of this process */ - TUint32 iUid3; - /** Contains the CreatorThread ID if available: May be 0 */ - TUint64 iCreatorThreadId; - }; - -/** - Event specific information returned as part of a TEventInfo object when - a process is removed. Note that the Process may not be fully destroyed, - so its resources should only be accessed if you already have a handle to it. - */ -class TRemoveProcessInfo - { -public: - /** The name of the file that the process was created from. */ - TUint8 iFileName[KMaxName]; - /** Contains the length in bytes of the initialised data in iFileName. */ - TInt iFileNameLength; - TUint32 iSpare1; // Unused - }; - -/** - Event specific information returned as part of a TEventInfo object when - a library unload event occurs. - */ -class TLibraryUnloadedInfo - { -public: - /** The name of the file that the library was loaded from. */ - TUint8 iFileName[KMaxName]; - /** Contains the length in bytes of the initialised data in iFileName. */ - TInt iFileNameLength; - }; - -/** - * Enum to represent the context of a user trace message - */ -enum TUserTraceMessageContext -{ - ESingleMessage = 0x1, /** Indicates this message is the only one corresponding to a given user trace */ - EMultiStart = 0x2, /** Indicates this message is the start of a user trace which consists of multiple messages */ - EMultiMid = 0x3, /** Indicates this message is one in a series of user trace messages */ - EMultiEnd = 0x4, /** Indicates this message is the last in a series of user trace messages */ - /** - @internalTechnology - A debug agent should find the number of core tags from the DFBlock rather than this enumerator. - */ - ELast = 0x5 -}; - -/** - * Event specific information returned as part of a TEventInfo object - * when a user trace event occurs. - */ -class TUserTraceInfo - { -public: - /** The user trace text */ - TUint8 iUserTraceText[TUserTraceSize]; - - /** User trace text length */ - TInt iUserTraceLength; - - /** The context of the message */ - TUserTraceMessageContext iMessageStatus; - }; - - -/** - Structure used to store information about an event. An object of this type - is passed as an argument to the RSecuritySvrSession::GetEvent function, - and is filled in by the debug driver, and returned to the agent, when a - relevant event occurs. - - The debug functionality block contains the size in bytes of the data that - the driver will return when a GetEvent call is issued. A debug agent should - ensure that this value equals the size of this TEventInfo object to ensure - that a compatible debug driver is being used. The value is stored as - EApiConstantsTEventInfoSize in the TFunctionalityApiConstants block. - - @see RSecuritySvrSession::GetDebugFunctionality - @see RSecuritySvrSession::GetEvent - */ -class TEventInfo - { -public: - - /** Constructor sets all elements to default values. */ - inline TEventInfo() { Reset(); }; - - /** Resets all values to default values. */ - inline void Reset() - { - iProcessId = 0; - iProcessIdValid = EFalse; - iThreadId = 0; - iThreadIdValid = EFalse; - iEventType = (TEventType)NULL; - }; - -public: - - /** The process ID of the process which the event occurred in. */ - TUint64 iProcessId; - /** The thread ID of the thread which the event occurred in. */ - TUint64 iThreadId; - /** Has value ETrue if iProcessId is valid, EFalse otherwise. */ - TUint8 iProcessIdValid; - /** Has value ETrue if iThreadId is valid, EFalse otherwise. */ - TUint8 iThreadIdValid; - /** Indicates the type of the event. This type should be used to determine - the type of the information stored in the union which is part of this class. */ - TEventType iEventType; - union - { - /** Information which is specific to the break point event. */ - TThreadBreakPointInfo iThreadBreakPointInfo; - /** Information which is specific to the software exception event. */ - TThreadSwExceptionInfo iThreadSwExceptionInfo; - /** Information which is specific to the hardware exception event. */ - TThreadHwExceptionInfo iThreadHwExceptionInfo; - /** Information which is specific to the thread kill event. */ - TThreadKillInfo iThreadKillInfo; - /** Information which is specific to the library loaded event. */ - TLibraryLoadedInfo iLibraryLoadedInfo; - /** Information which is specific to the library unloaded event. */ - TLibraryUnloadedInfo iLibraryUnloadedInfo; - /** Information which is specific to the user trace event. */ - TUserTraceInfo iUserTraceInfo; - /** Information which is specific to the start thread event. */ - TStartThreadInfo iStartThreadInfo; - /** Information which is specific to the Add Process event. */ - TAddProcessInfo iAddProcessInfo; - /** Information which is specific to the Remove Process event. */ - TRemoveProcessInfo iRemoveProcessInfo; - }; - }; - -/** - @internalComponent - */ -class TProcessInfo - { - public: - - inline TProcessInfo() { Reset(); } - - inline TProcessInfo(TUint32 aId, TUint32 aCodeAddress, TUint32 aCodeSize, TUint32 aDataAddress) - : iId(aId), - iCodeAddress(aCodeAddress), - iCodeSize(aCodeSize), - iDataAddress(aDataAddress) { } - - inline void Reset() - { - iId = 0; - iCodeAddress = 0; - iCodeSize = 0; - iDataAddress = 0; - } - - public: - - TUint32 iId; - TUint32 iCodeAddress; - TUint32 iCodeSize; - TUint32 iDataAddress; - }; - -/* Other functionality may be defined here later */ - -/** -Represents a register id value, in the terms of the Symbian ELF format: - - bits 0-7 define the class - - bits 8-15 define the rd_id - - bits 16-31 define the rd_sub_id - -Both the core registers (TFunctionalityRegister type) and the coprocessor registers -follow this identifier scheme. -*/ -typedef TUint32 TRegisterInfo; - -/** -Enum representing the status flags which could be returned from a register -access call. -*/ -enum TRegisterFlag - { - /** - Default value, a register access call will never return this value - */ - ENotSet = 0, - /** - Would be returned if the register is supported by the debug driver but the kernel cannot access the register - */ - EInValid = 1, - /** - Would be returned if the register could be accessed correctly - */ - EValid = 2, - /** - Would be returned if the register is not supported by the debug driver - */ - ENotSupported = 3, - /** - Would be returned if a non-4 byte register value was requested - */ - EBadSize = 4 - }; - -/** -Enum representing the different ARM CPU instruction set architectures. -*/ -enum TArchitectureMode - { - /** Represents the ARM CPU architecture. */ - EArmMode = 1, - /** Represents the Thumb CPU architecture. */ - EThumbMode = 2, - /** - Represents the Thumb2 CPU architecture. - @prototype - */ - EThumb2EEMode = 3 - }; - -/** - Used as an identifier for breakpoints set by the RSecuritySvrSession::SetBreak function. - @see RSecuritySvrSession - */ -typedef TInt32 TBreakId; - -/** - Specifies the type of a code segment. - @see TCodeSegListEntry - */ -enum TCodeSegType - { - EUnknownCodeSegType = 0, /**< Signifies an unknown code segment type. */ - EExeCodeSegType = 1, /**< Signifies a code segment belonging to an executable. */ - EDllCodeSegType = 2 /**< Signifies a code segment belonging to a library. */ - }; - -/** -Structure used for extracting data from a descriptor returned by a call to -RSecuritySvrSession::GetList() when GetList() is called with TListId::ECodeSegs -as the first argument. - -@see RSecuritySvrSession::GetList() - -@code -//buffer is a TDesC8 containing 4-byte aligned TCodeSegListEntry objects -//create a pointer to the start of the data -TUint8* ptr = (TUint8*)buffer.Ptr(); -//create a pointer to the end of the data -const TUint8* ptrEnd = ptr + buffer.Length(); -while(ptr < ptrEnd) - { - //cast the pointer to be a TCodeSegListEntry object - TCodeSegListEntry& entry = *(TCodeSegListEntry*)ptr; - //use the TCodeSegListEntry pointer, i.e. - TUint16 nameLength = entry.iNameLength; - TPtr name(&(entry.iName[0]), nameLength, nameLength); - // move ptr on to point to the next TCodeSegListEntry object - ptr += Align4(entry.GetSize()); - } -@endcode -*/ -class TCodeSegListEntry - { -public: - TInt GetSize() const; -public: - /** - Address of the start of the code segment. - */ - TUint32 iCodeBase; - /** - Size of the code segment. - */ - TUint32 iCodeSize; - /** - Size of the const data segment - */ - TUint32 iConstDataSize; - /** - Address of the initialised data - */ - TUint32 iInitialisedDataBase; - /** - Size of the initialised data - */ - TUint32 iInitialisedDataSize; - /** - Size of the uninitialised data - */ - TUint32 iUninitialisedDataSize; - /** - Boolean indicating whether the code segment is execute in place - */ - TBool iIsXip; - /** - Indicates whether the code segment is from an executable or a dll, or neither - */ - TCodeSegType iCodeSegType; - /** Uid3 of this segment. */ - TUint32 iUid3; - /** Currently unused element. May be used in future to aid maintaining compatibility. */ - TUint32 iSpare2; - /** - Length of the code segment's name - */ - TUint16 iNameLength; - /** - First two bytes of the code segment's name, the name should be considered to - extend past the end of the TCodeSegListEntry structure to a length - corresponding to iNameLength - */ - TUint16 iName[1]; - }; - -/** -Returns the size of the TCodeSegListEntry, including the file name length - -@return the size, in bytes, of the TCodeSegListEntry and the code segment's -file name -*/ -inline TInt TCodeSegListEntry::GetSize() const - { - return sizeof(TCodeSegListEntry) - sizeof(iName) + (2 * iNameLength); - } - -/** -Structure used for extracting data from a descriptor returned by a call to -RSecuritySvrSession::GetList() when GetList() is called with TListId::EXipLibraries -as the first argument. - -@see RSecuritySvrSession::GetList() - -@code -//buffer is a TDesC8 containing 4-byte aligned TXipLibraryListEntry objects -//create a pointer to the start of the data -TUint8* ptr = (TUint8*)buffer.Ptr(); -//create a pointer to the end of the data -const TUint8* ptrEnd = ptr + buffer.Length(); -while(ptr < ptrEnd) - { - //cast the pointer to be a TXipLibraryListEntry object - TXipLibraryListEntry& entry = *(TXipLibraryListEntry*)ptr; - //use the TXipLibraryListEntry pointer, i.e. - TUint16 nameLength = entry.iNameLength; - TPtr name(&(entry.iName[0]), nameLength, nameLength); - // move ptr on to point to the next TXipLibraryListEntry object - ptr += Align4(entry.GetSize()); - } -@endcode -*/ -class TXipLibraryListEntry - { -public: - TInt GetSize() const; -public: - /** - Address of the start of the library's code segment. - */ - TUint32 iCodeBase; - /** - Size of the code segment. - */ - TUint32 iCodeSize; - /** - Size of the const data segment - */ - TUint32 iConstDataSize; - /** - Address of the initialised data - */ - TUint32 iInitialisedDataBase; - /** - Size of the initialised data - */ - TUint32 iInitialisedDataSize; - /** - Size of the uninitialised data - */ - TUint32 iUninitialisedDataSize; - /** Currently unused element. May be used in future to aid maintaining compatibility. */ - TUint32 iSpare1; - /** Currently unused element. May be used in future to aid maintaining compatibility. */ - TUint32 iSpare2; - /** - Length of the library's name - */ - TUint16 iNameLength; - /** - First two bytes of the code segment's name, the name should be considered to - extend past the end of the TXipLibraryListEntry structure to a length - corresponding to iNameLength - */ - TUint16 iName[1]; - }; - -/** -Returns the size of the TXipLibraryListEntry, including the file name length - -@return the size, in bytes, of the TXipLibraryListEntry and the library's -file name -*/ -inline TInt TXipLibraryListEntry::GetSize() const - { - return sizeof(TXipLibraryListEntry) - sizeof(iName) + (2 * iNameLength); - } - -/** -Structure used for extracting data from a descriptor returned by a call to -RSecuritySvrSession::GetList() when GetList() is called with TListId::EExecutables -as the first argument. - -@see RSecuritySvrSession::GetList() - -@code -//buffer is a TDesC8 containing 4-byte aligned TExecutablesListEntry objects -//create a pointer to the start of the data -TUint8* ptr = (TUint8*)buffer.Ptr(); -//create a pointer to the end of the data -const TUint8* ptrEnd = ptr + buffer.Length(); -while(ptr < ptrEnd) - { - //cast the pointer to be a TExecutablesListEntry object - TExecutablesListEntry& entry = *(TExecutablesListEntry*)ptr; - //use the TExecutablesListEntry pointer, i.e. - TUint16 nameLength = entry.iNameLength; - TPtr name(&(entry.iName[0]), nameLength, nameLength); - // move ptr on to point to the next TExecutablesListEntry object - ptr += Align4(entry.GetSize()); - } -@endcode -*/ -class TExecutablesListEntry - { -public: - TInt GetSize() const; -public: - /** - Indicates whether an agent has registered to actively debug the executable, - a non-zero value indicates that an agent has attached. - */ - TUint8 iIsActivelyDebugged; - /** - Indicates whether any agents have registered to passively debug the executable, - a non-zero value indicates that at least one agent is attached passively - */ - TUint8 iIsPassivelyDebugged; - /** Currently unused element. May be used in future to aid maintaining compatibility. */ - TUint32 iSpare1; - /** Currently unused element. May be used in future to aid maintaining compatibility. */ - TUint32 iSpare2; - /** - Length of the executable's name - */ - TUint16 iNameLength; - /** - First two bytes of the executable's name, the name should be considered to - extend past the end of the TExecutablesListEntry structure to a length - corresponding to iNameLength - */ - TUint16 iName[1]; - }; - -/** -Returns the size of the TExecutablesListEntry, including the file name length - -@return the size, in bytes, of the TExecutablesListEntry and the executable's -file name -*/ -inline TInt TExecutablesListEntry::GetSize() const - { - return sizeof(TExecutablesListEntry) - sizeof(iName) + (2*iNameLength); - } - -/** -Structure used for extracting data from a descriptor returned by a call to -RSecuritySvrSession::GetList() when GetList() is called with TListId::EProcesses -as the first argument. - -@see RSecuritySvrSession::GetList() - -@code -//buffer is a TDesC8 containing 4-byte aligned TProcessListEntry objects -//create a pointer to the start of the data -TUint8* ptr = (TUint8*)buffer.Ptr(); -//create a pointer to the end of the data -const TUint8* ptrEnd = ptr + buffer.Length(); -while(ptr < ptrEnd) - { - //cast the pointer to be a TProcessListEntry object - TProcessListEntry& entry = *(TProcessListEntry*)ptr; - //use the TProcessListEntry pointer, i.e. - TUint16 fileNameLength = entry.iFileNameLength; - TPtr name(&(entry.iNames[0]), fileNameLength, fileNameLength); - // move ptr on to point to the next TProcessListEntry object - ptr += Align4(entry.GetSize()); - } -@endcode -*/ -class TProcessListEntry - { - public: - TInt GetSize() const; - - public: - /** Process ID */ - TUint64 iProcessId; - - /** The Uid3 of the process */ - TUint32 iUid3; - - /** - * Process Attributes - * @see DProcess::TProcessAttributes - */ - TInt iAttributes; - - /** - * Length of fully qualified file name of the process in bytes. Note that this - * entry may be 0 if the process is in the process of shutting down. - */ - TUint16 iFileNameLength; - - /** - * Length of current dynamic name of the process in bytes - */ - TUint16 iDynamicNameLength; - - /** - * First two bytes of the process' file name, the name should be considered to - * extend past the end of the TProcessListEntry structure to a length - * corresponding to iFileNameLength. Directly after the data corresponding to the - * file name, the dynamic name is stored with a length of iDynamicNameLength characters. - * Note that these names are not null terminated and are concatenated directly after each other. - * - * @code - * TProcessListEntry& entry; // entry is a reference to a TProcessListEntry - * - * //get the file name.. - * TPtr fileName(&(entry.iNames[0]), iFileNameLength, iFileNameLength); - * - * //get the dynamic name length.. - * TPtr dynamicName(&(entry.iNames[0]) + iFileNameLength, iDynamicNameLength, iDynamicNameLength); - * @endcode - */ - TUint16 iNames[1]; - }; - -/** -Returns the size of the TProcessListEntry, including the file name length and the -dynamic name length - -@return the size, in bytes, of the TProcessListEntry and the executable's -file name file name and dynamic name -*/ -inline TInt TProcessListEntry::GetSize() const - { - return sizeof(TProcessListEntry) - sizeof(iNames) + (2 * (iFileNameLength + iDynamicNameLength)); - } - -/** -Structure used for extracting data from a descriptor returned by a call to -RSecuritySvrSession::GetList() when GetList() is called with TListId::EThreads -as the first argument. - -@see RSecuritySvrSession::GetList() - -@code -//buffer is a TDesC8 containing 4-byte aligned TThreadListEntry objects -//create a pointer to the start of the data -TUint8* ptr = (TUint8*)buffer.Ptr(); -//create a pointer to the end of the data -const TUint8* ptrEnd = ptr + buffer.Length(); -while(ptr < ptrEnd) - { - //cast the pointer to be a TThreadListEntry object - TThreadListEntry& entry = *(TThreadListEntry*)ptr; - //use the TThreadListEntry pointer, i.e. - TUint16 nameLength = entry.iNameLength; - TPtr name(&(entry.iName[0]), nameLength, nameLength); - // move ptr on to point to the next TThreadListEntry object - ptr += Align4(entry.GetSize()); - } -@endcode -*/ -class TThreadListEntry - { -public: - TInt GetSize() const; -public: - /** - Thread ID - */ - TUint64 iThreadId; - /** - Process ID - */ - TUint64 iProcessId; - /** - Address of the base of the supervisor stack - */ - TUint32 iSupervisorStackBase; - /** - Size of the supervisor stack - */ - TUint32 iSupervisorStackSize; - /** - Non-zero if iSupervisorStackBase has been set correctly - */ - TUint8 iSupervisorStackBaseValid; - /** - Non-zero if iSupervisorStackSize has been set correctly - */ - TUint8 iSupervisorStackSizeValid; - /** - Address of the thread's supervisor stack pointer - */ - TUint32 iSupervisorStackPtr; - /** - Indicator of whether the value returned as iSupervisorStackPtr is valid. - It is necessary, but not necessarily sufficient, that the thread be suspended - for a valid value to be returned. This may be removed from the final API and - the value would be extracted instead via the ReadRegisters type calls. - */ - TRegisterFlag iSupervisorStackPtrValid; - /** Currently unused element. May be used in future to aid maintaining compatibility. */ - TUint32 iSpare1; - /** Currently unused element. May be used in future to aid maintaining compatibility. */ - TUint32 iSpare2; - /** - The length of the thread's name - */ - TUint16 iNameLength; - /** - First two bytes of the thread's name, the name should be considered to - extend past the end of the TThreadListEntry structure to a length - corresponding to iNameLength - */ - TUint16 iName[1]; - }; - -/** -Returns the size of the TThreadListEntry, including the name length - -@return the size, in bytes, of the TExecutablesListEntry and the thread's name -*/ -inline TInt TThreadListEntry::GetSize() const - { - return sizeof(TThreadListEntry) - sizeof(iName) + (2 * iNameLength); - } - -/** -Denotes which list type to return from a RSecuritySvrSession::GetList() call - -@see RSecuritySvrSession::GetList() -*/ -enum TListId - { - /** - Indicates that the GetList() call should return a list of the processes in - the system. The returned buffer will contain an array of 4-byte aligned - TProcessListEntry objects. - - @see TProcessListEntry - */ - EProcesses = 0, - /** - Indicates that the GetList() call should return a list of the threads in - the system. The returned buffer will contain an array of 4-byte aligned - TThreadListEntry objects. - - @see TThreadListEntry - */ - EThreads = 1, - /** - Indicates that the GetList() call should return a list of the code segments in - the system. The returned buffer will contain an array of 4-byte aligned - TCodeSegListEntry objects. - - @see TCodeSegListEntry - */ - ECodeSegs = 2, - /** - Indicates that the GetList() call should return a list of the XIP libraries in - the system. The returned buffer will contain an array of 4-byte aligned - EXipLibraries objects. - - @see EXipLibraries - */ - EXipLibraries = 3, - /** - Indicates that the GetList() call should return a list of the executables in - the system. The returned buffer will contain an array of 4-byte aligned - EExecutables objects. - - @see EExecutables - */ - EExecutables = 4, - /** - Indicates that the GetList() call should return a list of the logical devices in the system. - */ - ELogicalDevices = 5, - /** - Indicates that the GetList() call should return a list of the mutexes in the system. - */ - EMutexes = 6, - /** - Indicates that the GetList() call should return a list of the servers in the system. - */ - EServers = 7, - /** - Indicates that the GetList() call should return a list of the sessions in the system. - */ - ESessions = 8, - /** - Indicates that the GetList() call should return a list of the semaphores in the system. - */ - ESemaphores = 9, - /** - Indicates that the GetList() call should return a list of the chunks in the system. - */ - EChunks = 10, - - /** - Provides a complete list of all the breakpoints in the system and their - current state. - - @see EBreakpoints - */ - EBreakpoints = 11, - - /** - The following are for the possible use of kernel-side debug and SMP breakpoint - manipulation. - */ - ESetBreak = 12, - ERemoveBreak = 13, - EModifyBreak = 14, - - /** - * Provides static information of the system - */ - EStaticInfo = 15, - - /** Last listing enum. */ - EListLast - }; - -/** - Bit field values denoting the scope of a listing. - - In the debug functionality block, the TTag::iValue element which is returned for a listing tag - should be considered as a union of the supported values from this enumeration for that listing. - */ -enum TListScope - { - EScopeNone = 0x0, /**< Corresponds to no scope for a listing. equivalent to not supported */ - EScopeGlobal= 0x1, /**< Corresponds to a global scope for a listing. */ - EScopeProcessSpecific = 0x2, /**< Corresponds to a process specific scope for a listing. */ - EScopeThreadSpecific = 0x4 /**< Corresponds to a thread specific scope for a listing. */ - }; - -/** -@internalComponent - -Interface constructor for passing IPC data for the GetList call. -*/ -class TListDetails - { -public: - TListDetails(const TListId aListId, const TListScope aListScope, TUint64 aTargetId=0) - : iListId(aListId), - iListScope(aListScope), - iTargetId(aTargetId) {} -public: - TListId iListId; - TListScope iListScope; - TUint64 iTargetId; - }; - - - }; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -namespace Debug - { - + { /** * The stop-mode debug interface is a stateless interface which may be called at any point * except user mode, provided the rest of the OS is not going to run or pre-empt it. @@ -1680,7 +237,7 @@ IMPORT_C static TInt TestAPI(const TListItem* aItem); public: - IMPORT_C static TInt ExitPoint(const TInt aReturnValue); + static TInt ExitPoint(const TInt aReturnValue); private: /** Code segment list routines */ @@ -1706,105 +263,6 @@ static TInt CopyAndExpandDes(const TDesC& aSrc, TDes& aDest); }; - - - /** - 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); - } - }; #endif // D_STOP_MODE_API_H