diff options
Diffstat (limited to 'contrib/llvm/tools/lldb/tools/lldb-mi/MICmdCmdGdbInfo.cpp')
-rw-r--r-- | contrib/llvm/tools/lldb/tools/lldb-mi/MICmdCmdGdbInfo.cpp | 334 |
1 files changed, 170 insertions, 164 deletions
diff --git a/contrib/llvm/tools/lldb/tools/lldb-mi/MICmdCmdGdbInfo.cpp b/contrib/llvm/tools/lldb/tools/lldb-mi/MICmdCmdGdbInfo.cpp index 62bb1f2..dde6a0b 100644 --- a/contrib/llvm/tools/lldb/tools/lldb-mi/MICmdCmdGdbInfo.cpp +++ b/contrib/llvm/tools/lldb/tools/lldb-mi/MICmdCmdGdbInfo.cpp @@ -8,15 +8,15 @@ //===----------------------------------------------------------------------===// //++ -// File: MICmdCmdGdbInfo.cpp +// File: MICmdCmdGdbInfo.cpp // -// Overview: CMICmdCmdGdbInfo implementation. +// Overview: CMICmdCmdGdbInfo implementation. // -// Environment: Compilers: Visual C++ 12. -// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 -// Libraries: See MIReadmetxt. +// Environment: Compilers: Visual C++ 12. +// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 +// Libraries: See MIReadmetxt. // -// Copyright: None. +// Copyright: None. //-- // Third party headers: @@ -31,202 +31,208 @@ #include "MICmnLLDBDebugSessionInfo.h" // Instantiations: -const CMICmdCmdGdbInfo::MapPrintFnNameToPrintFn_t CMICmdCmdGdbInfo::ms_mapPrintFnNameToPrintFn = -{ - { "sharedlibrary", &CMICmdCmdGdbInfo::PrintFnSharedLibrary } -}; +const CMICmdCmdGdbInfo::MapPrintFnNameToPrintFn_t CMICmdCmdGdbInfo::ms_mapPrintFnNameToPrintFn = { + {"sharedlibrary", &CMICmdCmdGdbInfo::PrintFnSharedLibrary}}; //++ ------------------------------------------------------------------------------------ -// Details: CMICmdCmdGdbInfo constructor. -// Type: Method. -// Args: None. -// Return: None. -// Throws: None. +// Details: CMICmdCmdGdbInfo constructor. +// Type: Method. +// Args: None. +// Return: None. +// Throws: None. //-- -CMICmdCmdGdbInfo::CMICmdCmdGdbInfo( void ) -: m_constStrArgNamedPrint( "print" ) -, m_bPrintFnRecognised( true ) -, m_bPrintFnSuccessful( false ) -, m_strPrintFnError( MIRSRC( IDS_WORD_ERR_MSG_NOT_IMPLEMENTED_BRKTS ) ) +CMICmdCmdGdbInfo::CMICmdCmdGdbInfo(void) + : m_constStrArgNamedPrint("print") + , m_bPrintFnRecognised(true) + , m_bPrintFnSuccessful(false) + , m_strPrintFnError(MIRSRC(IDS_WORD_ERR_MSG_NOT_IMPLEMENTED_BRKTS)) { - // Command factory matches this name with that received from the stdin stream - m_strMiCmd = "info"; - - // Required by the CMICmdFactory when registering *this command - m_pSelfCreatorFn = &CMICmdCmdGdbInfo::CreateSelf; + // Command factory matches this name with that received from the stdin stream + m_strMiCmd = "info"; + + // Required by the CMICmdFactory when registering *this command + m_pSelfCreatorFn = &CMICmdCmdGdbInfo::CreateSelf; } //++ ------------------------------------------------------------------------------------ -// Details: CMICmdCmdGdbInfo destructor. -// Type: Overrideable. -// Args: None. -// Return: None. -// Throws: None. +// Details: CMICmdCmdGdbInfo destructor. +// Type: Overrideable. +// Args: None. +// Return: None. +// Throws: None. //-- -CMICmdCmdGdbInfo::~CMICmdCmdGdbInfo( void ) +CMICmdCmdGdbInfo::~CMICmdCmdGdbInfo(void) { } //++ ------------------------------------------------------------------------------------ -// Details: The invoker requires this function. The parses the command line options -// arguments to extract values for each of those arguments. -// Type: Overridden. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. +// Details: The invoker requires this function. The parses the command line options +// arguments to extract values for each of those arguments. +// Type: Overridden. +// Args: None. +// Return: MIstatus::success - Functional succeeded. +// MIstatus::failure - Functional failed. +// Throws: None. //-- -bool CMICmdCmdGdbInfo::ParseArgs( void ) +bool +CMICmdCmdGdbInfo::ParseArgs(void) { - bool bOk = m_setCmdArgs.Add( *(new CMICmdArgValString( m_constStrArgNamedPrint, true, true ) ) ); - return (bOk && ParseValidateCmdOptions() ); + bool bOk = m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgNamedPrint, true, true))); + return (bOk && ParseValidateCmdOptions()); } //++ ------------------------------------------------------------------------------------ -// Details: The invoker requires this function. The command does work in this function. -// The command is likely to communicate with the LLDB SBDebugger in here. -// Type: Overridden. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. +// Details: The invoker requires this function. The command does work in this function. +// The command is likely to communicate with the LLDB SBDebugger in here. +// Type: Overridden. +// Args: None. +// Return: MIstatus::success - Functional succeeded. +// MIstatus::failure - Functional failed. +// Throws: None. //-- -bool CMICmdCmdGdbInfo::Execute( void ) +bool +CMICmdCmdGdbInfo::Execute(void) { - CMICMDBASE_GETOPTION( pArgPrint, String, m_constStrArgNamedPrint ); - const CMIUtilString & rPrintRequest( pArgPrint->GetValue() ); - - FnPrintPtr pPrintRequestFn = nullptr; - if( !GetPrintFn( rPrintRequest, pPrintRequestFn ) ) - { - m_strPrintFnName = rPrintRequest; - m_bPrintFnRecognised = false; - return MIstatus::success; - } - - m_bPrintFnSuccessful = (this->*(pPrintRequestFn))(); - - return MIstatus::success; + CMICMDBASE_GETOPTION(pArgPrint, String, m_constStrArgNamedPrint); + const CMIUtilString &rPrintRequest(pArgPrint->GetValue()); + + FnPrintPtr pPrintRequestFn = nullptr; + if (!GetPrintFn(rPrintRequest, pPrintRequestFn)) + { + m_strPrintFnName = rPrintRequest; + m_bPrintFnRecognised = false; + return MIstatus::success; + } + + m_bPrintFnSuccessful = (this->*(pPrintRequestFn))(); + + return MIstatus::success; } //++ ------------------------------------------------------------------------------------ -// Details: The invoker requires this function. The command prepares a MI Record Result -// for the work carried out in the Execute(). -// Type: Overridden. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. +// Details: The invoker requires this function. The command prepares a MI Record Result +// for the work carried out in the Execute(). +// Type: Overridden. +// Args: None. +// Return: MIstatus::success - Functional succeeded. +// MIstatus::failure - Functional failed. +// Throws: None. //-- -bool CMICmdCmdGdbInfo::Acknowledge( void ) +bool +CMICmdCmdGdbInfo::Acknowledge(void) { - if( !m_bPrintFnRecognised ) - { - const CMICmnMIValueConst miValueConst( CMIUtilString::Format( MIRSRC( IDS_CMD_ERR_INFO_PRINTFN_NOT_FOUND ), m_strPrintFnName.c_str() ) ); - const CMICmnMIValueResult miValueResult( "msg", miValueConst ); - const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult ); - m_miResultRecord = miRecordResult; - return MIstatus::success; - } - - if( m_bPrintFnSuccessful ) - { - const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done ); - m_miResultRecord = miRecordResult; - return MIstatus::success; - } - - const CMICmnMIValueConst miValueConst( CMIUtilString::Format( MIRSRC( IDS_CMD_ERR_INFO_PRINTFN_FAILED ), m_strPrintFnError.c_str() ) ); - const CMICmnMIValueResult miValueResult( "msg", miValueConst ); - const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult ); - m_miResultRecord = miRecordResult; - - return MIstatus::success; + if (!m_bPrintFnRecognised) + { + const CMICmnMIValueConst miValueConst(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INFO_PRINTFN_NOT_FOUND), m_strPrintFnName.c_str())); + const CMICmnMIValueResult miValueResult("msg", miValueConst); + const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult); + m_miResultRecord = miRecordResult; + return MIstatus::success; + } + + if (m_bPrintFnSuccessful) + { + const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done); + m_miResultRecord = miRecordResult; + return MIstatus::success; + } + + const CMICmnMIValueConst miValueConst(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INFO_PRINTFN_FAILED), m_strPrintFnError.c_str())); + const CMICmnMIValueResult miValueResult("msg", miValueConst); + const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult); + m_miResultRecord = miRecordResult; + + return MIstatus::success; } //++ ------------------------------------------------------------------------------------ -// Details: Required by the CMICmdFactory when registering *this command. The factory -// calls this function to create an instance of *this command. -// Type: Static method. -// Args: None. -// Return: CMICmdBase * - Pointer to a new command. -// Throws: None. +// Details: Required by the CMICmdFactory when registering *this command. The factory +// calls this function to create an instance of *this command. +// Type: Static method. +// Args: None. +// Return: CMICmdBase * - Pointer to a new command. +// Throws: None. //-- -CMICmdBase * CMICmdCmdGdbInfo::CreateSelf( void ) +CMICmdBase * +CMICmdCmdGdbInfo::CreateSelf(void) { - return new CMICmdCmdGdbInfo(); + return new CMICmdCmdGdbInfo(); } //++ ------------------------------------------------------------------------------------ -// Details: Retrieve the print function's pointer for the matching print request. -// Type: Method. -// Args: vrPrintFnName - (R) The info requested. -// vrwpFn - (W) The print function's pointer of the function to carry out -// Return: bool - True = Print request is implemented, false = not found. -// Throws: None. +// Details: Retrieve the print function's pointer for the matching print request. +// Type: Method. +// Args: vrPrintFnName - (R) The info requested. +// vrwpFn - (W) The print function's pointer of the function to carry out +// Return: bool - True = Print request is implemented, false = not found. +// Throws: None. //-- -bool CMICmdCmdGdbInfo::GetPrintFn( const CMIUtilString & vrPrintFnName, FnPrintPtr & vrwpFn ) const +bool +CMICmdCmdGdbInfo::GetPrintFn(const CMIUtilString &vrPrintFnName, FnPrintPtr &vrwpFn) const { - vrwpFn = nullptr; + vrwpFn = nullptr; - const MapPrintFnNameToPrintFn_t::const_iterator it = ms_mapPrintFnNameToPrintFn.find( vrPrintFnName ); - if( it != ms_mapPrintFnNameToPrintFn.end() ) - { - vrwpFn = (*it).second; - return true; - } + const MapPrintFnNameToPrintFn_t::const_iterator it = ms_mapPrintFnNameToPrintFn.find(vrPrintFnName); + if (it != ms_mapPrintFnNameToPrintFn.end()) + { + vrwpFn = (*it).second; + return true; + } - return false; + return false; } - + //++ ------------------------------------------------------------------------------------ -// Details: Carry out work to complete the request to prepare and send back information -// asked for. -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. +// Details: Carry out work to complete the request to prepare and send back information +// asked for. +// Type: Method. +// Args: None. +// Return: MIstatus::success - Functional succeeded. +// MIstatus::failure - Functional failed. +// Throws: None. //-- -bool CMICmdCmdGdbInfo::PrintFnSharedLibrary( void ) +bool +CMICmdCmdGdbInfo::PrintFnSharedLibrary(void) { - CMICmnStreamStdout & rStdout = CMICmnStreamStdout::Instance(); - bool bOk = rStdout.TextToStdout( "~\"From To Syms Read Shared Object Library\"" ); - - CMICmnLLDBDebugSessionInfo & rSessionInfo( CMICmnLLDBDebugSessionInfo::Instance() ); - lldb::SBTarget & rTarget = rSessionInfo.m_lldbTarget; - const MIuint nModules = rTarget.GetNumModules(); - for( MIuint i = 0; bOk && (i < nModules); i++ ) - { - lldb::SBModule module = rTarget.GetModuleAtIndex( i ); - if( module.IsValid() ) - { - const CMIUtilString strModuleFilePath( module.GetFileSpec().GetDirectory() ); - const CMIUtilString strModuleFileName( module.GetFileSpec().GetFilename() ); - const CMIUtilString strModuleFullPath( CMIUtilString::Format( "%s/%s", strModuleFilePath.c_str(), strModuleFileName.c_str() ) ); - const CMIUtilString strHasSymbols = (module.GetNumSymbols() > 0) ? "Yes" : "No"; - lldb::addr_t addrLoadS = 0xffffffff; - lldb::addr_t addrLoadSize = 0; - bool bHaveAddrLoad = false; - const MIuint nSections = module.GetNumSections(); - for( MIuint j = 0; j < nSections; j++ ) - { - lldb::SBSection section = module.GetSectionAtIndex( j ); - lldb::addr_t addrLoad = section.GetLoadAddress( rTarget ); - if( addrLoad != (lldb::addr_t) -1 ) - { - if( !bHaveAddrLoad ) - { - bHaveAddrLoad = true; - addrLoadS = addrLoad; - } - - addrLoadSize += section.GetByteSize(); - } - } - bOk = bOk && rStdout.TextToStdout( CMIUtilString::Format( "~\"0x%08x\t0x%08x\t%s\t\t%s\"", addrLoadS, addrLoadS + addrLoadSize, strHasSymbols.c_str(), strModuleFullPath.c_str() ) ); - } - } - - return bOk; + CMICmnStreamStdout &rStdout = CMICmnStreamStdout::Instance(); + bool bOk = rStdout.TextToStdout("~\"From To Syms Read Shared Object Library\""); + + CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance()); + lldb::SBTarget &rTarget = rSessionInfo.m_lldbTarget; + const MIuint nModules = rTarget.GetNumModules(); + for (MIuint i = 0; bOk && (i < nModules); i++) + { + lldb::SBModule module = rTarget.GetModuleAtIndex(i); + if (module.IsValid()) + { + const CMIUtilString strModuleFilePath(module.GetFileSpec().GetDirectory()); + const CMIUtilString strModuleFileName(module.GetFileSpec().GetFilename()); + const CMIUtilString strModuleFullPath(CMIUtilString::Format("%s/%s", strModuleFilePath.c_str(), strModuleFileName.c_str())); + const CMIUtilString strHasSymbols = (module.GetNumSymbols() > 0) ? "Yes" : "No"; + lldb::addr_t addrLoadS = 0xffffffff; + lldb::addr_t addrLoadSize = 0; + bool bHaveAddrLoad = false; + const MIuint nSections = module.GetNumSections(); + for (MIuint j = 0; j < nSections; j++) + { + lldb::SBSection section = module.GetSectionAtIndex(j); + lldb::addr_t addrLoad = section.GetLoadAddress(rTarget); + if (addrLoad != (lldb::addr_t) - 1) + { + if (!bHaveAddrLoad) + { + bHaveAddrLoad = true; + addrLoadS = addrLoad; + } + + addrLoadSize += section.GetByteSize(); + } + } + bOk = bOk && + rStdout.TextToStdout(CMIUtilString::Format("~\"0x%08x\t0x%08x\t%s\t\t%s\"", addrLoadS, addrLoadS + addrLoadSize, + strHasSymbols.c_str(), strModuleFullPath.c_str())); + } + } + + return bOk; } |