epoc32/include/tools/coredump/crashdata.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@4
     2
// All rights reserved.
williamr@4
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@4
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@4
     7
//
williamr@4
     8
// Initial Contributors:
williamr@4
     9
// Nokia Corporation - initial contribution.
williamr@4
    10
//
williamr@4
    11
// Contributors:
williamr@4
    12
//
williamr@4
    13
// Description:
williamr@4
    14
// Common Crash Data definitions used between the core dump server, 
williamr@4
    15
// formatters and user interfaces
williamr@4
    16
//
williamr@4
    17
williamr@4
    18
williamr@4
    19
williamr@4
    20
/**
williamr@4
    21
 @file
williamr@4
    22
 @publishedPartner 
williamr@4
    23
 @released
williamr@4
    24
 @see CCrashDataSource
williamr@4
    25
 @see RCoreDumpSession
williamr@4
    26
*/
williamr@4
    27
williamr@4
    28
#ifndef CRASH_DATA_H
williamr@4
    29
#define CRASH_DATA_H
williamr@4
    30
williamr@4
    31
#include <e32std.h>
williamr@4
    32
#include <e32const.h>
williamr@4
    33
#include <rm_debug_api.h>
williamr@4
    34
williamr@4
    35
using namespace Debug;
williamr@4
    36
williamr@4
    37
/**
williamr@4
    38
Crash event information. This is given to a formatter when a crash occurs.
williamr@4
    39
@see CCoreDumpFormatter::CrashEventL()
williamr@4
    40
*/
williamr@4
    41
struct TCrashInfo
williamr@4
    42
{
williamr@4
    43
williamr@4
    44
	/** 
williamr@4
    45
	Type of crash event
williamr@4
    46
	*/
williamr@4
    47
	enum TCrashType 
williamr@4
    48
	{ 
williamr@4
    49
	/** ECrashException is raised when a hardware exception occurs */
williamr@4
    50
	ECrashException, 
williamr@4
    51
williamr@4
    52
	/** ECrashKill is raised when a thread is killed or panicked */
williamr@4
    53
	ECrashKill,
williamr@4
    54
williamr@4
    55
    /** 
williamr@4
    56
	@internalTechnology
williamr@4
    57
	Guard
williamr@4
    58
	*/
williamr@4
    59
    ECrashLast
williamr@4
    60
	};
williamr@4
    61
williamr@4
    62
    /** Type of crash
williamr@4
    63
	@see  TCrashType 
williamr@4
    64
	*/
williamr@4
    65
	TCrashType		iType; 
williamr@4
    66
williamr@4
    67
	/** Exception type or exit type. 
williamr@4
    68
	If crash type iType is ECrashException, this is set to e32const.h::TExcType 
williamr@4
    69
	If crash type iType is ECrashKill, this is set to e32const.h::TExitType.
williamr@4
    70
	*/
williamr@4
    71
    TUint32			iExcNumber;
williamr@4
    72
williamr@4
    73
	/** This is only set when iType is ECrashKill. Kernel panic code. */
williamr@4
    74
	TInt			iReason; 
williamr@4
    75
williamr@4
    76
	/** Crash category description. Valid when crash type is ECrashKill */
williamr@4
    77
    TBuf<KMaxExitCategoryName> iCategory; 
williamr@4
    78
williamr@4
    79
	/** Crashed thread id */
williamr@4
    80
	TUint64			iTid;
williamr@4
    81
williamr@4
    82
	/** Crashed process id */
williamr@4
    83
	TUint64			iPid;
williamr@4
    84
williamr@4
    85
	/** Crash time */
williamr@4
    86
    TUint64			iTime; 
williamr@4
    87
williamr@4
    88
	/** Register context at time of crash. 
williamr@4
    89
	@see TRmdArmExcInfo
williamr@4
    90
	@see Debug::TRmdArmExcInfo
williamr@4
    91
	*/
williamr@4
    92
    TRmdArmExcInfo  iContext;
williamr@4
    93
williamr@4
    94
    /** Reserved for future.
williamr@4
    95
	@internalTechnology */
williamr@4
    96
    TUint32 iSpare1;
williamr@4
    97
	/** @internalTechnology */
williamr@4
    98
    TUint32 iSpare2;
williamr@4
    99
	/** @internalTechnology */
williamr@4
   100
    TUint32 iSpare3;
williamr@4
   101
};
williamr@4
   102
williamr@4
   103
/**
williamr@4
   104
Code segment information. 
williamr@4
   105
@see CServerCrashDataSource::GetCodeSegmentsL()
williamr@4
   106
*/
williamr@4
   107
struct TCodeSegInfo
williamr@4
   108
{
williamr@4
   109
williamr@4
   110
	/**
williamr@4
   111
	Name of code segment. 
williamr@4
   112
	*/
williamr@4
   113
    TBufC<KMaxPath> iName;
williamr@4
   114
williamr@4
   115
	/**
williamr@4
   116
	Set to trie to indicates that this executable is executing in place.
williamr@4
   117
	*/
williamr@4
   118
    TBool		iXIP;
williamr@4
   119
williamr@4
   120
williamr@4
   121
	/**
williamr@4
   122
	Type of the code segment. 
williamr@4
   123
	@see Debug::TCodeSegType
williamr@4
   124
	@see TCodeSegType
williamr@4
   125
	*/
williamr@4
   126
    TCodeSegType iType;
williamr@4
   127
williamr@4
   128
	/**	Code size in bytes	*/
williamr@4
   129
    TUint32		iCodeSize;
williamr@4
   130
williamr@4
   131
	/**	Code segment run address. If code segment is XIP then 
williamr@4
   132
	this is the same as iCodeLoadAddr */
williamr@4
   133
    TLinAddr	iCodeRunAddr;
williamr@4
   134
williamr@4
   135
	/**	Address where code segement was loaded from */
williamr@4
   136
    TLinAddr	iCodeLoadAddr;
williamr@4
   137
williamr@4
   138
	/**	Size on bytes of the read only data */
williamr@4
   139
    TUint32		iRoDataSize;
williamr@4
   140
williamr@4
   141
	/**	Address of read only data at run time. If code segment is XIP then 
williamr@4
   142
	this is the same as iRoDataLoadAddr */
williamr@4
   143
    TLinAddr	iRoDataRunAddr;
williamr@4
   144
williamr@4
   145
	/**	Address where read only data was loaded from */
williamr@4
   146
    TLinAddr	iRoDataLoadAddr;
williamr@4
   147
williamr@4
   148
	/** Writable data size in bytes. Combined .bss and .data sections  */
williamr@4
   149
    TUint32		iDataSize;
williamr@4
   150
williamr@4
   151
	/** Address of writable data at run time */
williamr@4
   152
    TLinAddr	iDataRunAddr;
williamr@4
   153
williamr@4
   154
	/** Build time address of initialised writable data */
williamr@4
   155
    TLinAddr	iDataLoadAddr;
williamr@4
   156
williamr@4
   157
    /** reserved for future 
williamr@4
   158
	@internalTechnology */
williamr@4
   159
    TUint32 iSpare1;
williamr@4
   160
	/** @internalTechnology */
williamr@4
   161
    TUint32 iSpare2;
williamr@4
   162
	/** @internalTechnology */
williamr@4
   163
    TUint32 iSpare3;
williamr@4
   164
};
williamr@4
   165
williamr@4
   166
/**
williamr@4
   167
Pointer array of TCodeSegInfo objects.
williamr@4
   168
@see TCodeSegInfo
williamr@4
   169
*/
williamr@4
   170
typedef RPointerArray<TCodeSegInfo> RCodeSegPointerList;
williamr@4
   171
williamr@4
   172
williamr@4
   173
/**
williamr@4
   174
Detailed information about a register. 
williamr@4
   175
The Symbian ELF format defines the register identification format.
williamr@4
   176
The Debug Security Server implements this format.
williamr@4
   177
@see CCrashDataSource::ReadRegistersL()
williamr@4
   178
*/
williamr@4
   179
class TRegisterData
williamr@4
   180
{
williamr@4
   181
williamr@4
   182
public: 
williamr@4
   183
williamr@4
   184
	IMPORT_C    TUint16		GetId()   const;
williamr@4
   185
	IMPORT_C    TUint16		GetSubId() const;
williamr@4
   186
	IMPORT_C    TUint8		GetSize() const;
williamr@4
   187
	IMPORT_C    TUint8		GetClass() const;
williamr@4
   188
	IMPORT_C    TBool		SameRegister( const TRegisterData & other ) const;
williamr@4
   189
	
williamr@4
   190
	IMPORT_C    TUint8		GetContent8()  const;
williamr@4
   191
	IMPORT_C    TUint16		GetContent16() const;
williamr@4
   192
	IMPORT_C    TUint32		GetContent32() const;
williamr@4
   193
	IMPORT_C    TUint64		GetContent64() const;
williamr@4
   194
williamr@4
   195
	IMPORT_C    void		SetContent8(  const TUint8 aVal );
williamr@4
   196
	IMPORT_C    void		SetContent16( const TUint16 aVal );
williamr@4
   197
	IMPORT_C    void		SetContent32( const TUint32 aVal );
williamr@4
   198
	IMPORT_C    void		SetContent64( const TUint64 aVal );
williamr@4
   199
	IMPORT_C    void		SetContent( const TUint aVal );
williamr@4
   200
williamr@4
   201
	IMPORT_C    void		SetContent( const TRegisterData & other );
williamr@4
   202
williamr@4
   203
	IMPORT_C    TBool		Available( ) const;
williamr@4
   204
	IMPORT_C    void		SetAvailable( const TBool aAvailable );
williamr@4
   205
williamr@4
   206
williamr@4
   207
	/**
williamr@4
   208
	This is the same as symbianelfdefs.h ESYM_REGREP. 
williamr@4
   209
	@see ESYM_REGREP
williamr@4
   210
	*/
williamr@4
   211
	typedef enum TRegisterRepresentation
williamr@4
   212
		{
williamr@4
   213
		/** 8 Bit register */
williamr@4
   214
		ERegRepr8	= 0,	
williamr@4
   215
		/** 16 Bit register */
williamr@4
   216
		ERegRepr16	= 1,
williamr@4
   217
		/** 32 Bit register */
williamr@4
   218
		ERegRepr32	= 2,
williamr@4
   219
		/** 64 Bit register */
williamr@4
   220
		ERegRepr64	= 3,
williamr@4
   221
		/** 
williamr@4
   222
		@internalTechnology
williamr@4
   223
		*/
williamr@4
   224
		ERegReprLast
williamr@4
   225
		};
williamr@4
   226
    
williamr@4
   227
	/**
williamr@4
   228
	This is the same as symbianelfdefs.h ESYM_REGCLASS. 
williamr@4
   229
	@see ESYM_REGCLASS
williamr@4
   230
	*/
williamr@4
   231
	typedef enum TRegisterClass
williamr@4
   232
		{
williamr@4
   233
		/** A Core register */
williamr@4
   234
		ERegClassCore	= 0,	
williamr@4
   235
		/** A Co Processor register */
williamr@4
   236
		ERegClassCoPro	= 1, 
williamr@4
   237
		/** 
williamr@4
   238
		@internalTechnology
williamr@4
   239
		*/
williamr@4
   240
		ERegClassLast
williamr@4
   241
		};
williamr@4
   242
williamr@4
   243
williamr@4
   244
	/**
williamr@4
   245
	Register identifier
williamr@4
   246
	*/
williamr@4
   247
	union 
williamr@4
   248
        {
williamr@4
   249
	    /** Used when calling the Debug Security Server */
williamr@4
   250
        TRegisterInfo regInfo;
williamr@4
   251
williamr@4
   252
        /** Same as Sym32_reginfod::rd_id
williamr@4
   253
	    if rid_class == ESYM_REG_CORE 
williamr@4
   254
	      rd_id is one of rm_debug_api.h::TFunctionalityRegister
williamr@4
   255
	    else 
williamr@4
   256
	      rd_id is CoProcessor number, eg 15 for ARM CP15 
williamr@4
   257
williamr@4
   258
		@see Sym32_reginfod::rd_id
williamr@4
   259
		*/
williamr@4
   260
		TUint16		iId;
williamr@4
   261
        };
williamr@4
   262
williamr@4
   263
	/** Same as Sym32_reginfod::rid_class
williamr@4
   264
		Type of register ESYM_REG_CLASS :{ ESYM_REG_CORE = 0, ESYM_REG_COPRO = 1 } 
williamr@4
   265
	@see Sym32_reginfod::rid_class
williamr@4
   266
	*/
williamr@4
   267
	TUint8		iRegClass;
williamr@4
   268
williamr@4
   269
	/** Same as Sym32_reginfod::rd_sub_id		
williamr@4
   270
		Only used if rid_clas == ESYM_REG_COPRO
williamr@4
   271
williamr@4
   272
  	   Bitfield is made up of the following fields:
williamr@4
   273
         bits 13 to 11  : OpCode2
williamr@4
   274
         bits 10 to 8   : OpCode1
williamr@4
   275
         bits 7  to 4   : CRn
williamr@4
   276
         bits 3  to 0   : CRm 
williamr@4
   277
williamr@4
   278
	@see Sym32_reginfod::rd_sub_id		
williamr@4
   279
	*/
williamr@4
   280
	TUint16		iSubId;
williamr@4
   281
williamr@4
   282
	/** Same as Sym32_reginfod::rd_repre
williamr@4
   283
		{ ESYM_REG_8 == 0, ESYM_REG_16 == 1, ESYM_REG_32 == 2, ESYM_REG_64 == 3 }
williamr@4
   284
		Determines which version of GetContent*() to use 
williamr@4
   285
	@see Sym32_reginfod::rd_repre
williamr@4
   286
	*/
williamr@4
   287
	TUint8		iSize;
williamr@4
   288
williamr@4
   289
williamr@4
   290
	/** True if the content of this register was succesfully obtained from 
williamr@4
   291
	the target */
williamr@4
   292
	TBool       iAvailable;
williamr@4
   293
williamr@4
   294
	/** Register value */
williamr@4
   295
	union
williamr@4
   296
	{
williamr@4
   297
		/** Value of an 8 bit register */
williamr@4
   298
		TUint8		iValue8;
williamr@4
   299
williamr@4
   300
		/** Value of a 16 bit register */
williamr@4
   301
		TUint16		iValue16;
williamr@4
   302
williamr@4
   303
		/** Value of a 32 bit register */
williamr@4
   304
		TUint32		iValue32;
williamr@4
   305
williamr@4
   306
		/** Value of a 64 bit register */
williamr@4
   307
		TUint64		iValue64;
williamr@4
   308
	};
williamr@4
   309
williamr@4
   310
	/** Reserved for future use
williamr@4
   311
	@internalTechnology */
williamr@4
   312
	TUint32 iSpare1;
williamr@4
   313
williamr@4
   314
	/** @internalTechnology */
williamr@4
   315
	TUint32 iSpare2;
williamr@4
   316
williamr@4
   317
	/** @internalTechnology */
williamr@4
   318
	TUint32 iSpare3;
williamr@4
   319
};
williamr@4
   320
williamr@4
   321
williamr@4
   322
/**
williamr@4
   323
@publishedPartner 
williamr@4
   324
@released
williamr@4
   325
williamr@4
   326
List of TRegisterData objects.
williamr@4
   327
@see TRegisterData
williamr@4
   328
@see RArray
williamr@4
   329
*/
williamr@4
   330
typedef RArray<TRegisterData> RRegisterList;
williamr@4
   331
williamr@4
   332
williamr@4
   333
#endif // CRASH_DATA_H
williamr@4
   334
williamr@4
   335