diff -r d27dfa8884ad -r da2cedce4920 analyzetool/commandlineengine/inc/catromsymbol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/analyzetool/commandlineengine/inc/catromsymbol.h Tue May 25 14:22:58 2010 +0300 @@ -0,0 +1,196 @@ +/* +* Copyright (c) 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: Defines CATRomSymbol, RofsBinary classes and Symbol +* structure. +* +*/ + + +#ifndef __CATROMSYMBOL_H__ +#define __CATROMSYMBOL_H__ + +#include "ATCommonDefines.h" +#include "iaddresstoline.h" + +const string ROM_SYMBOL_IDENTIFY_STRING = "80"; +const string ROFS_SYMBOL_IDENTIFY_STRING = "00"; +const int IDENTIFY_MAX_LINES_READ = 20; + +/** +* Represents a single symbol in a binary. +*/ +struct Symbol +{ + unsigned long iStartAddress; /** Start address */ + unsigned long iEndAddress; /** End address */ + string sFunction; /** Function/Symbol name */ + /** + * Default constructor for structure to set default values + */ + Symbol() { iStartAddress=0; iEndAddress=0; sFunction = ""; } + /** + * Empty destructor + */ + ~Symbol() {} +}; + + +/** +* Represents a single binary in ROM/ROFS which +* contains a collection of Symbols. +*/ +class RofsBinary { +public: + /** + * Constructor + */ + RofsBinary(); + /** + * Constructor + * @param sbinary + */ + RofsBinary( const string& sbinary ); + /** + * Destructor + */ + ~RofsBinary(); + + // Members + + string m_sBinary; /** Binary / code segment */ + vector vSymbols; /** Collection of symbols */ +}; + +/** +* Implements IAddressToLine interface to acquire symbol information +* using memory addresses from rom/rofs symbol files. +*/ +class CATRomSymbol : public IAddressToLine +{ +public: + /** + * Constructor. + */ + CATRomSymbol(); + /** + * Destructor. + */ + virtual ~CATRomSymbol(); + bool m_bShowProgressMessages; /** "Flag" will we show progress when reading files */ + /** + * Empty functions does nothing returns false always. + * @param sString + * @param iLong + * @return true if successful. + */ + bool Open( const string& sString, const unsigned long iLong); + /** + * Set symbol files. + * This also checks that files exists and identifies them as rom/rofs. + * @param vSymbols + * @return bool + */ + bool SetSymbols( const vector& vSymbols); + /** + * Get error string. In case of any method failed use this to acquire details on error. + * @return error string. + */ + string GetError( void ); + /** + * Close rom symbol file. + * @return true if succesful. + */ + bool Close( void ); + /** + * Locates symbol and binary name for given address if found in rom. + * @param result memory address object. + * @return true if successful. + */ + bool AddressToLine( CATMemoryAddress* result ); +#ifndef MODULE_TEST +private: +#endif + /** + * Represents the symbol files type + * (content is different / format ) + */ + enum SYMBOL_FILE_TYPE { + SYMBOL_FILE_INVALID = 0, /** not valid */ + SYMBOL_FILE_ROM, /** rom type */ + SYMBOL_FILE_ROFS /** rofs type */ + }; + /** + * Identify symbol file + * @param sFile + * @return int + */ + int IdentifySymbolFile( const string& sFile ); + /** + * Locate symbol and binary name for given address if found in rom. + * @param result + * @return bool + */ + bool AddressToLineRom( CATMemoryAddress* result ); + /** + * Locate symbol and binary name for given address if found in rofs. + * @param result + * @return bool + */ + bool AddressToLineRofs( CATMemoryAddress* result ); + /** + * Reads rom files. + * @return bool + */ + bool ReadRomFiles(); + /** + * Read specified rom file + * @param sFile + * @return bool + */ + bool ReadRomFile( const string& sFile ); + /** + * Read rofs files + * @return bool + */ + bool ReadRofsFiles(); + /** + * Read specified rofs file + * @param sFile + * @return bool + */ + bool ReadRofsFile( const string& sFile ); + /** + * Parse symbol from a line in rom/rofs file. + * @param sLine + * @param pSymbol + */ + void ParseSymbolFromLine( const string& sLine, Symbol* pSymbol ); +#ifndef MODULE_TEST +private: +#endif + + // Members + + bool m_bFilesIdentified; /** Have we identified symbol file(s) */ + bool m_bSymbolsRead; /** Have we read symbol file(s) */ + vector m_vRomFiles; /** Rom symbol file(s) */ + vector m_vRomCache; /** Cached rom symbols */ + vector m_vRomSymbols; /** All rom symbols */ + unsigned long m_iRomStartAddress; /** Rom start address */ + unsigned long m_iRomEndAddress; /** Rom end address */ + vector m_vRofsFiles; /** Rofs symbol file(s) */ + vector m_vRofsBinaries; /** Rofs binaries */ + string m_sErrorMessage; /** Error message */ +}; +#endif \ No newline at end of file