[Lldb-commits] [lldb] r232077 - Add -p and -r options to lldb-mi command -file-exec-file-and-symbols to support iOS debugging on macOS.
jingham at apple.com
jingham at apple.com
Thu Mar 12 12:10:52 PDT 2015
Now that we have "non-standard" commands - can we add another extension command to the MI that says "I am an LLDB MI" so that a client could do reasonable things depending on who it is talking to? It's been years since I worked on the gdb MI, but I don't remember it having any kind of "capabilities" command. Still, might be a good thing to add.
Jim
> On Mar 12, 2015, at 11:35 AM, Hafiz Abid Qadeer <hafiz_abid at mentor.com> wrote:
>
> Author: abidh
> Date: Thu Mar 12 13:35:54 2015
> New Revision: 232077
>
> URL: http://llvm.org/viewvc/llvm-project?rev=232077&view=rev
> Log:
> 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.
>
>
> Added:
> lldb/trunk/tools/lldb-mi/MIExtensions.txt
> Modified:
> lldb/trunk/tools/lldb-mi/MICmdCmdFile.cpp
> lldb/trunk/tools/lldb-mi/MICmdCmdFile.h
>
> Modified: lldb/trunk/tools/lldb-mi/MICmdCmdFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdFile.cpp?rev=232077&r1=232076&r2=232077&view=diff
> ==============================================================================
> --- lldb/trunk/tools/lldb-mi/MICmdCmdFile.cpp (original)
> +++ lldb/trunk/tools/lldb-mi/MICmdCmdFile.cpp Thu Mar 12 13:35:54 2015
> @@ -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(v
> 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(voi
> 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())
> {
>
> Modified: lldb/trunk/tools/lldb-mi/MICmdCmdFile.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdFile.h?rev=232077&r1=232076&r2=232077&view=diff
> ==============================================================================
> --- lldb/trunk/tools/lldb-mi/MICmdCmdFile.h (original)
> +++ lldb/trunk/tools/lldb-mi/MICmdCmdFile.h Thu Mar 12 13:35:54 2015
> @@ -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 : publ
> 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
> };
>
> Added: lldb/trunk/tools/lldb-mi/MIExtensions.txt
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MIExtensions.txt?rev=232077&view=auto
> ==============================================================================
> --- lldb/trunk/tools/lldb-mi/MIExtensions.txt (added)
> +++ lldb/trunk/tools/lldb-mi/MIExtensions.txt Thu Mar 12 13:35:54 2015
> @@ -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.
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
More information about the lldb-commits
mailing list