diff -r ca8a1b6995f6 -r 52e343bb8f80 debugsrv/runmodedebug/rmdriver/src/d_debug_functionality.cpp --- a/debugsrv/runmodedebug/rmdriver/src/d_debug_functionality.cpp Tue Aug 31 16:45:49 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,426 +0,0 @@ -// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of the License "Eclipse Public License v1.0" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// Defines the DebugFunctionality class. This is responsible for -// providing configuration data needed by a host debugger to be able -// to correctly use the functionality provided by the run-mode debug subsystem. -// - -#include -#include -#include -#include -#include -#include -#include -#include "d_rmd_breakpoints.h" -#include "rm_debug_kerneldriver.h" -#include "d_debug_functionality.h" - -using namespace Debug; - -// Core -const TTag DebugFunctionalityCoreInfo[] = - { - {ECoreEvents,ETagTypeBoolean,0,ETrue}, - {ECoreStartStop,ETagTypeBoolean,0,ETrue}, - {ECoreMemory,ETagTypeBoolean,0,ETrue}, - {ECoreRegister,ETagTypeBoolean,0,ETrue}, - {ECoreBreakpoint,ETagTypeBoolean,0,ETrue}, - {ECoreStepping,ETagTypeBoolean,0,ETrue}, - {ECoreLists,ETagTypeBoolean,0,ETrue}, - {ECoreLogging,ETagTypeBoolean,0,EFalse}, - {ECoreHardware,ETagTypeBoolean,0,EFalse}, - {ECoreApiConstants,ETagTypeBoolean,0,ETrue}, - {ECoreKillObjects,ETagTypeBoolean,0,ETrue}, - {ECoreSecurity,ETagTypeBoolean,0,ETrue}, - }; - -const TSubBlock DebugFunctionalityCore[] = - { - ETagHeaderIdCore,ECoreLast, - (TTag*)DebugFunctionalityCoreInfo - }; - -// Memory -const TTag DebugFunctionalityMemoryInfo[] = - { - {EMemoryRead,ETagTypeBoolean,0,ETrue}, - {EMemoryWrite,ETagTypeBoolean,0,ETrue}, - {EMemoryAccess64,ETagTypeBoolean,0,EFalse}, - {EMemoryAccess32,ETagTypeBoolean,0,ETrue}, - {EMemoryAccess16,ETagTypeBoolean,0,EFalse}, - {EMemoryAccess8,ETagTypeBoolean,0,EFalse}, - {EMemoryBE8,ETagTypeBoolean,0,EFalse}, - {EMemoryBE32,ETagTypeBoolean,0,EFalse}, - {EMemoryLE8,ETagTypeBoolean,0,ETrue}, - {EMemoryMaxBlockSize,ETagTypeTUint32,0,16 * KKilo /* 16Kbytes */} // binaryMax size of memory requests in bytes - }; - -const TSubBlock DebugFunctionalityMemory[]= - { - ETagHeaderIdMemory,EMemoryLast, - (TTag*)DebugFunctionalityMemoryInfo - }; - -// Kill Objects -const TTag DebugFunctionalityKillObjectsInfo[] = - { - {EFunctionalityKillThread,ETagTypeBoolean,0,EFalse}, - {EFunctionalityKillProcess,ETagTypeBoolean,0,ETrue} - }; - -const TSubBlock DebugFunctionalityKillObjects[]= - { - ETagHeaderIdKillObjects,EFunctionalityKillObjectLast, - (TTag*)DebugFunctionalityKillObjectsInfo - }; - -// Core Registers -const TTag DebugFunctionalityRegistersCoreInfo[] = - { - {ERegisterR0,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR1,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR2,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR3,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR4,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR5,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR6,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR7,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR8,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR9,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR10,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR11,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR12,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR13,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR14,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR15,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterCpsr,ETagTypeEnum, 4,EAccessReadWrite}, - {ERegisterR13Svc,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR14Svc,ETagTypeEnum, 4,EAccessNone}, - {ERegisterSpsrSvc,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR13Abt,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR14Abt,ETagTypeEnum, 4,EAccessNone}, - {ERegisterSpsrAbt,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR13Und,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR14Und,ETagTypeEnum, 4,EAccessNone}, - {ERegisterSpsrUnd,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR13Irq,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR14Irq,ETagTypeEnum, 4,EAccessNone}, - {ERegisterSpsrIrq,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR8Fiq,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR9Fiq,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR10Fiq,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR11Fiq,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR12Fiq,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR13Fiq,ETagTypeEnum, 4,EAccessNone}, - {ERegisterR14Fiq,ETagTypeEnum, 4,EAccessNone}, - {ERegisterSpsrFiq, ETagTypeEnum, 4,EAccessNone} - }; - -const TSubBlock DebugFunctionalityRegistersCore[] = - { - ETagHeaderIdRegistersCore, ERegisterLast, - (TTag*)DebugFunctionalityRegistersCoreInfo - }; - -// Co-processor registers -const TTag DebugFunctionalityRegistersCoProInfo[]= - { - //this is the DACR register - {0x00300f01, ETagTypeTUint32, 4, EAccessReadWrite} - }; - -const TSubBlock DebugFunctionalityRegistersCoPro[]= - { - ETagHeaderIdCoProRegisters,1, - (TTag*)DebugFunctionalityRegistersCoProInfo - }; - -// Breakpoints -const TTag DebugFunctionalityBreakpointsInfo[]= - { - {EBreakpointThread,ETagTypeBoolean,0,ETrue}, - {EBreakpointProcess,ETagTypeBoolean,0,ETrue}, - {EBreakpointSystem,ETagTypeBoolean,0,EFalse}, - {EBreakpointArm,ETagTypeBoolean,0,ETrue}, - {EBreakpointThumb,ETagTypeBoolean,0,ETrue}, - {EBreakpointT2EE,ETagTypeBoolean,0,ETrue}, - {EBreakpointArmInst,ETagTypeBoolean,0,EFalse}, - {EBreakpointThumbInst,ETagTypeBoolean,0,EFalse}, - {EBreakpointT2EEInst,ETagTypeBoolean,0,ETrue}, - {EBreakpointSetArmInst,ETagTypeBoolean,0,EFalse}, - {EBreakpointSetThumbInst,ETagTypeBoolean,0,EFalse}, - {EBreakpointSetT2EEInst,ETagTypeBoolean,0,ETrue} - }; - -const TSubBlock DebugFunctionalityBreakpoints[] = - { - ETagHeaderIdBreakpoints, EBreakpointLast, - (TTag*)DebugFunctionalityBreakpointsInfo - }; - -// Stepping -const TTag DebugFunctionalitySteppingInfo[]= - { - {EStep,ETagTypeBoolean,0,ETrue} - }; - -const TSubBlock DebugFunctionalityStepping[] = - { - ETagHeaderIdStepping, EStepLast, - (TTag*)DebugFunctionalitySteppingInfo - }; - -// Execution Control -const TTag DebugFunctionalityExecutionInfo[]= - { - {EExecThreadSuspendResume,ETagTypeBoolean,0,ETrue}, - {EExecProcessSuspendResume,ETagTypeBoolean,0,EFalse}, - {EExecSystemSuspendResume,ETagTypeBoolean,0,EFalse}, - }; - -const TSubBlock DebugFunctionalityExecution[]= - { - ETagHeaderIdExecution, EExecLast, - (TTag*)DebugFunctionalityExecutionInfo - }; - -// Events -const TTag DebugFunctionalityEventsInfo[]= - { - {EEventsBreakPoint,ETagTypeEnum,0,EActionSuspend}, - {EEventsProcessBreakPoint,ETagTypeEnum,0,EActionSuspend}, - {EEventsSwExc,ETagTypeEnum,0,EActionSuspend}, - {EEventsHwExc,ETagTypeEnum,0,EActionSuspend}, - {EEventsKillThread,ETagTypeEnum,0,EActionContinue}, - {EEventsAddLibrary,ETagTypeEnum,0,EActionSuspend}, - {EEventsRemoveLibrary,ETagTypeEnum,0,EActionSuspend}, - {EEventsUserTrace,ETagTypeEnum,0,EActionSuspend}, - {EEventsStartThread,ETagTypeEnum,0,EActionSuspend}, - {EEventsBufferFull,ETagTypeEnum,0,EActionContinue}, - {EEventsUnknown,ETagTypeEnum,0,EActionContinue}, - {EEventsUserTracesLost, ETagTypeEnum, 0, EActionContinue}, - {EEventsAddProcess,ETagTypeEnum,0,EActionContinue}, - {EEventsRemoveProcess,ETagTypeEnum,0,EActionContinue} - }; - -const TSubBlock DebugFunctionalityEvents[] = - { - ETagHeaderIdEvents, EEventsLast, - (TTag*)DebugFunctionalityEventsInfo - }; - -// API Constants -const TTag DebugFunctionalityApiConstantsInfo[]= - { - {EApiConstantsTEventInfoSize,ETagTypeTUint32,0,sizeof(TEventInfo)}, - }; - -const TSubBlock DebugFunctionalityApiConstants[] = - { - ETagHeaderIdApiConstants, EApiConstantsLast, - (TTag*)DebugFunctionalityApiConstantsInfo - }; - -// Listings -const TTag DebugFunctionalityListInfo[] = - { - {EProcesses,ETagTypeBitField,0,EScopeGlobal}, - {EThreads,ETagTypeBitField,0,EScopeGlobal|EScopeProcessSpecific|EScopeThreadSpecific}, - {ECodeSegs,ETagTypeBitField,0,EScopeGlobal|EScopeProcessSpecific|EScopeThreadSpecific}, - {EXipLibraries,ETagTypeBitField,0,EScopeGlobal}, - {EExecutables,ETagTypeBitField,0,EScopeGlobal}, - {ELogicalDevices,ETagTypeBitField,0,EScopeNone}, - {EMutexes,ETagTypeBitField,0,EScopeNone}, - {EServers,ETagTypeBitField,0,EScopeNone}, - {ESessions,ETagTypeBitField,0,EScopeNone}, - {ESemaphores,ETagTypeBitField,0,EScopeNone}, - {EChunks,ETagTypeBitField,0,EScopeNone}, - {EBreakpoints,ETagTypeBitField,0,EScopeNone}, - {ESetBreak,ETagTypeBitField,0,EScopeNone}, - {ERemoveBreak,ETagTypeBitField,0,EScopeNone}, - {EModifyBreak,ETagTypeBitField,0,EScopeNone}, - }; - -const TSubBlock DebugFunctionalityList[] = - { - ETagHeaderList, EListLast, - (TTag*)DebugFunctionalityListInfo - }; - -// Security -const TTag DebugFunctionalitySecurityInfo[]= - { - {ESecurityOEMDebugToken,ETagTypeBoolean,0,ETrue} - }; - -const TSubBlock DebugFunctionalitySecurity[] = - { - ETagHeaderIdSecurity, ESecurityLast, - (TTag*)DebugFunctionalitySecurityInfo - }; - -TUint32 TDebugFunctionality::GetDebugFunctionalityBufSize(void) - { - TUint32 df_size = 0; - - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityCore); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityMemory); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityRegistersCore); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityRegistersCoPro); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityBreakpoints); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityStepping); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityExecution); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityEvents); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityApiConstants); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityList); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalityKillObjects); - df_size += ComputeBlockSize((const TSubBlock&)DebugFunctionalitySecurity); - - return df_size; - } - -TBool TDebugFunctionality::GetDebugFunctionality(TDes8& aDFBlock) - { - if (aDFBlock.MaxLength() < GetDebugFunctionalityBufSize() ) - { - // Insufficient space to contain the debug functionality block - return EFalse; - } - - AppendBlock((const TSubBlock&)DebugFunctionalityCore,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalityMemory,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalityRegistersCore,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalityRegistersCoPro,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalityBreakpoints,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalityStepping,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalityExecution,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalityEvents,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalityApiConstants,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalityList,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalityKillObjects,aDFBlock); - AppendBlock((const TSubBlock&)DebugFunctionalitySecurity,aDFBlock); - - return ETrue; - } - -/** - * Get the register information associated with aRegisterInfo. If aRegisterInfo is - * an unsupported register then an entry of the form: - * {aRegisterInfo, x, 0, EAccessUnknown} - * will be returned where x is an arbitrary value. - * - * @param aRegisterInfo register id information - * @param aTag The functionality information for this register. - * @return One of the system wide error codes - */ -TInt TDebugFunctionality::GetRegister(const TRegisterInfo aRegisterInfo, TTag& aTag) - { - if(Register::IsCoreReg(aRegisterInfo)) - { - for(TInt i=0; i