From f34f410e0aa9bbcd6917ef12bcda3f4ea2ec38dd Mon Sep 17 00:00:00 2001 From: Chaoren Lin Date: Sat, 9 May 2015 01:21:32 +0000 Subject: [PATCH] Set path syntax for remote executable FileSpec. Reviewers: ovyalov, zturner Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D9579 llvm-svn: 236925 --- lldb/include/lldb/Host/FileSpec.h | 2 ++ lldb/source/Host/common/FileSpec.cpp | 16 ++++++++++------ .../gdb-remote/GDBRemoteCommunicationClient.cpp | 8 ++++---- lldb/source/Target/Target.cpp | 3 ++- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/lldb/include/lldb/Host/FileSpec.h b/lldb/include/lldb/Host/FileSpec.h index ceb2de4417d3..891a6e466cd2 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 36fddc170feb..062cdcd98b4b 100644 --- a/lldb/source/Host/common/FileSpec.cpp +++ b/lldb/source/Host/common/FileSpec.cpp @@ -27,6 +27,7 @@ #include #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 &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 de382ac3607c..07c51dc5c026 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 9b794ab65622..03a58454f010 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)