================ @@ -76,6 +76,79 @@ using namespace lldb; using namespace lldb_private; +namespace { + +struct ExecutableInstaller { + + ExecutableInstaller(PlatformSP platform, ModuleSP module) + : m_platform{platform}, m_module{module}, + m_local_file{m_module->GetFileSpec()}, + m_remote_file{m_module->GetRemoteInstallFileSpec()} {} + + void setRemoteFile() const { m_module->SetPlatformFileSpec(m_remote_file); } + + PlatformSP m_platform; + ModuleSP m_module; + const FileSpec m_local_file; + const FileSpec m_remote_file; +}; + +struct MainExecutableInstaller { + + MainExecutableInstaller(PlatformSP platform, TargetSP target, ModuleSP module, + ProcessLaunchInfo *launch_info) + : m_platform{platform}, m_module{module}, + m_local_file{m_module->GetFileSpec()}, + m_remote_file{ + getRemoteFileSpec(m_platform, target, m_module, m_local_file)}, + m_launch_info{launch_info} {} + + void setRemoteFile() const { + m_module->SetPlatformFileSpec(m_remote_file); + m_launch_info->SetExecutableFile(m_remote_file, + false /*add_exe_file_as_first_arg*/); + m_platform->SetFilePermissions(m_remote_file, 0700 /*-rwx------*/); + } + + PlatformSP m_platform; + ModuleSP m_module; + const FileSpec m_local_file; + const FileSpec m_remote_file; + ProcessLaunchInfo *m_launch_info; + +private: + static FileSpec getRemoteFileSpec(PlatformSP platform, TargetSP target, + ModuleSP module, + const FileSpec &local_file) { + FileSpec remote_file = module->GetRemoteInstallFileSpec(); + if (remote_file || !target->GetAutoInstallMainExecutable()) + return remote_file; + + if (!local_file) + return {}; + + remote_file = platform->GetRemoteWorkingDirectory(); + remote_file.AppendPathComponent(local_file.GetFilename().GetCString()); + + return remote_file; + } +}; +} // namespace + +template <typename Installer> ---------------- DavidSpickett wrote:
What's the reason to use a template function here, instead of making a base class with this as a method? Just avoiding the need for a vtable? https://github.com/llvm/llvm-project/pull/108996 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits