Provisional fix for bug 3508 - Persistent storage support breaks Linux compatibility.
Enables libnvmemmory.so to be built and dynamically linked on Linux and rom boot reports persistent storage image created OK, but ROM then crashes.
/** 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 ROMDETAILS_H_#define ROMDETAILS_H_#include <vector>#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<XIPFileDetails> 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<std::string> iTargetFiles; std::vector<std::string> iExcludeFiles;};#endif /*ROMDETAILS_H_*/