debugsrv/runmodedebug/securityserver/inc/rm_debug_api.h
author hgs
Fri, 27 Aug 2010 11:37:29 +0300
changeset 42 0ff24a8f6ca2
permissions -rw-r--r--
201033
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42
hgs
parents:
diff changeset
     1
// Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     2
// All rights reserved.
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
hgs
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     7
//
hgs
parents:
diff changeset
     8
// Initial Contributors:
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    10
//
hgs
parents:
diff changeset
    11
// Contributors:
hgs
parents:
diff changeset
    12
//
hgs
parents:
diff changeset
    13
// Description:
hgs
parents:
diff changeset
    14
// Definitions for the run mode debug agent client side sessions.
hgs
parents:
diff changeset
    15
// 
hgs
parents:
diff changeset
    16
// WARNING: This file contains some APIs which are internal and are subject
hgs
parents:
diff changeset
    17
//          to change without notice. Such APIs should therefore not be used
hgs
parents:
diff changeset
    18
//          outside the Kernel and Hardware Services package.
hgs
parents:
diff changeset
    19
//
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#ifndef RM_DEBUG_API_H
hgs
parents:
diff changeset
    22
#define RM_DEBUG_API_H
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
/**
hgs
parents:
diff changeset
    25
@file
hgs
parents:
diff changeset
    26
@publishedPartner
hgs
parents:
diff changeset
    27
@released
hgs
parents:
diff changeset
    28
*/
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include <e32cmn.h>
hgs
parents:
diff changeset
    31
#include <e32def_private.h>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
/**
hgs
parents:
diff changeset
    34
  The Debug namespace contains all API definitions used for on-target debugging.
hgs
parents:
diff changeset
    35
  */
hgs
parents:
diff changeset
    36
namespace Debug {
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
/** This is the maximum size in bytes a user trace can be */
hgs
parents:
diff changeset
    39
const TInt TUserTraceSize = 256;
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
/**
hgs
parents:
diff changeset
    42
  Information in the debug functionality block is represented as a concatenation
hgs
parents:
diff changeset
    43
  of pairs of TTagHeader structures and arrays of TTag objects.
hgs
parents:
diff changeset
    44
  @see TTagHeader
hgs
parents:
diff changeset
    45
  @see RSecuritySvrSession::GetDebugFunctionality
hgs
parents:
diff changeset
    46
  */
hgs
parents:
diff changeset
    47
struct TTag
hgs
parents:
diff changeset
    48
{
hgs
parents:
diff changeset
    49
	/** Tag ID, value identifying this tag. */
hgs
parents:
diff changeset
    50
	TUint32	iTagId;
hgs
parents:
diff changeset
    51
	/**
hgs
parents:
diff changeset
    52
	  Values correspond to TTagType enumerators.
hgs
parents:
diff changeset
    53
	  @see TTagType
hgs
parents:
diff changeset
    54
	  */
hgs
parents:
diff changeset
    55
	TUint16	iType;
hgs
parents:
diff changeset
    56
	/** Size of external data associated with this tag. */
hgs
parents:
diff changeset
    57
	TUint16 iSize;
hgs
parents:
diff changeset
    58
	/** Data associated with this tag. */
hgs
parents:
diff changeset
    59
	TUint32 iValue;
hgs
parents:
diff changeset
    60
};
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
/**
hgs
parents:
diff changeset
    63
  Enumeration defining the supported tag types. These enumerators are used in TTag.iTagId.
hgs
parents:
diff changeset
    64
  @see TTag
hgs
parents:
diff changeset
    65
  */
hgs
parents:
diff changeset
    66
enum TTagType
hgs
parents:
diff changeset
    67
{
hgs
parents:
diff changeset
    68
	/** Indicates that the iValue field of a TTag structure will contain either ETrue or EFalse. */
hgs
parents:
diff changeset
    69
	ETagTypeBoolean = 0,
hgs
parents:
diff changeset
    70
	/** Indicates that the iValue field of a TTag structure will contain a value in the TUint32 range. */
hgs
parents:
diff changeset
    71
	ETagTypeTUint32 = 1,
hgs
parents:
diff changeset
    72
	/** Indicates that the iValue field of a TTag structure will contain values from an enumeration. */
hgs
parents:
diff changeset
    73
	ETagTypeEnum = 2,
hgs
parents:
diff changeset
    74
	/** Indicates that the iValue field of a TTag structure should be interpreted as a bit field. */
hgs
parents:
diff changeset
    75
	ETagTypeBitField = 3,
hgs
parents:
diff changeset
    76
	/** Indicates that the type of the iValue field of a TTag structure is unknown. */
hgs
parents:
diff changeset
    77
	ETagTypeUnknown = 4,
hgs
parents:
diff changeset
    78
	/** Indicates that the iValue field of a TTag structure will contain a pointer. */
hgs
parents:
diff changeset
    79
	ETagTypePointer = 5
hgs
parents:
diff changeset
    80
};
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
/**
hgs
parents:
diff changeset
    83
  Information in the debug functionality block is represented as a concatenation
hgs
parents:
diff changeset
    84
  of pairs of TTagHeader structures and arrays of TTag objects.
hgs
parents:
diff changeset
    85
  @see TTag
hgs
parents:
diff changeset
    86
  @see RSecuritySvrSession::GetDebugFunctionality
hgs
parents:
diff changeset
    87
  */
hgs
parents:
diff changeset
    88
struct TTagHeader
hgs
parents:
diff changeset
    89
{
hgs
parents:
diff changeset
    90
	/** Value identifying the contents of this TTagHeader, should be interpreted as an enumerator from TTagHeaderId.
hgs
parents:
diff changeset
    91
	  @see TTagHeaderId
hgs
parents:
diff changeset
    92
	  */
hgs
parents:
diff changeset
    93
	TUint16	iTagHdrId;
hgs
parents:
diff changeset
    94
	/** The number of TTag elements in the array associated with this TTagHeader. */
hgs
parents:
diff changeset
    95
	TUint16 iNumTags;
hgs
parents:
diff changeset
    96
};
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
/**
hgs
parents:
diff changeset
    99
  Enumeration used to identify TTagHeader structures, TTagHeader::iTagHdrId elements take these enumerators as values.
hgs
parents:
diff changeset
   100
  @see TTagHeader
hgs
parents:
diff changeset
   101
  */
hgs
parents:
diff changeset
   102
enum TTagHeaderId
hgs
parents:
diff changeset
   103
{
hgs
parents:
diff changeset
   104
	ETagHeaderIdCore = 0,            /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityCore. */
hgs
parents:
diff changeset
   105
	ETagHeaderIdMemory = 1,          /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityMemory. */
hgs
parents:
diff changeset
   106
	/**
hgs
parents:
diff changeset
   107
	  Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityRegister.
hgs
parents:
diff changeset
   108
	  These values are defined as in the document Symbian Core Dump File Format Appendix C
hgs
parents:
diff changeset
   109
	  (see SGL.TS0028.027 - Symbian Core Dump File Format v1.0.doc).
hgs
parents:
diff changeset
   110
	  The TTag objects in the associated array have an iSize value corresponding to the size of the register's data in bytes.
hgs
parents:
diff changeset
   111
	  */
hgs
parents:
diff changeset
   112
	ETagHeaderIdRegistersCore = 2,
hgs
parents:
diff changeset
   113
	/**
hgs
parents:
diff changeset
   114
	  Identifies a TTagHeader with associated TTag elements with iTagId values corresponding to coprocessor register identifiers.
hgs
parents:
diff changeset
   115
	  Coprocessor registers are defined as in the document Symbian Core Dump File Format Appendix C as follows
hgs
parents:
diff changeset
   116
	  (see SGL.TS0028.027 - Symbian Core Dump File Format v1.0.doc):
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
	  For each 32-bit data word defining a co-pro register, the definition of the meaning of the bits follows
hgs
parents:
diff changeset
   119
	  the ARM Architecture Reference manual instruction coding
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
	  Upper Halfword	Lower Halfword
hgs
parents:
diff changeset
   122
	  Opcode 2			CRm
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
	  For example: The Domain Access Control Register is Register 3 of co-processor 15. The encoding is therefore
hgs
parents:
diff changeset
   125
	  CRm = 3
hgs
parents:
diff changeset
   126
	  Opcode2 = 0
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
	  Therefore the functionality tag would be:
hgs
parents:
diff changeset
   129
	  TagID:  15			// co-processor number
hgs
parents:
diff changeset
   130
	  Type: ETagTypeTUint32
hgs
parents:
diff changeset
   131
	  Data: 0x00000003		// Opcode2 = 0, CRm = 3
hgs
parents:
diff changeset
   132
	  */
hgs
parents:
diff changeset
   133
	ETagHeaderIdCoProRegisters = 3,  /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityRegister. */
hgs
parents:
diff changeset
   134
	ETagHeaderIdBreakpoints = 4,     /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityBreakpoint. */
hgs
parents:
diff changeset
   135
	ETagHeaderIdStepping = 5,        /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityStep. */
hgs
parents:
diff changeset
   136
	ETagHeaderIdExecution = 6,       /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityExec. */
hgs
parents:
diff changeset
   137
	ETagHeaderIdEvents = 7,          /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TEventType. */
hgs
parents:
diff changeset
   138
	ETagHeaderIdApiConstants = 8,    /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityApiConstants.*/
hgs
parents:
diff changeset
   139
	ETagHeaderList = 9,              /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TListId. */
hgs
parents:
diff changeset
   140
	ETagHeaderIdKillObjects = 10,    /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityKillObject. */
hgs
parents:
diff changeset
   141
	ETagHeaderIdSecurity = 11,		 /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalitySecurity */
hgs
parents:
diff changeset
   142
	ETagHeaderIdBuffers = 12,        /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TBufferType. */
hgs
parents:
diff changeset
   143
	ETagHeaderIdStopModeFunctions = 13, /**< Identifies a TTagHeader with associated TTag elements with iTagId values from TFunctionalityStopModeFunctions. */	
hgs
parents:
diff changeset
   144
};
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
/**
hgs
parents:
diff changeset
   147
  This structure is not used in the run-mode debug API.
hgs
parents:
diff changeset
   148
  @deprecated
hgs
parents:
diff changeset
   149
  */
hgs
parents:
diff changeset
   150
struct TSubBlock
hgs
parents:
diff changeset
   151
{
hgs
parents:
diff changeset
   152
	/** Header to identify the TSubBlock. */
hgs
parents:
diff changeset
   153
	TTagHeader iHeader;
hgs
parents:
diff changeset
   154
	/** Pointer to array of TTag values associated with this TSubBlock. */
hgs
parents:
diff changeset
   155
	TTag* iTagArray;
hgs
parents:
diff changeset
   156
};
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
/**
hgs
parents:
diff changeset
   159
  These tags define what kinds of core functionality are supported by the run-mode debug subsystem.
hgs
parents:
diff changeset
   160
  TTag structures associated with the ETagHeaderIdCore sub-block will have iTagId values from this enumeration.
hgs
parents:
diff changeset
   161
  See each enumerator for an explanation of how a TTag with that iTagId should be interpreted.
hgs
parents:
diff changeset
   162
  */
hgs
parents:
diff changeset
   163
enum TFunctionalityCore
hgs
parents:
diff changeset
   164
{
hgs
parents:
diff changeset
   165
	ECoreEvents = 0,        /**< Indicates whether events processing is supported. */
hgs
parents:
diff changeset
   166
	ECoreStartStop = 1,     /**< Indicates whether suspending and resuming threads is supported. */
hgs
parents:
diff changeset
   167
	ECoreMemory = 2,        /**< Indicates whether reading and writing memory is supported. */
hgs
parents:
diff changeset
   168
	ECoreRegister = 3,      /**< Indicates whether reading and writing register values is supported. */
hgs
parents:
diff changeset
   169
	ECoreBreakpoint = 4,    /**< Indicates whether breakpoints are supported. */
hgs
parents:
diff changeset
   170
	ECoreStepping = 5,      /**< Indicates whether stepping is supported. */
hgs
parents:
diff changeset
   171
	ECoreLists = 6,         /**< Indicates whether listings are supported. */
hgs
parents:
diff changeset
   172
	ECoreLogging = 7,       /**< Indicates whether logging is supported. */
hgs
parents:
diff changeset
   173
	ECoreHardware = 8,      /**< Indicates whether hardware support is supported. */
hgs
parents:
diff changeset
   174
	ECoreApiConstants = 9,  /**< Indicates whether the information in the ETagHeaderIdApiConstants sub-block is relevant. */
hgs
parents:
diff changeset
   175
	ECoreKillObjects = 10,  /**< Indicates whether killing objects (i.e. threads and processes) is supported. */
hgs
parents:
diff changeset
   176
	ECoreSecurity = 11,		/**< Indicates whether OEM Debug token support or other security info is supported. */
hgs
parents:
diff changeset
   177
	ECoreStopModeFunctions = 12, /**< Indicates whether Stop Mode function calling is supported. */
hgs
parents:
diff changeset
   178
	ECoreStopModeBuffers = 13, /**< Indicates whether Stop Mode buffers are supported. */
hgs
parents:
diff changeset
   179
	
hgs
parents:
diff changeset
   180
	/**
hgs
parents:
diff changeset
   181
	  @internalTechnology
hgs
parents:
diff changeset
   182
	  A debug agent should find the number of core tags from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   183
	  */
hgs
parents:
diff changeset
   184
	ECoreLast
hgs
parents:
diff changeset
   185
};
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
/**
hgs
parents:
diff changeset
   188
  These tags define what kind of memory operations can be performed.
hgs
parents:
diff changeset
   189
  TTag structures associated with the ETagHeaderIdMemory sub-block will have iTagId values from this enumeration.
hgs
parents:
diff changeset
   190
  See each enumerator for an explanation of how a TTag with that iTagId should be interpreted.
hgs
parents:
diff changeset
   191
 */
hgs
parents:
diff changeset
   192
enum TFunctionalityMemory
hgs
parents:
diff changeset
   193
{
hgs
parents:
diff changeset
   194
	EMemoryRead = 0,          /**< Indicates whether reading memory is supported. */
hgs
parents:
diff changeset
   195
	EMemoryWrite = 1,         /**< Indicates whether writing memory is supported. */
hgs
parents:
diff changeset
   196
	EMemoryAccess64 = 2,      /**< Indicates whether 64 bit memory access is supported. */
hgs
parents:
diff changeset
   197
	EMemoryAccess32 = 3,      /**< Indicates whether 32 bit memory access is supported. */
hgs
parents:
diff changeset
   198
	EMemoryAccess16 = 4,      /**< Indicates whether 16 bit memory access is supported. */
hgs
parents:
diff changeset
   199
	EMemoryAccess8 = 5,       /**< Indicates whether 8 bit memory access is supported. */
hgs
parents:
diff changeset
   200
	EMemoryBE8 = 6,           /**< Indicates whether reading memory as 8 bit big-endian values is supported. */
hgs
parents:
diff changeset
   201
	EMemoryBE32 = 7,          /**< Indicates whether reading memory as 32 bit big-endian values is supported. */
hgs
parents:
diff changeset
   202
	EMemoryLE8 = 8,           /**< Indicates whether reading memory as 8 bit little-endian values is supported. */
hgs
parents:
diff changeset
   203
	EMemoryMaxBlockSize = 9,  /**< Corresponds to the maximum size of a block of memory which can be requested. */
hgs
parents:
diff changeset
   204
	/**
hgs
parents:
diff changeset
   205
	  @internalTechnology
hgs
parents:
diff changeset
   206
	  A debug agent should find the number of memory tags from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   207
	  */
hgs
parents:
diff changeset
   208
	EMemoryLast
hgs
parents:
diff changeset
   209
};
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
/**
hgs
parents:
diff changeset
   212
  These tags define which objects can be killed by the device driver.
hgs
parents:
diff changeset
   213
  TTag structures associated with the ETagHeaderIdKillObjects sub-block will have iTagId values from this enumeration.
hgs
parents:
diff changeset
   214
  See each enumerator for an explanation of how a TTag with that iTagId should be interpreted.
hgs
parents:
diff changeset
   215
 */
hgs
parents:
diff changeset
   216
enum TFunctionalityKillObject
hgs
parents:
diff changeset
   217
{
hgs
parents:
diff changeset
   218
	EFunctionalityKillThread = 0,          /**< Indicates whether killing threads is supported. */
hgs
parents:
diff changeset
   219
	EFunctionalityKillProcess = 1,         /**< Indicates whether killing processes is supported. */
hgs
parents:
diff changeset
   220
	/**
hgs
parents:
diff changeset
   221
	  @internalTechnology
hgs
parents:
diff changeset
   222
	  A debug agent should find the number of kill object tags from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   223
	  */
hgs
parents:
diff changeset
   224
	EFunctionalityKillObjectLast
hgs
parents:
diff changeset
   225
};
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
/**
hgs
parents:
diff changeset
   228
  A TTag with an id from the TFunctionalityRegister enum will have a value from this enumeration.
hgs
parents:
diff changeset
   229
  The values define how a register can be accessed, if at all.
hgs
parents:
diff changeset
   230
 */
hgs
parents:
diff changeset
   231
enum TFunctionalityAccess
hgs
parents:
diff changeset
   232
{
hgs
parents:
diff changeset
   233
	EAccessNone = 0,       /**< Indicates that a register cannot be accessed. */
hgs
parents:
diff changeset
   234
	EAccessReadOnly = 1,   /**< Indicates that a register can be read, but not written to. */
hgs
parents:
diff changeset
   235
	EAccessWriteOnly = 2,  /**< Indicates that a register can be written to, but not read. */
hgs
parents:
diff changeset
   236
	EAccessReadWrite = 3,  /**< Indicates that a register can be both read and written to. */
hgs
parents:
diff changeset
   237
	EAccessUnknown = 4,    /**< Indicates that it is unspecified whether reading or writing to a register is possible. */
hgs
parents:
diff changeset
   238
};
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
/**
hgs
parents:
diff changeset
   241
  These enumerators act as core register identifiers.
hgs
parents:
diff changeset
   242
  TTag structures associated with the ETagHeaderIdRegistersCore sub-block will have iTagId values from this enumeration.
hgs
parents:
diff changeset
   243
  The numeric value of each enumerator identifies the register according to the definitions in the Symbian Core Dump File Format Appendix B
hgs
parents:
diff changeset
   244
  (see SGL.TS0028.027 - Symbian Core Dump File Format v1.0.doc).
hgs
parents:
diff changeset
   245
  */
hgs
parents:
diff changeset
   246
enum TFunctionalityRegister
hgs
parents:
diff changeset
   247
{
hgs
parents:
diff changeset
   248
	ERegisterR0 = 0x00000000,      /**< Identifier for user mode register R0. */
hgs
parents:
diff changeset
   249
	ERegisterR1 = 0x00000100,      /**< Identifier for user mode register R1. */
hgs
parents:
diff changeset
   250
	ERegisterR2 = 0x00000200,      /**< Identifier for user mode register R2. */
hgs
parents:
diff changeset
   251
	ERegisterR3 = 0x00000300,      /**< Identifier for user mode register R3. */
hgs
parents:
diff changeset
   252
	ERegisterR4 = 0x00000400,      /**< Identifier for user mode register R4. */
hgs
parents:
diff changeset
   253
	ERegisterR5 = 0x00000500,      /**< Identifier for user mode register R5. */
hgs
parents:
diff changeset
   254
	ERegisterR6 = 0x00000600,      /**< Identifier for user mode register R6. */
hgs
parents:
diff changeset
   255
	ERegisterR7 = 0x00000700,      /**< Identifier for user mode register R7. */
hgs
parents:
diff changeset
   256
	ERegisterR8 = 0x00000800,      /**< Identifier for user mode register R8. */
hgs
parents:
diff changeset
   257
	ERegisterR9 = 0x00000900,      /**< Identifier for user mode register R9. */
hgs
parents:
diff changeset
   258
	ERegisterR10 = 0x00000a00,     /**< Identifier for user mode register R10. */
hgs
parents:
diff changeset
   259
	ERegisterR11 = 0x00000b00,     /**< Identifier for user mode register R11. */
hgs
parents:
diff changeset
   260
	ERegisterR12 = 0x00000c00,     /**< Identifier for user mode register R12. */
hgs
parents:
diff changeset
   261
	ERegisterR13 = 0x00000d00,     /**< Identifier for user mode register R13. */
hgs
parents:
diff changeset
   262
	ERegisterR14 = 0x00000e00,     /**< Identifier for user mode register R14. */
hgs
parents:
diff changeset
   263
	ERegisterR15 = 0x00000f00,     /**< Identifier for user mode register R15. */
hgs
parents:
diff changeset
   264
	ERegisterCpsr = 0x00001000,    /**< Identifier for CPSR. */
hgs
parents:
diff changeset
   265
	ERegisterR13Svc = 0x00001100,  /**< Identifier for R13 supervisor mode banked register. */
hgs
parents:
diff changeset
   266
	ERegisterR14Svc = 0x00001200,  /**< Identifier for R14 supervisor mode banked register. */
hgs
parents:
diff changeset
   267
	ERegisterSpsrSvc = 0x00001300, /**< Identifier for SPSR supervisor mode banked register. */
hgs
parents:
diff changeset
   268
	ERegisterR13Abt = 0x00001400,  /**< Identifier for R13 Abort mode banked register. */
hgs
parents:
diff changeset
   269
	ERegisterR14Abt = 0x00001500,  /**< Identifier for R14 Abort mode banked register. */
hgs
parents:
diff changeset
   270
	ERegisterSpsrAbt = 0x00001600, /**< Identifier for SPSR Abort mode banked register. */
hgs
parents:
diff changeset
   271
	ERegisterR13Und = 0x00001700,  /**< Identifier for R13 Undefined mode banked register. */
hgs
parents:
diff changeset
   272
	ERegisterR14Und = 0x00001800,  /**< Identifier for R14 Undefined mode banked register. */
hgs
parents:
diff changeset
   273
	ERegisterSpsrUnd = 0x00001900, /**< Identifier for SPSR Undefined mode banked register. */
hgs
parents:
diff changeset
   274
	ERegisterR13Irq = 0x00001a00,  /**< Identifier for R13 Interrupt mode banked register. */
hgs
parents:
diff changeset
   275
	ERegisterR14Irq = 0x00001b00,  /**< Identifier for R14 Interrupt mode banked register. */
hgs
parents:
diff changeset
   276
	ERegisterSpsrIrq = 0x00001c00, /**< Identifier for SPSR Interrupt mode banked register. */
hgs
parents:
diff changeset
   277
	ERegisterR8Fiq = 0x00001d00,   /**< Identifier for R8 Fast Interrupt mode banked register. */
hgs
parents:
diff changeset
   278
	ERegisterR9Fiq = 0x00001e00,   /**< Identifier for R9 Fast Interrupt mode banked register. */
hgs
parents:
diff changeset
   279
	ERegisterR10Fiq = 0x00001f00,  /**< Identifier for R10 Fast Interrupt mode banked register. */
hgs
parents:
diff changeset
   280
	ERegisterR11Fiq = 0x00002000,  /**< Identifier for R11 Fast Interrupt mode banked register. */
hgs
parents:
diff changeset
   281
	ERegisterR12Fiq = 0x00002100,  /**< Identifier for R12 Fast Interrupt mode banked register. */
hgs
parents:
diff changeset
   282
	ERegisterR13Fiq = 0x00002200,  /**< Identifier for R13 Fast Interrupt mode banked register. */
hgs
parents:
diff changeset
   283
	ERegisterR14Fiq = 0x00002300,  /**< Identifier for R14 Fast Interrupt mode banked register. */
hgs
parents:
diff changeset
   284
	ERegisterSpsrFiq = 0x00002400, /**< Identifier for SPSR Fast Interrupt mode banked register. */
hgs
parents:
diff changeset
   285
	/**
hgs
parents:
diff changeset
   286
	  @internalTechnology
hgs
parents:
diff changeset
   287
	  A debug agent should find the number of core registers from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   288
	  */
hgs
parents:
diff changeset
   289
	ERegisterLast = 37
hgs
parents:
diff changeset
   290
};
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
/**
hgs
parents:
diff changeset
   294
  These tags define the kind of breakpoints that are supported.
hgs
parents:
diff changeset
   295
  TTag structures associated with the ETagHeaderIdBreakpoints sub-block will have iTagId values from this enumeration.
hgs
parents:
diff changeset
   296
  See each enumerator for an explanation of how a TTag with that iTagId should be interpreted.
hgs
parents:
diff changeset
   297
 */
hgs
parents:
diff changeset
   298
enum TFunctionalityBreakpoint
hgs
parents:
diff changeset
   299
{
hgs
parents:
diff changeset
   300
	EBreakpointThread = 0,         /**< Indicates whether thread specific breakpoints are supported. */
hgs
parents:
diff changeset
   301
	EBreakpointProcess = 1,        /**< Indicates whether process specific breakpoints are supported. */
hgs
parents:
diff changeset
   302
	EBreakpointSystem = 2,         /**< Indicates whether system wide breakpoints are supported. */
hgs
parents:
diff changeset
   303
	EBreakpointArm = 3,            /**< Indicates whether ARM mode breakpoints are supported. */
hgs
parents:
diff changeset
   304
	EBreakpointThumb = 4,          /**< Indicates whether Thumb mode breakpoints are supported. */
hgs
parents:
diff changeset
   305
	EBreakpointT2EE = 5,           /**< Indicates whether Thumb2 mode breakpoints are supported. */
hgs
parents:
diff changeset
   306
	EBreakpointArmInst = 6,        /**< Reserved for future use. */
hgs
parents:
diff changeset
   307
	EBreakpointThumbInst = 7,      /**< Reserved for future use. */
hgs
parents:
diff changeset
   308
	EBreakpointT2EEInst = 8,       /**< Reserved for future use. */
hgs
parents:
diff changeset
   309
	EBreakpointSetArmInst = 9,     /**< Reserved for future use. */
hgs
parents:
diff changeset
   310
	EBreakpointSetThumbInst = 10,  /**< Reserved for future use. */
hgs
parents:
diff changeset
   311
	EBreakpointSetT2EEInst = 11,   /**< Reserved for future use. */
hgs
parents:
diff changeset
   312
	/**
hgs
parents:
diff changeset
   313
	  @internalTechnology
hgs
parents:
diff changeset
   314
	  A debug agent should find the number of breakpoint tags from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   315
	  */
hgs
parents:
diff changeset
   316
	EBreakpointLast
hgs
parents:
diff changeset
   317
};
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
/**
hgs
parents:
diff changeset
   320
  These enumerators provide information about the stepping capabilities of the debug sub-system.
hgs
parents:
diff changeset
   321
  TTag structures associated with the ETagHeaderIdStepping sub-block will have iTagId values from this enumeration.
hgs
parents:
diff changeset
   322
  See each enumerator for an explanation of how a TTag with that iTagId should be interpreted.
hgs
parents:
diff changeset
   323
 */
hgs
parents:
diff changeset
   324
enum TFunctionalityStep
hgs
parents:
diff changeset
   325
{
hgs
parents:
diff changeset
   326
	EStep = 0, /**< Indicates whether instruction stepping is supported. */
hgs
parents:
diff changeset
   327
	/**
hgs
parents:
diff changeset
   328
	  @internalTechnology
hgs
parents:
diff changeset
   329
	  A debug agent should find the number of stepping tags from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   330
	  */
hgs
parents:
diff changeset
   331
	EStepLast
hgs
parents:
diff changeset
   332
};
hgs
parents:
diff changeset
   333
hgs
parents:
diff changeset
   334
/**
hgs
parents:
diff changeset
   335
  These enumerators provide information about the execution control capabilities of the debug sub-system.
hgs
parents:
diff changeset
   336
  TTag structures associated with the ETagHeaderIdExecution sub-block will have iTagId values from this enumeration.
hgs
parents:
diff changeset
   337
  See each enumerator for an explanation of how a TTag with that iTagId should be interpreted.
hgs
parents:
diff changeset
   338
 */
hgs
parents:
diff changeset
   339
enum TFunctionalityExec
hgs
parents:
diff changeset
   340
{
hgs
parents:
diff changeset
   341
	EExecThreadSuspendResume = 0,  /**< Indicates whether suspending and resuming threads is supported. */
hgs
parents:
diff changeset
   342
	EExecProcessSuspendResume = 1, /**< Indicates whether suspending and resuming processes is supported. */
hgs
parents:
diff changeset
   343
	EExecSystemSuspendResume = 2,  /**< Indicates whether suspending and resuming the entire system is supported. */
hgs
parents:
diff changeset
   344
	/**
hgs
parents:
diff changeset
   345
	  @internalTechnology
hgs
parents:
diff changeset
   346
	  A debug agent should find the number of execution control tags from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   347
	  */
hgs
parents:
diff changeset
   348
	EExecLast
hgs
parents:
diff changeset
   349
};
hgs
parents:
diff changeset
   350
hgs
parents:
diff changeset
   351
/**
hgs
parents:
diff changeset
   352
  This enumeration defines the event types supported by the debug sub-system.
hgs
parents:
diff changeset
   353
  TTag structures associated with the ETagHeaderIdEvents sub-block will have
hgs
parents:
diff changeset
   354
  iTagId values from this enumeration, and iValue values from the TKernelEventAction enumeration.
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
  These enumerators are also used by the RSecuritySvrSession API to identify events.
hgs
parents:
diff changeset
   357
  @see RSecuritySvrSession
hgs
parents:
diff changeset
   358
  @see TKernelEventAction
hgs
parents:
diff changeset
   359
 */
hgs
parents:
diff changeset
   360
enum TEventType
hgs
parents:
diff changeset
   361
{
hgs
parents:
diff changeset
   362
	EEventsBreakPoint = 0,    /**< Identifies a breakpoint event. */
hgs
parents:
diff changeset
   363
	EEventsSwExc = 1,         /**< Identifies a software exception event. */
hgs
parents:
diff changeset
   364
	EEventsHwExc = 2,         /**< Identifies a hardware exception event. */
hgs
parents:
diff changeset
   365
	EEventsKillThread = 3,    /**< Identifies a kill thread event. */
hgs
parents:
diff changeset
   366
	EEventsAddLibrary = 4,    /**< Identifies an add library event. */
hgs
parents:
diff changeset
   367
	EEventsRemoveLibrary = 5, /**< Identifies a remove library event. */
hgs
parents:
diff changeset
   368
	/**
hgs
parents:
diff changeset
   369
	 If an event is generated and there is only a single space remaining in the events queue then
hgs
parents:
diff changeset
   370
	 an event of type EEventsBufferFull will be stored in the queue and the generated event will
hgs
parents:
diff changeset
   371
	 be discarded. If further events occur while the buffer is full the events will be discarded.
hgs
parents:
diff changeset
   372
	 As such an event of type EEventsBufferFull being returned signifies that one or more events
hgs
parents:
diff changeset
   373
	 were discarded. An event of this type has no valid data associated with it.
hgs
parents:
diff changeset
   374
	 */
hgs
parents:
diff changeset
   375
	EEventsBufferFull = 6,
hgs
parents:
diff changeset
   376
	EEventsUnknown = 7,       /**< Identifies an event of unknown type. */
hgs
parents:
diff changeset
   377
	EEventsUserTrace = 8,     /**< Identifies a user trace. */
hgs
parents:
diff changeset
   378
	EEventsProcessBreakPoint = 9, /**< Identifies a process breakpoint event. */
hgs
parents:
diff changeset
   379
	EEventsStartThread = 10, /**< Identifies a start thread event. */
hgs
parents:
diff changeset
   380
	EEventsUserTracesLost = 11, /**< Identifies user traces being lost. */
hgs
parents:
diff changeset
   381
	EEventsAddProcess = 12, /**< Identifies an AddProcess event */
hgs
parents:
diff changeset
   382
	EEventsRemoveProcess = 13, /**< Identifies a RemoveProcess event */
hgs
parents:
diff changeset
   383
	/**
hgs
parents:
diff changeset
   384
	  @internalTechnology
hgs
parents:
diff changeset
   385
	  A debug agent should find the number of event types from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   386
	  */
hgs
parents:
diff changeset
   387
	EEventsLast
hgs
parents:
diff changeset
   388
};
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
/**
hgs
parents:
diff changeset
   391
  These enumerators provide information about constants which are used in the RSecuritySvrSession API.
hgs
parents:
diff changeset
   392
  TTag structures associated with the ETagHeaderIdApiConstants sub-block will have iTagId values from this enumeration.
hgs
parents:
diff changeset
   393
  See each enumerator for an explanation of how a TTag with that iTagId should be interpreted.
hgs
parents:
diff changeset
   394
 */
hgs
parents:
diff changeset
   395
enum TFunctionalityApiConstants
hgs
parents:
diff changeset
   396
	{
hgs
parents:
diff changeset
   397
	/**
hgs
parents:
diff changeset
   398
	  Corresponds to the size of a buffer required to store a TEventInfo.
hgs
parents:
diff changeset
   399
	  @see TEventInfo
hgs
parents:
diff changeset
   400
	  */
hgs
parents:
diff changeset
   401
	EApiConstantsTEventInfoSize = 0,
hgs
parents:
diff changeset
   402
	/**
hgs
parents:
diff changeset
   403
	  @internalTechnology
hgs
parents:
diff changeset
   404
	  A debug agent should find the number of API constants tags from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   405
	  */
hgs
parents:
diff changeset
   406
	EApiConstantsLast,
hgs
parents:
diff changeset
   407
	};
hgs
parents:
diff changeset
   408
hgs
parents:
diff changeset
   409
/**
hgs
parents:
diff changeset
   410
  The set of possible actions which could be taken when a kernel event occurs.
hgs
parents:
diff changeset
   411
  Not all actions are possible for all events. The debug functionality sub-block with header id ETagHeaderIdEvents
hgs
parents:
diff changeset
   412
  indicates which values are permitted for each event. The value given for that event should be
hgs
parents:
diff changeset
   413
  considered as the most intrusive action the debugger may set: with the definition that EActionSuspend is more
hgs
parents:
diff changeset
   414
  intrusive than EActionContinue, which is more intrusive than EActionIgnore.
hgs
parents:
diff changeset
   415
  @see RSecuritySvrSession
hgs
parents:
diff changeset
   416
  */
hgs
parents:
diff changeset
   417
enum TKernelEventAction
hgs
parents:
diff changeset
   418
{
hgs
parents:
diff changeset
   419
	/** If an event action is set to this value then events of that type will be
hgs
parents:
diff changeset
   420
	  ignored, and not reported to the debugger. */
hgs
parents:
diff changeset
   421
	EActionIgnore = 0,
hgs
parents:
diff changeset
   422
	/** If an event action is set to this value then events of that type will be
hgs
parents:
diff changeset
   423
	  reported to the debugger and the thread which generated the event will be
hgs
parents:
diff changeset
   424
	  allowed to continue executing. */
hgs
parents:
diff changeset
   425
	EActionContinue = 1,
hgs
parents:
diff changeset
   426
	/** If an event action is set to this value then events of that type will be
hgs
parents:
diff changeset
   427
	  reported to the debugger and the thread which generated the event will be
hgs
parents:
diff changeset
   428
	  suspended. */
hgs
parents:
diff changeset
   429
	EActionSuspend = 2,
hgs
parents:
diff changeset
   430
	/**
hgs
parents:
diff changeset
   431
	  @internalTechnology
hgs
parents:
diff changeset
   432
	  Count of event actions.
hgs
parents:
diff changeset
   433
	  */
hgs
parents:
diff changeset
   434
	EActionLast
hgs
parents:
diff changeset
   435
};
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
/**
hgs
parents:
diff changeset
   438
  These enumerators provide information about the ability of the debug subsystem to support OEM Debug tokens.
hgs
parents:
diff changeset
   439
  TTag structures associated with the ETagHeaderIdSecurity sub-block will have iTagId values from this enumeration.
hgs
parents:
diff changeset
   440
  See each enumerator for an explanation of how a TTag with that iTagId should be interpreted.
hgs
parents:
diff changeset
   441
 */
hgs
parents:
diff changeset
   442
enum TFunctionalitySecurity
hgs
parents:
diff changeset
   443
{
hgs
parents:
diff changeset
   444
	ESecurityOEMDebugToken = 0,  /**< Indicates whether the DSS supports the use of OEM Debug Tokens. */
hgs
parents:
diff changeset
   445
hgs
parents:
diff changeset
   446
	/**
hgs
parents:
diff changeset
   447
	  @internalTechnology
hgs
parents:
diff changeset
   448
	  A debug agent should find the number of tags from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   449
	  */
hgs
parents:
diff changeset
   450
	ESecurityLast
hgs
parents:
diff changeset
   451
};
hgs
parents:
diff changeset
   452
hgs
parents:
diff changeset
   453
/**
hgs
parents:
diff changeset
   454
  Used for storing the contents of a 32 bit register
hgs
parents:
diff changeset
   455
  */
hgs
parents:
diff changeset
   456
typedef TUint32 TRegisterValue32;
hgs
parents:
diff changeset
   457
hgs
parents:
diff changeset
   458
hgs
parents:
diff changeset
   459
/**
hgs
parents:
diff changeset
   460
 * Processor mode
hgs
parents:
diff changeset
   461
 */
hgs
parents:
diff changeset
   462
enum TArmProcessorModes
hgs
parents:
diff changeset
   463
{
hgs
parents:
diff changeset
   464
	EUserMode=0x10,    	//!< EUserMode
hgs
parents:
diff changeset
   465
    EFiqMode=0x11,  	//!< EFiqMode
hgs
parents:
diff changeset
   466
    EIrqMode=0x12,  	//!< EIrqMode
hgs
parents:
diff changeset
   467
    ESvcMode=0x13,  	//!< ESvcMode
hgs
parents:
diff changeset
   468
    EAbortMode=0x17,	//!< EAbortMode
hgs
parents:
diff changeset
   469
    EUndefMode=0x1b,	//!< EUndefMode
hgs
parents:
diff changeset
   470
    EMaskMode=0x1f  	//!< EMaskMode
hgs
parents:
diff changeset
   471
};
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
hgs
parents:
diff changeset
   474
hgs
parents:
diff changeset
   475
/**
hgs
parents:
diff changeset
   476
  Structure containing information about the state of the registers when a
hgs
parents:
diff changeset
   477
  hardware exception occurred
hgs
parents:
diff changeset
   478
  */
hgs
parents:
diff changeset
   479
class TRmdArmExcInfo
hgs
parents:
diff changeset
   480
	{
hgs
parents:
diff changeset
   481
public:
hgs
parents:
diff changeset
   482
	/** Enumeration detailing the types of exception which may occur. */
hgs
parents:
diff changeset
   483
	enum TExceptionType
hgs
parents:
diff changeset
   484
		{
hgs
parents:
diff changeset
   485
		/** Enumerator signifying that a prefetch abort error has occurred. */
hgs
parents:
diff changeset
   486
		EPrefetchAbort = 0,
hgs
parents:
diff changeset
   487
		/** Enumerator signifying that a data abort error has occurred. */
hgs
parents:
diff changeset
   488
		EDataAbort = 1,
hgs
parents:
diff changeset
   489
		/** Enumerator signifying that an undefined instruction error has occurred. */
hgs
parents:
diff changeset
   490
		EUndef =2
hgs
parents:
diff changeset
   491
		};
hgs
parents:
diff changeset
   492
hgs
parents:
diff changeset
   493
	/** Value of CPSR. */
hgs
parents:
diff changeset
   494
	TRegisterValue32 iCpsr;
hgs
parents:
diff changeset
   495
	/** Type of exception which has occurred. */
hgs
parents:
diff changeset
   496
	TExceptionType iExcCode;
hgs
parents:
diff changeset
   497
	/** Value of R13 supervisor mode banked register. */
hgs
parents:
diff changeset
   498
	TRegisterValue32 iR13Svc;
hgs
parents:
diff changeset
   499
	/** Value of user mode register R4. */
hgs
parents:
diff changeset
   500
	TRegisterValue32 iR4;
hgs
parents:
diff changeset
   501
	/** Value of user mode register R5. */
hgs
parents:
diff changeset
   502
	TRegisterValue32 iR5;
hgs
parents:
diff changeset
   503
	/** Value of user mode register R6. */
hgs
parents:
diff changeset
   504
	TRegisterValue32 iR6;
hgs
parents:
diff changeset
   505
	/** Value of user mode register R7. */
hgs
parents:
diff changeset
   506
	TRegisterValue32 iR7;
hgs
parents:
diff changeset
   507
	/** Value of user mode register R8. */
hgs
parents:
diff changeset
   508
	TRegisterValue32 iR8;
hgs
parents:
diff changeset
   509
	/** Value of user mode register R9. */
hgs
parents:
diff changeset
   510
	TRegisterValue32 iR9;
hgs
parents:
diff changeset
   511
	/** Value of user mode register R10. */
hgs
parents:
diff changeset
   512
	TRegisterValue32 iR10;
hgs
parents:
diff changeset
   513
	/** Value of user mode register R11. */
hgs
parents:
diff changeset
   514
	TRegisterValue32 iR11;
hgs
parents:
diff changeset
   515
	/** Value of R14 supervisor mode banked register. */
hgs
parents:
diff changeset
   516
	TRegisterValue32 iR14Svc;
hgs
parents:
diff changeset
   517
	/** Address which caused exception (System Control Coprocessor Fault Address Register) */
hgs
parents:
diff changeset
   518
	TRegisterValue32 iFaultAddress;
hgs
parents:
diff changeset
   519
	/** Value of System Control Coprocessor Fault Status Register. */
hgs
parents:
diff changeset
   520
	TRegisterValue32 iFaultStatus;
hgs
parents:
diff changeset
   521
	/** Value of SPSR supervisor mode banked register. */
hgs
parents:
diff changeset
   522
	TRegisterValue32 iSpsrSvc;
hgs
parents:
diff changeset
   523
	/** Value of user mode register R13. */
hgs
parents:
diff changeset
   524
	TRegisterValue32 iR13;
hgs
parents:
diff changeset
   525
	/** Value of user mode register R14. */
hgs
parents:
diff changeset
   526
	TRegisterValue32 iR14;
hgs
parents:
diff changeset
   527
	/** Value of user mode register R0. */
hgs
parents:
diff changeset
   528
	TRegisterValue32 iR0;
hgs
parents:
diff changeset
   529
	/** Value of user mode register R1. */
hgs
parents:
diff changeset
   530
	TRegisterValue32 iR1;
hgs
parents:
diff changeset
   531
	/** Value of user mode register R2. */
hgs
parents:
diff changeset
   532
	TRegisterValue32 iR2;
hgs
parents:
diff changeset
   533
	/** Value of user mode register R3. */
hgs
parents:
diff changeset
   534
	TRegisterValue32 iR3;
hgs
parents:
diff changeset
   535
	/** Value of user mode register R12. */
hgs
parents:
diff changeset
   536
	TRegisterValue32 iR12;
hgs
parents:
diff changeset
   537
	/** Value of user mode register R15, points to instruction which caused exception. */
hgs
parents:
diff changeset
   538
	TRegisterValue32 iR15;
hgs
parents:
diff changeset
   539
	};
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
/**
hgs
parents:
diff changeset
   542
  The maximum size, in bytes, of the panic category string returned as part of a
hgs
parents:
diff changeset
   543
  TEventInfo object.
hgs
parents:
diff changeset
   544
hgs
parents:
diff changeset
   545
  @see TEventInfo
hgs
parents:
diff changeset
   546
  @see TThreadKillInfo
hgs
parents:
diff changeset
   547
  */
hgs
parents:
diff changeset
   548
const TInt KPanicCategoryMaxName = KMaxName;
hgs
parents:
diff changeset
   549
hgs
parents:
diff changeset
   550
/**
hgs
parents:
diff changeset
   551
  Event specific information returned as part of a TEventInfo object when
hgs
parents:
diff changeset
   552
  an agent set breakpoint is hit.
hgs
parents:
diff changeset
   553
  */
hgs
parents:
diff changeset
   554
class TThreadBreakPointInfo
hgs
parents:
diff changeset
   555
	{
hgs
parents:
diff changeset
   556
public:
hgs
parents:
diff changeset
   557
	/** Identifies the type of exception. */
hgs
parents:
diff changeset
   558
	TExcType iExceptionNumber;
hgs
parents:
diff changeset
   559
	/** Structure containing information about the ARM register values. */
hgs
parents:
diff changeset
   560
	TRmdArmExcInfo iRmdArmExcInfo;
hgs
parents:
diff changeset
   561
	};
hgs
parents:
diff changeset
   562
hgs
parents:
diff changeset
   563
/**
hgs
parents:
diff changeset
   564
  Event specific information returned as part of a TEventInfo object when
hgs
parents:
diff changeset
   565
  a software exception occurs.
hgs
parents:
diff changeset
   566
  */
hgs
parents:
diff changeset
   567
class TThreadSwExceptionInfo
hgs
parents:
diff changeset
   568
	{
hgs
parents:
diff changeset
   569
public:
hgs
parents:
diff changeset
   570
	/** The value of the program counter. */
hgs
parents:
diff changeset
   571
	TUint32 iCurrentPC;
hgs
parents:
diff changeset
   572
	/** Identifies the type of exception. */
hgs
parents:
diff changeset
   573
	TExcType iExceptionNumber;
hgs
parents:
diff changeset
   574
	};
hgs
parents:
diff changeset
   575
hgs
parents:
diff changeset
   576
/**
hgs
parents:
diff changeset
   577
  Event specific information returned as part of a TEventInfo object when
hgs
parents:
diff changeset
   578
  a hardware exception occurs.
hgs
parents:
diff changeset
   579
  */
hgs
parents:
diff changeset
   580
class TThreadHwExceptionInfo
hgs
parents:
diff changeset
   581
	{
hgs
parents:
diff changeset
   582
public:
hgs
parents:
diff changeset
   583
	/** Identifies the type of exception. */
hgs
parents:
diff changeset
   584
	TExcType iExceptionNumber;
hgs
parents:
diff changeset
   585
	/** Structure containing information about the ARM register values. */
hgs
parents:
diff changeset
   586
	TRmdArmExcInfo iRmdArmExcInfo;
hgs
parents:
diff changeset
   587
	};
hgs
parents:
diff changeset
   588
hgs
parents:
diff changeset
   589
/**
hgs
parents:
diff changeset
   590
  Event specific information returned as part of a TEventInfo object when
hgs
parents:
diff changeset
   591
  a thread kill event occurs.
hgs
parents:
diff changeset
   592
  */
hgs
parents:
diff changeset
   593
class TThreadKillInfo
hgs
parents:
diff changeset
   594
	{
hgs
parents:
diff changeset
   595
public:
hgs
parents:
diff changeset
   596
	/** The value of the program counter. */
hgs
parents:
diff changeset
   597
	TUint32 iCurrentPC;
hgs
parents:
diff changeset
   598
	/** 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. */
hgs
parents:
diff changeset
   599
	TInt iExitReason;
hgs
parents:
diff changeset
   600
	/** Specifies the type of the thread kill event, values correspond to elements of TExitType. */
hgs
parents:
diff changeset
   601
	TUint8 iExitType;
hgs
parents:
diff changeset
   602
	/** The panic category of the killed thread. */
hgs
parents:
diff changeset
   603
	TUint8 iPanicCategory[KPanicCategoryMaxName];
hgs
parents:
diff changeset
   604
	/** Contains the length in bytes of the initialised data in iPanicCategory. */
hgs
parents:
diff changeset
   605
	TInt iPanicCategoryLength;
hgs
parents:
diff changeset
   606
	};
hgs
parents:
diff changeset
   607
hgs
parents:
diff changeset
   608
/**
hgs
parents:
diff changeset
   609
  Event specific information returned as part of a TEventInfo object when
hgs
parents:
diff changeset
   610
  a library load event occurs.
hgs
parents:
diff changeset
   611
  */
hgs
parents:
diff changeset
   612
class TLibraryLoadedInfo
hgs
parents:
diff changeset
   613
	{
hgs
parents:
diff changeset
   614
public:
hgs
parents:
diff changeset
   615
	/** The name of the file that the library was loaded from. */
hgs
parents:
diff changeset
   616
	TUint8 iFileName[KMaxName];
hgs
parents:
diff changeset
   617
	/** Contains the length in bytes of the initialised data in iFileName. */
hgs
parents:
diff changeset
   618
	TInt iFileNameLength;
hgs
parents:
diff changeset
   619
	/** The code base address (.text). */
hgs
parents:
diff changeset
   620
	TUint32 iCodeAddress;
hgs
parents:
diff changeset
   621
	/** The base address of the initialised data section (.data). */
hgs
parents:
diff changeset
   622
	TUint32 iDataAddress;
hgs
parents:
diff changeset
   623
	};
hgs
parents:
diff changeset
   624
hgs
parents:
diff changeset
   625
/**
hgs
parents:
diff changeset
   626
  Event specific information returned as part of a TEventInfo object when
hgs
parents:
diff changeset
   627
  a thread is started
hgs
parents:
diff changeset
   628
  */
hgs
parents:
diff changeset
   629
class TStartThreadInfo
hgs
parents:
diff changeset
   630
	{
hgs
parents:
diff changeset
   631
public:
hgs
parents:
diff changeset
   632
	/** The name of the file that the process owning the thread was created from. */
hgs
parents:
diff changeset
   633
	TUint8 iFileName[KMaxName];
hgs
parents:
diff changeset
   634
	/** Contains the length in bytes of the initialised data in iFileName. */
hgs
parents:
diff changeset
   635
	TInt iFileNameLength;
hgs
parents:
diff changeset
   636
	};
hgs
parents:
diff changeset
   637
hgs
parents:
diff changeset
   638
/**
hgs
parents:
diff changeset
   639
  Event specific information returned as part of a TEventInfo object when
hgs
parents:
diff changeset
   640
  a process is added. Note that the Process may not be fully constructed,
hgs
parents:
diff changeset
   641
  e.g. no threads.
hgs
parents:
diff changeset
   642
  */
hgs
parents:
diff changeset
   643
class TAddProcessInfo
hgs
parents:
diff changeset
   644
	{
hgs
parents:
diff changeset
   645
public:
hgs
parents:
diff changeset
   646
	/** The name of the file that the process was created from. */
hgs
parents:
diff changeset
   647
	TUint8 iFileName[KMaxName];
hgs
parents:
diff changeset
   648
	/** Contains the length in bytes of the initialised data in iFileName. */
hgs
parents:
diff changeset
   649
	TInt iFileNameLength;
hgs
parents:
diff changeset
   650
	/** The UID3 of this process */
hgs
parents:
diff changeset
   651
	TUint32 iUid3;  
hgs
parents:
diff changeset
   652
	/** Contains the CreatorThread ID if available: May be 0 */
hgs
parents:
diff changeset
   653
	TUint64 iCreatorThreadId;  
hgs
parents:
diff changeset
   654
	};
hgs
parents:
diff changeset
   655
hgs
parents:
diff changeset
   656
/**
hgs
parents:
diff changeset
   657
  Event specific information returned as part of a TEventInfo object when
hgs
parents:
diff changeset
   658
  a process is removed. Note that the Process may not be fully destroyed,
hgs
parents:
diff changeset
   659
  so its resources should only be accessed if you already have a handle to it.
hgs
parents:
diff changeset
   660
  */
hgs
parents:
diff changeset
   661
class TRemoveProcessInfo
hgs
parents:
diff changeset
   662
	{
hgs
parents:
diff changeset
   663
public:
hgs
parents:
diff changeset
   664
	/** The name of the file that the process was created from. */
hgs
parents:
diff changeset
   665
	TUint8 iFileName[KMaxName];
hgs
parents:
diff changeset
   666
	/** Contains the length in bytes of the initialised data in iFileName. */
hgs
parents:
diff changeset
   667
	TInt iFileNameLength;
hgs
parents:
diff changeset
   668
	TUint32 iSpare1;	// Unused
hgs
parents:
diff changeset
   669
	};
hgs
parents:
diff changeset
   670
hgs
parents:
diff changeset
   671
/**
hgs
parents:
diff changeset
   672
  Event specific information returned as part of a TEventInfo object when
hgs
parents:
diff changeset
   673
  a library unload event occurs.
hgs
parents:
diff changeset
   674
  */
hgs
parents:
diff changeset
   675
class TLibraryUnloadedInfo
hgs
parents:
diff changeset
   676
	{
hgs
parents:
diff changeset
   677
public:
hgs
parents:
diff changeset
   678
	/** The name of the file that the library was loaded from. */
hgs
parents:
diff changeset
   679
	TUint8 iFileName[KMaxName];
hgs
parents:
diff changeset
   680
	/** Contains the length in bytes of the initialised data in iFileName. */
hgs
parents:
diff changeset
   681
	TInt iFileNameLength;
hgs
parents:
diff changeset
   682
	};
hgs
parents:
diff changeset
   683
hgs
parents:
diff changeset
   684
/**
hgs
parents:
diff changeset
   685
 * Enum to represent the context of a user trace message
hgs
parents:
diff changeset
   686
 */ 
hgs
parents:
diff changeset
   687
enum TUserTraceMessageContext 
hgs
parents:
diff changeset
   688
{
hgs
parents:
diff changeset
   689
	ESingleMessage = 0x1,   /** Indicates this message is the only one corresponding to a given user trace */ 
hgs
parents:
diff changeset
   690
	EMultiStart = 0x2, /** Indicates this message is the start of a user trace which consists of multiple messages */
hgs
parents:
diff changeset
   691
	EMultiMid = 0x3, /** Indicates this message is one in a series of user trace messages */
hgs
parents:
diff changeset
   692
	EMultiEnd = 0x4, /** Indicates this message is the last in a series of user trace messages */
hgs
parents:
diff changeset
   693
	/**
hgs
parents:
diff changeset
   694
	  @internalTechnology
hgs
parents:
diff changeset
   695
	  A debug agent should find the number of core tags from the DFBlock rather than this enumerator.
hgs
parents:
diff changeset
   696
	  */
hgs
parents:
diff changeset
   697
	ELast = 0x5	
hgs
parents:
diff changeset
   698
};
hgs
parents:
diff changeset
   699
	
hgs
parents:
diff changeset
   700
/**
hgs
parents:
diff changeset
   701
 *   Event specific information returned as part of a TEventInfo object 
hgs
parents:
diff changeset
   702
 *   when a user trace event occurs.
hgs
parents:
diff changeset
   703
 */
hgs
parents:
diff changeset
   704
class TUserTraceInfo
hgs
parents:
diff changeset
   705
	{
hgs
parents:
diff changeset
   706
public:
hgs
parents:
diff changeset
   707
	/** The user trace text */
hgs
parents:
diff changeset
   708
	TUint8 iUserTraceText[TUserTraceSize];
hgs
parents:
diff changeset
   709
	
hgs
parents:
diff changeset
   710
	/** User trace text length */
hgs
parents:
diff changeset
   711
	TInt iUserTraceLength;
hgs
parents:
diff changeset
   712
	
hgs
parents:
diff changeset
   713
	/** The context of the message */
hgs
parents:
diff changeset
   714
	TUserTraceMessageContext iMessageStatus;
hgs
parents:
diff changeset
   715
	};
hgs
parents:
diff changeset
   716
	
hgs
parents:
diff changeset
   717
	
hgs
parents:
diff changeset
   718
/**
hgs
parents:
diff changeset
   719
  Structure used to store information about an event. An object of this type
hgs
parents:
diff changeset
   720
  is passed as an argument to the RSecuritySvrSession::GetEvent function,
hgs
parents:
diff changeset
   721
  and is filled in by the debug driver, and returned to the agent, when a
hgs
parents:
diff changeset
   722
  relevant event occurs.
hgs
parents:
diff changeset
   723
hgs
parents:
diff changeset
   724
  The debug functionality block contains the size in bytes of the data that
hgs
parents:
diff changeset
   725
  the driver will return when a GetEvent call is issued. A debug agent should
hgs
parents:
diff changeset
   726
  ensure that this value equals the size of this TEventInfo object to ensure
hgs
parents:
diff changeset
   727
  that a compatible debug driver is being used. The value is stored as
hgs
parents:
diff changeset
   728
  EApiConstantsTEventInfoSize in the TFunctionalityApiConstants block.
hgs
parents:
diff changeset
   729
hgs
parents:
diff changeset
   730
  @see RSecuritySvrSession::GetDebugFunctionality
hgs
parents:
diff changeset
   731
  @see RSecuritySvrSession::GetEvent
hgs
parents:
diff changeset
   732
  */
hgs
parents:
diff changeset
   733
class TEventInfo
hgs
parents:
diff changeset
   734
	{
hgs
parents:
diff changeset
   735
public:
hgs
parents:
diff changeset
   736
hgs
parents:
diff changeset
   737
	/** Constructor sets all elements to default values. */
hgs
parents:
diff changeset
   738
	inline TEventInfo() { Reset(); };
hgs
parents:
diff changeset
   739
hgs
parents:
diff changeset
   740
	/** Resets all values to default values. */
hgs
parents:
diff changeset
   741
	inline void Reset()
hgs
parents:
diff changeset
   742
		{
hgs
parents:
diff changeset
   743
		iProcessId = 0;
hgs
parents:
diff changeset
   744
		iProcessIdValid = EFalse;
hgs
parents:
diff changeset
   745
		iThreadId = 0;
hgs
parents:
diff changeset
   746
		iThreadIdValid = EFalse;
hgs
parents:
diff changeset
   747
		iEventType = (TEventType)NULL;
hgs
parents:
diff changeset
   748
		iActionTaken = EActionIgnore;
hgs
parents:
diff changeset
   749
		};
hgs
parents:
diff changeset
   750
hgs
parents:
diff changeset
   751
public:
hgs
parents:
diff changeset
   752
hgs
parents:
diff changeset
   753
	/** The process ID of the process which the event occurred in. */
hgs
parents:
diff changeset
   754
	TUint64 				iProcessId;
hgs
parents:
diff changeset
   755
	/** The thread ID of the thread which the event occurred in. */
hgs
parents:
diff changeset
   756
	TUint64 				iThreadId;
hgs
parents:
diff changeset
   757
	/** Has value ETrue if iProcessId is valid, EFalse otherwise. */
hgs
parents:
diff changeset
   758
	TUint8					iProcessIdValid;
hgs
parents:
diff changeset
   759
	/** Has value ETrue if iThreadId is valid, EFalse otherwise. */
hgs
parents:
diff changeset
   760
	TUint8					iThreadIdValid;
hgs
parents:
diff changeset
   761
	/** What action was taken by the debug system when it received the event. A TKernelEventAction */
hgs
parents:
diff changeset
   762
	TUint8					iActionTaken;
hgs
parents:
diff changeset
   763
	TUint8					iSpare;
hgs
parents:
diff changeset
   764
hgs
parents:
diff changeset
   765
	/** Indicates the type of the event. This type should be used to determine
hgs
parents:
diff changeset
   766
	    the type of the information stored in the union which is part of this class. */
hgs
parents:
diff changeset
   767
	TEventType				iEventType;
hgs
parents:
diff changeset
   768
	union
hgs
parents:
diff changeset
   769
		{
hgs
parents:
diff changeset
   770
		/** Information which is specific to the break point event. */
hgs
parents:
diff changeset
   771
		TThreadBreakPointInfo iThreadBreakPointInfo;
hgs
parents:
diff changeset
   772
		/** Information which is specific to the software exception event. */
hgs
parents:
diff changeset
   773
		TThreadSwExceptionInfo iThreadSwExceptionInfo;
hgs
parents:
diff changeset
   774
		/** Information which is specific to the hardware exception event. */
hgs
parents:
diff changeset
   775
		TThreadHwExceptionInfo iThreadHwExceptionInfo;
hgs
parents:
diff changeset
   776
		/** Information which is specific to the thread kill event. */
hgs
parents:
diff changeset
   777
		TThreadKillInfo iThreadKillInfo;
hgs
parents:
diff changeset
   778
		/** Information which is specific to the library loaded event. */
hgs
parents:
diff changeset
   779
		TLibraryLoadedInfo iLibraryLoadedInfo;
hgs
parents:
diff changeset
   780
		/** Information which is specific to the library unloaded event. */
hgs
parents:
diff changeset
   781
		TLibraryUnloadedInfo iLibraryUnloadedInfo;
hgs
parents:
diff changeset
   782
		/** Information which is specific to the user trace event. */
hgs
parents:
diff changeset
   783
		TUserTraceInfo iUserTraceInfo;
hgs
parents:
diff changeset
   784
		/** Information which is specific to the start thread event. */
hgs
parents:
diff changeset
   785
		TStartThreadInfo iStartThreadInfo;
hgs
parents:
diff changeset
   786
		/** Information which is specific to the Add Process event. */
hgs
parents:
diff changeset
   787
		TAddProcessInfo iAddProcessInfo;
hgs
parents:
diff changeset
   788
		/** Information which is specific to the Remove Process event. */
hgs
parents:
diff changeset
   789
		TRemoveProcessInfo iRemoveProcessInfo;
hgs
parents:
diff changeset
   790
		};
hgs
parents:
diff changeset
   791
	};
hgs
parents:
diff changeset
   792
hgs
parents:
diff changeset
   793
/**
hgs
parents:
diff changeset
   794
  @internalComponent
hgs
parents:
diff changeset
   795
  */
hgs
parents:
diff changeset
   796
class TProcessInfo
hgs
parents:
diff changeset
   797
	{
hgs
parents:
diff changeset
   798
	public:
hgs
parents:
diff changeset
   799
hgs
parents:
diff changeset
   800
		inline TProcessInfo() { Reset(); }
hgs
parents:
diff changeset
   801
hgs
parents:
diff changeset
   802
		inline TProcessInfo(TUint32 aId, TUint32 aCodeAddress, TUint32 aCodeSize, TUint32 aDataAddress)
hgs
parents:
diff changeset
   803
				: iId(aId),
hgs
parents:
diff changeset
   804
				  iCodeAddress(aCodeAddress),
hgs
parents:
diff changeset
   805
				  iCodeSize(aCodeSize),
hgs
parents:
diff changeset
   806
				  iDataAddress(aDataAddress) { }
hgs
parents:
diff changeset
   807
hgs
parents:
diff changeset
   808
		inline void Reset()
hgs
parents:
diff changeset
   809
			{
hgs
parents:
diff changeset
   810
			iId = 0;
hgs
parents:
diff changeset
   811
			iCodeAddress = 0;
hgs
parents:
diff changeset
   812
			iCodeSize = 0;
hgs
parents:
diff changeset
   813
			iDataAddress = 0;
hgs
parents:
diff changeset
   814
			}
hgs
parents:
diff changeset
   815
hgs
parents:
diff changeset
   816
	public:
hgs
parents:
diff changeset
   817
hgs
parents:
diff changeset
   818
		TUint32 iId;
hgs
parents:
diff changeset
   819
		TUint32 iCodeAddress;
hgs
parents:
diff changeset
   820
		TUint32 iCodeSize;
hgs
parents:
diff changeset
   821
		TUint32 iDataAddress;
hgs
parents:
diff changeset
   822
	};
hgs
parents:
diff changeset
   823
hgs
parents:
diff changeset
   824
/* Other functionality may be defined here later */
hgs
parents:
diff changeset
   825
hgs
parents:
diff changeset
   826
/**
hgs
parents:
diff changeset
   827
Represents a register id value, in the terms of the Symbian ELF format:
hgs
parents:
diff changeset
   828
 - bits 0-7 define the class
hgs
parents:
diff changeset
   829
 - bits 8-15 define the rd_id
hgs
parents:
diff changeset
   830
 - bits 16-31 define the rd_sub_id
hgs
parents:
diff changeset
   831
hgs
parents:
diff changeset
   832
Both the core registers (TFunctionalityRegister type) and the coprocessor registers
hgs
parents:
diff changeset
   833
follow this identifier scheme.
hgs
parents:
diff changeset
   834
*/
hgs
parents:
diff changeset
   835
typedef TUint32 TRegisterInfo;
hgs
parents:
diff changeset
   836
hgs
parents:
diff changeset
   837
/**
hgs
parents:
diff changeset
   838
Enum representing the status flags which could be returned from a register
hgs
parents:
diff changeset
   839
access call.
hgs
parents:
diff changeset
   840
*/
hgs
parents:
diff changeset
   841
enum TRegisterFlag
hgs
parents:
diff changeset
   842
	{
hgs
parents:
diff changeset
   843
	/**
hgs
parents:
diff changeset
   844
	Default value, a register access call will never return this value
hgs
parents:
diff changeset
   845
	*/
hgs
parents:
diff changeset
   846
	ENotSet = 0,
hgs
parents:
diff changeset
   847
	/**
hgs
parents:
diff changeset
   848
	Would be returned if the register is supported by the debug driver but the kernel cannot access the register
hgs
parents:
diff changeset
   849
	*/
hgs
parents:
diff changeset
   850
	EInValid = 1,
hgs
parents:
diff changeset
   851
	/**
hgs
parents:
diff changeset
   852
	Would be returned if the register could be accessed correctly
hgs
parents:
diff changeset
   853
	*/
hgs
parents:
diff changeset
   854
	EValid = 2,
hgs
parents:
diff changeset
   855
	/**
hgs
parents:
diff changeset
   856
	Would be returned if the register is not supported by the debug driver
hgs
parents:
diff changeset
   857
	*/
hgs
parents:
diff changeset
   858
	ENotSupported = 3,
hgs
parents:
diff changeset
   859
	/**
hgs
parents:
diff changeset
   860
	Would be returned if a non-4 byte register value was requested
hgs
parents:
diff changeset
   861
	*/
hgs
parents:
diff changeset
   862
	EBadSize = 4
hgs
parents:
diff changeset
   863
	};
hgs
parents:
diff changeset
   864
hgs
parents:
diff changeset
   865
/**
hgs
parents:
diff changeset
   866
Enum representing the different ARM CPU instruction set architectures.
hgs
parents:
diff changeset
   867
*/
hgs
parents:
diff changeset
   868
enum TArchitectureMode
hgs
parents:
diff changeset
   869
	{
hgs
parents:
diff changeset
   870
	/** Represents the ARM CPU architecture. */
hgs
parents:
diff changeset
   871
	EArmMode = 1,
hgs
parents:
diff changeset
   872
	/** Represents the Thumb CPU architecture. */
hgs
parents:
diff changeset
   873
	EThumbMode = 2,
hgs
parents:
diff changeset
   874
	/**
hgs
parents:
diff changeset
   875
	  Represents the Thumb2 CPU architecture.
hgs
parents:
diff changeset
   876
	  @prototype
hgs
parents:
diff changeset
   877
	  */
hgs
parents:
diff changeset
   878
	EThumb2EEMode = 3
hgs
parents:
diff changeset
   879
	};
hgs
parents:
diff changeset
   880
hgs
parents:
diff changeset
   881
/**
hgs
parents:
diff changeset
   882
  Used as an identifier for breakpoints set by the RSecuritySvrSession::SetBreak function.
hgs
parents:
diff changeset
   883
  @see RSecuritySvrSession
hgs
parents:
diff changeset
   884
  */
hgs
parents:
diff changeset
   885
typedef TInt32 TBreakId;
hgs
parents:
diff changeset
   886
hgs
parents:
diff changeset
   887
/**
hgs
parents:
diff changeset
   888
  Specifies the type of a code segment.
hgs
parents:
diff changeset
   889
  @see TCodeSegListEntry
hgs
parents:
diff changeset
   890
  */
hgs
parents:
diff changeset
   891
enum TCodeSegType
hgs
parents:
diff changeset
   892
	{
hgs
parents:
diff changeset
   893
	EUnknownCodeSegType = 0, /**< Signifies an unknown code segment type. */
hgs
parents:
diff changeset
   894
	EExeCodeSegType = 1,     /**< Signifies a code segment belonging to an executable. */
hgs
parents:
diff changeset
   895
	EDllCodeSegType = 2      /**< Signifies a code segment belonging to a library. */
hgs
parents:
diff changeset
   896
	};
hgs
parents:
diff changeset
   897
hgs
parents:
diff changeset
   898
/**
hgs
parents:
diff changeset
   899
Structure used for extracting data from a descriptor returned by a call to
hgs
parents:
diff changeset
   900
RSecuritySvrSession::GetList() when GetList() is called with TListId::ECodeSegs
hgs
parents:
diff changeset
   901
as the first argument.
hgs
parents:
diff changeset
   902
hgs
parents:
diff changeset
   903
@see RSecuritySvrSession::GetList()
hgs
parents:
diff changeset
   904
hgs
parents:
diff changeset
   905
@code
hgs
parents:
diff changeset
   906
//buffer is a TDesC8 containing 4-byte aligned TCodeSegListEntry objects
hgs
parents:
diff changeset
   907
//create a pointer to the start of the data
hgs
parents:
diff changeset
   908
TUint8* ptr = (TUint8*)buffer.Ptr();
hgs
parents:
diff changeset
   909
//create a pointer to the end of the data
hgs
parents:
diff changeset
   910
const TUint8* ptrEnd = ptr + buffer.Length();
hgs
parents:
diff changeset
   911
while(ptr < ptrEnd)
hgs
parents:
diff changeset
   912
	{
hgs
parents:
diff changeset
   913
	//cast the pointer to be a TCodeSegListEntry object
hgs
parents:
diff changeset
   914
	TCodeSegListEntry& entry = *(TCodeSegListEntry*)ptr;
hgs
parents:
diff changeset
   915
	//use the TCodeSegListEntry pointer, i.e.
hgs
parents:
diff changeset
   916
	TUint16 nameLength = entry.iNameLength;
hgs
parents:
diff changeset
   917
	TPtr name(&(entry.iName[0]), nameLength, nameLength);
hgs
parents:
diff changeset
   918
	// move ptr on to point to the next TCodeSegListEntry object
hgs
parents:
diff changeset
   919
	ptr += Align4(entry.GetSize());
hgs
parents:
diff changeset
   920
	}
hgs
parents:
diff changeset
   921
@endcode
hgs
parents:
diff changeset
   922
*/
hgs
parents:
diff changeset
   923
class TCodeSegListEntry
hgs
parents:
diff changeset
   924
	{
hgs
parents:
diff changeset
   925
public:
hgs
parents:
diff changeset
   926
	TInt GetSize() const;
hgs
parents:
diff changeset
   927
public:
hgs
parents:
diff changeset
   928
	/**
hgs
parents:
diff changeset
   929
	  Address of the start of the code segment.
hgs
parents:
diff changeset
   930
	  */
hgs
parents:
diff changeset
   931
	TUint32 iCodeBase;
hgs
parents:
diff changeset
   932
	/**
hgs
parents:
diff changeset
   933
	  Size of the code segment.
hgs
parents:
diff changeset
   934
	  */
hgs
parents:
diff changeset
   935
	TUint32 iCodeSize;
hgs
parents:
diff changeset
   936
	/**
hgs
parents:
diff changeset
   937
	  Size of the const data segment
hgs
parents:
diff changeset
   938
	  */
hgs
parents:
diff changeset
   939
	TUint32 iConstDataSize;
hgs
parents:
diff changeset
   940
	/**
hgs
parents:
diff changeset
   941
	  Address of the initialised data
hgs
parents:
diff changeset
   942
	  */
hgs
parents:
diff changeset
   943
	TUint32 iInitialisedDataBase;
hgs
parents:
diff changeset
   944
	/**
hgs
parents:
diff changeset
   945
	  Size of the initialised data
hgs
parents:
diff changeset
   946
	  */
hgs
parents:
diff changeset
   947
	TUint32 iInitialisedDataSize;
hgs
parents:
diff changeset
   948
	/**
hgs
parents:
diff changeset
   949
	  Size of the uninitialised data
hgs
parents:
diff changeset
   950
	  */
hgs
parents:
diff changeset
   951
	TUint32 iUninitialisedDataSize;
hgs
parents:
diff changeset
   952
	/**
hgs
parents:
diff changeset
   953
	  Boolean indicating whether the code segment is execute in place
hgs
parents:
diff changeset
   954
	  */
hgs
parents:
diff changeset
   955
	TBool iIsXip;
hgs
parents:
diff changeset
   956
	/**
hgs
parents:
diff changeset
   957
	  Indicates whether the code segment is from an executable or a dll, or neither
hgs
parents:
diff changeset
   958
	  */
hgs
parents:
diff changeset
   959
	TCodeSegType iCodeSegType;
hgs
parents:
diff changeset
   960
	/** Uid3 of this segment. */
hgs
parents:
diff changeset
   961
	TUint32 iUid3;
hgs
parents:
diff changeset
   962
	/** Currently unused element. May be used in future to aid maintaining compatibility. */
hgs
parents:
diff changeset
   963
	TUint32 iSpare2;
hgs
parents:
diff changeset
   964
	/**
hgs
parents:
diff changeset
   965
	  Length of the code segment's name
hgs
parents:
diff changeset
   966
	  */
hgs
parents:
diff changeset
   967
	TUint16 iNameLength;
hgs
parents:
diff changeset
   968
	/**
hgs
parents:
diff changeset
   969
	  First two bytes of the code segment's name, the name should be considered to
hgs
parents:
diff changeset
   970
	  extend past the end of the TCodeSegListEntry structure to a length
hgs
parents:
diff changeset
   971
	  corresponding to iNameLength
hgs
parents:
diff changeset
   972
	  */
hgs
parents:
diff changeset
   973
	TUint16 iName[1];
hgs
parents:
diff changeset
   974
	};
hgs
parents:
diff changeset
   975
hgs
parents:
diff changeset
   976
/**
hgs
parents:
diff changeset
   977
Returns the size of the TCodeSegListEntry, including the file name length
hgs
parents:
diff changeset
   978
hgs
parents:
diff changeset
   979
@return the size, in bytes, of the TCodeSegListEntry and the code segment's
hgs
parents:
diff changeset
   980
file name
hgs
parents:
diff changeset
   981
*/
hgs
parents:
diff changeset
   982
inline TInt TCodeSegListEntry::GetSize() const
hgs
parents:
diff changeset
   983
	{
hgs
parents:
diff changeset
   984
	return sizeof(TCodeSegListEntry) - sizeof(iName) + (2 * iNameLength);
hgs
parents:
diff changeset
   985
	}
hgs
parents:
diff changeset
   986
hgs
parents:
diff changeset
   987
/**
hgs
parents:
diff changeset
   988
Structure used for extracting data from a descriptor returned by a call to
hgs
parents:
diff changeset
   989
RSecuritySvrSession::GetList() when GetList() is called with TListId::EXipLibraries
hgs
parents:
diff changeset
   990
as the first argument.
hgs
parents:
diff changeset
   991
hgs
parents:
diff changeset
   992
@see RSecuritySvrSession::GetList()
hgs
parents:
diff changeset
   993
hgs
parents:
diff changeset
   994
@code
hgs
parents:
diff changeset
   995
//buffer is a TDesC8 containing 4-byte aligned TXipLibraryListEntry objects
hgs
parents:
diff changeset
   996
//create a pointer to the start of the data
hgs
parents:
diff changeset
   997
TUint8* ptr = (TUint8*)buffer.Ptr();
hgs
parents:
diff changeset
   998
//create a pointer to the end of the data
hgs
parents:
diff changeset
   999
const TUint8* ptrEnd = ptr + buffer.Length();
hgs
parents:
diff changeset
  1000
while(ptr < ptrEnd)
hgs
parents:
diff changeset
  1001
	{
hgs
parents:
diff changeset
  1002
	//cast the pointer to be a TXipLibraryListEntry object
hgs
parents:
diff changeset
  1003
	TXipLibraryListEntry& entry = *(TXipLibraryListEntry*)ptr;
hgs
parents:
diff changeset
  1004
	//use the TXipLibraryListEntry pointer, i.e.
hgs
parents:
diff changeset
  1005
	TUint16 nameLength = entry.iNameLength;
hgs
parents:
diff changeset
  1006
	TPtr name(&(entry.iName[0]), nameLength, nameLength);
hgs
parents:
diff changeset
  1007
	// move ptr on to point to the next TXipLibraryListEntry object
hgs
parents:
diff changeset
  1008
	ptr += Align4(entry.GetSize());
hgs
parents:
diff changeset
  1009
	}
hgs
parents:
diff changeset
  1010
@endcode
hgs
parents:
diff changeset
  1011
*/
hgs
parents:
diff changeset
  1012
class TXipLibraryListEntry
hgs
parents:
diff changeset
  1013
	{
hgs
parents:
diff changeset
  1014
public:
hgs
parents:
diff changeset
  1015
	TInt GetSize() const;
hgs
parents:
diff changeset
  1016
public:
hgs
parents:
diff changeset
  1017
	/**
hgs
parents:
diff changeset
  1018
	  Address of the start of the library's code segment.
hgs
parents:
diff changeset
  1019
	  */
hgs
parents:
diff changeset
  1020
	TUint32 iCodeBase;
hgs
parents:
diff changeset
  1021
	/**
hgs
parents:
diff changeset
  1022
	  Size of the code segment.
hgs
parents:
diff changeset
  1023
	  */
hgs
parents:
diff changeset
  1024
	TUint32 iCodeSize;
hgs
parents:
diff changeset
  1025
	/**
hgs
parents:
diff changeset
  1026
	  Size of the const data segment
hgs
parents:
diff changeset
  1027
	  */
hgs
parents:
diff changeset
  1028
	TUint32 iConstDataSize;
hgs
parents:
diff changeset
  1029
	/**
hgs
parents:
diff changeset
  1030
	  Address of the initialised data
hgs
parents:
diff changeset
  1031
	  */
hgs
parents:
diff changeset
  1032
	TUint32 iInitialisedDataBase;
hgs
parents:
diff changeset
  1033
	/**
hgs
parents:
diff changeset
  1034
	  Size of the initialised data
hgs
parents:
diff changeset
  1035
	  */
hgs
parents:
diff changeset
  1036
	TUint32 iInitialisedDataSize;
hgs
parents:
diff changeset
  1037
	/**
hgs
parents:
diff changeset
  1038
	  Size of the uninitialised data
hgs
parents:
diff changeset
  1039
	  */
hgs
parents:
diff changeset
  1040
	TUint32 iUninitialisedDataSize;
hgs
parents:
diff changeset
  1041
	/** Currently unused element. May be used in future to aid maintaining compatibility. */
hgs
parents:
diff changeset
  1042
	TUint32 iSpare1;
hgs
parents:
diff changeset
  1043
	/** Currently unused element. May be used in future to aid maintaining compatibility. */
hgs
parents:
diff changeset
  1044
	TUint32 iSpare2;
hgs
parents:
diff changeset
  1045
	/**
hgs
parents:
diff changeset
  1046
	  Length of the library's name
hgs
parents:
diff changeset
  1047
	  */
hgs
parents:
diff changeset
  1048
	TUint16 iNameLength;
hgs
parents:
diff changeset
  1049
	/**
hgs
parents:
diff changeset
  1050
	  First two bytes of the code segment's name, the name should be considered to
hgs
parents:
diff changeset
  1051
	  extend past the end of the TXipLibraryListEntry structure to a length
hgs
parents:
diff changeset
  1052
	  corresponding to iNameLength
hgs
parents:
diff changeset
  1053
	  */
hgs
parents:
diff changeset
  1054
	TUint16 iName[1];
hgs
parents:
diff changeset
  1055
	};
hgs
parents:
diff changeset
  1056
hgs
parents:
diff changeset
  1057
/**
hgs
parents:
diff changeset
  1058
Returns the size of the TXipLibraryListEntry, including the file name length
hgs
parents:
diff changeset
  1059
hgs
parents:
diff changeset
  1060
@return the size, in bytes, of the TXipLibraryListEntry and the library's
hgs
parents:
diff changeset
  1061
file name
hgs
parents:
diff changeset
  1062
*/
hgs
parents:
diff changeset
  1063
inline TInt TXipLibraryListEntry::GetSize() const
hgs
parents:
diff changeset
  1064
	{
hgs
parents:
diff changeset
  1065
	return sizeof(TXipLibraryListEntry) - sizeof(iName) + (2 * iNameLength);
hgs
parents:
diff changeset
  1066
	}
hgs
parents:
diff changeset
  1067
hgs
parents:
diff changeset
  1068
/**
hgs
parents:
diff changeset
  1069
Structure used for extracting data from a descriptor returned by a call to
hgs
parents:
diff changeset
  1070
RSecuritySvrSession::GetList() when GetList() is called with TListId::EExecutables
hgs
parents:
diff changeset
  1071
as the first argument.
hgs
parents:
diff changeset
  1072
hgs
parents:
diff changeset
  1073
@see RSecuritySvrSession::GetList()
hgs
parents:
diff changeset
  1074
hgs
parents:
diff changeset
  1075
@code
hgs
parents:
diff changeset
  1076
//buffer is a TDesC8 containing 4-byte aligned TExecutablesListEntry objects
hgs
parents:
diff changeset
  1077
//create a pointer to the start of the data
hgs
parents:
diff changeset
  1078
TUint8* ptr = (TUint8*)buffer.Ptr();
hgs
parents:
diff changeset
  1079
//create a pointer to the end of the data
hgs
parents:
diff changeset
  1080
const TUint8* ptrEnd = ptr + buffer.Length();
hgs
parents:
diff changeset
  1081
while(ptr < ptrEnd)
hgs
parents:
diff changeset
  1082
	{
hgs
parents:
diff changeset
  1083
	//cast the pointer to be a TExecutablesListEntry object
hgs
parents:
diff changeset
  1084
	TExecutablesListEntry& entry = *(TExecutablesListEntry*)ptr;
hgs
parents:
diff changeset
  1085
	//use the TExecutablesListEntry pointer, i.e.
hgs
parents:
diff changeset
  1086
	TUint16 nameLength = entry.iNameLength;
hgs
parents:
diff changeset
  1087
	TPtr name(&(entry.iName[0]), nameLength, nameLength);
hgs
parents:
diff changeset
  1088
	// move ptr on to point to the next TExecutablesListEntry object
hgs
parents:
diff changeset
  1089
	ptr += Align4(entry.GetSize());
hgs
parents:
diff changeset
  1090
	}
hgs
parents:
diff changeset
  1091
@endcode
hgs
parents:
diff changeset
  1092
*/
hgs
parents:
diff changeset
  1093
class TExecutablesListEntry
hgs
parents:
diff changeset
  1094
	{
hgs
parents:
diff changeset
  1095
public:
hgs
parents:
diff changeset
  1096
	TInt GetSize() const;
hgs
parents:
diff changeset
  1097
public:
hgs
parents:
diff changeset
  1098
	/**
hgs
parents:
diff changeset
  1099
	  Indicates whether an agent has registered to actively debug the executable,
hgs
parents:
diff changeset
  1100
	  a non-zero value indicates that an agent has attached.
hgs
parents:
diff changeset
  1101
	  */
hgs
parents:
diff changeset
  1102
	TUint8 iIsActivelyDebugged;
hgs
parents:
diff changeset
  1103
	/**
hgs
parents:
diff changeset
  1104
	  Indicates whether any agents have registered to passively debug the executable,
hgs
parents:
diff changeset
  1105
	  a non-zero value indicates that at least one agent is attached passively
hgs
parents:
diff changeset
  1106
	  */
hgs
parents:
diff changeset
  1107
	TUint8 iIsPassivelyDebugged;
hgs
parents:
diff changeset
  1108
	/** Currently unused element. May be used in future to aid maintaining compatibility. */
hgs
parents:
diff changeset
  1109
	TUint32 iSpare1;
hgs
parents:
diff changeset
  1110
	/** Currently unused element. May be used in future to aid maintaining compatibility. */
hgs
parents:
diff changeset
  1111
	TUint32 iSpare2;
hgs
parents:
diff changeset
  1112
	/**
hgs
parents:
diff changeset
  1113
	  Length of the executable's name
hgs
parents:
diff changeset
  1114
	  */
hgs
parents:
diff changeset
  1115
	TUint16 iNameLength;
hgs
parents:
diff changeset
  1116
	/**
hgs
parents:
diff changeset
  1117
	  First two bytes of the executable's name, the name should be considered to
hgs
parents:
diff changeset
  1118
	  extend past the end of the TExecutablesListEntry structure to a length
hgs
parents:
diff changeset
  1119
	  corresponding to iNameLength
hgs
parents:
diff changeset
  1120
	  */
hgs
parents:
diff changeset
  1121
	TUint16 iName[1];
hgs
parents:
diff changeset
  1122
	};
hgs
parents:
diff changeset
  1123
hgs
parents:
diff changeset
  1124
/**
hgs
parents:
diff changeset
  1125
Returns the size of the TExecutablesListEntry, including the file name length
hgs
parents:
diff changeset
  1126
hgs
parents:
diff changeset
  1127
@return the size, in bytes, of the TExecutablesListEntry and the executable's
hgs
parents:
diff changeset
  1128
file name
hgs
parents:
diff changeset
  1129
*/
hgs
parents:
diff changeset
  1130
inline TInt TExecutablesListEntry::GetSize() const
hgs
parents:
diff changeset
  1131
	{
hgs
parents:
diff changeset
  1132
	return sizeof(TExecutablesListEntry) - sizeof(iName) + (2*iNameLength);
hgs
parents:
diff changeset
  1133
	}
hgs
parents:
diff changeset
  1134
hgs
parents:
diff changeset
  1135
/**
hgs
parents:
diff changeset
  1136
Structure used for extracting data from a descriptor returned by a call to
hgs
parents:
diff changeset
  1137
RSecuritySvrSession::GetList() when GetList() is called with TListId::EProcesses
hgs
parents:
diff changeset
  1138
as the first argument.
hgs
parents:
diff changeset
  1139
hgs
parents:
diff changeset
  1140
@see RSecuritySvrSession::GetList()
hgs
parents:
diff changeset
  1141
hgs
parents:
diff changeset
  1142
@code
hgs
parents:
diff changeset
  1143
//buffer is a TDesC8 containing 4-byte aligned TProcessListEntry objects
hgs
parents:
diff changeset
  1144
//create a pointer to the start of the data
hgs
parents:
diff changeset
  1145
TUint8* ptr = (TUint8*)buffer.Ptr();
hgs
parents:
diff changeset
  1146
//create a pointer to the end of the data
hgs
parents:
diff changeset
  1147
const TUint8* ptrEnd = ptr + buffer.Length();
hgs
parents:
diff changeset
  1148
while(ptr < ptrEnd)
hgs
parents:
diff changeset
  1149
	{
hgs
parents:
diff changeset
  1150
	//cast the pointer to be a TProcessListEntry object
hgs
parents:
diff changeset
  1151
	TProcessListEntry& entry = *(TProcessListEntry*)ptr;
hgs
parents:
diff changeset
  1152
	//use the TProcessListEntry pointer, i.e.
hgs
parents:
diff changeset
  1153
	TUint16 fileNameLength = entry.iFileNameLength;
hgs
parents:
diff changeset
  1154
	TPtr name(&(entry.iNames[0]), fileNameLength, fileNameLength);
hgs
parents:
diff changeset
  1155
	// move ptr on to point to the next TProcessListEntry object
hgs
parents:
diff changeset
  1156
	ptr += Align4(entry.GetSize());
hgs
parents:
diff changeset
  1157
	}
hgs
parents:
diff changeset
  1158
@endcode
hgs
parents:
diff changeset
  1159
*/
hgs
parents:
diff changeset
  1160
class TProcessListEntry
hgs
parents:
diff changeset
  1161
	{
hgs
parents:
diff changeset
  1162
	public:
hgs
parents:
diff changeset
  1163
		TInt GetSize() const;
hgs
parents:
diff changeset
  1164
hgs
parents:
diff changeset
  1165
	public:
hgs
parents:
diff changeset
  1166
		/** Process ID */
hgs
parents:
diff changeset
  1167
		TUint64 iProcessId;
hgs
parents:
diff changeset
  1168
hgs
parents:
diff changeset
  1169
		/** The Uid3 of the process */
hgs
parents:
diff changeset
  1170
		TUint32 iUid3;
hgs
parents:
diff changeset
  1171
hgs
parents:
diff changeset
  1172
		/** 
hgs
parents:
diff changeset
  1173
		 * Process Attributes
hgs
parents:
diff changeset
  1174
		 * @see DProcess::TProcessAttributes
hgs
parents:
diff changeset
  1175
		 */
hgs
parents:
diff changeset
  1176
		TInt iAttributes;
hgs
parents:
diff changeset
  1177
hgs
parents:
diff changeset
  1178
		/**
hgs
parents:
diff changeset
  1179
		 * Length of fully qualified file name of the process in bytes. Note that this
hgs
parents:
diff changeset
  1180
		 * entry may be 0 if the process is in the process of shutting down.
hgs
parents:
diff changeset
  1181
		 */
hgs
parents:
diff changeset
  1182
		TUint16 iFileNameLength;
hgs
parents:
diff changeset
  1183
hgs
parents:
diff changeset
  1184
		/**
hgs
parents:
diff changeset
  1185
		 * Length of current dynamic name of the process in bytes
hgs
parents:
diff changeset
  1186
		 */
hgs
parents:
diff changeset
  1187
		TUint16 iDynamicNameLength;
hgs
parents:
diff changeset
  1188
hgs
parents:
diff changeset
  1189
		/**
hgs
parents:
diff changeset
  1190
		 * First two bytes of the process' file name, the name should be considered to
hgs
parents:
diff changeset
  1191
		 * extend past the end of the TProcessListEntry structure to a length
hgs
parents:
diff changeset
  1192
		 * corresponding to iFileNameLength. Directly after the data corresponding to the
hgs
parents:
diff changeset
  1193
		 * file name, the dynamic name is stored with a length of iDynamicNameLength characters.
hgs
parents:
diff changeset
  1194
		 * Note that these names are not null terminated and are concatenated directly after each other.
hgs
parents:
diff changeset
  1195
		 * 
hgs
parents:
diff changeset
  1196
		 * @code
hgs
parents:
diff changeset
  1197
		 * TProcessListEntry& entry; // entry is a reference to a TProcessListEntry
hgs
parents:
diff changeset
  1198
		 *
hgs
parents:
diff changeset
  1199
		 * //get the file name..
hgs
parents:
diff changeset
  1200
		 * TPtr fileName(&(entry.iNames[0]), iFileNameLength, iFileNameLength);
hgs
parents:
diff changeset
  1201
		 *
hgs
parents:
diff changeset
  1202
		 * //get the dynamic name length..
hgs
parents:
diff changeset
  1203
		 * TPtr dynamicName(&(entry.iNames[0]) + iFileNameLength, iDynamicNameLength, iDynamicNameLength);
hgs
parents:
diff changeset
  1204
		 * @endcode
hgs
parents:
diff changeset
  1205
		 */
hgs
parents:
diff changeset
  1206
		TUint16 iNames[1];
hgs
parents:
diff changeset
  1207
	};
hgs
parents:
diff changeset
  1208
hgs
parents:
diff changeset
  1209
/**
hgs
parents:
diff changeset
  1210
Returns the size of the TProcessListEntry, including the file name length and the
hgs
parents:
diff changeset
  1211
dynamic name length
hgs
parents:
diff changeset
  1212
hgs
parents:
diff changeset
  1213
@return the size, in bytes, of the TProcessListEntry and the executable's
hgs
parents:
diff changeset
  1214
file name file name and dynamic name
hgs
parents:
diff changeset
  1215
*/
hgs
parents:
diff changeset
  1216
inline TInt TProcessListEntry::GetSize() const
hgs
parents:
diff changeset
  1217
	{
hgs
parents:
diff changeset
  1218
	return sizeof(TProcessListEntry) - sizeof(iNames) + (2 * (iFileNameLength + iDynamicNameLength));
hgs
parents:
diff changeset
  1219
	}
hgs
parents:
diff changeset
  1220
hgs
parents:
diff changeset
  1221
/**
hgs
parents:
diff changeset
  1222
Structure used for extracting data from a descriptor returned by a call to
hgs
parents:
diff changeset
  1223
RSecuritySvrSession::GetList() when GetList() is called with TListId::EThreads
hgs
parents:
diff changeset
  1224
as the first argument.
hgs
parents:
diff changeset
  1225
hgs
parents:
diff changeset
  1226
@see RSecuritySvrSession::GetList()
hgs
parents:
diff changeset
  1227
hgs
parents:
diff changeset
  1228
@code
hgs
parents:
diff changeset
  1229
//buffer is a TDesC8 containing 4-byte aligned TThreadListEntry objects
hgs
parents:
diff changeset
  1230
//create a pointer to the start of the data
hgs
parents:
diff changeset
  1231
TUint8* ptr = (TUint8*)buffer.Ptr();
hgs
parents:
diff changeset
  1232
//create a pointer to the end of the data
hgs
parents:
diff changeset
  1233
const TUint8* ptrEnd = ptr + buffer.Length();
hgs
parents:
diff changeset
  1234
while(ptr < ptrEnd)
hgs
parents:
diff changeset
  1235
	{
hgs
parents:
diff changeset
  1236
	//cast the pointer to be a TThreadListEntry object
hgs
parents:
diff changeset
  1237
	TThreadListEntry& entry = *(TThreadListEntry*)ptr;
hgs
parents:
diff changeset
  1238
	//use the TThreadListEntry pointer, i.e.
hgs
parents:
diff changeset
  1239
	TUint16 nameLength = entry.iNameLength;
hgs
parents:
diff changeset
  1240
	TPtr name(&(entry.iName[0]), nameLength, nameLength);
hgs
parents:
diff changeset
  1241
	// move ptr on to point to the next TThreadListEntry object
hgs
parents:
diff changeset
  1242
	ptr += Align4(entry.GetSize());
hgs
parents:
diff changeset
  1243
	}
hgs
parents:
diff changeset
  1244
@endcode
hgs
parents:
diff changeset
  1245
*/
hgs
parents:
diff changeset
  1246
class TThreadListEntry
hgs
parents:
diff changeset
  1247
	{
hgs
parents:
diff changeset
  1248
public:
hgs
parents:
diff changeset
  1249
	TInt GetSize() const;
hgs
parents:
diff changeset
  1250
public:
hgs
parents:
diff changeset
  1251
	/**
hgs
parents:
diff changeset
  1252
	  Thread ID
hgs
parents:
diff changeset
  1253
	  */
hgs
parents:
diff changeset
  1254
	TUint64 iThreadId;
hgs
parents:
diff changeset
  1255
	/**
hgs
parents:
diff changeset
  1256
	  Process ID
hgs
parents:
diff changeset
  1257
	  */
hgs
parents:
diff changeset
  1258
	TUint64 iProcessId;
hgs
parents:
diff changeset
  1259
	/**
hgs
parents:
diff changeset
  1260
	  Address of the base of the supervisor stack
hgs
parents:
diff changeset
  1261
	  */
hgs
parents:
diff changeset
  1262
	TUint32 iSupervisorStackBase;
hgs
parents:
diff changeset
  1263
	/**
hgs
parents:
diff changeset
  1264
	  Size of the supervisor stack
hgs
parents:
diff changeset
  1265
	  */
hgs
parents:
diff changeset
  1266
	TUint32 iSupervisorStackSize;
hgs
parents:
diff changeset
  1267
	/**
hgs
parents:
diff changeset
  1268
	  Non-zero if iSupervisorStackBase has been set correctly
hgs
parents:
diff changeset
  1269
	  */
hgs
parents:
diff changeset
  1270
	TUint8 iSupervisorStackBaseValid;
hgs
parents:
diff changeset
  1271
	/**
hgs
parents:
diff changeset
  1272
	  Non-zero if iSupervisorStackSize has been set correctly
hgs
parents:
diff changeset
  1273
	  */
hgs
parents:
diff changeset
  1274
	TUint8 iSupervisorStackSizeValid;
hgs
parents:
diff changeset
  1275
	/**
hgs
parents:
diff changeset
  1276
	  Address of the thread's supervisor stack pointer
hgs
parents:
diff changeset
  1277
	  */
hgs
parents:
diff changeset
  1278
	TUint32 iSupervisorStackPtr;
hgs
parents:
diff changeset
  1279
	/**
hgs
parents:
diff changeset
  1280
	  Indicator of whether the value returned as iSupervisorStackPtr is valid.
hgs
parents:
diff changeset
  1281
	  It is necessary, but not necessarily sufficient, that the thread be suspended
hgs
parents:
diff changeset
  1282
	  for a valid value to be returned. This may be removed from the final API and
hgs
parents:
diff changeset
  1283
	  the value would be extracted instead via the ReadRegisters type calls.
hgs
parents:
diff changeset
  1284
	  */
hgs
parents:
diff changeset
  1285
	TRegisterFlag iSupervisorStackPtrValid;
hgs
parents:
diff changeset
  1286
	/** Currently unused element. May be used in future to aid maintaining compatibility. */
hgs
parents:
diff changeset
  1287
	TUint32 iSpare1;
hgs
parents:
diff changeset
  1288
	/** Currently unused element. May be used in future to aid maintaining compatibility. */
hgs
parents:
diff changeset
  1289
	TUint32 iSpare2;
hgs
parents:
diff changeset
  1290
	/**
hgs
parents:
diff changeset
  1291
	  The length of the thread's name
hgs
parents:
diff changeset
  1292
	  */
hgs
parents:
diff changeset
  1293
	TUint16 iNameLength;
hgs
parents:
diff changeset
  1294
	/**
hgs
parents:
diff changeset
  1295
	  First two bytes of the thread's name, the name should be considered to
hgs
parents:
diff changeset
  1296
	  extend past the end of the TThreadListEntry structure to a length
hgs
parents:
diff changeset
  1297
	  corresponding to iNameLength
hgs
parents:
diff changeset
  1298
	  */
hgs
parents:
diff changeset
  1299
	TUint16 iName[1];
hgs
parents:
diff changeset
  1300
	};
hgs
parents:
diff changeset
  1301
hgs
parents:
diff changeset
  1302
/**
hgs
parents:
diff changeset
  1303
Returns the size of the TThreadListEntry, including the name length
hgs
parents:
diff changeset
  1304
hgs
parents:
diff changeset
  1305
@return the size, in bytes, of the TExecutablesListEntry and the thread's name
hgs
parents:
diff changeset
  1306
*/
hgs
parents:
diff changeset
  1307
inline TInt TThreadListEntry::GetSize() const
hgs
parents:
diff changeset
  1308
	{
hgs
parents:
diff changeset
  1309
	return sizeof(TThreadListEntry) - sizeof(iName) + (2 * iNameLength);
hgs
parents:
diff changeset
  1310
	}
hgs
parents:
diff changeset
  1311
hgs
parents:
diff changeset
  1312
/**
hgs
parents:
diff changeset
  1313
Denotes which list type to return from a RSecuritySvrSession::GetList() call
hgs
parents:
diff changeset
  1314
hgs
parents:
diff changeset
  1315
@see RSecuritySvrSession::GetList()
hgs
parents:
diff changeset
  1316
*/
hgs
parents:
diff changeset
  1317
enum TListId
hgs
parents:
diff changeset
  1318
	{
hgs
parents:
diff changeset
  1319
	/**
hgs
parents:
diff changeset
  1320
	Indicates that the GetList() call should return a list of the processes in
hgs
parents:
diff changeset
  1321
	the system. The returned buffer will contain an array of 4-byte aligned
hgs
parents:
diff changeset
  1322
	TProcessListEntry objects.
hgs
parents:
diff changeset
  1323
hgs
parents:
diff changeset
  1324
	@see TProcessListEntry
hgs
parents:
diff changeset
  1325
	*/
hgs
parents:
diff changeset
  1326
	EProcesses = 0,
hgs
parents:
diff changeset
  1327
	/**
hgs
parents:
diff changeset
  1328
	Indicates that the GetList() call should return a list of the threads in
hgs
parents:
diff changeset
  1329
	the system. The returned buffer will contain an array of 4-byte aligned
hgs
parents:
diff changeset
  1330
	TThreadListEntry objects.
hgs
parents:
diff changeset
  1331
hgs
parents:
diff changeset
  1332
	@see TThreadListEntry
hgs
parents:
diff changeset
  1333
	*/
hgs
parents:
diff changeset
  1334
	EThreads = 1,
hgs
parents:
diff changeset
  1335
	/**
hgs
parents:
diff changeset
  1336
	Indicates that the GetList() call should return a list of the code segments in
hgs
parents:
diff changeset
  1337
	the system. The returned buffer will contain an array of 4-byte aligned
hgs
parents:
diff changeset
  1338
	TCodeSegListEntry objects.
hgs
parents:
diff changeset
  1339
hgs
parents:
diff changeset
  1340
	@see TCodeSegListEntry
hgs
parents:
diff changeset
  1341
	*/
hgs
parents:
diff changeset
  1342
	ECodeSegs = 2,
hgs
parents:
diff changeset
  1343
	/**
hgs
parents:
diff changeset
  1344
	Indicates that the GetList() call should return a list of the XIP libraries in
hgs
parents:
diff changeset
  1345
	the system. The returned buffer will contain an array of 4-byte aligned
hgs
parents:
diff changeset
  1346
	EXipLibraries objects.
hgs
parents:
diff changeset
  1347
hgs
parents:
diff changeset
  1348
	@see EXipLibraries
hgs
parents:
diff changeset
  1349
	*/
hgs
parents:
diff changeset
  1350
	EXipLibraries = 3,
hgs
parents:
diff changeset
  1351
	/**
hgs
parents:
diff changeset
  1352
	Indicates that the GetList() call should return a list of the executables in
hgs
parents:
diff changeset
  1353
	the system. The returned buffer will contain an array of 4-byte aligned
hgs
parents:
diff changeset
  1354
	EExecutables objects.
hgs
parents:
diff changeset
  1355
hgs
parents:
diff changeset
  1356
	@see EExecutables
hgs
parents:
diff changeset
  1357
	*/
hgs
parents:
diff changeset
  1358
	EExecutables = 4,
hgs
parents:
diff changeset
  1359
	/**
hgs
parents:
diff changeset
  1360
	Indicates that the GetList() call should return a list of the logical devices in the system.
hgs
parents:
diff changeset
  1361
	*/
hgs
parents:
diff changeset
  1362
	ELogicalDevices = 5,
hgs
parents:
diff changeset
  1363
	/**
hgs
parents:
diff changeset
  1364
	Indicates that the GetList() call should return a list of the mutexes in the system.
hgs
parents:
diff changeset
  1365
	*/
hgs
parents:
diff changeset
  1366
	EMutexes = 6,
hgs
parents:
diff changeset
  1367
	/**
hgs
parents:
diff changeset
  1368
	Indicates that the GetList() call should return a list of the servers in the system.
hgs
parents:
diff changeset
  1369
	*/
hgs
parents:
diff changeset
  1370
	EServers = 7,
hgs
parents:
diff changeset
  1371
	/**
hgs
parents:
diff changeset
  1372
	Indicates that the GetList() call should return a list of the sessions in the system.
hgs
parents:
diff changeset
  1373
	*/
hgs
parents:
diff changeset
  1374
	ESessions = 8,
hgs
parents:
diff changeset
  1375
	/**
hgs
parents:
diff changeset
  1376
	Indicates that the GetList() call should return a list of the semaphores in the system.
hgs
parents:
diff changeset
  1377
	*/
hgs
parents:
diff changeset
  1378
	ESemaphores = 9,
hgs
parents:
diff changeset
  1379
	/**
hgs
parents:
diff changeset
  1380
	Indicates that the GetList() call should return a list of the chunks in the system.
hgs
parents:
diff changeset
  1381
	*/
hgs
parents:
diff changeset
  1382
	EChunks = 10,
hgs
parents:
diff changeset
  1383
hgs
parents:
diff changeset
  1384
	/**
hgs
parents:
diff changeset
  1385
	Provides a complete list of all the breakpoints in the system and their
hgs
parents:
diff changeset
  1386
	current state.
hgs
parents:
diff changeset
  1387
hgs
parents:
diff changeset
  1388
	@see EBreakpoints
hgs
parents:
diff changeset
  1389
	*/
hgs
parents:
diff changeset
  1390
	EBreakpoints = 11,
hgs
parents:
diff changeset
  1391
hgs
parents:
diff changeset
  1392
	/** 
hgs
parents:
diff changeset
  1393
	The following are for the possible use of kernel-side debug and SMP breakpoint
hgs
parents:
diff changeset
  1394
	manipulation.
hgs
parents:
diff changeset
  1395
	*/
hgs
parents:
diff changeset
  1396
	ESetBreak = 12,
hgs
parents:
diff changeset
  1397
	ERemoveBreak = 13,
hgs
parents:
diff changeset
  1398
	EModifyBreak = 14,
hgs
parents:
diff changeset
  1399
	
hgs
parents:
diff changeset
  1400
	/**
hgs
parents:
diff changeset
  1401
	 * Provides static information of the system
hgs
parents:
diff changeset
  1402
	 */
hgs
parents:
diff changeset
  1403
	EStaticInfo = 15,
hgs
parents:
diff changeset
  1404
hgs
parents:
diff changeset
  1405
	/** Last listing enum. */
hgs
parents:
diff changeset
  1406
	EListLast
hgs
parents:
diff changeset
  1407
	};
hgs
parents:
diff changeset
  1408
hgs
parents:
diff changeset
  1409
/**
hgs
parents:
diff changeset
  1410
  Bit field values denoting the scope of a listing.
hgs
parents:
diff changeset
  1411
hgs
parents:
diff changeset
  1412
  In the debug functionality block, the TTag::iValue element which is returned for a listing tag
hgs
parents:
diff changeset
  1413
  should be considered as a union of the supported values from this enumeration for that listing.
hgs
parents:
diff changeset
  1414
  */
hgs
parents:
diff changeset
  1415
enum TListScope
hgs
parents:
diff changeset
  1416
	{
hgs
parents:
diff changeset
  1417
	EScopeNone = 0x0,             /**< Corresponds to no scope for a listing. equivalent to not supported */
hgs
parents:
diff changeset
  1418
	EScopeGlobal= 0x1,            /**< Corresponds to a global scope for a listing. */
hgs
parents:
diff changeset
  1419
	EScopeProcessSpecific = 0x2,  /**< Corresponds to a process specific scope for a listing. */
hgs
parents:
diff changeset
  1420
	EScopeThreadSpecific = 0x4    /**< Corresponds to a thread specific scope for a listing. */
hgs
parents:
diff changeset
  1421
	};
hgs
parents:
diff changeset
  1422
hgs
parents:
diff changeset
  1423
/**
hgs
parents:
diff changeset
  1424
@internalComponent
hgs
parents:
diff changeset
  1425
hgs
parents:
diff changeset
  1426
Interface constructor for passing IPC data for the GetList call.
hgs
parents:
diff changeset
  1427
*/
hgs
parents:
diff changeset
  1428
class TListDetails
hgs
parents:
diff changeset
  1429
	{
hgs
parents:
diff changeset
  1430
public:
hgs
parents:
diff changeset
  1431
	TListDetails(const TListId aListId, const TListScope aListScope, TUint64 aTargetId=0)
hgs
parents:
diff changeset
  1432
		: iListId(aListId),
hgs
parents:
diff changeset
  1433
		  iListScope(aListScope),
hgs
parents:
diff changeset
  1434
		  iTargetId(aTargetId) {}
hgs
parents:
diff changeset
  1435
public:
hgs
parents:
diff changeset
  1436
	TListId iListId;
hgs
parents:
diff changeset
  1437
	TListScope iListScope;
hgs
parents:
diff changeset
  1438
	TUint64 iTargetId;
hgs
parents:
diff changeset
  1439
	};
hgs
parents:
diff changeset
  1440
hgs
parents:
diff changeset
  1441
/** Debug Security Server Secure ID */
hgs
parents:
diff changeset
  1442
const TUid KUidDebugSecurityServer = { 0x102834E2 };
hgs
parents:
diff changeset
  1443
hgs
parents:
diff changeset
  1444
} // end of Debug namespace declaration
hgs
parents:
diff changeset
  1445
hgs
parents:
diff changeset
  1446
// the remaining functionality in this file is intended for use on user side only
hgs
parents:
diff changeset
  1447
#ifndef __KERNEL_MODE__
hgs
parents:
diff changeset
  1448
hgs
parents:
diff changeset
  1449
#include <e32std.h>
hgs
parents:
diff changeset
  1450
hgs
parents:
diff changeset
  1451
// API definition for Debug namespace appears elsewhere in this file.
hgs
parents:
diff changeset
  1452
namespace Debug {
hgs
parents:
diff changeset
  1453
hgs
parents:
diff changeset
  1454
/** The name of the Debug Security Server. */
hgs
parents:
diff changeset
  1455
_LIT(KSecurityServerName,"DebugSecurityServer");
hgs
parents:
diff changeset
  1456
hgs
parents:
diff changeset
  1457
/** Wildcard used for attach all calls */
hgs
parents:
diff changeset
  1458
_LIT(KStar, "*");
hgs
parents:
diff changeset
  1459
hgs
parents:
diff changeset
  1460
// A version must be specified when creating a session with the server
hgs
parents:
diff changeset
  1461
/** The Debug Security Server's major version number. */
hgs
parents:
diff changeset
  1462
const TUint KDebugServMajorVersionNumber=2;
hgs
parents:
diff changeset
  1463
/** The Debug Security Server's minor version number. */
hgs
parents:
diff changeset
  1464
const TUint KDebugServMinorVersionNumber=5;
hgs
parents:
diff changeset
  1465
/** The Debug Security Server's patch version number. */
hgs
parents:
diff changeset
  1466
const TUint KDebugServPatchVersionNumber=0;
hgs
parents:
diff changeset
  1467
hgs
parents:
diff changeset
  1468
/**
hgs
parents:
diff changeset
  1469
Denotes how memory should be accessed
hgs
parents:
diff changeset
  1470
*/
hgs
parents:
diff changeset
  1471
enum TAccess
hgs
parents:
diff changeset
  1472
	{
hgs
parents:
diff changeset
  1473
	EAccess8 = 1,	/**< Currently unsupported, signifies 8 bit access. */
hgs
parents:
diff changeset
  1474
	EAccess16 = 2,	/**< Currently unsupported, signifies 16 bit access. */
hgs
parents:
diff changeset
  1475
	EAccess32 = 4	/**< Signifies 32 bit access. */
hgs
parents:
diff changeset
  1476
	};
hgs
parents:
diff changeset
  1477
hgs
parents:
diff changeset
  1478
/**
hgs
parents:
diff changeset
  1479
Denotes how data should be interpreted
hgs
parents:
diff changeset
  1480
*/
hgs
parents:
diff changeset
  1481
enum TEndianess
hgs
parents:
diff changeset
  1482
	{
hgs
parents:
diff changeset
  1483
	EEndLE8 = 0,	/**< Signifies 8 bit little-endian. */
hgs
parents:
diff changeset
  1484
	EEndBE8 = 1,	/**< Currently unsupported, signifies 8 bit big-endian. */
hgs
parents:
diff changeset
  1485
	EEndBE32 = 2	/**< Currently unsupported, signifies 32 bit big-endian. */
hgs
parents:
diff changeset
  1486
	};
hgs
parents:
diff changeset
  1487
hgs
parents:
diff changeset
  1488
/**
hgs
parents:
diff changeset
  1489
Structure used to store information about a memory operation
hgs
parents:
diff changeset
  1490
hgs
parents:
diff changeset
  1491
@internalComponent
hgs
parents:
diff changeset
  1492
*/
hgs
parents:
diff changeset
  1493
class TMemoryInfo
hgs
parents:
diff changeset
  1494
	{
hgs
parents:
diff changeset
  1495
public:
hgs
parents:
diff changeset
  1496
hgs
parents:
diff changeset
  1497
	TMemoryInfo(TUint32 aAddress=0, TUint32 aLength=0, TAccess aAccess=EAccess32, TEndianess aEndianess=EEndLE8)
hgs
parents:
diff changeset
  1498
		: iAddress(aAddress),
hgs
parents:
diff changeset
  1499
		  iSize(aLength),
hgs
parents:
diff changeset
  1500
		  iAccess(aAccess),
hgs
parents:
diff changeset
  1501
		  iEndianess(aEndianess)
hgs
parents:
diff changeset
  1502
		{}
hgs
parents:
diff changeset
  1503
hgs
parents:
diff changeset
  1504
public:
hgs
parents:
diff changeset
  1505
hgs
parents:
diff changeset
  1506
	/**
hgs
parents:
diff changeset
  1507
	Address to start reading/writing memory
hgs
parents:
diff changeset
  1508
	*/
hgs
parents:
diff changeset
  1509
	TUint32 iAddress;
hgs
parents:
diff changeset
  1510
	/**
hgs
parents:
diff changeset
  1511
	Number of bytes of memory to read/write
hgs
parents:
diff changeset
  1512
	*/
hgs
parents:
diff changeset
  1513
	TUint32	iSize;
hgs
parents:
diff changeset
  1514
	/**
hgs
parents:
diff changeset
  1515
	Access size for read/write
hgs
parents:
diff changeset
  1516
	@see TAccess
hgs
parents:
diff changeset
  1517
	*/
hgs
parents:
diff changeset
  1518
	TAccess iAccess;
hgs
parents:
diff changeset
  1519
	/**
hgs
parents:
diff changeset
  1520
	Endianess to interpret data as
hgs
parents:
diff changeset
  1521
	@see TEndianess
hgs
parents:
diff changeset
  1522
	*/
hgs
parents:
diff changeset
  1523
	TEndianess iEndianess;
hgs
parents:
diff changeset
  1524
	};
hgs
parents:
diff changeset
  1525
hgs
parents:
diff changeset
  1526
/**
hgs
parents:
diff changeset
  1527
@internalComponent
hgs
parents:
diff changeset
  1528
*/
hgs
parents:
diff changeset
  1529
class TBreakInfo
hgs
parents:
diff changeset
  1530
	{
hgs
parents:
diff changeset
  1531
public:
hgs
parents:
diff changeset
  1532
	TUint32 iAddress;
hgs
parents:
diff changeset
  1533
	TArchitectureMode iArchitectureMode;
hgs
parents:
diff changeset
  1534
	};
hgs
parents:
diff changeset
  1535
hgs
parents:
diff changeset
  1536
/**
hgs
parents:
diff changeset
  1537
@internalComponent
hgs
parents:
diff changeset
  1538
hgs
parents:
diff changeset
  1539
Function codes (opcodes) used in message passing between client and server
hgs
parents:
diff changeset
  1540
in this header file and what arguments should be passed with each of these
hgs
parents:
diff changeset
  1541
*/
hgs
parents:
diff changeset
  1542
enum TDebugServRqst
hgs
parents:
diff changeset
  1543
	{
hgs
parents:
diff changeset
  1544
	EDebugServOpen = 1,
hgs
parents:
diff changeset
  1545
	EDebugServClose = 2,
hgs
parents:
diff changeset
  1546
	EDebugServSuspendThread = 3,
hgs
parents:
diff changeset
  1547
	EDebugServResumeThread = 4,
hgs
parents:
diff changeset
  1548
	EDebugServReadMemory = 5,
hgs
parents:
diff changeset
  1549
	EDebugServWriteMemory = 6,
hgs
parents:
diff changeset
  1550
	EDebugServSetBreak = 7,
hgs
parents:
diff changeset
  1551
	EDebugServClearBreak = 8,
hgs
parents:
diff changeset
  1552
	EDebugServModifyBreak = 9,
hgs
parents:
diff changeset
  1553
	EDebugServGetEvent = 10,
hgs
parents:
diff changeset
  1554
	EDebugServCancelGetEvent = 11,
hgs
parents:
diff changeset
  1555
	EDebugServAttachExecutable = 12,
hgs
parents:
diff changeset
  1556
	EDebugServDetachExecutable = 13,
hgs
parents:
diff changeset
  1557
	EDebugServGetDebugFunctionalityBufSize = 14,
hgs
parents:
diff changeset
  1558
	EDebugServGetDebugFunctionality = 15,
hgs
parents:
diff changeset
  1559
	EDebugServReadRegisters = 16,
hgs
parents:
diff changeset
  1560
	EDebugServWriteRegisters = 17,
hgs
parents:
diff changeset
  1561
	EDebugServSetEventAction = 18,
hgs
parents:
diff changeset
  1562
	EDebugServBreakInfo = 19,
hgs
parents:
diff changeset
  1563
	EDebugServGetList = 20,
hgs
parents:
diff changeset
  1564
	EDebugServStep = 21,
hgs
parents:
diff changeset
  1565
	EDebugServSetProcessBreak = 22,
hgs
parents:
diff changeset
  1566
	EDebugServProcessBreakInfo = 23,
hgs
parents:
diff changeset
  1567
	EDebugServKillProcess = 24,
hgs
parents:
diff changeset
  1568
	EDebugServModifyProcessBreak = 25,
hgs
parents:
diff changeset
  1569
	EDebugServReadCrashFlash = 26,
hgs
parents:
diff changeset
  1570
	EDebugServWriteCrashFlash = 27,
hgs
parents:
diff changeset
  1571
	EDebugServEraseCrashFlash = 28,
hgs
parents:
diff changeset
  1572
	EDebugServEraseEntireCrashFlash = 29,
hgs
parents:
diff changeset
  1573
	EDebugServAttachAll = 30,
hgs
parents:
diff changeset
  1574
	EDebugServDetachAll = 31,
hgs
parents:
diff changeset
  1575
	};
hgs
parents:
diff changeset
  1576
hgs
parents:
diff changeset
  1577
/**
hgs
parents:
diff changeset
  1578
Client side API to debug security server (DSS). Interaction with the DSS should
hgs
parents:
diff changeset
  1579
be conducted through this class only.
hgs
parents:
diff changeset
  1580
*/
hgs
parents:
diff changeset
  1581
class RSecuritySvrSession : public RSessionBase
hgs
parents:
diff changeset
  1582
	{
hgs
parents:
diff changeset
  1583
public:
hgs
parents:
diff changeset
  1584
	RSecuritySvrSession();
hgs
parents:
diff changeset
  1585
	TVersion Version() const;
hgs
parents:
diff changeset
  1586
hgs
parents:
diff changeset
  1587
	TInt AttachExecutable(const TDesC& aProcessName, TBool aPassive);
hgs
parents:
diff changeset
  1588
	TInt DetachExecutable(const TDesC& aProcessName);
hgs
parents:
diff changeset
  1589
hgs
parents:
diff changeset
  1590
	TInt GetDebugFunctionalityBufSize(TUint32* aBufSize);
hgs
parents:
diff changeset
  1591
	TInt GetDebugFunctionality(TDes8& aBuffer);
hgs
parents:
diff changeset
  1592
hgs
parents:
diff changeset
  1593
	TInt SuspendThread(const TThreadId aThreadId);
hgs
parents:
diff changeset
  1594
	TInt ResumeThread(const TThreadId aThreadId);
hgs
parents:
diff changeset
  1595
hgs
parents:
diff changeset
  1596
	TInt ReadMemory(const TThreadId aThreadId, const TUint32 aAddress, const TUint32 aLength, TDes8 &aData, const TAccess aAccessSize, const TEndianess aEndianess);
hgs
parents:
diff changeset
  1597
	TInt WriteMemory(const TThreadId aThreadId, const TUint32 aAddress, const TUint32 aLength, const TDesC8 &aData, const TAccess aAccessSize, const TEndianess aEndianess);
hgs
parents:
diff changeset
  1598
hgs
parents:
diff changeset
  1599
	TInt ReadRegisters(const TThreadId aThreadId, const TDesC8& aRegisterIds, TDes8& aRegisterValues, TDes8& aRegisterFlags);
hgs
parents:
diff changeset
  1600
	TInt WriteRegisters(const TThreadId aThreadId, const TDesC8& aRegisterIds, const TDesC8& aRegisterValues, TDes8& aRegisterFlags);
hgs
parents:
diff changeset
  1601
hgs
parents:
diff changeset
  1602
	void GetEvent(const TDesC& aExecutableName, TRequestStatus &aStatus, TDes8& aEventInfo);
hgs
parents:
diff changeset
  1603
	TInt CancelGetEvent(const TDesC& aExecutableName);
hgs
parents:
diff changeset
  1604
	
hgs
parents:
diff changeset
  1605
	TInt SetEventAction(const TDesC& aExecutableName, TEventType aEvent, TKernelEventAction aEventAction);
hgs
parents:
diff changeset
  1606
hgs
parents:
diff changeset
  1607
	TInt SetBreak( TBreakId &aId, const TThreadId aThreadId, const TUint32 aAddress, const TArchitectureMode aArchitectureMode);
hgs
parents:
diff changeset
  1608
	TInt ClearBreak(const TBreakId aBreakId);
hgs
parents:
diff changeset
  1609
	TInt ModifyBreak(const TBreakId aBreakId, const TThreadId aThreadId, const TUint32 aAddress, const TArchitectureMode aArchitectureMode);
hgs
parents:
diff changeset
  1610
	TInt BreakInfo(const TBreakId aBreakId, TThreadId& aThreadId, TUint32& aAddress, TArchitectureMode& aMode);
hgs
parents:
diff changeset
  1611
	TInt SetProcessBreak( TBreakId &aId, const TProcessId aProcessId, const TUint32 aAddress, const TArchitectureMode aArchitectureMode);
hgs
parents:
diff changeset
  1612
	TInt ProcessBreakInfo(const TBreakId aBreakId, TProcessId& aProcessId, TUint32& aAddress, TArchitectureMode& aMode);
hgs
parents:
diff changeset
  1613
	TInt ModifyProcessBreak(const TBreakId aBreakId, const TProcessId aProcessId, const TUint32 aAddress, const TArchitectureMode aArchitectureMode);
hgs
parents:
diff changeset
  1614
hgs
parents:
diff changeset
  1615
	TInt GetList(const TListId aListId, TDes8& aListData, TUint32& aDataSize);
hgs
parents:
diff changeset
  1616
	TInt GetList(const TThreadId aThreadId, const TListId aListId, TDes8& aListData, TUint32& aDataSize);
hgs
parents:
diff changeset
  1617
	TInt GetList(const TProcessId aProcessId, const TListId aListId, TDes8& aListData, TUint32& aDataSize);
hgs
parents:
diff changeset
  1618
	TInt Step(const TThreadId aThreadId, TUint32 aNumSteps);
hgs
parents:
diff changeset
  1619
	TInt KillProcess(const TProcessId aProcessId, const TInt aReason);
hgs
parents:
diff changeset
  1620
	TInt ReadCrashLog(const TUint32 aPos, TDes8& aData, const TUint32 aDataSize);	
hgs
parents:
diff changeset
  1621
	TInt WriteCrashConfig(const TUint32 aPos, const TDesC8& aBuffer, TUint32& aSize);
hgs
parents:
diff changeset
  1622
	TInt EraseCrashLog(const TUint32 aPos, const TUint32 aBlockNumber);
hgs
parents:
diff changeset
  1623
	TInt EraseCrashFlashPartition();
hgs
parents:
diff changeset
  1624
hgs
parents:
diff changeset
  1625
	TInt Connect(const TVersion aVersion);
hgs
parents:
diff changeset
  1626
hgs
parents:
diff changeset
  1627
	// Added in version 2.5
hgs
parents:
diff changeset
  1628
    TInt AttachAll();
hgs
parents:
diff changeset
  1629
    TInt DetachAll();	
hgs
parents:
diff changeset
  1630
    void GetEvent(TRequestStatus &aStatus, TDes8& aEventInfo);
hgs
parents:
diff changeset
  1631
    TInt CancelGetEvent();
hgs
parents:
diff changeset
  1632
    TInt SetEventAction(TEventType aEvent, TKernelEventAction aEventAction);
hgs
parents:
diff changeset
  1633
hgs
parents:
diff changeset
  1634
private:
hgs
parents:
diff changeset
  1635
	TInt StartServer(void);
hgs
parents:
diff changeset
  1636
	};
hgs
parents:
diff changeset
  1637
hgs
parents:
diff changeset
  1638
/**
hgs
parents:
diff changeset
  1639
Server session constructor
hgs
parents:
diff changeset
  1640
*/
hgs
parents:
diff changeset
  1641
inline RSecuritySvrSession::RSecuritySvrSession()
hgs
parents:
diff changeset
  1642
	{
hgs
parents:
diff changeset
  1643
	}
hgs
parents:
diff changeset
  1644
hgs
parents:
diff changeset
  1645
/**
hgs
parents:
diff changeset
  1646
Called by a client to create a session with the DSS. This method starts the
hgs
parents:
diff changeset
  1647
DSS if it is not running, or connects to it if it already exists.
hgs
parents:
diff changeset
  1648
hgs
parents:
diff changeset
  1649
@param aVersion version of the DSS to connect to
hgs
parents:
diff changeset
  1650
hgs
parents:
diff changeset
  1651
@return KErrNone if a connection was successfully created, or one of the other
hgs
parents:
diff changeset
  1652
system wide error codes
hgs
parents:
diff changeset
  1653
*/
hgs
parents:
diff changeset
  1654
inline TInt RSecuritySvrSession::Connect(const TVersion aVersion)
hgs
parents:
diff changeset
  1655
	{
hgs
parents:
diff changeset
  1656
	// Default asynch outstanding message slots for the server. Not that these are 
hgs
parents:
diff changeset
  1657
	// allocated from a system-wide pool of 255, so have to be careful with resources.
hgs
parents:
diff changeset
  1658
	const TUint KDefaultMessageSlots = 8;
hgs
parents:
diff changeset
  1659
	
hgs
parents:
diff changeset
  1660
	TInt retry=2;
hgs
parents:
diff changeset
  1661
	for (;;)
hgs
parents:
diff changeset
  1662
		{
hgs
parents:
diff changeset
  1663
		TInt r=CreateSession(KSecurityServerName, aVersion, KDefaultMessageSlots);
hgs
parents:
diff changeset
  1664
		if (r!=KErrNotFound && r!=KErrServerTerminated)
hgs
parents:
diff changeset
  1665
			{
hgs
parents:
diff changeset
  1666
			return r;
hgs
parents:
diff changeset
  1667
			}
hgs
parents:
diff changeset
  1668
		if (--retry==0)
hgs
parents:
diff changeset
  1669
			{
hgs
parents:
diff changeset
  1670
			return r;
hgs
parents:
diff changeset
  1671
			}
hgs
parents:
diff changeset
  1672
		r=StartServer();
hgs
parents:
diff changeset
  1673
		if (r!=KErrNone && r!=KErrAlreadyExists)
hgs
parents:
diff changeset
  1674
			{
hgs
parents:
diff changeset
  1675
			return r;
hgs
parents:
diff changeset
  1676
			}
hgs
parents:
diff changeset
  1677
		}
hgs
parents:
diff changeset
  1678
	}
hgs
parents:
diff changeset
  1679
hgs
parents:
diff changeset
  1680
/**
hgs
parents:
diff changeset
  1681
  Start the server
hgs
parents:
diff changeset
  1682
hgs
parents:
diff changeset
  1683
  @return KErrNone on success, or one of the other system wide error codes
hgs
parents:
diff changeset
  1684
  */
hgs
parents:
diff changeset
  1685
inline TInt RSecuritySvrSession::StartServer()
hgs
parents:
diff changeset
  1686
	{
hgs
parents:
diff changeset
  1687
	// constants for the server
hgs
parents:
diff changeset
  1688
	_LIT(KSecurityServerProcessName, "rm_debug_svr");
hgs
parents:
diff changeset
  1689
	const TUidType serverUid(KNullUid, KNullUid, KUidDebugSecurityServer);
hgs
parents:
diff changeset
  1690
hgs
parents:
diff changeset
  1691
	RProcess server;
hgs
parents:
diff changeset
  1692
	TInt err = server.Create(KSecurityServerProcessName, KNullDesC, serverUid);
hgs
parents:
diff changeset
  1693
hgs
parents:
diff changeset
  1694
	if(KErrNone != err)
hgs
parents:
diff changeset
  1695
		{
hgs
parents:
diff changeset
  1696
		return err;
hgs
parents:
diff changeset
  1697
		}
hgs
parents:
diff changeset
  1698
hgs
parents:
diff changeset
  1699
	// Synchronise with the process to make sure it hasn't died straight away
hgs
parents:
diff changeset
  1700
	TRequestStatus stat;
hgs
parents:
diff changeset
  1701
	server.Rendezvous(stat);
hgs
parents:
diff changeset
  1702
	if (stat != KRequestPending)
hgs
parents:
diff changeset
  1703
		{
hgs
parents:
diff changeset
  1704
		// logon failed - server is not yet running, so cannot have terminated
hgs
parents:
diff changeset
  1705
		server.Kill(0);             // Abort startup
hgs
parents:
diff changeset
  1706
		}
hgs
parents:
diff changeset
  1707
	else
hgs
parents:
diff changeset
  1708
		{
hgs
parents:
diff changeset
  1709
		// logon OK - start the server
hgs
parents:
diff changeset
  1710
		server.Resume();
hgs
parents:
diff changeset
  1711
		}
hgs
parents:
diff changeset
  1712
hgs
parents:
diff changeset
  1713
	// Wait to synchronise with server - if it dies in the meantime, it
hgs
parents:
diff changeset
  1714
	// also gets completed
hgs
parents:
diff changeset
  1715
	User::WaitForRequest(stat);
hgs
parents:
diff changeset
  1716
hgs
parents:
diff changeset
  1717
	// We can't use the 'exit reason' if the server panicked as this
hgs
parents:
diff changeset
  1718
	// is the panic 'reason' and may be '0' which cannot be distinguished
hgs
parents:
diff changeset
  1719
	// from KErrNone
hgs
parents:
diff changeset
  1720
	err = (server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
hgs
parents:
diff changeset
  1721
	server.Close();
hgs
parents:
diff changeset
  1722
	return err;
hgs
parents:
diff changeset
  1723
	}
hgs
parents:
diff changeset
  1724
hgs
parents:
diff changeset
  1725
/**
hgs
parents:
diff changeset
  1726
Get version of RSecuritySvrSession
hgs
parents:
diff changeset
  1727
hgs
parents:
diff changeset
  1728
@return a TVersion object specifying the version
hgs
parents:
diff changeset
  1729
*/
hgs
parents:
diff changeset
  1730
inline TVersion RSecuritySvrSession::Version(void) const
hgs
parents:
diff changeset
  1731
	{
hgs
parents:
diff changeset
  1732
	return (TVersion(KDebugServMajorVersionNumber, KDebugServMinorVersionNumber, KDebugServPatchVersionNumber));
hgs
parents:
diff changeset
  1733
	}
hgs
parents:
diff changeset
  1734
hgs
parents:
diff changeset
  1735
/**
hgs
parents:
diff changeset
  1736
Suspends execution of the specified thread.
hgs
parents:
diff changeset
  1737
hgs
parents:
diff changeset
  1738
@param aThreadId thread ID of the thread to suspend
hgs
parents:
diff changeset
  1739
hgs
parents:
diff changeset
  1740
@return KErrNone if there were no problems, KErrPermissionDenied if security 
hgs
parents:
diff changeset
  1741
        check fails or KErrArgument if the thread does not exist
hgs
parents:
diff changeset
  1742
*/
hgs
parents:
diff changeset
  1743
inline TInt RSecuritySvrSession::SuspendThread(const TThreadId aThreadId)
hgs
parents:
diff changeset
  1744
	{
hgs
parents:
diff changeset
  1745
	TPckgBuf<TThreadId> threadIdPckg(aThreadId);
hgs
parents:
diff changeset
  1746
	TIpcArgs args(&threadIdPckg);
hgs
parents:
diff changeset
  1747
hgs
parents:
diff changeset
  1748
	return SendReceive(EDebugServSuspendThread, args);
hgs
parents:
diff changeset
  1749
	}
hgs
parents:
diff changeset
  1750
hgs
parents:
diff changeset
  1751
/**
hgs
parents:
diff changeset
  1752
Resumes execution of the specified thread.
hgs
parents:
diff changeset
  1753
hgs
parents:
diff changeset
  1754
@param aThreadId thread ID of the thread to resume
hgs
parents:
diff changeset
  1755
hgs
parents:
diff changeset
  1756
@return KErrNone if there were no problems, KErrPermissionDenied if security 
hgs
parents:
diff changeset
  1757
        check fails or KErrArgument if the thread does not exist
hgs
parents:
diff changeset
  1758
*/
hgs
parents:
diff changeset
  1759
inline TInt RSecuritySvrSession::ResumeThread(const TThreadId aThreadId)
hgs
parents:
diff changeset
  1760
	{
hgs
parents:
diff changeset
  1761
	TPckgBuf<TThreadId> threadIdPckg(aThreadId);
hgs
parents:
diff changeset
  1762
	TIpcArgs args(&threadIdPckg);
hgs
parents:
diff changeset
  1763
hgs
parents:
diff changeset
  1764
	return SendReceive(EDebugServResumeThread, args);
hgs
parents:
diff changeset
  1765
	}
hgs
parents:
diff changeset
  1766
hgs
parents:
diff changeset
  1767
/**
hgs
parents:
diff changeset
  1768
Purpose:
hgs
parents:
diff changeset
  1769
Set a thread-specific breakpoint in an attached process. 
hgs
parents:
diff changeset
  1770
hgs
parents:
diff changeset
  1771
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  1772
@pre Debug Agent must be attached to a process.
hgs
parents:
diff changeset
  1773
hgs
parents:
diff changeset
  1774
@param aThreadId The thread id to which the breakpoint will apply.
hgs
parents:
diff changeset
  1775
@param aAddress The virtual memory address at which to place the breakpoint.
hgs
parents:
diff changeset
  1776
@param aArchitectureMode The kind of breakpoint which is to be set (e.g. ARM/Thumb/Thumb2EE)
hgs
parents:
diff changeset
  1777
@param aBreakId The address to which the assigned breakpoint ID will be written by this function
hgs
parents:
diff changeset
  1778
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  1779
*/
hgs
parents:
diff changeset
  1780
inline TInt RSecuritySvrSession::SetBreak( TBreakId &aBreakId,const TThreadId aThreadId, const TUint32 aAddress, const TArchitectureMode aArchitectureMode)
hgs
parents:
diff changeset
  1781
	{
hgs
parents:
diff changeset
  1782
	TPtr8 breakIdPtr((TUint8*)&aBreakId, sizeof(aBreakId));
hgs
parents:
diff changeset
  1783
hgs
parents:
diff changeset
  1784
	TPckgBuf<TThreadId> threadIdPckg(aThreadId);
hgs
parents:
diff changeset
  1785
hgs
parents:
diff changeset
  1786
	TBreakInfo breakInfo;
hgs
parents:
diff changeset
  1787
	breakInfo.iAddress = aAddress;
hgs
parents:
diff changeset
  1788
	breakInfo.iArchitectureMode = aArchitectureMode;
hgs
parents:
diff changeset
  1789
	TPckgBuf<TBreakInfo> breakInfoPckg(breakInfo);
hgs
parents:
diff changeset
  1790
hgs
parents:
diff changeset
  1791
	//call driver to attempt to set break
hgs
parents:
diff changeset
  1792
	TIpcArgs args(&threadIdPckg, &breakInfoPckg, &breakIdPtr);
hgs
parents:
diff changeset
  1793
	return SendReceive(EDebugServSetBreak, args);
hgs
parents:
diff changeset
  1794
	}
hgs
parents:
diff changeset
  1795
hgs
parents:
diff changeset
  1796
/**
hgs
parents:
diff changeset
  1797
Purpose:
hgs
parents:
diff changeset
  1798
Clears a previously set thread-specific or process-specific breakpoint.
hgs
parents:
diff changeset
  1799
hgs
parents:
diff changeset
  1800
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  1801
@pre Debug Agent must be attached to a process.
hgs
parents:
diff changeset
  1802
hgs
parents:
diff changeset
  1803
@param aBreakId The TBreakId returned by a prior SetBreak call. Must have been set by the same Debug Agent.
hgs
parents:
diff changeset
  1804
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  1805
*/
hgs
parents:
diff changeset
  1806
inline TInt RSecuritySvrSession::ClearBreak(const TBreakId aBreakId)
hgs
parents:
diff changeset
  1807
	{
hgs
parents:
diff changeset
  1808
	TIpcArgs args(aBreakId);
hgs
parents:
diff changeset
  1809
	return SendReceive(EDebugServClearBreak, args);
hgs
parents:
diff changeset
  1810
	}
hgs
parents:
diff changeset
  1811
hgs
parents:
diff changeset
  1812
/**
hgs
parents:
diff changeset
  1813
Purpose:
hgs
parents:
diff changeset
  1814
Modifies the properties of a previously set breakpoint.
hgs
parents:
diff changeset
  1815
hgs
parents:
diff changeset
  1816
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  1817
@pre Debug Agent must be attached to a process.
hgs
parents:
diff changeset
  1818
hgs
parents:
diff changeset
  1819
@param aBreakId the TBreakId returned by a prior SetBreak() call. Must have been set by the same Debug Agent.
hgs
parents:
diff changeset
  1820
@param aThreadId the thread id of the thread to move the breakpoint to
hgs
parents:
diff changeset
  1821
@param aAddress the virtual memory address at which to place the breakpoint.
hgs
parents:
diff changeset
  1822
@param aArchitectureMode the kind of breakpoint which is to be set (e.g. ARM/Thumb/Thumb2EE)
hgs
parents:
diff changeset
  1823
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  1824
*/
hgs
parents:
diff changeset
  1825
inline TInt RSecuritySvrSession::ModifyBreak(const TBreakId aBreakId, const TThreadId aThreadId, const TUint32 aAddress, const TArchitectureMode aArchitectureMode)
hgs
parents:
diff changeset
  1826
hgs
parents:
diff changeset
  1827
	{
hgs
parents:
diff changeset
  1828
	TPckgBuf<TThreadId> threadIdPckg(aThreadId);
hgs
parents:
diff changeset
  1829
	TIpcArgs args(aBreakId,&threadIdPckg,aAddress,aArchitectureMode);
hgs
parents:
diff changeset
  1830
	return SendReceive(EDebugServModifyBreak, args);
hgs
parents:
diff changeset
  1831
	}
hgs
parents:
diff changeset
  1832
hgs
parents:
diff changeset
  1833
/**
hgs
parents:
diff changeset
  1834
Purpose:
hgs
parents:
diff changeset
  1835
Modifies the properties of a previously set process breakpoint.
hgs
parents:
diff changeset
  1836
hgs
parents:
diff changeset
  1837
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  1838
@pre Debug Agent must be attached to a process.
hgs
parents:
diff changeset
  1839
hgs
parents:
diff changeset
  1840
@param aBreakId the TBreakId returned by a prior SetBreak() call. Must have been set by the same Debug Agent.
hgs
parents:
diff changeset
  1841
@param aProcessId the process id of the process to move the breakpoint to
hgs
parents:
diff changeset
  1842
@param aAddress the virtual memory address at which to place the breakpoint.
hgs
parents:
diff changeset
  1843
@param aArchitectureMode the kind of breakpoint which is to be set (e.g. ARM/Thumb/Thumb2EE)
hgs
parents:
diff changeset
  1844
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  1845
*/
hgs
parents:
diff changeset
  1846
inline TInt RSecuritySvrSession::ModifyProcessBreak(const TBreakId aBreakId, const TProcessId aProcessId, const TUint32 aAddress, const TArchitectureMode aArchitectureMode)
hgs
parents:
diff changeset
  1847
hgs
parents:
diff changeset
  1848
	{
hgs
parents:
diff changeset
  1849
	TPckgBuf<TProcessId> processIdPckg(aProcessId);
hgs
parents:
diff changeset
  1850
	TIpcArgs args(aBreakId,&processIdPckg,aAddress,aArchitectureMode);
hgs
parents:
diff changeset
  1851
	return SendReceive(EDebugServModifyProcessBreak, args);
hgs
parents:
diff changeset
  1852
	}
hgs
parents:
diff changeset
  1853
hgs
parents:
diff changeset
  1854
/**
hgs
parents:
diff changeset
  1855
Purpose:
hgs
parents:
diff changeset
  1856
Returns the properties associated with a given TBreakId. The supplied break id must previously have been allocated
hgs
parents:
diff changeset
  1857
to the debug agent by a SetBreak() call.
hgs
parents:
diff changeset
  1858
hgs
parents:
diff changeset
  1859
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  1860
@pre Debug Agent must be attached to a process.
hgs
parents:
diff changeset
  1861
@pre The aBreakId must have been previously returned by a SetBreak() call and not subsequently cleared by ClearBreak().
hgs
parents:
diff changeset
  1862
hgs
parents:
diff changeset
  1863
@param aBreakId the TBreakId returned by a prior SetBreak() call. Must have been set by the same Debug Agent.
hgs
parents:
diff changeset
  1864
@param aAddress on return contains the virtual memory address of the breakpoint
hgs
parents:
diff changeset
  1865
@param aThreadId on return contains the thread id of the thread that the breakpoint is set in
hgs
parents:
diff changeset
  1866
@param aMode on return contains the type of this breakpoint (e.g. ARM/Thumb/Thumb2EE)
hgs
parents:
diff changeset
  1867
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  1868
*/
hgs
parents:
diff changeset
  1869
inline TInt RSecuritySvrSession::BreakInfo(const TBreakId aBreakId, TThreadId& aThreadId, TUint32& aAddress, TArchitectureMode& aMode)
hgs
parents:
diff changeset
  1870
	{
hgs
parents:
diff changeset
  1871
	// temporary descriptors
hgs
parents:
diff changeset
  1872
	TPtr8 threadId((TUint8*)&aThreadId,0,sizeof(TThreadId));
hgs
parents:
diff changeset
  1873
	TPtr8 address((TUint8*)&aAddress,0,sizeof(TUint32));
hgs
parents:
diff changeset
  1874
	TPtr8 mode((TUint8*)&aMode,0,sizeof(TArchitectureMode));
hgs
parents:
diff changeset
  1875
hgs
parents:
diff changeset
  1876
	TIpcArgs args(aBreakId,&threadId,&address,&mode);
hgs
parents:
diff changeset
  1877
	return SendReceive(EDebugServBreakInfo, args);
hgs
parents:
diff changeset
  1878
	}
hgs
parents:
diff changeset
  1879
hgs
parents:
diff changeset
  1880
/**
hgs
parents:
diff changeset
  1881
Purpose:
hgs
parents:
diff changeset
  1882
Set a process-specific breakpoint in an attached process. 
hgs
parents:
diff changeset
  1883
hgs
parents:
diff changeset
  1884
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  1885
@pre Debug Agent must be attached to a process.
hgs
parents:
diff changeset
  1886
hgs
parents:
diff changeset
  1887
@param aProcessId The process id to which the breakpoint will apply.
hgs
parents:
diff changeset
  1888
@param aAddress The virtual memory address at which to place the breakpoint.
hgs
parents:
diff changeset
  1889
@param aArchitectureMode The kind of breakpoint which is to be set (e.g. ARM/Thumb/Thumb2EE)
hgs
parents:
diff changeset
  1890
@param aBreakId The address to which the assigned breakpoint ID will be written by this function
hgs
parents:
diff changeset
  1891
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  1892
*/
hgs
parents:
diff changeset
  1893
inline TInt RSecuritySvrSession::SetProcessBreak( TBreakId &aBreakId, const TProcessId aProcessId, const TUint32 aAddress, const TArchitectureMode aArchitectureMode)
hgs
parents:
diff changeset
  1894
	{
hgs
parents:
diff changeset
  1895
	TPtr8 breakIdPtr((TUint8*)&aBreakId, sizeof(aBreakId));
hgs
parents:
diff changeset
  1896
hgs
parents:
diff changeset
  1897
	TPckgBuf<TProcessId> threadIdPckg(aProcessId);
hgs
parents:
diff changeset
  1898
hgs
parents:
diff changeset
  1899
	TBreakInfo breakInfo;
hgs
parents:
diff changeset
  1900
	breakInfo.iAddress = aAddress;
hgs
parents:
diff changeset
  1901
	breakInfo.iArchitectureMode = aArchitectureMode;
hgs
parents:
diff changeset
  1902
	TPckgBuf<TBreakInfo> breakInfoPckg(breakInfo);
hgs
parents:
diff changeset
  1903
hgs
parents:
diff changeset
  1904
	//call driver to attempt to set break
hgs
parents:
diff changeset
  1905
	TIpcArgs args(&threadIdPckg, &breakInfoPckg, &breakIdPtr);
hgs
parents:
diff changeset
  1906
	return SendReceive(EDebugServSetProcessBreak, args);
hgs
parents:
diff changeset
  1907
	}
hgs
parents:
diff changeset
  1908
hgs
parents:
diff changeset
  1909
/**
hgs
parents:
diff changeset
  1910
Purpose:
hgs
parents:
diff changeset
  1911
Returns the properties associated with a given TBreakId. The supplied break id must previously have been allocated
hgs
parents:
diff changeset
  1912
to the debug agent by a SetProcessBreak() call.
hgs
parents:
diff changeset
  1913
hgs
parents:
diff changeset
  1914
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  1915
@pre Debug Agent must be attached to a process.
hgs
parents:
diff changeset
  1916
@pre The aBreakId must have been previously returned by a SetProcessBreak() call and not subsequently cleared by ClearBreak().
hgs
parents:
diff changeset
  1917
hgs
parents:
diff changeset
  1918
@param aBreakId the TBreakId returned by a prior SetBreak() call. Must have been set by the same Debug Agent.
hgs
parents:
diff changeset
  1919
@param aAddress on return contains the virtual memory address of the breakpoint
hgs
parents:
diff changeset
  1920
@param aThreadId on return contains the thread id of the thread that the breakpoint is set in
hgs
parents:
diff changeset
  1921
@param aMode on return contains the type of this breakpoint (e.g. ARM/Thumb/Thumb2EE)
hgs
parents:
diff changeset
  1922
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  1923
*/
hgs
parents:
diff changeset
  1924
inline TInt RSecuritySvrSession::ProcessBreakInfo(const TBreakId aBreakId, TProcessId& aProcessId, TUint32& aAddress, TArchitectureMode& aMode)
hgs
parents:
diff changeset
  1925
	{
hgs
parents:
diff changeset
  1926
	// temporary descriptors
hgs
parents:
diff changeset
  1927
	TPtr8 processId((TUint8*)&aProcessId,0,sizeof(TProcessId));
hgs
parents:
diff changeset
  1928
	TPtr8 address((TUint8*)&aAddress,0,sizeof(TUint32));
hgs
parents:
diff changeset
  1929
	TPtr8 mode((TUint8*)&aMode,0,sizeof(TArchitectureMode));
hgs
parents:
diff changeset
  1930
hgs
parents:
diff changeset
  1931
	TIpcArgs args(aBreakId,&processId,&address,&mode);
hgs
parents:
diff changeset
  1932
	return SendReceive(EDebugServProcessBreakInfo, args);
hgs
parents:
diff changeset
  1933
	}
hgs
parents:
diff changeset
  1934
hgs
parents:
diff changeset
  1935
/**
hgs
parents:
diff changeset
  1936
Purpose:
hgs
parents:
diff changeset
  1937
Wait for an event to occur to the target executable being debugged. When an event
hgs
parents:
diff changeset
  1938
occurs, the TRequestStatus is completed.
hgs
parents:
diff changeset
  1939
hgs
parents:
diff changeset
  1940
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  1941
@pre Debug Agent must be attached to a process.
hgs
parents:
diff changeset
  1942
hgs
parents:
diff changeset
  1943
Note 1: Events are reported on a per-executable basis, not per-thread.
hgs
parents:
diff changeset
  1944
hgs
parents:
diff changeset
  1945
Note 2: All the parameters must remain in scope until either CancelGetEvent is called, or
hgs
parents:
diff changeset
  1946
until the request is completed. In practice, this generally
hgs
parents:
diff changeset
  1947
means these parameters should not be based on the stack, as they may go out of
hgs
parents:
diff changeset
  1948
scope before the call completes.
hgs
parents:
diff changeset
  1949
hgs
parents:
diff changeset
  1950
Note 3: Errors are signalled by completing aStatus
hgs
parents:
diff changeset
  1951
hgs
parents:
diff changeset
  1952
@param aExecutableName The name of any executable to which the Debug Agent is attached.
hgs
parents:
diff changeset
  1953
@param aStatus Debug Agent request status variable.
hgs
parents:
diff changeset
  1954
@param aEventInfo Descriptor containing a TEventInfo object. 
hgs
parents:
diff changeset
  1955
hgs
parents:
diff changeset
  1956
*/
hgs
parents:
diff changeset
  1957
inline void RSecuritySvrSession::GetEvent(const TDesC& aExecutableName, TRequestStatus &aStatus, TDes8& aEventInfo)
hgs
parents:
diff changeset
  1958
	{
hgs
parents:
diff changeset
  1959
	TIpcArgs args(&aExecutableName, &aEventInfo);
hgs
parents:
diff changeset
  1960
hgs
parents:
diff changeset
  1961
	SendReceive(EDebugServGetEvent, args, aStatus );
hgs
parents:
diff changeset
  1962
hgs
parents:
diff changeset
  1963
	}
hgs
parents:
diff changeset
  1964
 
hgs
parents:
diff changeset
  1965
/**
hgs
parents:
diff changeset
  1966
Purpose:
hgs
parents:
diff changeset
  1967
Cancel a previously issued asynchronous RSecuritySvrSession::GetEvent call.
hgs
parents:
diff changeset
  1968
hgs
parents:
diff changeset
  1969
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  1970
@pre Debug Agent should have called AttachExecutable and GetEvent for the same executable
hgs
parents:
diff changeset
  1971
hgs
parents:
diff changeset
  1972
@param aExecutableName The name of the executable being debugged.
hgs
parents:
diff changeset
  1973
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  1974
*/
hgs
parents:
diff changeset
  1975
inline TInt RSecuritySvrSession::CancelGetEvent(const TDesC& aExecutableName)
hgs
parents:
diff changeset
  1976
{
hgs
parents:
diff changeset
  1977
	TIpcArgs args(&aExecutableName);
hgs
parents:
diff changeset
  1978
hgs
parents:
diff changeset
  1979
	return SendReceive(EDebugServCancelGetEvent,args);
hgs
parents:
diff changeset
  1980
}
hgs
parents:
diff changeset
  1981
hgs
parents:
diff changeset
  1982
hgs
parents:
diff changeset
  1983
/**
hgs
parents:
diff changeset
  1984
Purpose:
hgs
parents:
diff changeset
  1985
Wait for an event to occur from any process. When an event
hgs
parents:
diff changeset
  1986
occurs, the TRequestStatus is completed.
hgs
parents:
diff changeset
  1987
hgs
parents:
diff changeset
  1988
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  1989
@pre Debug Agent must have called AttachAll.
hgs
parents:
diff changeset
  1990
hgs
parents:
diff changeset
  1991
Note 1: Events are reported on a FIFO basis
hgs
parents:
diff changeset
  1992
hgs
parents:
diff changeset
  1993
Note 2: All the parameters must remain in scope until either CancelGetEvent is called, or
hgs
parents:
diff changeset
  1994
until the request is completed. In practice, this generally
hgs
parents:
diff changeset
  1995
means these parameters should not be based on the stack, as they may go out of
hgs
parents:
diff changeset
  1996
scope before the call completes.
hgs
parents:
diff changeset
  1997
hgs
parents:
diff changeset
  1998
Note 3: Errors are signalled by completing aStatus
hgs
parents:
diff changeset
  1999
hgs
parents:
diff changeset
  2000
@param aStatus Debug Agent request status variable.
hgs
parents:
diff changeset
  2001
@param aEventInfo Descriptor containing a TEventInfo object.
hgs
parents:
diff changeset
  2002
hgs
parents:
diff changeset
  2003
*/
hgs
parents:
diff changeset
  2004
inline void RSecuritySvrSession::GetEvent(TRequestStatus &aStatus, TDes8& aEventInfo)
hgs
parents:
diff changeset
  2005
    {
hgs
parents:
diff changeset
  2006
	TIpcArgs args(&KStar, &aEventInfo);
hgs
parents:
diff changeset
  2007
hgs
parents:
diff changeset
  2008
    SendReceive(EDebugServGetEvent, args, aStatus );
hgs
parents:
diff changeset
  2009
    }
hgs
parents:
diff changeset
  2010
 
hgs
parents:
diff changeset
  2011
/**
hgs
parents:
diff changeset
  2012
Purpose:
hgs
parents:
diff changeset
  2013
Cancel a previously issued asynchronous RSecuritySvrSession::GetEvent call.
hgs
parents:
diff changeset
  2014
hgs
parents:
diff changeset
  2015
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  2016
@pre Debug Agent should have called AttachAll and GetEvent
hgs
parents:
diff changeset
  2017
hgs
parents:
diff changeset
  2018
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  2019
*/
hgs
parents:
diff changeset
  2020
inline TInt RSecuritySvrSession::CancelGetEvent()
hgs
parents:
diff changeset
  2021
    {
hgs
parents:
diff changeset
  2022
    TIpcArgs args(&KStar);
hgs
parents:
diff changeset
  2023
hgs
parents:
diff changeset
  2024
    return SendReceive(EDebugServCancelGetEvent,args);
hgs
parents:
diff changeset
  2025
    }
hgs
parents:
diff changeset
  2026
hgs
parents:
diff changeset
  2027
hgs
parents:
diff changeset
  2028
/**
hgs
parents:
diff changeset
  2029
Called by a debug agent to request debug privileges for the executable with
hgs
parents:
diff changeset
  2030
file name aExecutableName.
hgs
parents:
diff changeset
  2031
hgs
parents:
diff changeset
  2032
@param aExecutableName a fully qualified file name of the executable to attach to
hgs
parents:
diff changeset
  2033
@param aPassive if true then the agent has reduced debug rights.
hgs
parents:
diff changeset
  2034
hgs
parents:
diff changeset
  2035
@return KErrNone if attached successfully, one of the other system wide error
hgs
parents:
diff changeset
  2036
	codes otherwise
hgs
parents:
diff changeset
  2037
*/
hgs
parents:
diff changeset
  2038
inline TInt RSecuritySvrSession::AttachExecutable(const TDesC& aExecutableName, TBool aPassive)
hgs
parents:
diff changeset
  2039
	{
hgs
parents:
diff changeset
  2040
	TIpcArgs args((TInt)aPassive, &aExecutableName);
hgs
parents:
diff changeset
  2041
	return SendReceive(EDebugServAttachExecutable, args);
hgs
parents:
diff changeset
  2042
	}
hgs
parents:
diff changeset
  2043
hgs
parents:
diff changeset
  2044
/**
hgs
parents:
diff changeset
  2045
Called by a debug agent to detach from the executable with file
hgs
parents:
diff changeset
  2046
name aExecutableName.
hgs
parents:
diff changeset
  2047
hgs
parents:
diff changeset
  2048
@param aExecutableName the fully qualified file name of the executable to detach from
hgs
parents:
diff changeset
  2049
hgs
parents:
diff changeset
  2050
@return KErrNone if detached successfully, one of the other system wide error
hgs
parents:
diff changeset
  2051
	codes otherwise
hgs
parents:
diff changeset
  2052
*/
hgs
parents:
diff changeset
  2053
inline TInt RSecuritySvrSession::DetachExecutable(const TDesC& aExecutableName)
hgs
parents:
diff changeset
  2054
	{
hgs
parents:
diff changeset
  2055
	TIpcArgs args(&aExecutableName);
hgs
parents:
diff changeset
  2056
	return SendReceive(EDebugServDetachExecutable, args);
hgs
parents:
diff changeset
  2057
	}
hgs
parents:
diff changeset
  2058
hgs
parents:
diff changeset
  2059
/**
hgs
parents:
diff changeset
  2060
Called by a debug agent to attach to events from all processes
hgs
parents:
diff changeset
  2061
hgs
parents:
diff changeset
  2062
@return KErrNone if attached successfully, one of the other system wide error
hgs
parents:
diff changeset
  2063
    codes otherwise
hgs
parents:
diff changeset
  2064
*/
hgs
parents:
diff changeset
  2065
inline TInt RSecuritySvrSession::AttachAll()
hgs
parents:
diff changeset
  2066
    {
hgs
parents:
diff changeset
  2067
    return SendReceive(EDebugServAttachAll);
hgs
parents:
diff changeset
  2068
    }
hgs
parents:
diff changeset
  2069
hgs
parents:
diff changeset
  2070
/**
hgs
parents:
diff changeset
  2071
Called by a debug agent to detach from all events from all processes
hgs
parents:
diff changeset
  2072
hgs
parents:
diff changeset
  2073
@return KErrNone if detached successfully, one of the other system wide error
hgs
parents:
diff changeset
  2074
    codes otherwise
hgs
parents:
diff changeset
  2075
*/
hgs
parents:
diff changeset
  2076
inline TInt RSecuritySvrSession::DetachAll()
hgs
parents:
diff changeset
  2077
    {
hgs
parents:
diff changeset
  2078
    return SendReceive(EDebugServDetachAll);
hgs
parents:
diff changeset
  2079
    }
hgs
parents:
diff changeset
  2080
hgs
parents:
diff changeset
  2081
/**
hgs
parents:
diff changeset
  2082
Get buffer size required to contain Functionality text block.
hgs
parents:
diff changeset
  2083
hgs
parents:
diff changeset
  2084
@see in-source documentation in rm_debug_api.h
hgs
parents:
diff changeset
  2085
hgs
parents:
diff changeset
  2086
@param aBufSize function will fill this with the required buffer size
hgs
parents:
diff changeset
  2087
hgs
parents:
diff changeset
  2088
@return KErrNone if the call succeeded, or one of the other system wide error
hgs
parents:
diff changeset
  2089
        codes if the call failed
hgs
parents:
diff changeset
  2090
*/
hgs
parents:
diff changeset
  2091
inline TInt RSecuritySvrSession::GetDebugFunctionalityBufSize(TUint32 *aBufSize)
hgs
parents:
diff changeset
  2092
	{	
hgs
parents:
diff changeset
  2093
	TInt res = KErrNone;
hgs
parents:
diff changeset
  2094
hgs
parents:
diff changeset
  2095
	TPtr8 stuff((TUint8*)aBufSize,4, 4);
hgs
parents:
diff changeset
  2096
hgs
parents:
diff changeset
  2097
	TIpcArgs args(&stuff);
hgs
parents:
diff changeset
  2098
hgs
parents:
diff changeset
  2099
	res = SendReceive(EDebugServGetDebugFunctionalityBufSize, args);
hgs
parents:
diff changeset
  2100
	
hgs
parents:
diff changeset
  2101
	return res;
hgs
parents:
diff changeset
  2102
	}
hgs
parents:
diff changeset
  2103
hgs
parents:
diff changeset
  2104
/**
hgs
parents:
diff changeset
  2105
Get debug functionality text block and place it into aBuffer.
hgs
parents:
diff changeset
  2106
hgs
parents:
diff changeset
  2107
The debug functionality block (DFBlock) is used to provide information about the functionality
hgs
parents:
diff changeset
  2108
(i.e. features) which are supported by the rm_debug.ldd device driver.
hgs
parents:
diff changeset
  2109
hgs
parents:
diff changeset
  2110
Calling this function with a suitably sized buffer aBuffer will result in the debug
hgs
parents:
diff changeset
  2111
functionality information being stored in aBuffer. The necessary size of aBuffer can
hgs
parents:
diff changeset
  2112
be determined by calling DebugFunctionalityBufSize().
hgs
parents:
diff changeset
  2113
hgs
parents:
diff changeset
  2114
The format of the DFBlock is:
hgs
parents:
diff changeset
  2115
hgs
parents:
diff changeset
  2116
@code
hgs
parents:
diff changeset
  2117
Sub-block 0
hgs
parents:
diff changeset
  2118
Sub-block 1
hgs
parents:
diff changeset
  2119
...
hgs
parents:
diff changeset
  2120
Sub-block N-1
hgs
parents:
diff changeset
  2121
@endcode
hgs
parents:
diff changeset
  2122
hgs
parents:
diff changeset
  2123
The data which will be returned by a call to GetDebugFunctionality() is constant so is
hgs
parents:
diff changeset
  2124
guaranteed to fit exactly into the aBuffer allocated, assuming that the size of aBuffer
hgs
parents:
diff changeset
  2125
corresponds to the value returned from GetDebugFunctionalityBufSize().
hgs
parents:
diff changeset
  2126
hgs
parents:
diff changeset
  2127
Each sub-block is composed of a TTagHeader object followed by a C-style array of TTag objects.
hgs
parents:
diff changeset
  2128
The sub-block contains information about a particular aspect of the debug sub-system, for example
hgs
parents:
diff changeset
  2129
information about the manner in which memory can be accessed.
hgs
parents:
diff changeset
  2130
The TTagHeader is comprised of an identifier which determines the type of data
hgs
parents:
diff changeset
  2131
it contains, together with the number of TTag elements in the array following the TTagHeader.
hgs
parents:
diff changeset
  2132
Each TTag in a sub-block has a unique ID, stored in the TTag::iTagId member variable.
hgs
parents:
diff changeset
  2133
hgs
parents:
diff changeset
  2134
The only sub-block that is guaranteed to exist has TTagHeader::iTagHdrId = ETagHeaderIdCore, all other
hgs
parents:
diff changeset
  2135
sub-blocks are optional. The ETagHeaderIdCore sub-block is the first sub-block within the DFBlock.
hgs
parents:
diff changeset
  2136
Other sub-blocks may appear in any order after the ETagHeaderIdCore sub-block.
hgs
parents:
diff changeset
  2137
hgs
parents:
diff changeset
  2138
The following is a diagrammatic representation of a sub-block the DFBlock:
hgs
parents:
diff changeset
  2139
hgs
parents:
diff changeset
  2140
@code
hgs
parents:
diff changeset
  2141
The HHHH represents the tag header ID of a sub-block (TTagHeader::iTagHdrId)
hgs
parents:
diff changeset
  2142
The NNNN represents the number of TTag elements in the sub-block (TTagHeader::iNumTags)
hgs
parents:
diff changeset
  2143
The IIIIIIII represents the ID of the TTag (TTag::iTagId)
hgs
parents:
diff changeset
  2144
The TTTT represents the type of the TTag (TTag::iType)
hgs
parents:
diff changeset
  2145
The SSSS represents the size of the TTag's associated data (TTag::iSize)
hgs
parents:
diff changeset
  2146
The VVVVVVVV represents the TTag's value (TTag::iValue)
hgs
parents:
diff changeset
  2147
hgs
parents:
diff changeset
  2148
0xNNNNHHHH	TTagHeader element for first sub-block (has N1 TTag elements)
hgs
parents:
diff changeset
  2149
0xIIIIIIII	\
hgs
parents:
diff changeset
  2150
0xSSSSTTTT	-- TTag 0
hgs
parents:
diff changeset
  2151
0xVVVVVVVV	/
hgs
parents:
diff changeset
  2152
0xIIIIIIII	\
hgs
parents:
diff changeset
  2153
0xSSSSTTTT	-- TTag 1
hgs
parents:
diff changeset
  2154
0xVVVVVVVV	/
hgs
parents:
diff changeset
  2155
...
hgs
parents:
diff changeset
  2156
0xIIIIIIII	\
hgs
parents:
diff changeset
  2157
0xSSSSTTTT	-- TTag N1 - 1
hgs
parents:
diff changeset
  2158
0xVVVVVVVV	/
hgs
parents:
diff changeset
  2159
0xNNNNHHHH	TTagHeader element for second sub-block (has N2 TTag elements)
hgs
parents:
diff changeset
  2160
0xIIIIIIII	\
hgs
parents:
diff changeset
  2161
0xSSSSTTTT	-- TTag 0
hgs
parents:
diff changeset
  2162
0xVVVVVVVV	/
hgs
parents:
diff changeset
  2163
...
hgs
parents:
diff changeset
  2164
0xIIIIIIII	\
hgs
parents:
diff changeset
  2165
0xSSSSTTTT	-- TTag N2 - 1
hgs
parents:
diff changeset
  2166
0xVVVVVVVV	/
hgs
parents:
diff changeset
  2167
...
hgs
parents:
diff changeset
  2168
0xNNNNHHHH	TTagHeader element for last sub-block (has NX TTag elements)
hgs
parents:
diff changeset
  2169
0xIIIIIIII	\
hgs
parents:
diff changeset
  2170
0xSSSSTTTT	-- TTag 0
hgs
parents:
diff changeset
  2171
0xVVVVVVVV	/
hgs
parents:
diff changeset
  2172
...
hgs
parents:
diff changeset
  2173
0xIIIIIIII	\
hgs
parents:
diff changeset
  2174
0xSSSSTTTT	-- TTag NX - 1
hgs
parents:
diff changeset
  2175
0xVVVVVVVV	/
hgs
parents:
diff changeset
  2176
@endcode
hgs
parents:
diff changeset
  2177
hgs
parents:
diff changeset
  2178
The following example DFBlock contains two sub-blocks (values taken from enums below):
hgs
parents:
diff changeset
  2179
- ETagHeaderIdCore
hgs
parents:
diff changeset
  2180
- ETagHeaderIdMemory
hgs
parents:
diff changeset
  2181
hgs
parents:
diff changeset
  2182
@code
hgs
parents:
diff changeset
  2183
Binary		Meaning					Value
hgs
parents:
diff changeset
  2184
hgs
parents:
diff changeset
  2185
0x000A0000	iTagHdrId, iNumTags		ETagHeaderIdCore, ECoreLast
hgs
parents:
diff changeset
  2186
0x00000000	iTagId					ECoreEvents
hgs
parents:
diff changeset
  2187
0x00000000	iType, iSize			ETagTypeBoolean, 0
hgs
parents:
diff changeset
  2188
0x00000001	iValue					ETrue
hgs
parents:
diff changeset
  2189
0x00000001	iTagId					ECoreStartStop
hgs
parents:
diff changeset
  2190
0x00000000	iType, iSize			ETagTypeBoolean, 0
hgs
parents:
diff changeset
  2191
0x00000001	iValue					ETrue
hgs
parents:
diff changeset
  2192
...
hgs
parents:
diff changeset
  2193
0x00000008	iTagId					ECoreHardware
hgs
parents:
diff changeset
  2194
0x00000000	iType, iSize			ETagTypeBoolean, 0
hgs
parents:
diff changeset
  2195
0x00000000	iValue					EFalse
hgs
parents:
diff changeset
  2196
0x00000009	iTagId					ECoreApiConstants
hgs
parents:
diff changeset
  2197
0x00000000	iType, iSize			ETagTypeBoolean, 0
hgs
parents:
diff changeset
  2198
0x00000001	iValue					ETrue
hgs
parents:
diff changeset
  2199
hgs
parents:
diff changeset
  2200
0x000A0001	iTagHdrId, iNumTags		ETagHeaderIdMemory, EMemoryLast
hgs
parents:
diff changeset
  2201
0x00000000	iTagId					EMemoryRead
hgs
parents:
diff changeset
  2202
0x00000000	iType, iSize			ETagTypeBoolean, 0
hgs
parents:
diff changeset
  2203
0x00000001	iValue					ETrue
hgs
parents:
diff changeset
  2204
0x00000001	iTagId					EMemoryWrite
hgs
parents:
diff changeset
  2205
0x00000000	iType, iSize			ETagTypeBoolean, 0
hgs
parents:
diff changeset
  2206
0x00000001	iValue					ETrue
hgs
parents:
diff changeset
  2207
...
hgs
parents:
diff changeset
  2208
0x00000008	iTagId					EMemoryLE8
hgs
parents:
diff changeset
  2209
0x00000000	iType, iSize			ETagTypeBoolean, 0
hgs
parents:
diff changeset
  2210
0x00000001	iValue					ETrue
hgs
parents:
diff changeset
  2211
0x00000009	iTagId					EMemoryMaxBlockSize
hgs
parents:
diff changeset
  2212
0x00000001	iType, iSize			ETagTypeTUint32, 0
hgs
parents:
diff changeset
  2213
0x00004000	iValue					0x4000
hgs
parents:
diff changeset
  2214
@endcode
hgs
parents:
diff changeset
  2215
hgs
parents:
diff changeset
  2216
- Debug Agent DFBlock Processing:
hgs
parents:
diff changeset
  2217
hgs
parents:
diff changeset
  2218
Debug Agents MUST understand and process the ETagHeaderIdCore block. The other
hgs
parents:
diff changeset
  2219
blocks may be ignored if not recognised. Tags within each block may be ignored if
hgs
parents:
diff changeset
  2220
not recognised.
hgs
parents:
diff changeset
  2221
hgs
parents:
diff changeset
  2222
@pre aBuffer.MaxLength() >= *aBufSize where aBufSize is set by a call to: 
hgs
parents:
diff changeset
  2223
     RSecuritySvrSession::GetDebugFunctionalityBufSize(TUint32 *aBufSize)
hgs
parents:
diff changeset
  2224
hgs
parents:
diff changeset
  2225
@param aBuffer buffer to store functionality block in
hgs
parents:
diff changeset
  2226
hgs
parents:
diff changeset
  2227
@return KErrNone if call succeeded, 
hgs
parents:
diff changeset
  2228
        KErrNoMemory if temporary memory could not be allocated, 
hgs
parents:
diff changeset
  2229
        KErrGeneral if debug functionality block could not be accessed
hgs
parents:
diff changeset
  2230
*/
hgs
parents:
diff changeset
  2231
inline TInt RSecuritySvrSession::GetDebugFunctionality(TDes8& aBuffer)
hgs
parents:
diff changeset
  2232
	{
hgs
parents:
diff changeset
  2233
	TIpcArgs args(&aBuffer);
hgs
parents:
diff changeset
  2234
hgs
parents:
diff changeset
  2235
	TInt res = KErrNone;
hgs
parents:
diff changeset
  2236
hgs
parents:
diff changeset
  2237
	res = SendReceive(EDebugServGetDebugFunctionality, args);
hgs
parents:
diff changeset
  2238
hgs
parents:
diff changeset
  2239
	return res;
hgs
parents:
diff changeset
  2240
	}
hgs
parents:
diff changeset
  2241
hgs
parents:
diff changeset
  2242
/**
hgs
parents:
diff changeset
  2243
Read a block of memory from the target debug thread defined by aThreadId.
hgs
parents:
diff changeset
  2244
hgs
parents:
diff changeset
  2245
@pre the client should attach to the process containing the target thread
hgs
parents:
diff changeset
  2246
@pre aData.MaxLength() >= aLength
hgs
parents:
diff changeset
  2247
hgs
parents:
diff changeset
  2248
@param aThreadId thread ID of the thread to read memory from
hgs
parents:
diff changeset
  2249
@param aAddress address to start reading memory from
hgs
parents:
diff changeset
  2250
@param aLength number of bytes of memory to read
hgs
parents:
diff changeset
  2251
@param aData descriptor to read memory into
hgs
parents:
diff changeset
  2252
@param aAccessSize access size for memory reads, default is TAccess::EAccess32
hgs
parents:
diff changeset
  2253
@param aEndianess interpretation of endianess of target data, default is
hgs
parents:
diff changeset
  2254
       TEndianess::EEndLE8
hgs
parents:
diff changeset
  2255
hgs
parents:
diff changeset
  2256
@return KErrNone if memory read successfully, or one of the other system wide error codes
hgs
parents:
diff changeset
  2257
*/
hgs
parents:
diff changeset
  2258
inline TInt RSecuritySvrSession::ReadMemory(const TThreadId aThreadId, const TUint32 aAddress, const TUint32 aLength, TDes8 &aData, const TAccess aAccessSize, const TEndianess aEndianess)
hgs
parents:
diff changeset
  2259
	{
hgs
parents:
diff changeset
  2260
	TPckgBuf<TThreadId> threadIdPckg(aThreadId);
hgs
parents:
diff changeset
  2261
	//set up memory info object
hgs
parents:
diff changeset
  2262
	TMemoryInfo memoryInfo;
hgs
parents:
diff changeset
  2263
	memoryInfo.iAddress = aAddress;
hgs
parents:
diff changeset
  2264
	memoryInfo.iSize = aLength;
hgs
parents:
diff changeset
  2265
	memoryInfo.iAccess = aAccessSize;
hgs
parents:
diff changeset
  2266
	memoryInfo.iEndianess = aEndianess;
hgs
parents:
diff changeset
  2267
hgs
parents:
diff changeset
  2268
	TPckgBuf<TMemoryInfo> pckg(memoryInfo);
hgs
parents:
diff changeset
  2269
hgs
parents:
diff changeset
  2270
	TIpcArgs args(&threadIdPckg, &pckg, &aData);
hgs
parents:
diff changeset
  2271
hgs
parents:
diff changeset
  2272
	return SendReceive(EDebugServReadMemory, args);
hgs
parents:
diff changeset
  2273
	}
hgs
parents:
diff changeset
  2274
hgs
parents:
diff changeset
  2275
/**
hgs
parents:
diff changeset
  2276
Write a block of memory to the target debug thread defined by aThreadId.
hgs
parents:
diff changeset
  2277
hgs
parents:
diff changeset
  2278
@pre the client should attach non-passively to the process containing the
hgs
parents:
diff changeset
  2279
     target thread
hgs
parents:
diff changeset
  2280
hgs
parents:
diff changeset
  2281
@param aThreadId thread ID of the thread to write memory to
hgs
parents:
diff changeset
  2282
@param aAddress address to start writing memory at
hgs
parents:
diff changeset
  2283
@param aLength number of bytes of memory to write
hgs
parents:
diff changeset
  2284
@param aData descriptor to read memory from
hgs
parents:
diff changeset
  2285
@param aAccessSize access size for memory writes, default is TAccess::EAccess32
hgs
parents:
diff changeset
  2286
@param aEndianess interpretation of endianess of target data, default is
hgs
parents:
diff changeset
  2287
       TEndianess::EEndLE8
hgs
parents:
diff changeset
  2288
hgs
parents:
diff changeset
  2289
@return KErrNone if memory written successfully, or one of the other system wide error codes
hgs
parents:
diff changeset
  2290
*/
hgs
parents:
diff changeset
  2291
inline TInt RSecuritySvrSession::WriteMemory(const TThreadId aThreadId, const TUint32 aAddress, const TUint32 aLength, const TDesC8 &aData, const TAccess aAccessSize, const TEndianess aEndianess)
hgs
parents:
diff changeset
  2292
	{
hgs
parents:
diff changeset
  2293
	TPckgBuf<TThreadId> threadIdPckg(aThreadId);
hgs
parents:
diff changeset
  2294
	//create memory info object
hgs
parents:
diff changeset
  2295
	TMemoryInfo memoryInfo;
hgs
parents:
diff changeset
  2296
	memoryInfo.iAddress = aAddress;
hgs
parents:
diff changeset
  2297
	memoryInfo.iSize = aLength;
hgs
parents:
diff changeset
  2298
	memoryInfo.iAccess = aAccessSize;
hgs
parents:
diff changeset
  2299
	memoryInfo.iEndianess = aEndianess;
hgs
parents:
diff changeset
  2300
hgs
parents:
diff changeset
  2301
	TPckgBuf<TMemoryInfo> pckg(memoryInfo);
hgs
parents:
diff changeset
  2302
hgs
parents:
diff changeset
  2303
	TIpcArgs args(&threadIdPckg, &pckg, &aData);
hgs
parents:
diff changeset
  2304
hgs
parents:
diff changeset
  2305
	return SendReceive(EDebugServWriteMemory, args);
hgs
parents:
diff changeset
  2306
	}
hgs
parents:
diff changeset
  2307
hgs
parents:
diff changeset
  2308
/**
hgs
parents:
diff changeset
  2309
Read register values from the thread with thread ID aThreadId. The IDs of the
hgs
parents:
diff changeset
  2310
registers to read are stored as an array of TRegisterInfo objects in 
hgs
parents:
diff changeset
  2311
aRegisterIds. If the nth register requested could be read then the value of the 
hgs
parents:
diff changeset
  2312
register will be appended to aRegisterValues and EValid stored at 
hgs
parents:
diff changeset
  2313
offset n in aRegisterFlags. If the register is supported but could not be read 
hgs
parents:
diff changeset
  2314
then EInValid will be stored at offset n in aRegisterFlags and arbitrary data 
hgs
parents:
diff changeset
  2315
appended in aRegisterValues. If reading the specified register is not
hgs
parents:
diff changeset
  2316
supported by the kernel then ENotSupported will be stored at offset n in 
hgs
parents:
diff changeset
  2317
aRegisterFlags and arbitrary data appended to aRegisterValues. If an unknown
hgs
parents:
diff changeset
  2318
register is specified then EUnknown will be put in aRegisterFlags and 
hgs
parents:
diff changeset
  2319
arbitrary data placed in aRegisterValues.
hgs
parents:
diff changeset
  2320
hgs
parents:
diff changeset
  2321
@pre the client should attach to the process containing the target thread
hgs
parents:
diff changeset
  2322
hgs
parents:
diff changeset
  2323
@see the register ID format is defined in: 
hgs
parents:
diff changeset
  2324
     SGL.TS0028.027 - Symbian Core Dump File Format v1.0.doc
hgs
parents:
diff changeset
  2325
hgs
parents:
diff changeset
  2326
@param aThreadId thread ID of the thread to read register values from
hgs
parents:
diff changeset
  2327
@param aRegisterIds descriptor containing array of TFunctionalityRegister defined 
hgs
parents:
diff changeset
  2328
       register IDs
hgs
parents:
diff changeset
  2329
@param aRegisterValues descriptor to contain register values
hgs
parents:
diff changeset
  2330
@param aRegisterFlags descriptor containing array of TUint8 flags, with values 
hgs
parents:
diff changeset
  2331
       taken from TRegisterFlag
hgs
parents:
diff changeset
  2332
hgs
parents:
diff changeset
  2333
@return KErrNone if registers were read successfully, or one of the other system wide error codes
hgs
parents:
diff changeset
  2334
*/
hgs
parents:
diff changeset
  2335
inline TInt RSecuritySvrSession::ReadRegisters(const TThreadId aThreadId, const TDesC8& aRegisterIds, TDes8& aRegisterValues, TDes8& aRegisterFlags)
hgs
parents:
diff changeset
  2336
	{
hgs
parents:
diff changeset
  2337
	TPckgBuf<TThreadId> threadIdPckg(aThreadId);
hgs
parents:
diff changeset
  2338
	TIpcArgs args(&threadIdPckg, &aRegisterIds, &aRegisterValues, &aRegisterFlags);
hgs
parents:
diff changeset
  2339
hgs
parents:
diff changeset
  2340
	return SendReceive(EDebugServReadRegisters, args);
hgs
parents:
diff changeset
  2341
	}
hgs
parents:
diff changeset
  2342
hgs
parents:
diff changeset
  2343
/**
hgs
parents:
diff changeset
  2344
Write register values to the thread with thread ID aThreadId. The IDs of the 
hgs
parents:
diff changeset
  2345
registers to write are stored as an array of TRegisterInfo objects in 
hgs
parents:
diff changeset
  2346
aRegisterIds. The values to put in the registers are stored as an array of 
hgs
parents:
diff changeset
  2347
objects in aRegisterValues. If the nth register to write could be 
hgs
parents:
diff changeset
  2348
written then EValid stored at offset n in aRegisterFlags. If the register is 
hgs
parents:
diff changeset
  2349
supported but could not be written then EInValid will be stored at offset n in 
hgs
parents:
diff changeset
  2350
aRegisterFlags. If writing to the specified register is not supported by the 
hgs
parents:
diff changeset
  2351
kernel then ENotSupported will be stored at offset n in aRegisterFlags. If an 
hgs
parents:
diff changeset
  2352
unknown register is specified then EUnknown will be put in aRegisterFlags.
hgs
parents:
diff changeset
  2353
hgs
parents:
diff changeset
  2354
@pre the client should attach non-passively to the process containing the 
hgs
parents:
diff changeset
  2355
     target thread
hgs
parents:
diff changeset
  2356
hgs
parents:
diff changeset
  2357
@see the register ID format is defined in: 
hgs
parents:
diff changeset
  2358
     SGL.TS0028.027 - Symbian Core Dump File Format v1.0.doc
hgs
parents:
diff changeset
  2359
hgs
parents:
diff changeset
  2360
@param aThreadId thread ID of the thread to write register values to
hgs
parents:
diff changeset
  2361
@param aRegisterIds descriptor containing array of TFunctionalityRegister defined 
hgs
parents:
diff changeset
  2362
       register IDs
hgs
parents:
diff changeset
  2363
@param aRegisterValues descriptor containing array of register values
hgs
parents:
diff changeset
  2364
@param aRegisterFlags descriptor containing array of TUint8 flags, with values 
hgs
parents:
diff changeset
  2365
       taken from TRegisterFlag
hgs
parents:
diff changeset
  2366
hgs
parents:
diff changeset
  2367
@return KErrNone if registers were written successfully, or one of the other system wide error codes
hgs
parents:
diff changeset
  2368
*/
hgs
parents:
diff changeset
  2369
inline TInt RSecuritySvrSession::WriteRegisters(const TThreadId aThreadId, const TDesC8& aRegisterIds, const TDesC8& aRegisterValues, TDes8& aRegisterFlags)
hgs
parents:
diff changeset
  2370
	{
hgs
parents:
diff changeset
  2371
	TPckgBuf<TThreadId> threadIdPckg(aThreadId);
hgs
parents:
diff changeset
  2372
	TIpcArgs args(&threadIdPckg, &aRegisterIds, &aRegisterValues, &aRegisterFlags);
hgs
parents:
diff changeset
  2373
hgs
parents:
diff changeset
  2374
	return SendReceive(EDebugServWriteRegisters, args);
hgs
parents:
diff changeset
  2375
	}
hgs
parents:
diff changeset
  2376
hgs
parents:
diff changeset
  2377
/**
hgs
parents:
diff changeset
  2378
Purpose:
hgs
parents:
diff changeset
  2379
Set the requisite actions to be taken when a particular event occurs.
hgs
parents:
diff changeset
  2380
The events are defined in Debug::TEventType and the
hgs
parents:
diff changeset
  2381
actions are defined in Debug::TKernelEventAction.
hgs
parents:
diff changeset
  2382
hgs
parents:
diff changeset
  2383
The default action for all events is EActionIgnore.
hgs
parents:
diff changeset
  2384
hgs
parents:
diff changeset
  2385
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  2386
@pre Debug Agent must be attached to the executable specified by aExecutableName.
hgs
parents:
diff changeset
  2387
hgs
parents:
diff changeset
  2388
Note: Event actions are on a per-executable basis. This is
hgs
parents:
diff changeset
  2389
to ensure that events such as EEventStartThread are notified to the Debug
hgs
parents:
diff changeset
  2390
Agent, even though the debug agent cannot be aware of the existence
hgs
parents:
diff changeset
  2391
of a new thread at the time the event occurs.
hgs
parents:
diff changeset
  2392
hgs
parents:
diff changeset
  2393
@param aExecutableName The name of the executable to which the Debug Agent is attached.
hgs
parents:
diff changeset
  2394
@param aEvent A TEventType enum defined in rm_debug_api.h:Debug::TEventType
hgs
parents:
diff changeset
  2395
@param aEventAction Any TKernelEventAction permitted by the DFBlock.
hgs
parents:
diff changeset
  2396
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  2397
*/
hgs
parents:
diff changeset
  2398
inline TInt RSecuritySvrSession::SetEventAction(const TDesC& aExecutableName, TEventType aEvent, TKernelEventAction aEventAction)
hgs
parents:
diff changeset
  2399
{
hgs
parents:
diff changeset
  2400
	TInt res = KErrNone;
hgs
parents:
diff changeset
  2401
hgs
parents:
diff changeset
  2402
	TIpcArgs args(&aExecutableName,aEvent,aEventAction);
hgs
parents:
diff changeset
  2403
hgs
parents:
diff changeset
  2404
	res = SendReceive(EDebugServSetEventAction, args);
hgs
parents:
diff changeset
  2405
	
hgs
parents:
diff changeset
  2406
	return res;
hgs
parents:
diff changeset
  2407
}
hgs
parents:
diff changeset
  2408
 
hgs
parents:
diff changeset
  2409
/**
hgs
parents:
diff changeset
  2410
Purpose:
hgs
parents:
diff changeset
  2411
Set the requisite actions to be taken when a particular event occurs that is not 
hgs
parents:
diff changeset
  2412
associated with any particular process or executable.
hgs
parents:
diff changeset
  2413
hgs
parents:
diff changeset
  2414
The events are defined in Debug::TEventType and the
hgs
parents:
diff changeset
  2415
actions are defined in Debug::TKernelEventAction.
hgs
parents:
diff changeset
  2416
hgs
parents:
diff changeset
  2417
The default action for all events is EActionIgnore.
hgs
parents:
diff changeset
  2418
hgs
parents:
diff changeset
  2419
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  2420
@pre Debug Agent must have called AttachAll.
hgs
parents:
diff changeset
  2421
hgs
parents:
diff changeset
  2422
@param aEvent A TEventType enum defined in rm_debug_api.h:Debug::TEventType
hgs
parents:
diff changeset
  2423
@param aEventAction Any TKernelEventAction permitted by the DFBlock.
hgs
parents:
diff changeset
  2424
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  2425
*/
hgs
parents:
diff changeset
  2426
inline TInt RSecuritySvrSession::SetEventAction(TEventType aEvent, TKernelEventAction aEventAction)
hgs
parents:
diff changeset
  2427
    {
hgs
parents:
diff changeset
  2428
    TInt res = KErrNone;
hgs
parents:
diff changeset
  2429
hgs
parents:
diff changeset
  2430
    TIpcArgs args(&KStar, aEvent, aEventAction);
hgs
parents:
diff changeset
  2431
hgs
parents:
diff changeset
  2432
    res = SendReceive(EDebugServSetEventAction, args);
hgs
parents:
diff changeset
  2433
hgs
parents:
diff changeset
  2434
    return res;
hgs
parents:
diff changeset
  2435
    }
hgs
parents:
diff changeset
  2436
hgs
parents:
diff changeset
  2437
/**
hgs
parents:
diff changeset
  2438
Returns a global listing corresponding to the type specified as aListId. The structure
hgs
parents:
diff changeset
  2439
of the returned data depends on the value of aListId, see TListId for details.
hgs
parents:
diff changeset
  2440
If aListData is not large enough to contain the listings data then
hgs
parents:
diff changeset
  2441
the necessary buffer size is stored in aDataSize and the function returns
hgs
parents:
diff changeset
  2442
KErrTooBig. In this case the contents of aListData will not contain useful data.
hgs
parents:
diff changeset
  2443
hgs
parents:
diff changeset
  2444
Note that if the aListData buffer was too small to hold the data then the value
hgs
parents:
diff changeset
  2445
returned as aDataSize corresponds to the size of the data at that particular
hgs
parents:
diff changeset
  2446
instance. The size of the data will vary over time, for example the thread list
hgs
parents:
diff changeset
  2447
will increase and decrease in size as threads are created and destroyed, so
hgs
parents:
diff changeset
  2448
re-requesting data with a buffer with max length aDataSize will not necessarily
hgs
parents:
diff changeset
  2449
succeed if a list has increased in size between the two calls.
hgs
parents:
diff changeset
  2450
hgs
parents:
diff changeset
  2451
@see TListId
hgs
parents:
diff changeset
  2452
hgs
parents:
diff changeset
  2453
@param aListId enum from TListId signifying which type of listing to return
hgs
parents:
diff changeset
  2454
@param aListData buffer provided by the debug agent in which data can be returned by the debug system
hgs
parents:
diff changeset
  2455
@param aDataSize if aListData was not large enough to contain the requested
hgs
parents:
diff changeset
  2456
       data then the necessary buffer size is stored in aDataSize. If aListData
hgs
parents:
diff changeset
  2457
       was large enough then the value of aDataSize is the length of aListData
hgs
parents:
diff changeset
  2458
hgs
parents:
diff changeset
  2459
@return KErrNone if data was returned successfully,
hgs
parents:
diff changeset
  2460
        KErrTooBig if aListData is too small to hold the data,
hgs
parents:
diff changeset
  2461
	one of the other system-wide error codes
hgs
parents:
diff changeset
  2462
*/
hgs
parents:
diff changeset
  2463
inline TInt RSecuritySvrSession::GetList(const TListId aListId, TDes8& aListData, TUint32& aDataSize)
hgs
parents:
diff changeset
  2464
	{
hgs
parents:
diff changeset
  2465
	//second argument of ETrue implies a global listing
hgs
parents:
diff changeset
  2466
	TListDetails info(aListId, EScopeGlobal);
hgs
parents:
diff changeset
  2467
	TPtr8 infoBuf((TUint8*)&info, sizeof(TListDetails), sizeof(TListDetails));
hgs
parents:
diff changeset
  2468
	TPtr8 dataSizeBuf((TUint8*)&aDataSize, sizeof(TUint32), sizeof(TUint32));
hgs
parents:
diff changeset
  2469
	TIpcArgs args(&infoBuf, &aListData, &dataSizeBuf);
hgs
parents:
diff changeset
  2470
	return SendReceive(EDebugServGetList, args);
hgs
parents:
diff changeset
  2471
	}
hgs
parents:
diff changeset
  2472
hgs
parents:
diff changeset
  2473
/**
hgs
parents:
diff changeset
  2474
Returns a thread-specific listing corresponding to the type specified as aListId. The structure
hgs
parents:
diff changeset
  2475
of the returned data depends on the value of aListId, see TListId for details.
hgs
parents:
diff changeset
  2476
If aListData is not large enough to contain the listings data then
hgs
parents:
diff changeset
  2477
the necessary buffer size is stored in aDataSize and the function returns
hgs
parents:
diff changeset
  2478
KErrTooBig. In this case the contents of aListData will not contain useful data.
hgs
parents:
diff changeset
  2479
hgs
parents:
diff changeset
  2480
Note that if the aListData buffer is too small to hold the data then the value
hgs
parents:
diff changeset
  2481
returned as aDataSize corresponds to the size of the data at that particular
hgs
parents:
diff changeset
  2482
instant. The size of the data will vary over time, for example the thread list
hgs
parents:
diff changeset
  2483
will increase and decrease in size as threads are created and destroyed, so
hgs
parents:
diff changeset
  2484
re-requesting data with a buffer with max length aDataSize will not necessarily
hgs
parents:
diff changeset
  2485
succeed if a list has increased in size between the two calls.
hgs
parents:
diff changeset
  2486
hgs
parents:
diff changeset
  2487
@see TListId
hgs
parents:
diff changeset
  2488
hgs
parents:
diff changeset
  2489
@param aThreadId thread to return the listing for
hgs
parents:
diff changeset
  2490
@param aListId member of TListId signifying which type of listing to return
hgs
parents:
diff changeset
  2491
@param aListData buffer provided by the debug agent in which data can be returned by the debug system.
hgs
parents:
diff changeset
  2492
@param aDataSize if aListData was not large enough to contain the requested
hgs
parents:
diff changeset
  2493
       data then the necessary buffer size is stored in aDataSize. If aListData
hgs
parents:
diff changeset
  2494
       was large enough then the value of aDataSize is the length of aListData
hgs
parents:
diff changeset
  2495
hgs
parents:
diff changeset
  2496
@return KErrNone if data was returned successfully,
hgs
parents:
diff changeset
  2497
        KErrTooBig if aListData is too small to hold the data,
hgs
parents:
diff changeset
  2498
	one of the other system-wide error codes
hgs
parents:
diff changeset
  2499
*/
hgs
parents:
diff changeset
  2500
inline TInt RSecuritySvrSession::GetList(const TThreadId aThreadId, const TListId aListId, TDes8& aListData, TUint32& aDataSize)
hgs
parents:
diff changeset
  2501
	{
hgs
parents:
diff changeset
  2502
	TListDetails info(aListId, EScopeThreadSpecific, aThreadId.Id());
hgs
parents:
diff changeset
  2503
	TPtr8 infoBuf((TUint8*)&info, sizeof(TListDetails), sizeof(TListDetails));
hgs
parents:
diff changeset
  2504
	TPtr8 dataSizeBuf((TUint8*)&aDataSize, sizeof(TUint32), sizeof(TUint32));
hgs
parents:
diff changeset
  2505
	TIpcArgs args(&infoBuf, &aListData, &dataSizeBuf);
hgs
parents:
diff changeset
  2506
	return SendReceive(EDebugServGetList, args);
hgs
parents:
diff changeset
  2507
	}
hgs
parents:
diff changeset
  2508
hgs
parents:
diff changeset
  2509
/**
hgs
parents:
diff changeset
  2510
Returns a process-specific listing corresponding to the type specified as aListId. The structure
hgs
parents:
diff changeset
  2511
of the returned data depends on the value of aListId, see TListId for details.
hgs
parents:
diff changeset
  2512
If aListData is not large enough to contain the listings data then
hgs
parents:
diff changeset
  2513
the necessary buffer size is stored in aDataSize and the function returns
hgs
parents:
diff changeset
  2514
KErrTooBig. In this case the contents of aListData will not contain useful data.
hgs
parents:
diff changeset
  2515
hgs
parents:
diff changeset
  2516
Note that if the aListData buffer is too small to hold the data then the value
hgs
parents:
diff changeset
  2517
returned as aDataSize corresponds to the size of the data at that particular
hgs
parents:
diff changeset
  2518
instant. The size of the data will vary over time, for example the thread list
hgs
parents:
diff changeset
  2519
will increase and decrease in size as threads are created and destroyed, so
hgs
parents:
diff changeset
  2520
re-requesting data with a buffer with max length aDataSize will not necessarily
hgs
parents:
diff changeset
  2521
succeed if a list has increased in size between the two calls.
hgs
parents:
diff changeset
  2522
hgs
parents:
diff changeset
  2523
@see TListId
hgs
parents:
diff changeset
  2524
hgs
parents:
diff changeset
  2525
@param aProcessId process to return the listing for
hgs
parents:
diff changeset
  2526
@param aListId member of TListId signifying which type of listing to return
hgs
parents:
diff changeset
  2527
@param aListData buffer provided by the debug agent in which data can be returned by the debug system.
hgs
parents:
diff changeset
  2528
@param aDataSize if aListData was not large enough to contain the requested
hgs
parents:
diff changeset
  2529
       data then the necessary buffer size is stored in aDataSize. If aListData
hgs
parents:
diff changeset
  2530
       was large enough then the value of aDataSize is the length of aListData
hgs
parents:
diff changeset
  2531
hgs
parents:
diff changeset
  2532
@return KErrNone if data was returned successfully,
hgs
parents:
diff changeset
  2533
        KErrTooBig if aListData is too small to hold the data,
hgs
parents:
diff changeset
  2534
	one of the other system-wide error codes
hgs
parents:
diff changeset
  2535
*/
hgs
parents:
diff changeset
  2536
inline TInt RSecuritySvrSession::GetList(const TProcessId aProcessId, const TListId aListId, TDes8& aListData, TUint32& aDataSize)
hgs
parents:
diff changeset
  2537
	{
hgs
parents:
diff changeset
  2538
	TListDetails info(aListId, EScopeProcessSpecific, aProcessId.Id());
hgs
parents:
diff changeset
  2539
	TPtr8 infoBuf((TUint8*)&info, sizeof(TListDetails), sizeof(TListDetails));
hgs
parents:
diff changeset
  2540
	TPtr8 dataSizeBuf((TUint8*)&aDataSize, sizeof(TUint32), sizeof(TUint32));
hgs
parents:
diff changeset
  2541
	TIpcArgs args(&infoBuf, &aListData, &dataSizeBuf);
hgs
parents:
diff changeset
  2542
	return SendReceive(EDebugServGetList, args);
hgs
parents:
diff changeset
  2543
	}
hgs
parents:
diff changeset
  2544
hgs
parents:
diff changeset
  2545
/**
hgs
parents:
diff changeset
  2546
Purpose:
hgs
parents:
diff changeset
  2547
Step one or more CPU instructions in the specified thread from the current PC.
hgs
parents:
diff changeset
  2548
hgs
parents:
diff changeset
  2549
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  2550
@pre Debug Agent must be attached to a process.
hgs
parents:
diff changeset
  2551
@pre The thread being stepped must be suspended by the Debug Agent.
hgs
parents:
diff changeset
  2552
hgs
parents:
diff changeset
  2553
@param aThreadId the id of the thread which is to be stepped
hgs
parents:
diff changeset
  2554
@param aNumSteps how many machine-level instructions are to be stepped.
hgs
parents:
diff changeset
  2555
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  2556
*/
hgs
parents:
diff changeset
  2557
inline TInt RSecuritySvrSession::Step(const TThreadId aThreadId, const TUint32 aNumSteps)
hgs
parents:
diff changeset
  2558
	{
hgs
parents:
diff changeset
  2559
	TPckgBuf<TThreadId> threadIdPckg(aThreadId);
hgs
parents:
diff changeset
  2560
	TInt res = KErrNone;
hgs
parents:
diff changeset
  2561
hgs
parents:
diff changeset
  2562
	TIpcArgs args(&threadIdPckg,aNumSteps);
hgs
parents:
diff changeset
  2563
hgs
parents:
diff changeset
  2564
	res = SendReceive(EDebugServStep,args);
hgs
parents:
diff changeset
  2565
hgs
parents:
diff changeset
  2566
	return res;
hgs
parents:
diff changeset
  2567
	}
hgs
parents:
diff changeset
  2568
hgs
parents:
diff changeset
  2569
/**
hgs
parents:
diff changeset
  2570
Purpose:
hgs
parents:
diff changeset
  2571
Kill the specified process with the supplied reason. Reason codes are equivalent
hgs
parents:
diff changeset
  2572
to those in RProcess.Kill().
hgs
parents:
diff changeset
  2573
hgs
parents:
diff changeset
  2574
@pre Debug Agent must be connected to the debug security server
hgs
parents:
diff changeset
  2575
@pre Debug Agent must be attached to a process.
hgs
parents:
diff changeset
  2576
hgs
parents:
diff changeset
  2577
@param aProcessId the id of the process which is to be killed
hgs
parents:
diff changeset
  2578
@param aReason The reason to be associated with the ending of this process
hgs
parents:
diff changeset
  2579
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  2580
*/
hgs
parents:
diff changeset
  2581
inline TInt RSecuritySvrSession::KillProcess(const TProcessId aProcessId, const TInt aReason)
hgs
parents:
diff changeset
  2582
	{
hgs
parents:
diff changeset
  2583
	TPckgBuf<TProcessId> processIdPckg(aProcessId);
hgs
parents:
diff changeset
  2584
	TInt res = KErrNone;
hgs
parents:
diff changeset
  2585
hgs
parents:
diff changeset
  2586
	TIpcArgs args(&processIdPckg,aReason);
hgs
parents:
diff changeset
  2587
hgs
parents:
diff changeset
  2588
	res = SendReceive(EDebugServKillProcess,args);
hgs
parents:
diff changeset
  2589
hgs
parents:
diff changeset
  2590
	return res;
hgs
parents:
diff changeset
  2591
	}
hgs
parents:
diff changeset
  2592
hgs
parents:
diff changeset
  2593
/**
hgs
parents:
diff changeset
  2594
Purpose
hgs
parents:
diff changeset
  2595
Method to read data from the crash flash
hgs
parents:
diff changeset
  2596
hgs
parents:
diff changeset
  2597
@pre aData buffer to retrieve the data from the crash flash
hgs
parents:
diff changeset
  2598
@pre aDataSize Size of the data
hgs
parents:
diff changeset
  2599
hgs
parents:
diff changeset
  2600
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  2601
*/
hgs
parents:
diff changeset
  2602
inline TInt RSecuritySvrSession::ReadCrashLog(const TUint32 aPos, TDes8& aData, const TUint32 aDataSize)
hgs
parents:
diff changeset
  2603
	{		
hgs
parents:
diff changeset
  2604
		TIpcArgs args(aPos, &aData, aDataSize);		
hgs
parents:
diff changeset
  2605
		TInt res = SendReceive(EDebugServReadCrashFlash,args);
hgs
parents:
diff changeset
  2606
		return res;
hgs
parents:
diff changeset
  2607
	}
hgs
parents:
diff changeset
  2608
hgs
parents:
diff changeset
  2609
/**
hgs
parents:
diff changeset
  2610
 * @internalTechnology
hgs
parents:
diff changeset
  2611
 * @prototype
hgs
parents:
diff changeset
  2612
 * 
hgs
parents:
diff changeset
  2613
Purpose:
hgs
parents:
diff changeset
  2614
Method to write the crash flash config
hgs
parents:
diff changeset
  2615
hgs
parents:
diff changeset
  2616
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  2617
*/
hgs
parents:
diff changeset
  2618
inline TInt RSecuritySvrSession::WriteCrashConfig(const TUint32 aPos, const TDesC8& aBuffer, TUint32& aSize)
hgs
parents:
diff changeset
  2619
	{
hgs
parents:
diff changeset
  2620
		TPtr8 sizePtr((TUint8*)&aSize,4, 4);
hgs
parents:
diff changeset
  2621
		TIpcArgs args(aPos, &aBuffer, &sizePtr);
hgs
parents:
diff changeset
  2622
		TInt res = SendReceive(EDebugServWriteCrashFlash, args);
hgs
parents:
diff changeset
  2623
		return res;
hgs
parents:
diff changeset
  2624
	}
hgs
parents:
diff changeset
  2625
/**
hgs
parents:
diff changeset
  2626
Purpose:
hgs
parents:
diff changeset
  2627
Method to erase a block in the crash flash
hgs
parents:
diff changeset
  2628
hgs
parents:
diff changeset
  2629
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  2630
*/
hgs
parents:
diff changeset
  2631
inline TInt RSecuritySvrSession::EraseCrashLog(const TUint32 aPos, const TUint32 aBlockNumber)
hgs
parents:
diff changeset
  2632
	{	
hgs
parents:
diff changeset
  2633
		TIpcArgs args(aPos, aBlockNumber);
hgs
parents:
diff changeset
  2634
		TInt res = SendReceive(EDebugServEraseCrashFlash, args);
hgs
parents:
diff changeset
  2635
		return res;
hgs
parents:
diff changeset
  2636
	}
hgs
parents:
diff changeset
  2637
hgs
parents:
diff changeset
  2638
/**
hgs
parents:
diff changeset
  2639
Purpose:
hgs
parents:
diff changeset
  2640
Method to erase entire flash partition
hgs
parents:
diff changeset
  2641
hgs
parents:
diff changeset
  2642
@return Any error which may be returned by RSessionBase::SendReceive()
hgs
parents:
diff changeset
  2643
*/
hgs
parents:
diff changeset
  2644
inline TInt RSecuritySvrSession::EraseCrashFlashPartition()
hgs
parents:
diff changeset
  2645
	{
hgs
parents:
diff changeset
  2646
	TInt res = SendReceive(EDebugServEraseEntireCrashFlash);
hgs
parents:
diff changeset
  2647
	return res;
hgs
parents:
diff changeset
  2648
	}
hgs
parents:
diff changeset
  2649
hgs
parents:
diff changeset
  2650
} // end of Debug namespace declaration
hgs
parents:
diff changeset
  2651
hgs
parents:
diff changeset
  2652
#endif // #ifndef __KERNEL_MODE__
hgs
parents:
diff changeset
  2653
hgs
parents:
diff changeset
  2654
#endif // RM_DEBUG_API_H
hgs
parents:
diff changeset
  2655
hgs
parents:
diff changeset
  2656
hgs
parents:
diff changeset
  2657