perfsrv/analyzetool/commandlineengine/inc/CATMemoryAddress.h
author hgs
Mon, 06 Sep 2010 15:00:47 +0300
changeset 51 98307c651589
parent 20 analyzetool/commandlineengine/inc/CATMemoryAddress.h@a71a3e32a2ae
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Defines the CATMemoryAddress class.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef __CATMEMORYADDRESS_H__
hgs
parents:
diff changeset
    20
#define __CATMEMORYADDRESS_H__
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include "../inc/ATCommonDefines.h"
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
/**
hgs
parents:
diff changeset
    25
* Represents a single memory address / call stack item.
hgs
parents:
diff changeset
    26
* State tells the "success" of locating the symbol / code line.
hgs
parents:
diff changeset
    27
* Contains some utility functions used in this feature.
hgs
parents:
diff changeset
    28
*/
hgs
parents:
diff changeset
    29
class CATMemoryAddress
hgs
parents:
diff changeset
    30
{
hgs
parents:
diff changeset
    31
public:
hgs
parents:
diff changeset
    32
	/**
hgs
parents:
diff changeset
    33
	* Enumeration representing the state of locating code lines.
hgs
parents:
diff changeset
    34
	*/
hgs
parents:
diff changeset
    35
	enum ADDRESS_TO_LINE_STATE
hgs
parents:
diff changeset
    36
	{
hgs
parents:
diff changeset
    37
		OUT_OF_PROCESS = 0, /** Not located code line.*/
hgs
parents:
diff changeset
    38
		OUT_OF_RANGE, /** Outside functions range. */
hgs
parents:
diff changeset
    39
		SYMBOL, /** Symbol/ Function located (no codeline) */
hgs
parents:
diff changeset
    40
		FUNCTION, /** Function and line number.*/
hgs
parents:
diff changeset
    41
		EXACT /** Exact code line located with all information.*/
hgs
parents:
diff changeset
    42
	};
hgs
parents:
diff changeset
    43
	/**
hgs
parents:
diff changeset
    44
	* Constructor
hgs
parents:
diff changeset
    45
	* @param sAddress
hgs
parents:
diff changeset
    46
	* @param iOffSet value used if need to use offset value
hgs
parents:
diff changeset
    47
	*/
hgs
parents:
diff changeset
    48
	CATMemoryAddress( string& sAddress, unsigned long iOffSet );
hgs
parents:
diff changeset
    49
	/**
hgs
parents:
diff changeset
    50
	* Destructor
hgs
parents:
diff changeset
    51
	*/
hgs
parents:
diff changeset
    52
	virtual ~CATMemoryAddress();
hgs
parents:
diff changeset
    53
	/**
hgs
parents:
diff changeset
    54
	* Find which binary this address belongs to.
hgs
parents:
diff changeset
    55
	* Sets also the offsetfrommodulestart.
hgs
parents:
diff changeset
    56
	* @param vDlls container of binarys to find from.
hgs
parents:
diff changeset
    57
	* @return true if found
hgs
parents:
diff changeset
    58
	*/
hgs
parents:
diff changeset
    59
	bool FindSetModuleName(vector<DLL_LOAD_INFO>* vDlls);
hgs
parents:
diff changeset
    60
	/**
hgs
parents:
diff changeset
    61
	* Get vector index to which module we found this address to belong to.
hgs
parents:
diff changeset
    62
	* @return -1 if not set.
hgs
parents:
diff changeset
    63
	*/
hgs
parents:
diff changeset
    64
	int GetDllLoadInfoIndex();
hgs
parents:
diff changeset
    65
	/**
hgs
parents:
diff changeset
    66
	* Note return value includes the set offset.
hgs
parents:
diff changeset
    67
	* So this value is not binary start - address.
hgs
parents:
diff changeset
    68
	* Instead it is.
hgs
parents:
diff changeset
    69
	* memory address - binary start address + offset
hgs
parents:
diff changeset
    70
	* @return adress
hgs
parents:
diff changeset
    71
	*/
hgs
parents:
diff changeset
    72
	unsigned long GetOffSetFromModuleStart();
hgs
parents:
diff changeset
    73
	/**
hgs
parents:
diff changeset
    74
	* Get the binary start address
hgs
parents:
diff changeset
    75
	* @return binary start address
hgs
parents:
diff changeset
    76
	*/
hgs
parents:
diff changeset
    77
	unsigned long GetModuleStartAddress() const;
hgs
parents:
diff changeset
    78
	/**
hgs
parents:
diff changeset
    79
	* Set time
hgs
parents:
diff changeset
    80
	* @param ullTime
hgs
parents:
diff changeset
    81
	*/
hgs
parents:
diff changeset
    82
	void SetTime( unsigned long long& ullTime );
hgs
parents:
diff changeset
    83
	/**
hgs
parents:
diff changeset
    84
	* Get time
hgs
parents:
diff changeset
    85
	* @return unsigned long long
hgs
parents:
diff changeset
    86
	*/
hgs
parents:
diff changeset
    87
	unsigned long long GetTime();
hgs
parents:
diff changeset
    88
	/**
hgs
parents:
diff changeset
    89
	* Set address
hgs
parents:
diff changeset
    90
	* @param sAddess
hgs
parents:
diff changeset
    91
	*/
hgs
parents:
diff changeset
    92
	void SetAddress( string& sAddress );
hgs
parents:
diff changeset
    93
	/**
hgs
parents:
diff changeset
    94
	* Get address string
hgs
parents:
diff changeset
    95
	* @return string
hgs
parents:
diff changeset
    96
	*/
hgs
parents:
diff changeset
    97
	string GetAddressString();
hgs
parents:
diff changeset
    98
	/**
hgs
parents:
diff changeset
    99
	* Set address
hgs
parents:
diff changeset
   100
	* @param iAddress
hgs
parents:
diff changeset
   101
	*/
hgs
parents:
diff changeset
   102
	void SetAddress( unsigned long iAddress );
hgs
parents:
diff changeset
   103
	/**
hgs
parents:
diff changeset
   104
	* Get Address
hgs
parents:
diff changeset
   105
	* @return unsigned long
hgs
parents:
diff changeset
   106
	*/
hgs
parents:
diff changeset
   107
	unsigned long GetAddress();
hgs
parents:
diff changeset
   108
	/**
hgs
parents:
diff changeset
   109
	* Set module name
hgs
parents:
diff changeset
   110
	* @param sModuleName
hgs
parents:
diff changeset
   111
	*/
hgs
parents:
diff changeset
   112
	void SetModuleName( string& sModuleName );
hgs
parents:
diff changeset
   113
	/**
hgs
parents:
diff changeset
   114
	* Get module name
hgs
parents:
diff changeset
   115
	* @return string
hgs
parents:
diff changeset
   116
	*/
hgs
parents:
diff changeset
   117
	string GetModuleName();
hgs
parents:
diff changeset
   118
	/**
hgs
parents:
diff changeset
   119
	* Set state of locating code line
hgs
parents:
diff changeset
   120
	* @param eState
hgs
parents:
diff changeset
   121
	*/
hgs
parents:
diff changeset
   122
	void SetAddressToLineState( ADDRESS_TO_LINE_STATE eState );
hgs
parents:
diff changeset
   123
	/**
hgs
parents:
diff changeset
   124
	* Get current state of locating code line
hgs
parents:
diff changeset
   125
	* @return int
hgs
parents:
diff changeset
   126
	*/
hgs
parents:
diff changeset
   127
	int GetAddressToLineState();
hgs
parents:
diff changeset
   128
	/**
hgs
parents:
diff changeset
   129
	* Set filename
hgs
parents:
diff changeset
   130
	* @param sFileName
hgs
parents:
diff changeset
   131
	*/
hgs
parents:
diff changeset
   132
	void SetFileName(string& sFileName);
hgs
parents:
diff changeset
   133
	/**
hgs
parents:
diff changeset
   134
	* Get filename
hgs
parents:
diff changeset
   135
	* @return string
hgs
parents:
diff changeset
   136
	*/
hgs
parents:
diff changeset
   137
	string GetFileName();
hgs
parents:
diff changeset
   138
	/**
hgs
parents:
diff changeset
   139
	* Set function name
hgs
parents:
diff changeset
   140
	* @param sFunctionName
hgs
parents:
diff changeset
   141
	*/
hgs
parents:
diff changeset
   142
	void SetFunctionName(string& sFunctionName);
hgs
parents:
diff changeset
   143
	/**
hgs
parents:
diff changeset
   144
	* Get function name
hgs
parents:
diff changeset
   145
	* @return string
hgs
parents:
diff changeset
   146
	*/
hgs
parents:
diff changeset
   147
	string GetFunctionName();
hgs
parents:
diff changeset
   148
	/**
hgs
parents:
diff changeset
   149
	* Set function line number
hgs
parents:
diff changeset
   150
	* @param iFunctionLineNumber
hgs
parents:
diff changeset
   151
	*/
hgs
parents:
diff changeset
   152
	void SetFunctionLineNumber(int iFunctionLineNumber);
hgs
parents:
diff changeset
   153
	/**
hgs
parents:
diff changeset
   154
	* Get function line number
hgs
parents:
diff changeset
   155
	* @return int
hgs
parents:
diff changeset
   156
	*/
hgs
parents:
diff changeset
   157
	int GetFunctionLineNumber();
hgs
parents:
diff changeset
   158
	/**
hgs
parents:
diff changeset
   159
	* Set exact line number
hgs
parents:
diff changeset
   160
	* @param iExactLineNumber
hgs
parents:
diff changeset
   161
	*/
hgs
parents:
diff changeset
   162
	void SetExactLineNumber(int iExactLineNumber);
hgs
parents:
diff changeset
   163
	/**
hgs
parents:
diff changeset
   164
	* Get exact line number
hgs
parents:
diff changeset
   165
	* @return int
hgs
parents:
diff changeset
   166
	*/
hgs
parents:
diff changeset
   167
	int GetExactLineNumber();
hgs
parents:
diff changeset
   168
	/**
hgs
parents:
diff changeset
   169
	* Set module start address
hgs
parents:
diff changeset
   170
	* @param iAddress
hgs
parents:
diff changeset
   171
	*/
hgs
parents:
diff changeset
   172
	void SetModuleStartAddress(unsigned long iAddress);
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
#ifndef MODULE_TEST
hgs
parents:
diff changeset
   175
private:
hgs
parents:
diff changeset
   176
#endif
hgs
parents:
diff changeset
   177
	// Used offset to add to addresses
hgs
parents:
diff changeset
   178
	unsigned long m_iOffSet;
hgs
parents:
diff changeset
   179
	// Address related members
hgs
parents:
diff changeset
   180
	string m_sAddress;
hgs
parents:
diff changeset
   181
	unsigned long m_iAddress;
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
	// Time (microseconds from 1970)
hgs
parents:
diff changeset
   184
	unsigned long long m_iTime;
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
	// Module related members(if FindSetModule is successful)
hgs
parents:
diff changeset
   187
	string m_sModuleName;
hgs
parents:
diff changeset
   188
	unsigned long m_iOffSetFromModuleStart;
hgs
parents:
diff changeset
   189
	unsigned long m_iModuleStartAddress;
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
	// Module to which address belong.
hgs
parents:
diff changeset
   192
	int m_iDllLoadinfoIndex;
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
	// Pin pointing related members
hgs
parents:
diff changeset
   195
	int m_ePinPointState;
hgs
parents:
diff changeset
   196
	string m_sFileName;
hgs
parents:
diff changeset
   197
	string m_sFunctionName;
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
	int m_iFunctionLineNumber;
hgs
parents:
diff changeset
   200
	int m_iExactLineNumber;
hgs
parents:
diff changeset
   201
};
hgs
parents:
diff changeset
   202
#endif