diff -r 000000000000 -r f0f2b8682603 memana/analyzetoolclient/commandlineengine/internal/src/CATMemoryAddress.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/memana/analyzetoolclient/commandlineengine/internal/src/CATMemoryAddress.cpp Thu Feb 11 15:51:35 2010 +0200 @@ -0,0 +1,307 @@ +/* +* 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: Class representing a memory address and its details. +* +*/ + + +#include "../inc/CATMemoryAddress.h" +#include "../inc/CATBase.h" + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::CATMemoryAddress +// Constructor +// ----------------------------------------------------------------------------- +CATMemoryAddress::CATMemoryAddress(string& sAddress, unsigned long iOffSet) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::CATMemoryAddress"); + m_sAddress = sAddress; + m_sFileName = ""; + m_sFunctionName = ""; + m_sModuleName = ""; + m_iAddress = CATBase::_httoi( sAddress.c_str() ); + m_iDllLoadinfoIndex = -1; + m_iModuleStartAddress = 0; + m_iOffSetFromModuleStart = 0; + m_iExactLineNumber = -1; + m_iFunctionLineNumber = -1; + m_ePinPointState = OUT_OF_PROCESS; + m_iOffSet = iOffSet; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::~CATMemoryAddress +// Destructor. +// ----------------------------------------------------------------------------- +CATMemoryAddress::~CATMemoryAddress() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::~CATMemoryAddress"); +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::FindSetModuleName +// Find which binary this address belongs to. +// Sets also the offsetfrommodulestart. +// ----------------------------------------------------------------------------- +bool CATMemoryAddress::FindSetModuleName(vector* vDlls) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::FindSetModuleName"); + vector::iterator it; + for ( it = vDlls->begin() ; + it != vDlls->end(); it++ ) + { + // Is modules load time defined? + if ( (*it).iLoadTime > 0 ) + { + // Check that load time is earlier or same as allocation + if ( m_iTime >= (*it).iLoadTime + && m_iAddress >= (*it).iStartAddress + && m_iAddress < (*it).iEndAddress ) + { + // Module is loaded until process end. + if ( (*it).iUnloadTime == 0 ) + break; + // Check is allocation done before module was unloaded. + else if ( (*it).iUnloadTime >= m_iTime ) + break; + } + } + // Module has no time defined use only code segments. + else + { + if ( m_iAddress >= (*it).iStartAddress + && m_iAddress < (*it).iEndAddress ) + break; + } + } + + // Did we not find module where address is? + if ( it == vDlls->end() ) + return false; + + m_ePinPointState = OUT_OF_RANGE; + m_sModuleName = (*it).sModuleName; + m_iModuleStartAddress = (*it).iStartAddress; + m_iOffSetFromModuleStart = m_iAddress - m_iModuleStartAddress; + m_iOffSetFromModuleStart += m_iOffSet; + m_iDllLoadinfoIndex = distance( vDlls->begin(), it ) ; + return true; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::SetModuleStartAddress +// Set start address of the binary in which address resides. +// Note, this also sets the offset from start value. +// ----------------------------------------------------------------------------- +void CATMemoryAddress::SetModuleStartAddress(unsigned long iAddress) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::SetModuleStartAddress"); + m_iModuleStartAddress = iAddress; + m_iOffSetFromModuleStart = m_iAddress - m_iModuleStartAddress; + m_iOffSetFromModuleStart += m_iOffSet; +} + + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetOffSetFromModuleStart +// Note return value includes the set offset. +// So this value is not binary start - address. +// Instead it is. +// memory address - binary start address + offset +// ----------------------------------------------------------------------------- +unsigned long CATMemoryAddress::GetOffSetFromModuleStart() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetOffSetFromModuleStart"); + return m_iOffSetFromModuleStart; +} + +int CATMemoryAddress::GetDllLoadInfoIndex() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetDllLoadInfo"); + return m_iDllLoadinfoIndex; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::SetTime +// ----------------------------------------------------------------------------- +void CATMemoryAddress::SetTime( unsigned long long& ullTime ) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::SetTime"); + m_iTime = ullTime; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetTIme +// ----------------------------------------------------------------------------- +unsigned long long CATMemoryAddress::GetTime() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetTime"); + return m_iTime; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::SetAddress +// ----------------------------------------------------------------------------- +void CATMemoryAddress::SetAddress(string& sAddress) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::SetAddress"); + m_sAddress = sAddress; + m_iAddress = CATBase::_httoi( sAddress.c_str() ); +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetAddressString +// ----------------------------------------------------------------------------- +string CATMemoryAddress::GetAddressString() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetAddressString"); + return m_sAddress; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::SetAddress +// ----------------------------------------------------------------------------- +void CATMemoryAddress::SetAddress(unsigned long iAddress) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::SetAddress"); + m_iAddress = iAddress; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetAddress +// ----------------------------------------------------------------------------- +unsigned long CATMemoryAddress::GetAddress() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetAddress"); + return m_iAddress; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::SetModuleName +// ----------------------------------------------------------------------------- +void CATMemoryAddress::SetModuleName(string& sModuleName) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::SetModuleName"); + m_sModuleName = sModuleName; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetModuleName +// ----------------------------------------------------------------------------- +string CATMemoryAddress::GetModuleName() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetModuleName"); + return m_sModuleName; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::SetAddressToLineState +// ----------------------------------------------------------------------------- +void CATMemoryAddress::SetAddressToLineState( ADDRESS_TO_LINE_STATE eState ) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::SetAddressToLineState"); + m_ePinPointState = eState; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetAddressToLineState +// ----------------------------------------------------------------------------- +int CATMemoryAddress::GetAddressToLineState() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetAddressToLineState"); + return m_ePinPointState; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::SetFileName +// ----------------------------------------------------------------------------- +void CATMemoryAddress::SetFileName(string& sFileName) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::SetFileName"); + m_sFileName = sFileName; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetFileName +// ----------------------------------------------------------------------------- +string CATMemoryAddress::GetFileName() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetFileName"); + return m_sFileName; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::SetFunctionName +// ----------------------------------------------------------------------------- +void CATMemoryAddress::SetFunctionName(string& sFunctionName) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::SetFunctionName"); + m_sFunctionName = sFunctionName; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetFunctionName +// ----------------------------------------------------------------------------- +string CATMemoryAddress::GetFunctionName() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetFunctionName"); + return m_sFunctionName; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::SetFunctionLineNumber +// ----------------------------------------------------------------------------- +void CATMemoryAddress::SetFunctionLineNumber(int iFunctionLineNumber) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::SetFunctionLineNumber"); + m_iFunctionLineNumber = iFunctionLineNumber; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetFunctionLineNumber +// ----------------------------------------------------------------------------- +int CATMemoryAddress::GetFunctionLineNumber() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetFunctionLineNumber"); + return m_iFunctionLineNumber; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::SetExactLineNumber +// ----------------------------------------------------------------------------- +void CATMemoryAddress::SetExactLineNumber(int iExactLineNumber) +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::SetExactLineNumber"); + m_iExactLineNumber = iExactLineNumber; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetExactLineNumber +// ----------------------------------------------------------------------------- +int CATMemoryAddress::GetExactLineNumber() +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetExactLineNumber"); + return m_iExactLineNumber; +} + +// ----------------------------------------------------------------------------- +// CATMemoryAddress::GetModuleStartAddress +// ----------------------------------------------------------------------------- +unsigned long CATMemoryAddress::GetModuleStartAddress() const +{ + LOG_LOW_FUNC_ENTRY("CATMemoryAddress::GetModuleStartAddress"); + return m_iModuleStartAddress; +} + +//EOF