--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/e32tools/elf2e32/source/pl_elfproducer.h Tue Oct 27 16:36:35 2009 +0000
@@ -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 <string>
+
+//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<Symbol*> 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_)