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
This commit is contained in:
parent
63ea0402c2
commit
5f86f216c3
|
@ -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())
|
||||
{
|
||||
|
|
|
@ -39,7 +39,8 @@
|
|||
// Details: MI command class. MI commands derived from the command base class.
|
||||
// *this class implements MI command "file-exec-and-symbols".
|
||||
// This command does not follow the MI documentation exactly.
|
||||
// Gotchas: None.
|
||||
// Gotchas: This command has additonal flags that were not available in GDB MI.
|
||||
// See MIextensions.txt for details.
|
||||
// Authors: Illya Rudkin 25/02/2014.
|
||||
// Changes: None.
|
||||
//--
|
||||
|
@ -69,4 +70,6 @@ class CMICmdCmdFileExecAndSymbols : public CMICmdBase
|
|||
const CMIUtilString m_constStrArgNameFile;
|
||||
const CMIUtilString
|
||||
m_constStrArgThreadGrp; // Not handled by *this command. Not specified in MI spec but Eclipse gives this option sometimes
|
||||
const CMIUtilString m_constStrArgNamedPlatformName; // Added to support iOS platform selection
|
||||
const CMIUtilString m_constStrArgNamedRemotePath; // Added to support iOS device remote file location
|
||||
};
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
-file-exec-and-symbols now takes two new (optional) options:
|
||||
|
||||
Synopsis
|
||||
|
||||
-file-exec-and-symbols <file> [-p <platform>] [-r <remote-file>]
|
||||
|
||||
Specify the executable file to be debugged. This file is the one from which the symbol table is also read.
|
||||
When debugging remote targets specify a remote-file for execution and a file from which symbols are read.
|
||||
The optional platform is the name of the platform, e.g., "remote-ios" or "ios-simulator". The remote-file
|
||||
is the on-device path to the exe.
|
Loading…
Reference in New Issue