tools/elf4rom/src/elfrom.h
changeset 34 92d87f2e53c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/elf4rom/src/elfrom.h	Fri Jan 15 09:07:44 2010 +0000
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+* 
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef ELFROM_H_
+#define ELFROM_H_
+
+#include <vector>
+//
+// Copyright (c) 2008 Symbian Software Ltd. All rights reserved.
+//
+
+#include <libelf.h>
+
+#include "romdetails.h"
+#include "outputfile.h"
+#include "elfheader.h"
+#include "e32romimage.h"
+#include "elfphdr.h"
+#include "elfsectionmanager.h"
+#include "elfsymboltablemanager.h"
+#include "dwarfmanager.h"
+
+class ElfRom {
+public:
+	ElfRom(RomDetails * aRomDetails) :
+		iRomDetails(aRomDetails), iOutputFile(aRomDetails->iElfRomFile),
+		iE32RomImage(aRomDetails->iRomFile),
+		iElfSectionManager(iElf32Header, iE32RomImage, iOutputFile),
+		iElfSymbolTableManager(iElf32Header, iE32RomImage, iOutputFile, iElfSectionManager),
+		iDwarfManager(iElfSectionManager, aRomDetails, iOutputFile),
+		iDwarfFound(false)
+		{}
+	void SetupE32RomData();
+	void SetupELFRomData();
+	void AddData();
+	void Dump();
+
+private:
+	typedef std::vector< Elf32_Shdr * > Elf32_Shdr_List;
+	
+private:
+	void SetupRomElf32_EHdr();
+	void SetupRomImage();
+	void SetupProgramHeaderTable();
+	size_t AddBootStrapProgramHeader();
+	size_t SetupProgramHeaders(XIPFileDetails & aXIPFileDetails, size_t offset, int addend);
+	void SetupAuxilarySections();
+	void SetupLogFile();
+	void SetupSectionHeaderTable();
+	void SetupSectionHeaders(XIPFileDetails & aXIPFileDetails);
+	void SetupSectionHeaders(XIPFileDetails & aXIPFileDetails, Elf * e, size_t shstrndx);
+	void SetUpSegmentInfo(XIPFileDetails & aXIPFileDetails, Elf * e);
+	size_t AddRoSectionHeader(XIPFileDetails & aXIPFileDetails, Elf32_Shdr * aShdr, char * aName);
+	size_t AddRwSectionHeader(XIPFileDetails & aXIPFileDetails, Elf32_Shdr * aShdr, char * aName);
+	size_t AddBssSectionHeader(XIPFileDetails & aXIPFileDetails, Elf32_Shdr * aShdr, char * aName);
+	size_t AddROMSectionHeader(XIPFileDetails & aXIPFileDetails, Elf32_Shdr * aShdr, char * aName, size_t aOffset);
+	size_t AddFinalHeader(size_t offset);
+	void SetupSymbolTable();
+	void SetupDwarfSections();
+	
+private:
+	RomDetails * iRomDetails;
+	OutputFile iOutputFile;
+	
+	Elf32Header iElf32Header;
+	E32RomImage iE32RomImage;
+
+	ElfPHdr	iBootStrapPHdr;
+
+	typedef std::vector<ElfPHdr> ElfPHdrList;
+	ElfPHdrList iElfPHdrList;
+	
+	ElfSectionManager iElfSectionManager;
+	ElfSymbolTableManager iElfSymbolTableManager;
+	DwarfManager iDwarfManager;
+	
+	bool iDwarfFound;
+
+};
+#endif /*ELFROM_H_*/