diff options
| author | Hafiz Abid Qadeer <hafiz_abid@mentor.com> | 2015-03-12 18:35:54 +0000 |
|---|---|---|
| committer | Hafiz Abid Qadeer <hafiz_abid@mentor.com> | 2015-03-12 18:35:54 +0000 |
| commit | 5f86f216c3663d5cc9a60828322dcbf3b81b8946 (patch) | |
| tree | 77b87a370091594508ac78ef62ef500955ee14db /lldb/tools/lldb-mi/MICmdCmdFile.cpp | |
| parent | 63ea0402c255fca60241d97689c1a9a9c19c7380 (diff) | |
| download | bcm5719-llvm-5f86f216c3663d5cc9a60828322dcbf3b81b8946.tar.gz bcm5719-llvm-5f86f216c3663d5cc9a60828322dcbf3b81b8946.zip | |
Add -p and -r options to lldb-mi command -file-exec-file-and-symbols to support iOS debugging on macOS.
The patch adds 2 options which are not present in the GDB MI. Those have been described in MIExtensions.txt.
Patch from Chuck Ries.
llvm-svn: 232077
Diffstat (limited to 'lldb/tools/lldb-mi/MICmdCmdFile.cpp')
| -rw-r--r-- | lldb/tools/lldb-mi/MICmdCmdFile.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/lldb/tools/lldb-mi/MICmdCmdFile.cpp b/lldb/tools/lldb-mi/MICmdCmdFile.cpp index 83862f24f1f..a5967e92538 100644 --- a/lldb/tools/lldb-mi/MICmdCmdFile.cpp +++ b/lldb/tools/lldb-mi/MICmdCmdFile.cpp @@ -29,7 +29,9 @@ #include "MICmnLLDBDebugSessionInfo.h" #include "MIUtilFileStd.h" #include "MICmdArgValFile.h" +#include "MICmdArgValString.h" #include "MICmdArgValOptionLong.h" +#include "MICmdArgValOptionShort.h" //++ ------------------------------------------------------------------------------------ // Details: CMICmdCmdFileExecAndSymbols constructor. @@ -41,6 +43,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 +79,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,13 +103,21 @@ 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 MIchar *pTargetPlatformName = platformName.c_str(); const bool bAddDepModules = false; lldb::SBTarget target = rDbgr.CreateTarget(strExeFilePath.c_str(), pTargetTriple, pTargetPlatformName, bAddDepModules, error); CMIUtilString strWkDir; @@ -119,6 +137,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()) { |

