diff -r 000000000000 -r f0f2b8682603 memana/analyzetoolclient/commandlineengine/internal/inc/catromsymbol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/memana/analyzetoolclient/commandlineengine/internal/inc/catromsymbol.h Thu Feb 11 15:51:35 2010 +0200 @@ -0,0 +1,146 @@ +/* +* 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: Locates symbols/functions for memory addresses +* which are located in given rom/rofs symbol file. +* +*/ + + +#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; + +// Symbol structure. +struct Symbol +{ + // Start address. + unsigned long iStartAddress; + // End address. + unsigned long iEndAddress; + // Function/Symbol name. + string sFunction; + // Default constructor for structure. + Symbol() { iStartAddress=0; iEndAddress=0; sFunction = ""; } + ~Symbol() {} +}; + +// Rofs binary item class +class RofsBinary { +public: + string m_sBinary; + vector vSymbols; + RofsBinary(); + RofsBinary( const string& sbinary ); + ~RofsBinary(); +}; + + +class CATRomSymbol : public IAddressToLine +{ +public: + /** + * Constructor. + */ + CATRomSymbol(); + /** + * Destructor. + */ + virtual ~CATRomSymbol(); + /** + * "Flag" will we show progress when reading files. + */ + bool m_bShowProgressMessages; + /** + * Empty functions does nothing returns false always. + * @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. + * @vSymbols. + */ + 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. + * @result memory address object. + * @return true if successful. + */ + bool AddressToLine( CATMemoryAddress* result ); +#ifndef MODULE_TEST +private: +#endif + enum SYMBOL_FILE_TYPE { + SYMBOL_FILE_INVALID = 0, + SYMBOL_FILE_ROM, + SYMBOL_FILE_ROFS + }; + // Identify symbol file + int IdentifySymbolFile( const string& sFile ); + // Locate symbol and binary name for given address if found in rom. + bool AddressToLineRom( CATMemoryAddress* result ); + // Locate symbol and binary name for given address if found in rofs. + bool AddressToLineRofs( CATMemoryAddress* result ); + // Reads rom file. + bool ReadRomFiles(); + bool ReadRomFile( const string& sFile ); + // Read rofs file. + bool ReadRofsFiles(); + bool ReadRofsFile( const string& sFile ); + // Parse symbol from a line in rom/rofs file. + void ParseSymbolFromLine( const string& sLine, Symbol* pSymbol ); +#ifndef MODULE_TEST +private: +#endif + // Have we identified symbol file(s). + bool m_bFilesIdentified; + // Have we read symbol file(s). + bool m_bSymbolsRead; + + // Rom symbol file(s). + vector m_vRomFiles; + // Cached rom symbols. + vector m_vRomCache; + // All rom symbols. + vector m_vRomSymbols; + // Rom start address. + unsigned long m_iRomStartAddress; + // Rom end address. + unsigned long m_iRomEndAddress; + + // Rofs symbol file(s) + vector m_vRofsFiles; + // Rofs binaries + vector m_vRofsBinaries; + + // Error message. + string m_sErrorMessage; +}; +#endif \ No newline at end of file