--- a/bintools/elftools/inc/elfdll.h Wed Jun 16 16:51:40 2010 +0300
+++ b/bintools/elftools/inc/elfdll.h Wed Jun 23 16:56:47 2010 +0800
@@ -1,254 +1,254 @@
-/*
-* Copyright (c) 2001-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:
-*
-*/
-
-
-#if !defined(__ELFDLL_H__)
-#define __ELFDLL_H__
-//#include <e32rom.h>
-#include "e32ldfmt.h"
-#include <elfdefs.h>
-#include "elffile.h"
-
-#define DLLSYMPREFIX "#<DLL>"
-#define DLLSYMPREFIX0 "#"
-#define DLLSYMSUFFIX "#<\\DLL>"
-#define ORDBASE 16
-#define EXPORTTABLENAME "DLL##ExportTable"
-#define EXPORTTABLESIZENAME "DLL##ExportTableSize"
-
-class NamedExportSymbol;
-class OrdZeroRecord;
-struct NeededDLLsList;
-
-const TUint KNameLookupOffsetFlag32 = 0x0001;
-
-class ELFFile::ELFDllData
- {
-public:
- ELFFile * iElfFile;
-
- char * iDynStrTab;
- // bytesize of the dynamic string table
- TInt iDynStrTabSize;
- Elf32_Sym * iDynSymTab;
- // size of an entry in the dynamic symbol table
- TInt iSymSize;
- // the rela relocation table
- Elf32_Rela * iRela;
- // size of rela relocation table in bytes
- TInt iRelaSz;
- // size of a rela entry in bytes
- TInt iRelaEnt;
- // the rel relocation table
- Elf32_Rel * iRel;
- // size of rel relocation table in bytes
- TInt iRelSz;
- // size of a rel entry in bytes
- TInt iRelEnt;
-
- Elf32_HashTable * iHashTable;
-
- // Exported symbols required for lookup via names.
- NamedExportSymbol *iNamedExportSymbolHead;
- // Number of exported symbols - this doesn't nclude the absent symbols.
- TInt iNamedExportCount;
- // header of the export symbol info table
- E32EpocExpSymInfoHdr iSymInfoHdr;
- // String table size for the symbol names.
- TUint iSymStringTableSize;
- TUint iStringNameOffset;
-
- // Dependency list
- // Static Dependencies - An 'import relocation' entry is required to be created
- // for each such record.
- OrdZeroRecord *iDepRecords;
- OrdZeroRecord *iDepRecordsTail;
-
- // List of names obtained from DT_NEEDED entries in ELF.
- // The order in which they appear is the order in which symbol
- // lookup shall be followed.
- NeededDLLsList *iNeededDllNames;
- NeededDLLsList *iNeededDllNamesTail;
- // Ordinal 0 of this binary. - A local relocation needs to be created for this
- // record.
-
- OrdZeroRecord *iOrdZeroRec;
- TInt iNamedLookupEnabled;
-
- ELFDllData(ELFFile * f);
- ~ELFDllData();
- TBool Init();
-
- TBool ParseDllSymbol(Elf32_Sym * s, char*& dll, TUint& len, TInt& ord);
- class DllSymbol
- {
- public:
- char * iDll;
- TUint iLen;
- TInt iOrd;
- Elf32_Phdr * iSegment;
- Elf32_Rel * iRel;
- DllSymbol * iNext;
-
- DllSymbol(char * n, TUint l, TInt o)
- : iDll(n), iLen(l), iOrd(o), iSegment(0),iRel(0),iNext(0)
- {}
- ~DllSymbol()
- {
- delete iNext;
- }
- };
- DllSymbol * DllSymbolP(Elf32_Sym * s);
- TBool AddSymbol(DllSymbol * s);
-
- class DllRec
- {
- public:
- char * iName;
- TUint iLen;
- TInt nImports;
- DllSymbol * iHead;
- DllSymbol * iTail;
- DllRec * iNext;
-
- DllRec(char * n, TInt l, DllSymbol * s) :
- iName(n), iLen(l), nImports(1), iHead(s), iTail(s), iNext(0)
- {}
- ~DllRec()
- {
- delete iHead;
- delete iNext;
- }
- void AddSymbol(DllSymbol * s);
- };
-
- DllRec * iDllHead;
- DllRec * iDllTail;
-
- Elf32_Word iExportTableSymIdx;
- Elf32_Word iExportTableSizeSymIdx;
-
- TBool InitExportInfo();
- TBool iImageIsDll;
- TBool ImageIsDll() { return iImageIsDll; }
-
- Elf32_Word FindSymbolIndex(TText * s);
-
- TInt iNumberOfImports;
- TInt iNumberOfExports;
- TInt iNumberOfImportDlls;
-
- TInt iStringTableSize;
-
- TInt iNumberOfRelocs;
- TInt iNumberOfCodeRelocs;
- TInt iNumberOfDataRelocs;
-
- TInt NumberOfImports(void);
- TInt NumberOfExports(void);
- TInt NumberOfImportDlls(void);
-
- TInt NumberOfRelocs(void);
-
- TInt NumberOfCodeRelocs() { return iNumberOfCodeRelocs; }
- TInt NumberOfDataRelocs() { return iNumberOfDataRelocs; }
-
- TBool GetRelocs(Elf32_Rel **aCodeRelocs, Elf32_Rel **aDataRelocs);
-
- TUint GetExportTableOffset(void);
- char * CreateImportSection(TInt &aSize);
- TBool CreateSymLookupTable();
- TBool SetupSymbolValues();
- TBool SetupSymbolNames();
- void Sort(NamedExportSymbol** aDstList, NamedExportSymbol* aSrcList);
- void MergeSort(NamedExportSymbol** aDstList, NamedExportSymbol** aSrcList);
- void MergeSort(NamedExportSymbol** aDstList, NamedExportSymbol** aSrcList, \
- TUint aLeft, TUint aRight);
- TBool AddToDependency(TUint aOff);
- TBool CreateDependency();
- OrdZeroRecord* FindDependency(char* aName, TUint aLen);
- DllRec * SearchImports(char *aName);
- TInt GetLookupTblSize(){ return iSymInfoHdr.iSize;}
- void SetLookupTblBase(TInt);
- void GetExportSymInfoHeader(E32EpocExpSymInfoHdr& aSymInfoHdr);
- void SetExportSymInfo();
- TUint GetSymLookupSection(char* aBuff);
- };
-
-// This class is used to create symbols to support named lookups.
-//
- class NamedExportSymbol
- {
- public:
- NamedExportSymbol(char* aName, Elf32_Addr aValue);
- ~NamedExportSymbol()
- {
- delete iNext;
- }
-
- char* Name() { return iSymbolName;}
- void Name(char* aName) {iSymbolName = aName;}
-
- TUint NameOffset() {return iSymbolNameOffset;}
- void NameOffset(TUint aOffset) {iSymbolNameOffset = aOffset;}
-
- Elf32_Addr Value() { return iValue;}
- void Value(Elf32_Addr aValue) { iValue = aValue;}
-
- NamedExportSymbol* Next() { return iNext;}
- void Next(NamedExportSymbol* aNext) { iNext = aNext;}
-
- Elf32_Rel iReloc; // relocation entry for the symbol address
- TUint iSymRelocType; // Whether it is a code or data relocation for this symbol
- private:
- char* iSymbolName; // Symbol name
- TInt iSymIdx;
- TUint iSymbolNameOffset;// offset of name in string table.
- Elf32_Addr iValue; // symbol value - this is the address of the symbol
- NamedExportSymbol *iNext; // next symbol
- };
-
-// This class is used to support symbol lookup of the static dependencies by linking in their
-// 0th ordinal.
- class OrdZeroRecord
- {
- public:
- OrdZeroRecord(char* aName):
- iName(aName), iNext(0){}
- ~OrdZeroRecord()
- {
- delete iNext;
- }
- char *iName; // (linkas) name of the dependency
- Elf32_Rel iReloc; // a relocation entry for the 0th ordinal of each dependency
- OrdZeroRecord *iNext; // next dependency
- TUint iOffset;
- };
- struct NeededDLLsList
- {
- NeededDLLsList(TUint aOff) : iOffset(aOff), iNext(0)
- {}
- ~NeededDLLsList()
- {
- delete iNext;
- }
- TUint iOffset;
- NeededDLLsList *iNext;
- };
-
-#endif
-
+/*
+* Copyright (c) 2001-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:
+*
+*/
+
+
+#if !defined(__ELFDLL_H__)
+#define __ELFDLL_H__
+//#include <e32rom.h>
+#include "e32ldfmt.h"
+#include "elfdefs.h"
+#include "elffile.h"
+
+#define DLLSYMPREFIX "#<DLL>"
+#define DLLSYMPREFIX0 "#"
+#define DLLSYMSUFFIX "#<\\DLL>"
+#define ORDBASE 16
+#define EXPORTTABLENAME "DLL##ExportTable"
+#define EXPORTTABLESIZENAME "DLL##ExportTableSize"
+
+class NamedExportSymbol;
+class OrdZeroRecord;
+struct NeededDLLsList;
+
+const TUint KNameLookupOffsetFlag32 = 0x0001;
+
+class ELFFile::ELFDllData
+ {
+public:
+ ELFFile * iElfFile;
+
+ char * iDynStrTab;
+ // bytesize of the dynamic string table
+ TInt iDynStrTabSize;
+ Elf32_Sym * iDynSymTab;
+ // size of an entry in the dynamic symbol table
+ TInt iSymSize;
+ // the rela relocation table
+ Elf32_Rela * iRela;
+ // size of rela relocation table in bytes
+ TInt iRelaSz;
+ // size of a rela entry in bytes
+ TInt iRelaEnt;
+ // the rel relocation table
+ Elf32_Rel * iRel;
+ // size of rel relocation table in bytes
+ TInt iRelSz;
+ // size of a rel entry in bytes
+ TInt iRelEnt;
+
+ Elf32_HashTable * iHashTable;
+
+ // Exported symbols required for lookup via names.
+ NamedExportSymbol *iNamedExportSymbolHead;
+ // Number of exported symbols - this doesn't nclude the absent symbols.
+ TInt iNamedExportCount;
+ // header of the export symbol info table
+ E32EpocExpSymInfoHdr iSymInfoHdr;
+ // String table size for the symbol names.
+ TUint iSymStringTableSize;
+ TUint iStringNameOffset;
+
+ // Dependency list
+ // Static Dependencies - An 'import relocation' entry is required to be created
+ // for each such record.
+ OrdZeroRecord *iDepRecords;
+ OrdZeroRecord *iDepRecordsTail;
+
+ // List of names obtained from DT_NEEDED entries in ELF.
+ // The order in which they appear is the order in which symbol
+ // lookup shall be followed.
+ NeededDLLsList *iNeededDllNames;
+ NeededDLLsList *iNeededDllNamesTail;
+ // Ordinal 0 of this binary. - A local relocation needs to be created for this
+ // record.
+
+ OrdZeroRecord *iOrdZeroRec;
+ TInt iNamedLookupEnabled;
+
+ ELFDllData(ELFFile * f);
+ ~ELFDllData();
+ TBool Init();
+
+ TBool ParseDllSymbol(Elf32_Sym * s, char*& dll, TUint& len, TInt& ord);
+ class DllSymbol
+ {
+ public:
+ char * iDll;
+ TUint iLen;
+ TInt iOrd;
+ Elf32_Phdr * iSegment;
+ Elf32_Rel * iRel;
+ DllSymbol * iNext;
+
+ DllSymbol(char * n, TUint l, TInt o)
+ : iDll(n), iLen(l), iOrd(o), iSegment(0),iRel(0),iNext(0)
+ {}
+ ~DllSymbol()
+ {
+ delete iNext;
+ }
+ };
+ DllSymbol * DllSymbolP(Elf32_Sym * s);
+ TBool AddSymbol(DllSymbol * s);
+
+ class DllRec
+ {
+ public:
+ char * iName;
+ TUint iLen;
+ TInt nImports;
+ DllSymbol * iHead;
+ DllSymbol * iTail;
+ DllRec * iNext;
+
+ DllRec(char * n, TInt l, DllSymbol * s) :
+ iName(n), iLen(l), nImports(1), iHead(s), iTail(s), iNext(0)
+ {}
+ ~DllRec()
+ {
+ delete iHead;
+ delete iNext;
+ }
+ void AddSymbol(DllSymbol * s);
+ };
+
+ DllRec * iDllHead;
+ DllRec * iDllTail;
+
+ Elf32_Word iExportTableSymIdx;
+ Elf32_Word iExportTableSizeSymIdx;
+
+ TBool InitExportInfo();
+ TBool iImageIsDll;
+ TBool ImageIsDll() { return iImageIsDll; }
+
+ Elf32_Word FindSymbolIndex(const char* s);
+
+ TInt iNumberOfImports;
+ TInt iNumberOfExports;
+ TInt iNumberOfImportDlls;
+
+ TInt iStringTableSize;
+
+ TInt iNumberOfRelocs;
+ TInt iNumberOfCodeRelocs;
+ TInt iNumberOfDataRelocs;
+
+ TInt NumberOfImports(void);
+ TInt NumberOfExports(void);
+ TInt NumberOfImportDlls(void);
+
+ TInt NumberOfRelocs(void);
+
+ TInt NumberOfCodeRelocs() { return iNumberOfCodeRelocs; }
+ TInt NumberOfDataRelocs() { return iNumberOfDataRelocs; }
+
+ TBool GetRelocs(Elf32_Rel **aCodeRelocs, Elf32_Rel **aDataRelocs);
+
+ TUint GetExportTableOffset(void);
+ char * CreateImportSection(TInt &aSize);
+ TBool CreateSymLookupTable();
+ TBool SetupSymbolValues();
+ TBool SetupSymbolNames();
+ void Sort(NamedExportSymbol** aDstList, NamedExportSymbol* aSrcList);
+ void MergeSort(NamedExportSymbol** aDstList, NamedExportSymbol** aSrcList);
+ void MergeSort(NamedExportSymbol** aDstList, NamedExportSymbol** aSrcList, \
+ TUint aLeft, TUint aRight);
+ TBool AddToDependency(TUint aOff);
+ TBool CreateDependency();
+ OrdZeroRecord* FindDependency(char* aName, TUint aLen);
+ DllRec * SearchImports(char *aName);
+ TInt GetLookupTblSize(){ return iSymInfoHdr.iSize;}
+ void SetLookupTblBase(TInt);
+ void GetExportSymInfoHeader(E32EpocExpSymInfoHdr& aSymInfoHdr);
+ void SetExportSymInfo();
+ TUint GetSymLookupSection(char* aBuff);
+ };
+
+// This class is used to create symbols to support named lookups.
+//
+ class NamedExportSymbol
+ {
+ public:
+ NamedExportSymbol(char* aName, Elf32_Addr aValue);
+ ~NamedExportSymbol()
+ {
+ delete iNext;
+ }
+
+ char* Name() { return iSymbolName;}
+ void Name(char* aName) {iSymbolName = aName;}
+
+ TUint NameOffset() {return iSymbolNameOffset;}
+ void NameOffset(TUint aOffset) {iSymbolNameOffset = aOffset;}
+
+ Elf32_Addr Value() { return iValue;}
+ void Value(Elf32_Addr aValue) { iValue = aValue;}
+
+ NamedExportSymbol* Next() { return iNext;}
+ void Next(NamedExportSymbol* aNext) { iNext = aNext;}
+
+ Elf32_Rel iReloc; // relocation entry for the symbol address
+ TUint iSymRelocType; // Whether it is a code or data relocation for this symbol
+ private:
+ char* iSymbolName; // Symbol name
+ TInt iSymIdx;
+ TUint iSymbolNameOffset;// offset of name in string table.
+ Elf32_Addr iValue; // symbol value - this is the address of the symbol
+ NamedExportSymbol *iNext; // next symbol
+ };
+
+// This class is used to support symbol lookup of the static dependencies by linking in their
+// 0th ordinal.
+ class OrdZeroRecord
+ {
+ public:
+ OrdZeroRecord(char* aName):
+ iName(aName), iNext(0){}
+ ~OrdZeroRecord()
+ {
+ delete iNext;
+ }
+ char *iName; // (linkas) name of the dependency
+ Elf32_Rel iReloc; // a relocation entry for the 0th ordinal of each dependency
+ OrdZeroRecord *iNext; // next dependency
+ TUint iOffset;
+ };
+ struct NeededDLLsList
+ {
+ NeededDLLsList(TUint aOff) : iOffset(aOff), iNext(0)
+ {}
+ ~NeededDLLsList()
+ {
+ delete iNext;
+ }
+ TUint iOffset;
+ NeededDLLsList *iNext;
+ };
+
+#endif
+