diff options
Diffstat (limited to 'tools/lldb-mi/MICmdCmdFile.cpp')
-rw-r--r-- | tools/lldb-mi/MICmdCmdFile.cpp | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/tools/lldb-mi/MICmdCmdFile.cpp b/tools/lldb-mi/MICmdCmdFile.cpp index 83862f2..b28060e 100644 --- a/tools/lldb-mi/MICmdCmdFile.cpp +++ b/tools/lldb-mi/MICmdCmdFile.cpp @@ -7,17 +7,7 @@ // //===----------------------------------------------------------------------===// -//++ -// File: MICmdCmdFile.cpp -// // Overview: CMICmdCmdFileExecAndSymbols implementation. -// -// Environment: Compilers: Visual C++ 12. -// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 -// Libraries: See MIReadmetxt. -// -// Copyright: None. -//-- // Third Party Headers: #include "lldb/API/SBStream.h" @@ -29,7 +19,9 @@ #include "MICmnLLDBDebugSessionInfo.h" #include "MIUtilFileStd.h" #include "MICmdArgValFile.h" +#include "MICmdArgValString.h" #include "MICmdArgValOptionLong.h" +#include "MICmdArgValOptionShort.h" //++ ------------------------------------------------------------------------------------ // Details: CMICmdCmdFileExecAndSymbols constructor. @@ -41,6 +33,8 @@ CMICmdCmdFileExecAndSymbols::CMICmdCmdFileExecAndSymbols(void) : m_constStrArgNameFile("file") , m_constStrArgThreadGrp("thread-group") + , m_constStrArgNamedPlatformName("p") + , m_constStrArgNamedRemotePath("r") { // Command factory matches this name with that received from the stdin stream m_strMiCmd = "file-exec-and-symbols"; @@ -75,6 +69,12 @@ CMICmdCmdFileExecAndSymbols::ParseArgs(void) bool bOk = m_setCmdArgs.Add( *(new CMICmdArgValOptionLong(m_constStrArgThreadGrp, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1))); bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValFile(m_constStrArgNameFile, true, true))); + bOk = bOk && + m_setCmdArgs.Add(*(new CMICmdArgValOptionShort(m_constStrArgNamedPlatformName, false, true, + CMICmdArgValListBase::eArgValType_String, 1))); + bOk = bOk && + m_setCmdArgs.Add(*(new CMICmdArgValOptionShort(m_constStrArgNamedRemotePath, false, true, + CMICmdArgValListBase::eArgValType_StringQuotedNumberPath, 1))); return (bOk && ParseValidateCmdOptions()); } @@ -93,20 +93,28 @@ bool CMICmdCmdFileExecAndSymbols::Execute(void) { CMICMDBASE_GETOPTION(pArgNamedFile, File, m_constStrArgNameFile); + CMICMDBASE_GETOPTION(pArgPlatformName, OptionShort, m_constStrArgNamedPlatformName); + CMICMDBASE_GETOPTION(pArgRemotePath, OptionShort, m_constStrArgNamedRemotePath); CMICmdArgValFile *pArgFile = static_cast<CMICmdArgValFile *>(pArgNamedFile); const CMIUtilString &strExeFilePath(pArgFile->GetValue()); + bool bPlatformName = pArgPlatformName->GetFound(); + CMIUtilString platformName; + if (bPlatformName) + { + pArgPlatformName->GetExpectedOption<CMICmdArgValString, CMIUtilString>(platformName); + } CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance()); lldb::SBDebugger &rDbgr = rSessionInfo.GetDebugger(); lldb::SBError error; - const MIchar *pTargetTriple = nullptr; // Let LLDB discover the triple required - const MIchar *pTargetPlatformName = ""; + const char *pTargetTriple = nullptr; // Let LLDB discover the triple required + const char *pTargetPlatformName = platformName.c_str(); const bool bAddDepModules = false; lldb::SBTarget target = rDbgr.CreateTarget(strExeFilePath.c_str(), pTargetTriple, pTargetPlatformName, bAddDepModules, error); CMIUtilString strWkDir; const CMIUtilString &rStrKeyWkDir(rSessionInfo.m_constStrSharedDataKeyWkDir); if (!rSessionInfo.SharedDataRetrieve<CMIUtilString>(rStrKeyWkDir, strWkDir)) { - strWkDir = CMIUtilFileStd().StripOffFileName(strExeFilePath); + strWkDir = CMIUtilFileStd::StripOffFileName(strExeFilePath); if (!rSessionInfo.SharedDataAdd<CMIUtilString>(rStrKeyWkDir, strWkDir)) { SetError(CMIUtilString::Format(MIRSRC(IDS_DBGSESSION_ERR_SHARED_DATA_ADD), m_cmdData.strMiCmd.c_str(), rStrKeyWkDir.c_str())); @@ -119,6 +127,16 @@ CMICmdCmdFileExecAndSymbols::Execute(void) SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_FNFAILED), m_cmdData.strMiCmd.c_str(), "SetCurrentPlatformSDKRoot()")); return MIstatus::failure; } + if (pArgRemotePath->GetFound()) + { + CMIUtilString remotePath; + pArgRemotePath->GetExpectedOption<CMICmdArgValString, CMIUtilString>(remotePath); + lldb::SBModule module = target.FindModule(target.GetExecutable()); + if (module.IsValid()) + { + module.SetPlatformFileSpec(lldb::SBFileSpec(remotePath.c_str())); + } + } lldb::SBStream err; if (error.Fail()) { |