diff options
Diffstat (limited to 'source/Plugins/Platform/POSIX/PlatformPOSIX.cpp')
-rw-r--r-- | source/Plugins/Platform/POSIX/PlatformPOSIX.cpp | 91 |
1 files changed, 57 insertions, 34 deletions
diff --git a/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp b/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp index 5b72728c2b48..fe425e02103b 100644 --- a/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp +++ b/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp @@ -24,6 +24,7 @@ #include "lldb/Host/FileSpec.h" #include "lldb/Host/FileSystem.h" #include "lldb/Host/Host.h" +#include "lldb/Target/Process.h" #include "lldb/Target/ProcessLaunchInfo.h" using namespace lldb; @@ -49,6 +50,17 @@ PlatformPOSIX::~PlatformPOSIX() { } +bool +PlatformPOSIX::GetModuleSpec (const FileSpec& module_file_spec, + const ArchSpec& arch, + ModuleSpec &module_spec) +{ + if (m_remote_platform_sp) + return m_remote_platform_sp->GetModuleSpec (module_file_spec, arch, module_spec); + + return Platform::GetModuleSpec (module_file_spec, arch, module_spec); +} + lldb_private::OptionGroupOptions* PlatformPOSIX::GetConnectionOptions (lldb_private::CommandInterpreter& interpreter) { @@ -73,12 +85,12 @@ PlatformPOSIX::IsConnected () const } lldb_private::Error -PlatformPOSIX::RunShellCommand (const char *command, // Shouldn't be NULL - const char *working_dir, // Pass NULL to use the current working directory - int *status_ptr, // Pass NULL if you don't want the process exit status - int *signo_ptr, // Pass NULL if you don't want the signal that caused the process to exit - std::string *command_output, // Pass NULL if you don't want the command output - uint32_t timeout_sec) // Timeout in seconds to wait for shell program to finish +PlatformPOSIX::RunShellCommand(const char *command, // Shouldn't be NULL + const FileSpec &working_dir, // Pass empty FileSpec to use the current working directory + int *status_ptr, // Pass NULL if you don't want the process exit status + int *signo_ptr, // Pass NULL if you don't want the signal that caused the process to exit + std::string *command_output, // Pass NULL if you don't want the command output + uint32_t timeout_sec) // Timeout in seconds to wait for shell program to finish { if (IsHost()) return Host::RunShellCommand(command, working_dir, status_ptr, signo_ptr, command_output, timeout_sec); @@ -92,30 +104,30 @@ PlatformPOSIX::RunShellCommand (const char *command, // Shouldn't be N } Error -PlatformPOSIX::MakeDirectory (const char *path, uint32_t file_permissions) +PlatformPOSIX::MakeDirectory(const FileSpec &file_spec, uint32_t file_permissions) { if (m_remote_platform_sp) - return m_remote_platform_sp->MakeDirectory(path, file_permissions); + return m_remote_platform_sp->MakeDirectory(file_spec, file_permissions); else - return Platform::MakeDirectory(path ,file_permissions); + return Platform::MakeDirectory(file_spec ,file_permissions); } Error -PlatformPOSIX::GetFilePermissions (const char *path, uint32_t &file_permissions) +PlatformPOSIX::GetFilePermissions(const FileSpec &file_spec, uint32_t &file_permissions) { if (m_remote_platform_sp) - return m_remote_platform_sp->GetFilePermissions(path, file_permissions); + return m_remote_platform_sp->GetFilePermissions(file_spec, file_permissions); else - return Platform::GetFilePermissions(path ,file_permissions); + return Platform::GetFilePermissions(file_spec ,file_permissions); } Error -PlatformPOSIX::SetFilePermissions (const char *path, uint32_t file_permissions) +PlatformPOSIX::SetFilePermissions(const FileSpec &file_spec, uint32_t file_permissions) { if (m_remote_platform_sp) - return m_remote_platform_sp->SetFilePermissions(path, file_permissions); + return m_remote_platform_sp->SetFilePermissions(file_spec, file_permissions); else - return Platform::SetFilePermissions(path ,file_permissions); + return Platform::SetFilePermissions(file_spec, file_permissions); } lldb::user_id_t @@ -304,7 +316,7 @@ PlatformPOSIX::GetFileSize (const FileSpec& file_spec) } Error -PlatformPOSIX::CreateSymlink(const char *src, const char *dst) +PlatformPOSIX::CreateSymlink(const FileSpec &src, const FileSpec &dst) { if (IsHost()) return FileSystem::Symlink(src, dst); @@ -326,19 +338,19 @@ PlatformPOSIX::GetFileExists (const FileSpec& file_spec) } Error -PlatformPOSIX::Unlink (const char *path) +PlatformPOSIX::Unlink(const FileSpec &file_spec) { if (IsHost()) - return FileSystem::Unlink(path); + return FileSystem::Unlink(file_spec); else if (m_remote_platform_sp) - return m_remote_platform_sp->Unlink(path); + return m_remote_platform_sp->Unlink(file_spec); else - return Platform::Unlink(path); + return Platform::Unlink(file_spec); } lldb_private::Error -PlatformPOSIX::GetFile (const lldb_private::FileSpec& source /* remote file path */, - const lldb_private::FileSpec& destination /* local file path */) +PlatformPOSIX::GetFile(const lldb_private::FileSpec &source, // remote file path + const lldb_private::FileSpec &destination) // local file path { Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PLATFORM)); @@ -421,8 +433,8 @@ PlatformPOSIX::GetFile (const lldb_private::FileSpec& source /* remote file path return Error("unable to open source file"); uint32_t permissions = 0; - error = GetFilePermissions(source.GetPath().c_str(), permissions); - + error = GetFilePermissions(source, permissions); + if (permissions == 0) permissions = lldb::eFilePermissionsFileDefault; @@ -523,7 +535,7 @@ PlatformPOSIX::CalculateMD5 (const FileSpec& file_spec, return false; } -lldb_private::ConstString +FileSpec PlatformPOSIX::GetRemoteWorkingDirectory() { if (IsRemote() && m_remote_platform_sp) @@ -533,12 +545,12 @@ PlatformPOSIX::GetRemoteWorkingDirectory() } bool -PlatformPOSIX::SetRemoteWorkingDirectory(const lldb_private::ConstString &path) +PlatformPOSIX::SetRemoteWorkingDirectory(const FileSpec &working_dir) { if (IsRemote() && m_remote_platform_sp) - return m_remote_platform_sp->SetRemoteWorkingDirectory(path); + return m_remote_platform_sp->SetRemoteWorkingDirectory(working_dir); else - return Platform::SetRemoteWorkingDirectory(path); + return Platform::SetRemoteWorkingDirectory(working_dir); } bool @@ -653,9 +665,9 @@ PlatformPOSIX::ConnectRemote (Args& args) if (m_options.get()) { OptionGroupOptions* options = m_options.get(); - OptionGroupPlatformRSync* m_rsync_options = (OptionGroupPlatformRSync*)options->GetGroupWithOption('r'); - OptionGroupPlatformSSH* m_ssh_options = (OptionGroupPlatformSSH*)options->GetGroupWithOption('s'); - OptionGroupPlatformCaching* m_cache_options = (OptionGroupPlatformCaching*)options->GetGroupWithOption('c'); + const OptionGroupPlatformRSync* m_rsync_options = (OptionGroupPlatformRSync*)options->GetGroupWithOption('r'); + const OptionGroupPlatformSSH* m_ssh_options = (OptionGroupPlatformSSH*)options->GetGroupWithOption('s'); + const OptionGroupPlatformCaching* m_cache_options = (OptionGroupPlatformCaching*)options->GetGroupWithOption('c'); if (m_rsync_options->m_rsync) { @@ -714,6 +726,18 @@ PlatformPOSIX::LaunchProcess (ProcessLaunchInfo &launch_info) return error; } +lldb_private::Error +PlatformPOSIX::KillProcess (const lldb::pid_t pid) +{ + if (IsHost()) + return Platform::KillProcess (pid); + + if (m_remote_platform_sp) + return m_remote_platform_sp->KillProcess (pid); + + return Error ("the platform is not currently connected"); +} + lldb::ProcessSP PlatformPOSIX::Attach (ProcessAttachInfo &attach_info, Debugger &debugger, @@ -752,9 +776,8 @@ PlatformPOSIX::Attach (ProcessAttachInfo &attach_info, if (log) { ModuleSP exe_module_sp = target->GetExecutableModule (); - log->Printf ("PlatformPOSIX::%s set selected target to %p %s", __FUNCTION__, - target, - exe_module_sp ? exe_module_sp->GetFileSpec().GetPath().c_str () : "<null>" ); + log->Printf("PlatformPOSIX::%s set selected target to %p %s", __FUNCTION__, (void *)target, + exe_module_sp ? exe_module_sp->GetFileSpec().GetPath().c_str() : "<null>"); } |