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