summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTodd Fiala <todd.fiala@gmail.com>2014-09-08 15:57:14 +0000
committerTodd Fiala <todd.fiala@gmail.com>2014-09-08 15:57:14 +0000
commit6a2f62cbd30f07c3fdc5981b887df75ee431a38e (patch)
treecadaf53eaa03d23e60dc07997e0c1713a53d423d
parentbdbca15ccde2f5573acce8400ba6bebe479d0bc5 (diff)
downloadbcm5719-llvm-6a2f62cbd30f07c3fdc5981b887df75ee431a38e.tar.gz
bcm5719-llvm-6a2f62cbd30f07c3fdc5981b887df75ee431a38e.zip
Linux/FreeBSD local debugging: allow redirection to pts for POSIX process.
See http://reviews.llvm.org/D5135 for more details. Change by Zephyr Zhao. llvm-svn: 217382
-rw-r--r--lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp16
-rw-r--r--lldb/source/Plugins/Process/POSIX/ProcessPOSIX.h3
2 files changed, 11 insertions, 8 deletions
diff --git a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
index f340631c7d0..c930a1881cd 100644
--- a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
+++ b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
@@ -176,9 +176,9 @@ ProcessPOSIX::WillLaunch(Module* module)
}
const char *
-ProcessPOSIX::GetFilePath(const lldb_private::FileAction *file_action, const char *default_path)
+ProcessPOSIX::GetFilePath(const lldb_private::FileAction *file_action, const char *default_path,
+ const char *dbg_pts_path)
{
- const char *pts_name = "/dev/pts/";
const char *path = NULL;
if (file_action)
@@ -190,11 +190,11 @@ ProcessPOSIX::GetFilePath(const lldb_private::FileAction *file_action, const cha
// (/dev/pts). If so, convert to using a different default path
// instead to redirect I/O to the debugger console. This should
// also handle user overrides to /dev/null or a different file.
- if (!path || ::strncmp(path, pts_name, ::strlen(pts_name)) == 0)
+ if (!path || (dbg_pts_path &&
+ ::strncmp(path, dbg_pts_path, ::strlen(dbg_pts_path)) == 0))
path = default_path;
}
}
-
return path;
}
@@ -224,14 +224,16 @@ ProcessPOSIX::DoLaunch (Module *module,
const char *stdout_path = NULL;
const char *stderr_path = NULL;
+ const char * dbg_pts_path = launch_info.GetPTY().GetSlaveName(NULL,0);
+
file_action = launch_info.GetFileActionForFD (STDIN_FILENO);
- stdin_path = GetFilePath(file_action, stdin_path);
+ stdin_path = GetFilePath(file_action, stdin_path, dbg_pts_path);
file_action = launch_info.GetFileActionForFD (STDOUT_FILENO);
- stdout_path = GetFilePath(file_action, stdout_path);
+ stdout_path = GetFilePath(file_action, stdout_path, dbg_pts_path);
file_action = launch_info.GetFileActionForFD (STDERR_FILENO);
- stderr_path = GetFilePath(file_action, stderr_path);
+ stderr_path = GetFilePath(file_action, stderr_path, dbg_pts_path);
m_monitor = new ProcessMonitor (this,
module,
diff --git a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.h b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.h
index 033accf17f2..d8825ed06b6 100644
--- a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.h
+++ b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.h
@@ -154,7 +154,8 @@ public:
ProcessMonitor &
GetMonitor() { assert(m_monitor); return *m_monitor; }
- const char *GetFilePath(const lldb_private::FileAction *file_action, const char *default_path);
+ const char *GetFilePath(const lldb_private::FileAction *file_action, const char *default_path,
+ const char *dbg_pts_path);
/// Stops all threads in the process.
/// The \p stop_tid parameter indicates the thread which initiated the stop.
OpenPOWER on IntegriCloud