diff -r a587897e3bb2 -r 2925e6e5efd7 tools/elf4rom/src/romdetails.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/elf4rom/src/romdetails.h Tue Jan 26 13:28:08 2010 +0000 @@ -0,0 +1,151 @@ +/* +* 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 . +*/ + +#ifndef ROMDETAILS_H_ +#define ROMDETAILS_H_ + +#include + +#include "defs.h" + +class XIPFileDetails { +public: + XIPFileDetails(): + iE32File(""), + iElfFile(""), + iLoadAddr(0x0), + iROAddr(0x0), + iROSize(0), + iRWAddr(0x0), + iRWSize(0), + iROMDataAddr(0), + iBSSAddr(0), + iBSSDataSize(0), + iElfTextBase(0), + iElfTextLimit(0), + iElfDataBase(0), + iRVCTProduced(false), + iGCCProduced(false) + {}; + XIPFileDetails(PathName & aE32File,PathName & aELFFile, LinearAddr load, LinearAddr text, size_t textSize, + VirtualAddr data, size_t dataSize, LinearAddr aRomData, VirtualAddr bss, + size_t bssDataSize): + iE32File(aE32File), + iElfFile(aELFFile), + iLoadAddr(load), + iROAddr(text), + iROSize(textSize), + iRWAddr(data), + iRWSize(dataSize), + iROMDataAddr(aRomData), + iBSSAddr(bss), + iBSSDataSize(bssDataSize), + iElfTextBase(0), + iElfTextLimit(0), + iElfDataBase(0), + iRVCTProduced(false), + iGCCProduced(false) + {}; + XIPFileDetails(char * aE32File,char * aELFFile, LinearAddr load, LinearAddr text, size_t textSize, + VirtualAddr data, size_t dataSize, LinearAddr aRomData, VirtualAddr bss, + size_t bssDataSize): + iE32File(aE32File), + iElfFile(aELFFile), + iLoadAddr(load), + iROAddr(text), + iROSize(textSize), + iRWAddr(data), + iRWSize(dataSize), + iROMDataAddr(aRomData), + iBSSAddr(bss), + iBSSDataSize(bssDataSize), + iElfTextBase(0), + iElfTextLimit(0), + iElfDataBase(0), + iRVCTProduced(false), + iGCCProduced(false) + {}; + + LinearAddr Relocate(LinearAddr addr){ + if ((addr >= iElfTextBase) && (addr < iElfTextLimit)){ + size_t offset = addr - iElfTextBase; + return iROAddr + offset; + } else if ((addr >= iElfDataBase) && (addr < (iElfDataBase + iBSSDataSize))) { + size_t offset = addr - iElfDataBase; + return iRWAddr + offset; + } else { + return addr; + } + } + PathName iE32File; + PathName iElfFile; + LinearAddr iLoadAddr; + LinearAddr iROAddr; + size_t iROSize; + VirtualAddr iRWAddr; + size_t iRWSize; + LinearAddr iROMDataAddr; + VirtualAddr iBSSAddr; + size_t iBSSDataSize; + VirtualAddr iElfTextBase; + VirtualAddr iElfTextLimit; + VirtualAddr iElfDataBase; + // This is dodgy. We probably need a better way of coping with 'oddities' + bool iRVCTProduced; + bool iGCCProduced; +}; + +class RomDetails { +public: + RomDetails(): + iBoardName(""), + iRomFile(""), + iElfRomFile(""), + iLogFile(""), + iDrive(""), + iRomPhysAddr(0), + iRomBaseLinearAddr(0), + iKernelDataVirtualAddr(0), + iNoDwarf(false), + iSearch(false), + iStrip(false), + iTrace(false), + iVerbosity(0) + {} + + typedef std::vector XIPFileList; + String iBoardName; + PathName iRomFile; + PathName iElfRomFile; + PathName iLogFile; + PathName iDrive; + LinearAddr iRomPhysAddr; + LinearAddr iRomBaseLinearAddr; + VirtualAddr iKernelDataVirtualAddr; + XIPFileDetails iPrimary; + XIPFileList iXIPFiles; + bool iNoDwarf; + bool iSearch; + bool iStrip; + bool iTrace; + unsigned int iVerbosity; + std::vector iTargetFiles; + std::vector iExcludeFiles; + +}; +#endif /*ROMDETAILS_H_*/