summaryrefslogtreecommitdiffstats
path: root/tools/lldb-mi/MICmdCmdFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MICmdCmdFile.cpp')
-rw-r--r--tools/lldb-mi/MICmdCmdFile.cpp44
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())
{
OpenPOWER on IntegriCloud