summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
Diffstat (limited to 'lldb')
-rw-r--r--lldb/include/lldb/Host/FileSpec.h2
-rw-r--r--lldb/source/Host/common/FileSpec.cpp16
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp8
-rw-r--r--lldb/source/Target/Target.cpp3
4 files changed, 18 insertions, 11 deletions
diff --git a/lldb/include/lldb/Host/FileSpec.h b/lldb/include/lldb/Host/FileSpec.h
index ceb2de4417d..891a6e466cd 100644
--- a/lldb/include/lldb/Host/FileSpec.h
+++ b/lldb/include/lldb/Host/FileSpec.h
@@ -78,6 +78,8 @@ public:
//------------------------------------------------------------------
explicit FileSpec (const char *path, bool resolve_path, PathSyntax syntax = ePathSyntaxHostNative);
+ explicit FileSpec (const char *path, bool resolve_path, ArchSpec arch);
+
//------------------------------------------------------------------
/// Copy constructor
///
diff --git a/lldb/source/Host/common/FileSpec.cpp b/lldb/source/Host/common/FileSpec.cpp
index 36fddc170fe..062cdcd98b4 100644
--- a/lldb/source/Host/common/FileSpec.cpp
+++ b/lldb/source/Host/common/FileSpec.cpp
@@ -27,6 +27,7 @@
#include <pwd.h>
#endif
+#include "lldb/Core/ArchSpec.h"
#include "lldb/Core/DataBufferHeap.h"
#include "lldb/Core/DataBufferMemoryMap.h"
#include "lldb/Core/RegularExpression.h"
@@ -201,6 +202,11 @@ FileSpec::FileSpec(const char *pathname, bool resolve_path, PathSyntax syntax) :
SetFile(pathname, resolve_path, syntax);
}
+FileSpec::FileSpec(const char *pathname, bool resolve_path, ArchSpec arch) :
+ FileSpec(pathname, resolve_path, arch.GetTriple().isOSWindows() ? ePathSyntaxWindows : ePathSyntaxPosix)
+{
+}
+
//------------------------------------------------------------------
// Copy constructor
//------------------------------------------------------------------
@@ -605,11 +611,10 @@ FileSpec::RemoveBackupDots (const ConstString &input_const_str, ConstString &res
void
FileSpec::Dump(Stream *s) const
{
- static ConstString g_slash_only ("/");
if (s)
{
m_directory.Dump(s);
- if (m_directory && m_directory != g_slash_only)
+ if (m_directory && m_directory.GetStringRef().back() != '/')
s->PutChar('/');
m_filename.Dump(s);
}
@@ -810,10 +815,9 @@ FileSpec::GetPath(bool denormalize) const
void
FileSpec::GetPath(llvm::SmallVectorImpl<char> &path, bool denormalize) const
{
- if (m_directory)
- path.append(m_directory.GetCString(), m_directory.GetCString() + m_directory.GetLength());
- if (m_filename)
- llvm::sys::path::append(path, m_filename.GetCString());
+ StreamString stream;
+ Dump(&stream);
+ path.append(stream.GetString().begin(), stream.GetString().end());
Normalize(path, m_syntax);
if (denormalize && !path.empty())
DeNormalize(path, m_syntax);
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
index de382ac3607..07c51dc5c02 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -1312,7 +1312,7 @@ GDBRemoteCommunicationClient::SendArgumentsPacket (const ProcessLaunchInfo &laun
const char *arg = NULL;
const Args &launch_args = launch_info.GetArguments();
if (exe_file)
- exe_path = exe_file.GetPath(false);
+ exe_path = exe_file.GetPath();
else
{
arg = launch_args.GetArgumentAtIndex(0);
@@ -3744,8 +3744,8 @@ GDBRemoteCommunicationClient::GetModuleInfo (const FileSpec& module_file_spec,
packet.PutCString("qModuleInfo:");
packet.PutCStringAsRawHex8(module_path.c_str());
packet.PutCString(";");
- const auto& tripple = arch_spec.GetTriple().getTriple();
- packet.PutBytesAsRawHex8(tripple.c_str(), tripple.size());
+ const auto& triple = arch_spec.GetTriple().getTriple();
+ packet.PutBytesAsRawHex8(triple.c_str(), triple.size());
StringExtractorGDBRemote response;
if (SendPacketAndWaitForResponse (packet.GetData(), packet.GetSize(), response, false) != PacketResult::Success)
@@ -3795,7 +3795,7 @@ GDBRemoteCommunicationClient::GetModuleInfo (const FileSpec& module_file_spec,
extractor.GetStringRef ().swap (value);
extractor.SetFilePos (0);
extractor.GetHexByteString (value);
- module_spec.GetFileSpec () = FileSpec (value.c_str(), false);
+ module_spec.GetFileSpec() = FileSpec(value.c_str(), false, arch_spec);
}
}
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 9b794ab6562..03a58454f01 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -2377,8 +2377,9 @@ Target::Install (ProcessLaunchInfo *launch_info)
if (is_main_executable) // TODO: add setting for always installing main executable???
{
// Always install the main executable
+ remote_file = FileSpec(module_sp->GetFileSpec().GetFilename().AsCString(),
+ false, module_sp->GetArchitecture());
remote_file.GetDirectory() = platform_sp->GetWorkingDirectory();
- remote_file.GetFilename() = module_sp->GetFileSpec().GetFilename();
}
}
if (remote_file)
OpenPOWER on IntegriCloud