toolsandutils/e32tools/elf2e32/source/pl_elfexecutable.h
branchGCC_SURGE
changeset 56 626366955efb
parent 55 59148e28d9f6
child 57 e69da8462916
--- a/toolsandutils/e32tools/elf2e32/source/pl_elfexecutable.h	Fri Jun 25 18:24:47 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,247 +0,0 @@
-// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "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:
-// Implementation of the Class ElfExecutable for the elf2e32 tool
-// @internalComponent
-// @released
-// 
-//
-
-#if !defined(_PL_ELFEXECUTABLE_H_)
-#define _PL_ELFEXECUTABLE_H_
-
-#include "pl_common.h"
-#include <list>
-#include <hash_map>
-#include "pl_elfimports.h"
-#include "pl_elfrelocations.h"
-#include "pl_elfexports.h"
-
-using std::list;
-using std::hash_map;
-
-class DllSymbol;
-class Symbol;
-class ElfRelocations;
-class ElfExports;
-class ParameterListInterface;
-class ElfLocalRelocation;
-/**
-This class is for ELF object carrying the elf header, sections, segments.
-@internalComponent
-@released
-*/
-class ElfExecutable
-{
-
-public:
-	ElfExecutable(ParameterListInterface *aParameterListInterface);
-	virtual ~ElfExecutable();
-	
-	PLUINT32 ProcessElfFile(Elf32_Ehdr *aElfHdr);
-	void DumpElfFile(char* aFile);
-
-	PLUINT32 ProcessSymbols();
-	ElfImports::ImportMap GetImports();
-	ElfExports* GetExports();
-	DllSymbol* AddToExports(char* aDll, DllSymbol* aSymbol);
-	void AddToImports(ElfImportRelocation* aReloc);
-	PLUINT32 AddToRelocations(ElfRelocation* aReloc);
-	void AddToLocalRelocations(ElfRelocation* aReloc);
-	void ProcessVerInfo();
-
-	Elf32_Sym* FindSymbol(char* aSymName);
-
-	PLUINT32 GetSymbolOrdinal( char* aSymName);
-	PLUINT32 GetSymbolOrdinal( Elf32_Sym* );
-	char* GetSymbolName( PLUINT32 aSymIdx);
-	Elf32_Word GetRelocationOffset(ElfRelocation * aReloc);
-	Elf32_Word *GetRelocationPlace(ElfRelocation * aReloc);
-
-	Elf32_Word GetROBase();
-	Elf32_Word GetRWBase();
-	size_t GetROSize();
-	size_t GetRWSize();
-	size_t GetBssSize();
-	MemAddr GetRawROSegment();
-	MemAddr GetRawRWSegment();
-	Elf32_Word EntryPointOffset();
-	ESegmentType SegmentType(Elf32_Addr aAddr);
-	Elf32_Phdr* Segment(Elf32_Addr aAddr);
-	ElfRelocations::RelocationList & GetCodeRelocations();
-	ElfRelocations::RelocationList & GetDataRelocations();
-	ElfRelocations& GetLocalRelocations();
-	bool ExeceptionsPresentP();
-	ElfExports::ExportList& GetExportsInOrdinalOrder();
-	Elf32_Sym* LookupStaticSymbol(char * aName);
-public:
-	/**
-	 * The elf header pointer which points to the base of the file records
-	 */
-	Elf32_Ehdr	*iElfHeader;
-	Elf32_Addr	iEntryPoint;
-	/**
-	 * The dynamic program header of the elf file
-	 */
-	Elf32_Phdr	*iProgHeader;
-
-	PLUINT32	iSONameOffset;
-	char		*iSOName;
-	/**
-	 * This member points to the base of the section header table.
-	 */
-	Elf32_Shdr		*iSections;
-	Elf32_Verdef	*iVersionDef;
-	PLUINT32		iVerDefCount;
-	Elf32_Verneed	*iVersionNeed;
-	PLUINT32		iVerNeedCount;
-	Elf32_Half		*iVersionTbl;
-	PLUINT32		iRelSize;
-	PLUINT32		iRelEntSize;
-	PLUINT32		iNRelocs;
-	Elf32_Rel		*iRel;
-	PLUINT32		iRelaSize;
-	PLUINT32		iRelaEntSize;
-	Elf32_Rela		*iRela;
-	char			*iStringTable;
-	char			*iSectionHdrStrTbl;
-
-	list<char*>		iNeeded;
-	VersionInfo		*iVerInfo;
-	/**
-	 * The dynamic symbol array.
-	 */
-	Elf32_Sym		*iElfDynSym;//The ELF symbol
-	hash_map<PLUINT32, DllSymbol*>	iSymbolTable; //The representation
-
-	/**
-	 * The static symbol table.
-	 */
-	Elf32_Sym *iSymTab; 
-	char *iStrTab;
-	Elf32_Sym *iLim;
-
-	PLUINT32		iNSymbols;
-	Elf32_HashTable	*iHashTbl;
-	Elf32_Phdr		*iDynSegmentHdr;
-	Elf32_Phdr		*iDataSegmentHdr;
-	MemAddr			iDataSegment;
-	size_t			iDataSegmentSize;
-	PLUINT32		iDataSegmentIdx;
-	Elf32_Phdr		*iCodeSegmentHdr;
-	MemAddr			iCodeSegment;
-	size_t			iCodeSegmentSize;
-	PLUINT32		iCodeSegmentIdx;
-	ElfImports		iImports;
-	ElfExports		*iExports;
-	ElfRelocations  iLocalRelocations;
-	ParameterListInterface *iParameterListInterface;
-	PLUINT32		iPltGotBase;
-	PLUINT32		iPltGotLimit;
-	PLUINT32		iStrTabSz;
-	PLUINT32		iSymEntSz;
-	Elf32_Word		*iPltGot;
-	PLUINT32		iPltRelType;
-	Elf32_Rel		*iPltRel;
-	PLUINT32		iPltRelaSz;
-	Elf32_Rela		*iPltRela;
-	PLUINT32		iPltRelSz;
-	PLUINT32		iJmpRelOffset;
-
-	PLUINT32	ValidateElfFile();
-	PLUINT32	ProcessDynamicEntries();
-	void	ProcessRelocations();
-	template <class T> void	ProcessRelocations(T *aElfRel, size_t aSize);
-
-	VersionInfo* GetVersionInfo(PLUINT32 aIndex);
-	char*		SymbolDefinedInDll(PLUINT32 aSymbolIndex);
-	void SetVersionRecord( ElfRelocation* aReloc );
-
-/** This function says if the Symbol is a global symbol
-@return It returns true if the Symbol is a global one.
-@param aSym The reference to the Symbol whose attribute is being checked
-*/
-bool GlobalSymbol(Elf32_Sym* aSym);
-
-/** This function says if the Symbol is Exported
-@return It returns true if the Symbol is an exported one.
-@param aSym The reference to the Symbol whose attribute is being checked
-*/
-bool ExportedSymbol(Elf32_Sym* aSym);
-
-/** This function says if the Symbol is Imported
-@return It returns true if the Symbol is an imported one.
-@param aSym The reference to the Symbol whose attribute is being checked
-*/
-bool ImportedSymbol(Elf32_Sym* aSym);
-
-/** This function says if the Symbol is a Code Symbol
-@return It returns true if the Symbol is of Code type.
-@param aSym The reference to the Symbol whose attribute is being checked
-*/
-bool FunctionSymbol(Elf32_Sym* aSym);
-
-/** This function says if the Symbol is a Data Symbol
-@return It returns true if the Symbol is of Data type.
-@param aSym The reference to the Symbol whose attribute is being checked
-*/
-bool DataSymbol(Elf32_Sym* aSym);
-
-/** This function says if the Symbol is Defined
-@return It returns true if the Symbol is defined.
-@param aSym The reference to the Symbol whose attribute is being checked
-*/
-bool DefinedSymbol(Elf32_Sym* aSym);
-
-/** This function says if the Symbol has a default Visibility
-@return It returns true if the Symbol has a default Visibility
-@param aSym The reference to the Symbol whose attribute is being checked
-*/
-bool VisibleSymbol(Elf32_Sym* aSym);
-
-/** This function finds the segment in which this address belongs
-@return the segment type
-@param aAddr The address within the executable
-*/
-
-Elf32_Word Addend(Elf32_Rel* aRel);
-Elf32_Word Addend(Elf32_Rela* aRel);
-
-char* SymbolFromDSO(PLUINT32  aSymbolIndex);
-Elf32_Word* GetFixupLocation(ElfLocalRelocation* aReloc, Elf32_Addr aPlace);
-ESegmentType Segment(Elf32_Sym *aSym);
-Elf32_Phdr* SegmentFromAbs(Elf32_Addr aAddr);
-Elf32_Phdr* Segment(ESegmentType aType);
-
-/** This function processes the linker generated Veneer symbols and
- *  creates a relocation entry.
- */
-void ProcessVeneers();
-/** This function processes the ELF file to find the static symbol table.
-*/
-void FindStaticSymbolTable();
-/** This function finds the .comment section
-@return the pointer to the comment section
-*/
-char* FindCommentSection();
-/** This function finds the value at the address passed in
-@return the value at the address passed in
-@param aAddr The address within the executable
-*/
-Elf32_Word FindValueAtLoc(Elf32_Addr aOffset);
-};
-
-
-
-
-#endif // !defined(_PL_ELFEXECUTABLE_H_)