--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imglib/symbolutil/bsymutil.h Mon Nov 22 10:56:31 2010 +0800
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef __BSYMUTIL_H__
+#define __BSYMUTIL_H__
+
+#include <e32std.h>
+#include <vector>
+#include <string>
+
+using namespace std;
+
+const int BSYM_PAGE_SIZE = 4096;
+
+const int MaxSize = 4*1024*1024;
+const TUint16 BsymMajorVer = 3;
+const TUint16 BsymMinorVer = 0;
+struct TBsymHeader {
+ char iMagic[4]; // 'B','S','Y','M' always big-endian
+ char iMajorVer[2]; // always big-endian, currently 3
+ char iMinorVer[2]; // always big-endian, currently 0.
+ char iEndiannessFlag;
+ char iCompressionFlag;
+ char iReservered[2];
+ TUint32 iDbgUnitOffset;
+ TUint32 iDbgUnitCount;
+ TUint32 iSymbolOffset;
+ TUint32 iSymbolCount;
+ TUint32 iStringTableOffset;
+ TUint32 iStringTableBytes;
+ TUint32 iCompressedSize;
+ TUint32 iUncompressSize;
+ TUint32 iCompressInfoOffset;
+};
+struct TDbgUnitEntry {
+ TUint32 iCodeAddress;
+ TUint32 iCodeSymbolCount;
+ TUint32 iDataAddress;
+ TUint32 iDataSymbolCount;
+ TUint32 iBssAddress;
+ TUint32 iBssSymbolCount;
+ TUint32 iPCNameOffset;
+ TUint32 iDevNameOffset;
+ TUint32 iStartSymbolIndex;
+ TDbgUnitEntry()
+ {
+ iCodeAddress =0;
+ iCodeSymbolCount =0;
+ iDataAddress =0;
+ iDataSymbolCount =0;
+ iBssAddress =0;
+ iBssSymbolCount =0;
+ iPCNameOffset =0;
+ iDevNameOffset =0;
+ iStartSymbolIndex =0;
+ }
+ void Reset()
+ {
+ iCodeAddress =0;
+ iCodeSymbolCount =0;
+ iDataAddress =0;
+ iDataSymbolCount =0;
+ iBssAddress =0;
+ iBssSymbolCount =0;
+ iPCNameOffset =0;
+ iDevNameOffset =0;
+ iStartSymbolIndex =0;
+ }
+};
+struct TDbgUnitPCEntry {
+ TDbgUnitEntry iDbgUnitEntry;
+ string iPCName;
+ string iDevName;
+};
+struct TSymbolEntry {
+ TUint32 iAddress;
+ TUint32 iLength;
+ TUint32 iScopeNameOffset;
+ TUint32 iNameOffset;
+ TUint32 iSecNameOffset;
+ TSymbolEntry()
+ {
+ iAddress =0;
+ iLength =0;
+ iScopeNameOffset =0;
+ iNameOffset =0;
+ iSecNameOffset =0;
+ }
+};
+
+struct TSymbolPCEntry {
+ TSymbolEntry iSymbolEntry;
+ string iScopeName;
+ string iName;
+ string iSecName;
+};
+
+struct TPageInfo {
+ TUint32 iPageStartOffset;
+ TUint32 iPageDataSize;
+};
+
+struct TCompressedHeaderInfo
+{
+ TUint32 iPageSize;
+ TUint32 iTotalPageNumber;
+ TPageInfo iPages[1];
+};
+
+typedef vector<TDbgUnitPCEntry> TDbgUnitEntrySet;
+typedef vector<TSymbolPCEntry> TSymbolPCEntrySet;
+typedef vector<string> StringList;
+
+struct MapFileInfo
+{
+ TDbgUnitPCEntry iDbgUnitPCEntry;
+ TSymbolPCEntrySet iSymbolPCEntrySet;
+};
+
+typedef vector<MapFileInfo> MapFileInfoSet;
+class ByteOrderUtil
+{
+public:
+ static bool IsLittleEndian()
+ {
+ union {
+ unsigned int a;
+ unsigned char b;
+ } c;
+ c.a = 1;
+ return (c.b == 1);
+ }
+};
+
+class MemoryWriter
+{
+public:
+ MemoryWriter();
+ ~MemoryWriter();
+ int WriteBytes(const char* pChar, int size);
+ TUint32 GetOffset();
+ char* GetDataPointer();
+ bool ExtendMemory();
+ bool SetOffset(TUint32 aOffset);
+ void AddEmptyString();
+ TUint32 AddString(const string& aStr);
+ TUint32 AddScopeName(const string& aStr);
+ void SetStringTableStart(TUint32 aOffset);
+ TUint32 GetStringTableStart();
+private:
+ char* iChar;
+ TUint32 iOffset;
+ TUint32 iStringTableStart;
+ string iLastScopeName;
+ TUint32 iLastScopeNameOffset;
+ TUint32 iTotalSize;
+};
+#endif