--- a/kernel/eka/debug/crashMonitor/src/scmdatatypes.cpp Wed Oct 20 13:58:28 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1618 +0,0 @@
-// Copyright (c) 2008-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:
-// e32\debug\crashMonitor\src\scmdatatypes.cpp
-// Core dump server - Data Types for System Crash
-//
-//
-
-/**
- @file
- @internalTechnology
-*/
-#include <scmtrace.h>
-#include <scmdatatypes.h>
-#include <scmbytestreamutil.h>
-
-namespace Debug
- {
- /**
- * TCrashOffsetsHeader implementation
- * @internal technology
- */
-
- /**
- * TCrashOffsetsHeader Constructor
- */
- TCrashOffsetsHeader::TCrashOffsetsHeader():
- iId(ESCMOffsetsHeader),
- iVersion(EChVersion1),
- iCTFullRegOffset(0),
- iCTUsrStkOffset(0),
- iCTSvrStkOffset(0),
- iCPMetaOffset(0),
- iCTMetaOffset(0),
- iCPCodeSegOffset(0),
- iSysUsrStkOffset(0),
- iSysSvrStkOffset(0),
- iSysUsrRegOffset(0),
- iSysSvrRegOffset(0),
- iTLstOffset(0),
- iPLstOffset(0),
- iSysCodeSegOffset(0),
- iExcStkOffset(0),
- iTraceOffset(0),
- iScmLocksOffset(0),
- iKernelHeapOffset(0),
- iVarSpecInfOffset(0),
- iRomInfoOffset(0),
- iSpare1(0),
- iSpare2(0),
- iSpare3(0),
- iSpare4(0),
- iSpare5(0),
- iSpare6(0)
- {
- }
-
- /**
- * Writes this class to the specified byte stream
- * @param aWriter Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TCrashOffsetsHeader::Serialize(TByteStreamWriter& aWriter)
- {
- TInt startPos = aWriter.CurrentPosition();
-
- if(iId != ESCMOffsetsHeader)
- {
- CLTRACE("TCrashOffsetsHeader::Serialize Corrupt ID");
- return KErrCorrupt;
- }
-
- // ID saved first
- aWriter.WriteInt(iId); // 4
- aWriter.WriteShort((TUint16) iVersion); // 2
-
- if(iVersion == EChVersion1)
- {
- // write data v1 format
- aWriter.WriteInt(iCTFullRegOffset); // 4
- aWriter.WriteInt(iCTUsrStkOffset); // 4
- aWriter.WriteInt(iCTSvrStkOffset); // 4
- aWriter.WriteInt(iCPMetaOffset); // 4
- aWriter.WriteInt(iCTMetaOffset); // 4
- aWriter.WriteInt(iCPCodeSegOffset); // 4
- aWriter.WriteInt(iSysUsrStkOffset); // 4
- aWriter.WriteInt(iSysSvrStkOffset); // 4
- aWriter.WriteInt(iSysUsrRegOffset); // 4
- aWriter.WriteInt(iSysSvrRegOffset); // 4
- aWriter.WriteInt(iTLstOffset); // 4
- aWriter.WriteInt(iPLstOffset); // 4
- aWriter.WriteInt(iSysCodeSegOffset); // 4
- aWriter.WriteInt(iExcStkOffset); // 4
- aWriter.WriteInt(iTraceOffset); // 4
- aWriter.WriteInt(iScmLocksOffset); // 4
- aWriter.WriteInt(iKernelHeapOffset); // 4
- aWriter.WriteInt(iVarSpecInfOffset); // 4
- aWriter.WriteInt(iRomInfoOffset); // 4
- }
- else
- {
- CLTRACE("TCrashOffsetsHeader::Serialize Unsupported version");
- }
-
- TInt sizeWritten = aWriter.CurrentPosition() - startPos;
- if(sizeWritten != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE("TCrashOffsetsHeader serialization size error");
- return KErrCorrupt;
- }
-
- return KErrNone;
- }
-
- /**
- * Reads the classes data from the specified byte stream
- * @param aReader Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TCrashOffsetsHeader::Deserialize(TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt(); // 4
- if(iId != ESCMOffsetsHeader)
- {
- CLTRACE("TCrashOffsetsHeader::Deserialize Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TCrashHeaderVersion)aReader.ReadShort(); //2
-
- if(iVersion == EChVersion1)
- {
- iCTFullRegOffset = aReader.ReadInt(); // 4
- iCTUsrStkOffset = aReader.ReadInt(); // 4
- iCTSvrStkOffset = aReader.ReadInt(); // 4
- iCPMetaOffset = aReader.ReadInt(); // 4
- iCTMetaOffset = aReader.ReadInt(); // 4
- iCPCodeSegOffset = aReader.ReadInt(); // 4
- iSysUsrStkOffset = aReader.ReadInt(); // 4
- iSysSvrStkOffset = aReader.ReadInt(); // 4
- iSysUsrRegOffset = aReader.ReadInt(); // 4
- iSysSvrRegOffset = aReader.ReadInt(); // 4
- iTLstOffset = aReader.ReadInt(); // 4
- iPLstOffset = aReader.ReadInt(); // 4
- iSysCodeSegOffset = aReader.ReadInt();// 4
- iExcStkOffset = aReader.ReadInt(); // 4
- iTraceOffset = aReader.ReadInt(); // 4
- iScmLocksOffset = aReader.ReadInt(); // 4
- iKernelHeapOffset = aReader.ReadInt(); // 4
- iVarSpecInfOffset = aReader.ReadInt(); // 4
- iRomInfoOffset = aReader.ReadInt(); // 4
- }
- else
- {
- CLTRACE("TCrashOffsetsHeader::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE("TCrashOffsetsHeader deserialization size error");
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Get the externalised size of this class
- * @return TInt the Size
- */
- TInt TCrashOffsetsHeader::GetSize() const
- {
- // return the size in bytes that this struct uses to serialize - deserialize itself
- if(iVersion == EChVersion1)
- {
- return 82;
- }
- else
- {
- CLTRACE("TCrashOffsetsHeader::GetSize Unsupported version");
- return KErrNotSupported;
- }
- }
-
- TBool TCrashOffsetsHeader::operator == (const TCrashOffsetsHeader& aOther) const
- {
- return (iId == aOther.iId &&
- iVersion == aOther.iVersion &&
- iCTFullRegOffset == aOther.iCTFullRegOffset &&
- iCTUsrStkOffset == aOther.iCTUsrStkOffset &&
- iCTSvrStkOffset == aOther.iCTSvrStkOffset &&
- iCPMetaOffset == aOther.iCPMetaOffset &&
- iCTMetaOffset == aOther.iCTMetaOffset &&
- iSysUsrStkOffset == aOther.iSysUsrStkOffset &&
- iSysSvrStkOffset == aOther.iSysSvrStkOffset &&
- iSysUsrRegOffset == aOther.iSysUsrRegOffset &&
- iSysSvrRegOffset == aOther.iSysSvrRegOffset &&
- iTLstOffset == aOther.iTLstOffset &&
- iPLstOffset == aOther.iPLstOffset &&
- iExcStkOffset == aOther.iExcStkOffset &&
- iCPCodeSegOffset == aOther.iCPCodeSegOffset &&
- iSysCodeSegOffset == aOther.iSysCodeSegOffset &&
- iTraceOffset == aOther.iTraceOffset &&
- iScmLocksOffset == aOther.iScmLocksOffset &&
- iVarSpecInfOffset == aOther.iVarSpecInfOffset &&
- iKernelHeapOffset == aOther.iKernelHeapOffset &&
- iRomInfoOffset == aOther.iRomInfoOffset);
- }
-
-
- /**
- * TCrashInfoHeader implementation
- * @internal technology
- */
-
- /**
- * TCrashInfoHeader constructor
- */
- TCrashInfoHeader::TCrashInfoHeader():
- iId(ESCMTCrashInfo),
- iVersion(ECiVersion1),
- iLogSize(0),
- iFlashAlign(0),
- iCachedWriterSize(0),
- iPid(0),
- iTid(0),
- iExitType(0),
- iExitReason(0),
- iExcCode(0),
- iCrashTime(0),
- iCrashId(0),
- iFlashBlockSize(0),
- iFlashPartitionSize(0),
- iCategorySize(0),
- iSpare1(0),
- iSpare2(0)
- {
- TVersion ver(KSCMDataTypesMajorVersion, KSCMDataTypesMinorVersion, KSCMDataTypesBuildNumber);
- iSCMDataTypesVersion = ver;
- }
-
- /**
- * Writes this classes data to the specified byte stream
- * @param aWriter byte stream to use
- * @return One of the OS wide codes
- */
- TInt TCrashInfoHeader::Serialize(TByteStreamWriter& aWriter)
- {
-
- //CLTRACE("TCrashInfoHeader::Serialize");
- TInt startPos = aWriter.CurrentPosition();
-
- // ID saved first
- aWriter.WriteInt(iId); // 4
- if(iId != ESCMTCrashInfo)
- {
- CLTRACE("TCrashInfoHeader::Serialize Corrupt ID");
- return KErrCorrupt;
- }
-
- aWriter.WriteShort((TUint16) iVersion); // 2
-
- if(iVersion == ECiVersion1)
- {
- // write data v1 format
- aWriter.WriteInt(iLogSize); // 4
- aWriter.WriteByte((TUint8)iFlashAlign); // 1
- aWriter.WriteByte((TUint8)iCachedWriterSize); // 1
- aWriter.WriteInt64(iPid); // 8
- aWriter.WriteInt64(iTid); // 8
- aWriter.WriteInt(iExitType); // 4
- aWriter.WriteInt(iExitReason); // 4
- aWriter.WriteInt(iExcCode); // 4
- aWriter.WriteInt64(iCrashTime); // 8
- aWriter.WriteInt(iCrashId); // 4
- aWriter.WriteInt(iFlashBlockSize); // 4
- aWriter.WriteInt(iFlashPartitionSize); // 4
- aWriter.WriteInt(iSCMDataTypesVersion.iMajor); // 4
- aWriter.WriteInt(iSCMDataTypesVersion.iMinor); // 4
- aWriter.WriteInt(iSCMDataTypesVersion.iBuild); // 4
-
- if(iCategory.Ptr())
- {
- aWriter.WriteInt(iCategory.Length()); // 4
- for(TInt cnt = 0; cnt < iCategory.Length(); cnt++)
- {
- aWriter.WriteByte(iCategory[cnt]); //iCategorySize bytes
- }
- }
- else
- {
- aWriter.WriteInt(0);
- }
- }
- else
- {
- CLTRACE("TCrashInfoHeader::Serialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aWriter.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE2("TCrashInfoHeader::Serialize serialization size error. Wrote [%d] but expected [%d]", endPos - startPos, GetSize());
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Reads the classes data from the specified byte stream
- * @param aReader Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TCrashInfoHeader::Deserialize(TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt();
- if(iId != ESCMTCrashInfo)
- {
- CLTRACE("TCrashInfoHeader::Deserialize Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TCrashInfoHeaderVersion)aReader.ReadShort(); // 2
-
- if(iVersion == ECiVersion1)
- {
- // read data v1 format
- iLogSize = aReader.ReadInt(); // 4
- iFlashAlign = aReader.ReadByte(); // 1
- iCachedWriterSize = aReader.ReadByte(); // 1
- iPid = aReader.ReadInt64(); // 8
- iTid = aReader.ReadInt64(); // 8
- iExitType = aReader.ReadInt(); // 4
- iExitReason = aReader.ReadInt(); // 4
- iExcCode = aReader.ReadInt(); // 4
- iCrashTime = aReader.ReadInt64(); // 8
- iCrashId = aReader.ReadInt(); // 4
- iFlashBlockSize = aReader.ReadInt(); // 4
- iFlashPartitionSize = aReader.ReadInt(); // 4
- iSCMDataTypesVersion.iMajor = aReader.ReadInt(); // 4
- iSCMDataTypesVersion.iMinor = aReader.ReadInt(); // 4
- iSCMDataTypesVersion.iBuild = aReader.ReadInt(); // 4
-
-
- iCategorySize = aReader.ReadInt(); // 4
-
- if(iCategory.MaxLength() >= (TInt)iCategorySize)
- {
- iCategory.SetLength(0);
-
- for(TUint cnt = 0; cnt < iCategorySize; cnt++)
- {
- iCategory.Append(aReader.ReadByte()); //iCategorySize bytes
- }
- }
- }
- else
- {
- iId = ESCMLast; //unrecognised header
- CLTRACE("TCrashInfoHeader::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE2("TCrashInfoHeader::Deserialize serialization size error. Read [%d] but expected [%d]", endPos - startPos, GetSize());
- iId = ESCMLast; //unrecognised header
-
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Returns the externalised size of this class
- * @return TInt size
- */
- TInt TCrashInfoHeader::GetSize() const
- {
- if(iVersion == ECiVersion1)
- {
- return 76 + iCategory.Length();
- }
- else
- {
- CLTRACE("TCrashInfoHeader::GetSize Unsupported version");
- return KErrNotSupported;
- }
- }
-
- TBool TCrashInfoHeader::operator == (const TCrashInfoHeader& aOther) const
- {
- return (
- iId == aOther.iId &&
- iVersion == aOther.iVersion &&
- iLogSize == aOther.iLogSize &&
- iFlashAlign == aOther.iFlashAlign &&
- iCachedWriterSize == aOther.iCachedWriterSize &&
- iPid == aOther.iPid &&
- iTid == aOther.iTid &&
- iExitType == aOther.iExitType &&
- iExitReason == aOther.iExitReason &&
- iCrashTime == aOther.iCrashTime &&
- iCategorySize == aOther.iCategorySize &&
- iCategory == aOther.iCategory &&
- iSCMDataTypesVersion.iMajor == aOther.iSCMDataTypesVersion.iMajor &&
- iSCMDataTypesVersion.iMinor == aOther.iSCMDataTypesVersion.iMinor &&
- iSCMDataTypesVersion.iBuild == aOther.iSCMDataTypesVersion.iBuild);
- }
-
- /**
- * TThreadStack implementation
- * @internal technology
- */
-
-
- /**
- * TThreadStack Constructor
- */
- TThreadStack::TThreadStack():
- iId(ESCMThreadStack),
- iVersion(EStackVersion1),
- iStackType(ELast),
- iThreadId(0),
- iStackSize(0),
- iSpare1(0),
- iSpare2(0)
- {
- }
-
- /**
- * Writes this classes data to the specified byte stream
- * @param aWriter byte stream to use
- * @return One of the OS wide codes
- */
- TInt TThreadStack::Serialize(TByteStreamWriter& aWriter)
- {
- TInt startPos = aWriter.CurrentPosition();
-
- if(iId != ESCMThreadStack)
- {
- CLTRACE("TThreadStack::Serialize failed - corrupt ID");
- return KErrCorrupt;
- }
-
- aWriter.WriteInt(iId); // 4
- aWriter.WriteShort((TUint16) iVersion); // 2
-
- if(iVersion == EStackVersion1)
- {
- // write data v1 format
- aWriter.WriteInt(iStackType); // 4
- aWriter.WriteInt64(iThreadId); // 8
- aWriter.WriteInt(iStackSize); // 4
- }
- else
- {
- CLTRACE("TThreadStack::Serialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aWriter.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE("TThreadStack::Serialize serialization size error");
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Returns the externalised size of this class
- * @return TInt size
- */
- TInt TThreadStack::GetSize() const
- {
- if(iVersion == EStackVersion1)
- {
- return 22;
- }
- else
- {
- CLTRACE("TThreadStack::GetSize Unsupported version");
- return KErrNotSupported;
- }
- }
-
- /**
- * Reads the classes data from the specified byte stream
- * @param aReader Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TThreadStack::Deserialize(TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt(); // 4
- if(iId != ESCMThreadStack)
- {
- CLTRACE("TThreadStack::Deserialize failed Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TThreadStackVersion)aReader.ReadShort(); // 2
-
- if(iVersion == EStackVersion1)
- {
- // read data v1 format
- iStackType = (TThreadStackType)aReader.ReadInt(); // 4
- iThreadId = aReader.ReadInt64(); // 8
- iStackSize = aReader.ReadInt(); // 4
-
- }
- else
- {
- iId = ESCMLast; //unrecognised header
- CLTRACE("TThreadStack::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- iId = ESCMLast; //unrecognised header
-
- // error between actual size & real size in data
- CLTRACE("TThreadStack::Deserialize serialization size error");
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * TRegisterValue implementation
- * @internal technology
- */
-
- /**
- * TRegisterValue Constructor
- */
- TRegisterValue::TRegisterValue():
- iId(ESCMRegisterValue),
- iVersion(ERegisterValueVersion1),
- iOwnId(0),
- iType(0),
- iClass(0), //core reg by default
- iSubId(0),
- iSize(2) //default for core registers
- {
- }
-
-
- /**
- * Returns the externalised size of this class
- * @return TInt size
- */
- TInt TRegisterValue::GetSize() const
- {
- if(iVersion == ERegisterValueVersion1)
- {
- TInt baseSize = 22;
-
- //variant for union
- if(iSize == 0)
- {
- return baseSize + 1;
- }
- else if(iSize == 1)
- {
- return baseSize + 2;
- }
- else if(iSize == 2)
- {
- return baseSize + 4;
- }
- else if(iSize == 3)
- {
- return baseSize + 8;
- }
- else
- {
- CLTRACE("TRegisterValue::GetSize() Corrupt size");
- return 0;
- }
- }
- else
- {
- CLTRACE("TRegisterValue::GetSize Unsupported version");
- return KErrNotSupported;
- }
- }
-
- /**
- * Writes this classes data to the specified byte stream
- * @param aWriter byte stream to use
- * @return One of the OS wide codes
- */
- TInt TRegisterValue::Serialize(TByteStreamWriter& aWriter)
- {
- TInt startPos = aWriter.CurrentPosition();
-
- // ID saved first
- if(iId != ESCMRegisterValue)
- {
- CLTRACE("TRegisterValue::Serialize Error - Corrupt ID");
- return KErrCorrupt;
- }
-
- aWriter.WriteInt(iId); // 4
- aWriter.WriteShort((TUint16) iVersion); // 2
-
- if(iVersion == ERegisterValueVersion1)
- {
- // write data v1 format
- aWriter.WriteInt64(iOwnId); // 8
- aWriter.WriteInt(iType); // 4
- aWriter.WriteByte(iClass); // 1
- aWriter.WriteShort(iSubId); // 2
- aWriter.WriteByte(iSize); // 1
-
- //variant for union
- if(iSize == 0)
- {
- aWriter.WriteByte(iValue8);
- }
- else if(iSize == 1)
- {
- aWriter.WriteShort(iValue16);
- }
- else if(iSize == 2)
- {
- aWriter.WriteInt(iValue32);
- }
- else if(iSize == 3)
- {
- aWriter.WriteInt64(iValue64);
- }
- else
- {
- CLTRACE("TRegisterValue::Serialize() Corrupt size");
- return KErrCorrupt;
- }
- }
- else
- {
- CLTRACE("TRegisterValue::Serialize Unsupported version");
- }
-
- TInt endPos = aWriter.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE("TRegisterValue::Serialize serialization size error");
- return KErrCorrupt;
- }
-
- return KErrNone;
- }
-
- /**
- * Reads the classes data from the specified byte stream
- * @param aReader Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TRegisterValue::Deserialize(TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt();
- if(iId != ESCMRegisterValue)
- {
- CLTRACE("TRegisterValue::Deserialize() ERROR Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TRegisterValueVersion)aReader.ReadShort(); // 2
-
- if(iVersion == ERegisterValueVersion1)
- {
- // read data v1 format
- iOwnId = aReader.ReadInt64(); // 8
- iType = aReader.ReadInt(); // 4
- iClass = aReader.ReadByte(); // 1
- iSubId = aReader.ReadShort(); // 2
- iSize = aReader.ReadByte(); // 1
-
- //variant for union
- if(iSize == 0)
- {
- iValue8 = aReader.ReadByte();
- }
- else if(iSize == 1)
- {
- iValue16 = aReader.ReadShort();
- }
- else if(iSize == 2)
- {
- iValue32 = aReader.ReadInt();
- }
- else if(iSize == 3)
- {
- iValue64 = aReader.ReadInt64();
- }
- else
- {
- CLTRACE("TRegisterValue::Serialize() Corrupt size");
- return KErrCorrupt;
- }
- }
- else
- {
- iId = ESCMLast; //unrecognised header
- CLTRACE("TRegisterValue::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- iId = ESCMLast; //unrecognised header
-
- // error between actual size & real size in data
- CLTRACE("TRegisterValue::Deserialize serialization size error");
- return KErrCorrupt;
- }
-
- return KErrNone;
- }
-
- /**
- * TRegisterSet implementation
- * @internal technology
- */
-
- /**
- * TRegisterSet Constructor
- */
- TRegisterSet::TRegisterSet():
- iVersion(ETRegisterSetVersion1),
- iId(ESCMRegisterSet),
- iNumRegisters(0)
- {
-
- }
-
- /**
- * Returns the externalised size of this class
- * @return TInt size
- */
- TInt TRegisterSet::GetSize() const
- {
- if(iVersion == ETRegisterSetVersion1)
- {
- return 10;
- }
- else
- {
- CLTRACE("TRegisterSet::GetSize Unsupported version");
- return KErrNotSupported;
- }
- }
-
- /**
- * Writes this classes data to the specified byte stream
- * @param aWriter byte stream to use
- * @return One of the OS wide codes
- */
- TInt TRegisterSet::Serialize(TByteStreamWriter& aWriter)
- {
- TInt startPos = aWriter.CurrentPosition();
-
- // ID saved first
- if(iId != ESCMRegisterSet)
- {
- CLTRACE("TRegisterSet::Serialize Error - Corrupt ID");
- return KErrCorrupt;
- }
-
- aWriter.WriteInt(iId); // 4
- aWriter.WriteShort((TUint16) iVersion); // 2
-
- if(iVersion == ETRegisterSetVersion1)
- {
- // write data v1 format
- aWriter.WriteInt(iNumRegisters); // 4
- }
- else
- {
- CLTRACE("TRegisterSet::Serialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aWriter.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE("TRegisterSet::Serialize serialization size error");
- return KErrCorrupt;
- }
-
- return KErrNone;
- }
-
- /**
- * Reads the classes data from the specified byte stream
- * @param aReader Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TRegisterSet::Deserialize(TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt();
- if(iId != ESCMRegisterSet)
- {
- CLTRACE("TRegisterSet::Deserialize() ERROR Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TRegisterSetVersion)aReader.ReadShort(); // 2
-
- if(iVersion == ETRegisterSetVersion1)
- {
- // read data v1 format
- iNumRegisters = aReader.ReadInt(); // 8
- }
- else
- {
- iId = ESCMLast; //unrecognised header
- CLTRACE("TRegisterSet::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- iId = ESCMLast; //unrecognised header
-
- // error between actual size & real size in data
- CLTRACE("TRegisterSet::Deserialize serialization size error");
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * TCodeSegmentSet implementation
- * @internal technology
- */
-
- /**
- * TCodeSegmentSet Constructor
- */
- TCodeSegmentSet::TCodeSegmentSet():
- iId(ESCMCodeSegSet),
- iVersion(ETCodeSegmentSetVersion1),
- iNumSegs(0),
- iPid(0)
- {
- }
-
- /**
- * Returns the externalised size of this class
- * @return TInt size
- */
- TInt TCodeSegmentSet::GetSize() const
- {
- if(iVersion == ETCodeSegmentSetVersion1)
- {
- return 18;
- }
- else
- {
- CLTRACE("TCodeSegmentSet::GetSize Unsupported version");
- return KErrNotSupported;
- }
- }
-
- /**
- * This returns the largest size this class can be
- */
- TInt TCodeSegmentSet::GetMaxSize() const
- {
- return 18;
- }
-
- /**
- * Writes this classes data to the specified byte stream
- * @param aWriter byte stream to use
- * @return One of the OS wide codes
- */
- TInt TCodeSegmentSet::Serialize(TByteStreamWriter& aWriter)
- {
- TInt startPos = aWriter.CurrentPosition();
-
- // ID saved first
- if(iId != ESCMCodeSegSet)
- {
- CLTRACE("TCodeSegmentSet::Serialize Error - Corrupt ID");
- return KErrCorrupt;
- }
-
- aWriter.WriteInt(iId); // 4
- if(iId != ESCMCodeSegSet)
- {
- CLTRACE("TCodeSegmentSet::Serialize Corrupt ID");
- return KErrCorrupt;
- }
-
- aWriter.WriteShort((TUint16) iVersion); // 2
-
- if(iVersion == ETCodeSegmentSetVersion1)
- {
- // write data v1 format
- aWriter.WriteInt(iNumSegs); // 4
- aWriter.WriteInt64(iPid); // 8
- }
- else
- {
- CLTRACE("TCodeSegmentSet::Serialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aWriter.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE("TCodeSegmentSet::Serialize serialization size error");
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Reads the classes data from the specified byte stream
- * @param aReader Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TCodeSegmentSet::Deserialize(TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt();
- if(iId != ESCMCodeSegSet)
- {
- CLTRACE("TCodeSegmentSet::Deserialize() ERROR Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TCodeSegmentSetVersion)aReader.ReadShort(); // 2
-
- if(iVersion == ETCodeSegmentSetVersion1)
- {
- // read data v1 format
- iNumSegs = aReader.ReadInt(); // 4
- iPid = aReader.ReadInt64(); // 8
- }
- else
- {
- iId = ESCMLast; //unrecognised header
- CLTRACE("TRegisterSet::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- iId = ESCMLast; //unrecognised header
-
- // error between actual size & real size in data
- CLTRACE("TRegisterSet::Deserialize serialization size error");
- return KErrCorrupt;
- }
-
- return KErrNone;
- }
-
-
- /**
- * TCodeSegment implementation
- * @internal technology
- */
-
- /**
- * TCodeSegment constructor
- */
- TCodeSegment::TCodeSegment():
- iId(ESCMCodeSeg),
- iVersion(ETCodeSegmentVersion1),
- iCodeSegType(EUnknownCodeSegType),
- iXip(0),
- iNameLength(0)
- {
- }
-
- /**
- * Writes this classes data to the specified byte stream
- * @param aWriter byte stream to use
- * @return One of the OS wide codes
- */
- TInt TCodeSegment::Serialize(TByteStreamWriter& aWriter)
- {
- TInt startPos = aWriter.CurrentPosition();
-
- // ID saved first
- aWriter.WriteInt(iId); // 4
- if(iId != ESCMCodeSeg)
- {
- CLTRACE("TCodeSegment::Serialize Error - Corrupt ID");
- return KErrCorrupt;
- }
-
- aWriter.WriteShort((TUint16) iVersion); // 2
-
- if(iVersion == ETCodeSegmentVersion1)
- {
- // write data v1 format
- aWriter.WriteInt(iCodeSegType);
- aWriter.WriteInt(iCodeSegMemInfo.iCodeBase);
- aWriter.WriteInt(iCodeSegMemInfo.iCodeSize);
- aWriter.WriteInt(iCodeSegMemInfo.iConstDataBase);
- aWriter.WriteInt(iCodeSegMemInfo.iConstDataSize);
- aWriter.WriteInt(iCodeSegMemInfo.iInitialisedDataBase);
- aWriter.WriteInt(iCodeSegMemInfo.iInitialisedDataSize);
- aWriter.WriteInt(iCodeSegMemInfo.iUninitialisedDataBase);
- aWriter.WriteInt(iCodeSegMemInfo.iUninitialisedDataSize);
- aWriter.WriteInt(iXip);
-
- if(iName.Ptr())
- {
- aWriter.WriteInt(iName.Length()); // 4
- for(TInt cnt = 0; cnt < iName.Length(); cnt++)
- {
- aWriter.WriteByte(iName[cnt]); //iCategorySize bytes
- }
- }
- else
- {
- aWriter.WriteInt(0);
- }
- }
- else
- {
- CLTRACE("TCodeSegment::Serialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aWriter.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE2("TCodeSegment::Serialize serialization size error. Wrote [%d] but expected [%d]", endPos - startPos, GetSize());
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Reads the classes data from the specified byte stream
- * @param aReader Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TCodeSegment::Deserialize(TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt();
- if(iId != ESCMCodeSeg)
- {
- CLTRACE("TCodeSegment::Deserialize Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TCodeSegmentVersion)aReader.ReadShort(); // 2
-
- if(iVersion == ETCodeSegmentVersion1)
- {
- // read data v1 format
- iCodeSegType = (TCodeSegType)aReader.ReadInt();
- iCodeSegMemInfo.iCodeBase = aReader.ReadInt();
- iCodeSegMemInfo.iCodeSize = aReader.ReadInt();
- iCodeSegMemInfo.iConstDataBase = aReader.ReadInt();
- iCodeSegMemInfo.iConstDataSize = aReader.ReadInt();
- iCodeSegMemInfo.iInitialisedDataBase = aReader.ReadInt();
- iCodeSegMemInfo.iInitialisedDataSize = aReader.ReadInt();
- iCodeSegMemInfo.iUninitialisedDataBase = aReader.ReadInt();
- iCodeSegMemInfo.iUninitialisedDataSize = aReader.ReadInt();
- iXip = aReader.ReadInt();
- iNameLength = aReader.ReadInt(); // 4
-
- if(iName.Ptr() && iName.MaxLength() >= iNameLength)
- {
- iName.SetLength(0);
-
- for(TInt cnt = 0; cnt < iNameLength; cnt++)
- {
- iName.Append(aReader.ReadByte()); //iCategorySize bytes
- }
- }
- }
- else
- {
- iId = ESCMLast; //unrecognised header
- CLTRACE("TCodeSegment::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE2("TCodeSegment::Deserialize serialization size error. Read [%d] but expected [%d]", endPos - startPos, GetSize());
- iId = ESCMLast; //unrecognised header
-
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Returns the externalised size of this class
- * @return TInt size
- */
- TInt TCodeSegment::GetSize() const
- {
- if(iVersion == ETCodeSegmentVersion1)
- {
- return 50 + iName.Length();
- }
- else
- {
- CLTRACE("TCodeSegment::GetSize Unsupported version");
- return KErrNotSupported;
- }
- }
-
- /**
- * This returns the largest size this class can be
- */
- TInt TCodeSegment::GetMaxSize() const
- {
- return 50 + KMaxSegmentNameSize;
- }
- /**
- * TRawData implementation
- * @internal technology
- */
-
- /**
- * TRawData constructor
- */
- TRawData::TRawData():
- iId(ESCMRawData),
- iVersion(ETRawData1),
- iLength(0),
- iData(NULL, 0)
- {
- }
-
- /**
- * Writes this classes data to the specified byte stream
- * @param aWriter byte stream to use
- * @return One of the OS wide codes
- */
- TInt TRawData::Serialize(TByteStreamWriter& aWriter)
- {
- TInt startPos = aWriter.CurrentPosition();
-
- // ID saved first
- aWriter.WriteInt(iId); // 4
- if(iId != ESCMRawData)
- {
- CLTRACE("TRawData::Serialize Corrupt ID");
- return KErrCorrupt;
- }
-
- aWriter.WriteShort((TUint16) iVersion); // 2
-
- if(iVersion == ETRawData1)
- {
- if(iData.Ptr())
- {
- aWriter.WriteInt(iData.Length()); // 4
- iLength = iData.Length();
-
- for(TInt cnt = 0; cnt < iData.Length(); cnt++)
- {
- //Kern::Printf("cnt = %d \t\t\t0x%X", cnt, cnt);
- aWriter.WriteByte(iData[cnt]); //iLength bytes
- }
- }
- else
- {
- aWriter.WriteInt(0);
- }
- }
- else
- {
- CLTRACE("TRawData::Serialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aWriter.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE2("TRawData::Serialize serialization size error. Wrote [%d] but expected [%d]", endPos - startPos, GetSize());
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Reads the classes data from the specified byte stream
- * @param aReader Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TRawData::Deserialize(TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt(); // 4
- if(iId != ESCMRawData)
- {
- CLTRACE("TRawData::Deserialize Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TTRawDataVersion)aReader.ReadShort(); // 2
-
- if(iVersion == ETRawData1)
- {
- iLength = aReader.ReadInt(); // 4
-
- if(iData.Ptr())
- {
- //Deserialise as much as we can into this buffer - it may be that the caller doesnt want all of it
- iData.SetLength(0);
- TUint amtToRead = (iData.MaxLength() >= iLength) ? iLength : iData.MaxLength();
-
- for(TUint cnt = 0; cnt < amtToRead; cnt++)
- {
- iData.Append(aReader.ReadByte()); //iCategorySize bytes
- }
-
- //move reader along what we havent read
- aReader.SetPosition(aReader.CurrentPosition() + (iLength - amtToRead));
- }
- else
- {
- aReader.SetPosition(aReader.CurrentPosition() + iLength);
- }
- }
- else
- {
- iId = ESCMLast; //unrecognised header
- CLTRACE("TRawData::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE2("TRawData::Deserialize serialization size error. Read [%d] but expected [%d]", endPos - startPos, GetSize());
- iId = ESCMLast; //unrecognised header
-
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Same as Deserialise except it only starts copying data into the buffer
- * when it reaches aStartPos bytes into the data
- * @param aStartPos
- * @param aReader
- * @return
- */
- TInt TRawData::Deserialize(TInt aStartPos, TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt(); // 4
- if(iId != ESCMRawData)
- {
- CLTRACE("TRawData::Deserialize Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TTRawDataVersion)aReader.ReadShort(); // 2
-
- if(iVersion == ETRawData1)
- {
- iLength = aReader.ReadInt(); // 4
-
- if(iData.Ptr())
- {
- //Deserialise as much as we can into this buffer - it may be that the caller doesnt want all of it
- iData.SetLength(0);
- aReader.SetPosition(aReader.CurrentPosition() + aStartPos);
-
- TUint amtToRead = (iData.MaxLength() >= iLength) ? iLength : iData.MaxLength();
-
- for(TUint cnt = 0; cnt < amtToRead; cnt++)
- {
- iData.Append(aReader.ReadByte()); //iCategorySize bytes
- }
-
- //move reader along what we havent read
- aReader.SetPosition(aReader.CurrentPosition() + (iLength - (amtToRead + aStartPos)));
- }
- else
- {
- aReader.SetPosition(aReader.CurrentPosition() + iLength);
- }
- }
- else
- {
- iId = ESCMLast; //unrecognised header
- CLTRACE("TRawData::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE2("TRawData::Deserialize serialization size error. Read [%d] but expected [%d]", endPos - startPos, GetSize());
- iId = ESCMLast; //unrecognised header
-
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Returns the externalised size of this class
- * @return TInt size
- */
- TInt TRawData::GetSize() const
- {
- if(iVersion == ETRawData1)
- {
- return 10 + iLength;
- }
- else
- {
- CLTRACE("TRawData::GetSize Unsupported version");
- return KErrNotSupported;
- }
- }
-
-
- /**
- * TMemoryDump implementation
- * @internal technology
- */
-
- /**
- * TMemoryDump Constructor
- */
- TMemoryDump::TMemoryDump():
- iId(ESCMMemory),
- iVersion(EMemDumpVersion1),
- iStartAddress(0),
- iPid(0),
- iLength(0)
- {
- }
-
- /**
- * Returns the externalised size of this class
- * @return TInt size
- */
- TInt TMemoryDump::GetSize() const
- {
- if(iVersion == EMemDumpVersion1)
- {
- return 22;
- }
- else
- {
- CLTRACE("TMemoryDump::GetSize Unsupported version");
- return KErrNotSupported;
- }
- }
-
- /**
- * Writes this classes data to the specified byte stream
- * @param aWriter byte stream to use
- * @return One of the OS wide codes
- */
- TInt TMemoryDump::Serialize(TByteStreamWriter& aWriter)
- {
- TInt startPos = aWriter.CurrentPosition();
-
- // ID saved first
- aWriter.WriteInt(iId); // 4
- if(iId != ESCMMemory)
- {
- CLTRACE("TMemoryDump::Serialize Error - Corrupt ID");
- return KErrCorrupt;
- }
-
- aWriter.WriteShort((TUint16) iVersion); // 2
-
- if(iVersion == EMemDumpVersion1)
- {
- // write data v1 format
- aWriter.WriteInt(iStartAddress); // 4
- aWriter.WriteInt64(iPid); // 8
- aWriter.WriteInt(iLength); // 4
- }
- else
- {
- CLTRACE("TMemoryDump::Serialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aWriter.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE("TMemoryDump::Serialize serialization size error");
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Reads the classes data from the specified byte stream
- * @param aReader Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TMemoryDump::Deserialize(TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt(); // 4
- if(iId != ESCMMemory)
- {
- CLTRACE("TMemoryDump::Deserialize() ERROR Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TMemDumpVersionVersion)aReader.ReadShort(); // 2
-
- if(iVersion == EMemDumpVersion1)
- {
- // read data v1 format
- iStartAddress = aReader.ReadInt(); // 4
- iPid = aReader.ReadInt64(); // 8
- iLength = aReader.ReadInt(); // 4
- }
- else
- {
- iId = ESCMLast; //unrecognised header
- CLTRACE("TMemoryDump::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- iId = ESCMLast; //unrecognised header
-
- // error between actual size & real size in data
- CLTRACE("TMemoryDump::Deserialize serialization size error");
- return KErrCorrupt;
- }
-
- return KErrNone;
- }
-
- /**
- * TTraceDump implementation
- * @internal technology
- */
-
- /**
- * TTraceDump Constructor
- */
- TTraceDump::TTraceDump():
- iId(ESCMTraceData),
- iVersion(ETraceDumpVersion1),
- iSizeOfMemory(0),
- iNumberOfParts(0)
- {
- }
-
- /**
- * Returns the externalised size of this class
- * @return TInt size
- */
- TInt TTraceDump::GetSize() const
- {
- if(iVersion == ETraceDumpVersion1)
- {
- return 14;
- }
- else
- {
- CLTRACE("TTraceDump::GetSize Unsupported version");
- return KErrNotSupported;
- }
- }
-
- /**
- * Writes this classes data to the specified byte stream
- * @param aWriter byte stream to use
- * @return One of the OS wide codes
- */
- TInt TTraceDump::Serialize(TByteStreamWriter& aWriter)
- {
- TInt startPos = aWriter.CurrentPosition();
-
- // ID saved first
- aWriter.WriteInt(iId); // 4
- if(iId != ESCMTraceData)
- {
- CLTRACE("TTraceDump::Serialize Error - Corrupt ID");
- return KErrCorrupt;
- }
-
- aWriter.WriteShort((TUint16) iVersion); // 2
-
- if(iVersion == ETraceDumpVersion1)
- {
- // write data v1 format
- aWriter.WriteInt(iSizeOfMemory); // 4
- aWriter.WriteInt(iNumberOfParts); // 4
- }
- else
- {
- CLTRACE("TTraceDump::Serialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aWriter.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- // error between actual size & real size in data
- CLTRACE("TTraceDump::Serialize serialization size error");
- return KErrCorrupt;
- }
- return KErrNone;
- }
-
- /**
- * Reads the classes data from the specified byte stream
- * @param aReader Byte stream to use
- * @return One of the OS wide codes
- */
- TInt TTraceDump::Deserialize(TByteStreamReader& aReader)
- {
- TInt startPos = aReader.CurrentPosition();
-
- iId = (SCMStructId)aReader.ReadInt(); // 4
- if(iId != ESCMTraceData)
- {
- CLTRACE("TTraceDump::Deserialize() Error: Corrupt ID");
- return KErrCorrupt;
- }
-
- iVersion = (TTraceDumpVersion)aReader.ReadShort(); // 2
-
- if(iVersion == ETraceDumpVersion1)
- {
- // read data v1 format
- iSizeOfMemory = aReader.ReadInt(); // 4
- iNumberOfParts = aReader.ReadInt(); // 4
-
- }
- else
- {
- iId = ESCMLast; //unrecognised header
- CLTRACE("TTraceDump::Deserialize Unsupported version");
- return KErrCorrupt;
- }
-
- TInt endPos = aReader.CurrentPosition();
- if( endPos - startPos != GetSize())
- {
- iId = ESCMLast; //unrecognised header
-
- // error between actual size & real size in data
- CLTRACE("TTraceDump::Deserialize serialization size error");
- return KErrCorrupt;
- }
-
- return KErrNone;
- }
- }
-
-//eof