--- /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_*/