diff -r 000000000000 -r 83f4b4db085c toolsandutils/e32tools/elf2e32/source/pl_elfproducer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolsandutils/e32tools/elf2e32/source/pl_elfproducer.h Tue Feb 02 01:39:43 2010 +0200 @@ -0,0 +1,150 @@ +// 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 ElfProducer for the elf2e32 tool +// @internalComponent +// @released +// +// + +#if !defined(_PL_ELFPRODUCER_H_) +#define _PL_ELFPRODUCER_H_ + +#include "pl_elfexecutable.h" +#include + +//enum for section index +typedef enum _SECTION_INDEX_ { + DUMMY_SECTION=0, + CODE_SECTION, + DYNAMIC_SECTION, + HASH_TBL_SECTION, + VER_DEF_SECTION, + VERSION_SECTION, + STRING_SECTION, + SYMBOL_SECTION, + SH_STR_SECTION, + MAX_SECTIONS=SH_STR_SECTION +}SECTION_INDEX; + +//enum for DYN entries +typedef enum _DYN_ENTRIES_ { + DSO_DT_DSONAME=0, + DSO_DT_SYMTAB, + DSO_DT_SYMENT, + DSO_DT_STRTAB, + DSO_DT_STRSZ, + DSO_DT_VERSYM, + DSO_DT_VERDEF, + DSO_DT_VERDEFNUM, + DSO_DT_HASH, + DSO_DT_NULL, + MAX_DYN_ENTS=DSO_DT_NULL, +}DYN_ENTRIES; + +#define DEFAULT_VERSION 2 +/** +This class provides elf contents for the dso file creation. It generates the +elf header, sections, dynamic array and the relocatrion entries. +@internalComponent +@released +*/ +class ElfProducer : public ElfExecutable +{ + + typedef std::list SymbolList; +public: + ElfProducer(ParameterListInterface *aParameterListInterface); + ~ElfProducer(); + + void SetSymbolList(SymbolList& aSymbolList); + void WriteElfFile(char* aDsoFullName,char* aDsoFileName, char* aLinkAs); + +private: + /** + * This list is passed from the UseCaseHandler via the DSOHandler to this class. + * This is used to create the export info when only a def file is available and + * the DSO needs to be generated for that. + */ + typedef std::string String; + /** The proxy DSO file name*/ + String iDSOName; + + /** The offset of the file name within the string table of the ELF file*/ + PLUINT32 iDSONameOffset; + + /** The DLL name that defines the export Symbols*/ + String iLinkAs; + + /** The offset of the DLL name within the string table within the ELF file*/ + PLUINT32 iLinkAsOffset; + + /** The export Symbol list*/ + SymbolList *iSymbolsList; + + /** The number of export Symbols*/ + PLUINT32 iNSymbols; + + /** The proxy DSO full file name*/ + String iDsoFullName; + + /*DSO content Fields*/ + + /** The Elf version definition auxiliary section*/ + Elf32_Verdaux *iDSODaux; + + /** The Buckets for the hash table*/ + Elf32_Sword *iDSOBuckets; + + /** The chains pointed to by the buckets belonging to the hash table*/ + Elf32_Sword *iDSOChains; + + /** The Elf Dynamic section table*/ + Elf32_Dyn iDSODynTbl[MAX_DYN_ENTS+1]; + + /** The code section*/ + PLUINT32 *iCodeSectionData; + + /** The Elf file offset maintained for writing the different sections of the Elf file*/ + PLUINT32 iElfFileOffset; + + /** The Elf String table*/ + String iDSOSymNameStrTbl; + + /** The Elf Section-header String table*/ + String iDSOSectionNames; + + + void InitElfContents(); + void Cleanup(); + void SetSymolFields(Symbol *aSym, Elf32_Sym* aElfSym, PLUINT32 aIndex); + void AddToHashTable(const char* aSymName, PLUINT32 aIndex); + void CreateVersionTable(); + void CreateElfHeader(); + void CreateSections(); + void SetSectionFields(PLUINT32 aSectionIndex, char* aSectionName, PLUINT32 aType, \ + PLUINT32 aEntSz, PLUINT32 aSectionSize, PLUINT32 aLink, \ + PLUINT32 aInfo, PLUINT32 aAddrAlign, PLUINT32 aFlags, \ + PLUINT32 aAddr); + void CreateDynamicEntries(); + void CreateProgHeader(); + + void WriteElfContents(); + void AlignString(String& aStr); + +}; + + + + +#endif // !defined(_PL_ELFPRODUCER_H_)