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:
Hafiz Abid Qadeer 2015-03-12 18:35:54 +00:00
parent 63ea0402c2
commit 5f86f216c3
3 changed files with 43 additions and 2 deletions

View File

@ -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())
{

View File

@ -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
};

View File

@ -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.