summaryrefslogtreecommitdiff
path: root/lldb/source/Host/common/Host.cpp
diff options
context:
space:
mode:
authorMed Ismail Bennani <medismail.bennani@gmail.com>2020-08-28 15:38:39 +0200
committerMed Ismail Bennani <medismail.bennani@gmail.com>2020-09-02 16:36:10 +0200
commitaddb5148f58d710fcaba04bb2afec8006ae8ac15 (patch)
treeaee143185e2be542401ab16d75675572a735eaea /lldb/source/Host/common/Host.cpp
parent425573a2fa2dc5666273944a584acdb286447b66 (diff)
[lldb/Target] Add custom interpreter option to `platform shell`
This patch adds the ability to use a custom interpreter with the `platform shell` command. If the user set the `-s|--shell` option with the path to a binary, lldb passes it down to the platform's `RunShellProcess` method and set it as the shell to use in `ProcessLaunchInfo to run commands. Note that not all the Platforms support running shell commands with custom interpreters (i.e. RemoteGDBServer is only expected to use the default shell). This patch also makes some refactoring and cleanups, like swapping CString for StringRef when possible and updating `SBPlatformShellCommand` with new methods and a new constructor. rdar://67759256 Differential Revision: https://reviews.llvm.org/D86667 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
Diffstat (limited to 'lldb/source/Host/common/Host.cpp')
-rw-r--r--lldb/source/Host/common/Host.cpp45
1 files changed, 34 insertions, 11 deletions
diff --git a/lldb/source/Host/common/Host.cpp b/lldb/source/Host/common/Host.cpp
index 71c2983ab00f..958fca07850b 100644
--- a/lldb/source/Host/common/Host.cpp
+++ b/lldb/source/Host/common/Host.cpp
@@ -467,14 +467,24 @@ MonitorShellCommand(std::shared_ptr<ShellInfo> shell_info, lldb::pid_t pid,
return true;
}
-Status Host::RunShellCommand(const char *command, const FileSpec &working_dir,
- int *status_ptr, int *signo_ptr,
- std::string *command_output_ptr,
+Status Host::RunShellCommand(llvm::StringRef command,
+ const FileSpec &working_dir, int *status_ptr,
+ int *signo_ptr, std::string *command_output_ptr,
+ const Timeout<std::micro> &timeout,
+ bool run_in_shell, bool hide_stderr) {
+ return RunShellCommand(llvm::StringRef(), Args(command), working_dir,
+ status_ptr, signo_ptr, command_output_ptr, timeout,
+ run_in_shell, hide_stderr);
+}
+
+Status Host::RunShellCommand(llvm::StringRef shell_path,
+ llvm::StringRef command,
+ const FileSpec &working_dir, int *status_ptr,
+ int *signo_ptr, std::string *command_output_ptr,
const Timeout<std::micro> &timeout,
- bool run_in_default_shell,
- bool hide_stderr) {
- return RunShellCommand(Args(command), working_dir, status_ptr, signo_ptr,
- command_output_ptr, timeout, run_in_default_shell,
+ bool run_in_shell, bool hide_stderr) {
+ return RunShellCommand(shell_path, Args(command), working_dir, status_ptr,
+ signo_ptr, command_output_ptr, timeout, run_in_shell,
hide_stderr);
}
@@ -482,14 +492,27 @@ Status Host::RunShellCommand(const Args &args, const FileSpec &working_dir,
int *status_ptr, int *signo_ptr,
std::string *command_output_ptr,
const Timeout<std::micro> &timeout,
- bool run_in_default_shell,
- bool hide_stderr) {
+ bool run_in_shell, bool hide_stderr) {
+ return RunShellCommand(llvm::StringRef(), args, working_dir, status_ptr,
+ signo_ptr, command_output_ptr, timeout, run_in_shell,
+ hide_stderr);
+}
+
+Status Host::RunShellCommand(llvm::StringRef shell_path, const Args &args,
+ const FileSpec &working_dir, int *status_ptr,
+ int *signo_ptr, std::string *command_output_ptr,
+ const Timeout<std::micro> &timeout,
+ bool run_in_shell, bool hide_stderr) {
Status error;
ProcessLaunchInfo launch_info;
launch_info.SetArchitecture(HostInfo::GetArchitecture());
- if (run_in_default_shell) {
+ if (run_in_shell) {
// Run the command in a shell
- launch_info.SetShell(HostInfo::GetDefaultShell());
+ FileSpec shell = HostInfo::GetDefaultShell();
+ if (!shell_path.empty())
+ shell.SetPath(shell_path);
+
+ launch_info.SetShell(shell);
launch_info.GetArguments().AppendArguments(args);
const bool localhost = true;
const bool will_debug = false;