analyzetool/commandlineengine/inc/catromsymbol.h
branchRCL_3
changeset 13 da2cedce4920
--- /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<Symbol*> 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<string>& 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<string> m_vRomFiles; /** Rom symbol file(s) */
+	vector<Symbol*> m_vRomCache; /** Cached rom symbols */
+	vector<Symbol*> m_vRomSymbols; /** All rom symbols */
+	unsigned long m_iRomStartAddress; /** Rom start address */
+	unsigned long m_iRomEndAddress; /** Rom end address */
+	vector<string> m_vRofsFiles; /** Rofs symbol file(s) */
+	vector<RofsBinary*> m_vRofsBinaries; /** Rofs binaries */
+	string m_sErrorMessage; /** Error message */
+};
+#endif
\ No newline at end of file