From 5f2a4f999d33167f55f55886222219321207393d Mon Sep 17 00:00:00 2001 From: Greg Clayton Date: Wed, 2 Mar 2011 21:34:46 +0000 Subject: [PATCH] Added a missing API call in SBTarget that enables one to get anything in a SBSymbolContext filled in given an SBAddress: SBSymbolContext SBTarget::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope); Also did a little cleanup on the ProcessGDBRemote stdio file handle code. llvm-svn: 126885 --- lldb/include/lldb/API/SBSymbolContext.h | 1 + lldb/include/lldb/API/SBTarget.h | 4 +++ lldb/source/API/SBTarget.cpp | 10 ++++++++ .../Process/gdb-remote/ProcessGDBRemote.cpp | 25 +++++++++++-------- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/lldb/include/lldb/API/SBSymbolContext.h b/lldb/include/lldb/API/SBSymbolContext.h index 6744fa8ddabf..01eebe1920aa 100644 --- a/lldb/include/lldb/API/SBSymbolContext.h +++ b/lldb/include/lldb/API/SBSymbolContext.h @@ -51,6 +51,7 @@ protected: friend class SBFrame; friend class SBModule; friend class SBThread; + friend class SBTarget; friend class SBSymbolContextList; #ifndef SWIG diff --git a/lldb/include/lldb/API/SBTarget.h b/lldb/include/lldb/API/SBTarget.h index 2ea5865077ea..56d1f36e07e6 100644 --- a/lldb/include/lldb/API/SBTarget.h +++ b/lldb/include/lldb/API/SBTarget.h @@ -204,6 +204,10 @@ public: ResolveLoadAddress (lldb::addr_t vm_addr, lldb::SBAddress& addr); + SBSymbolContext + ResolveSymbolContextForAddress (const SBAddress& addr, + uint32_t resolve_scope); + lldb::SBBreakpoint BreakpointCreateByLocation (const char *file, uint32_t line); diff --git a/lldb/source/API/SBTarget.cpp b/lldb/source/API/SBTarget.cpp index db0b03b02092..7358a3869462 100644 --- a/lldb/source/API/SBTarget.cpp +++ b/lldb/source/API/SBTarget.cpp @@ -442,6 +442,16 @@ SBTarget::ResolveLoadAddress (lldb::addr_t vm_addr, return false; } +SBSymbolContext +SBTarget::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) +{ + SBSymbolContext sc; + if (m_opaque_sp) + m_opaque_sp->GetImages().ResolveSymbolContextForAddress (*addr, resolve_scope, sc.ref()); + return sc; +} + + SBBreakpoint SBTarget::BreakpointCreateByLocation (const char *file, uint32_t line) { diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index 20afb62717c4..df09bf37d959 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -460,13 +460,12 @@ ProcessGDBRemote::DoLaunch { lldb_utility::PseudoTerminal pty; const bool disable_stdio = (launch_flags & eLaunchFlagDisableSTDIO) != 0; - if (disable_stdio) - { - stdin_path = "/dev/null"; - stdout_path = "/dev/null"; - stderr_path = "/dev/null"; - } - else + + // If the debugserver is local and we aren't disabling STDIO, lets use + // a pseudo terminal to instead of relying on the 'O' packets for stdio + // since 'O' packets can really slow down debugging if the inferior + // does a lot of output. + if (m_local_debugserver && !disable_stdio) { const char *slave_name = NULL; if (stdin_path == NULL || stdout_path == NULL || stderr_path == NULL) @@ -484,13 +483,19 @@ ProcessGDBRemote::DoLaunch stderr_path = slave_name; } - if (stdin_path == NULL && (stdout_path || stderr_path)) + // Set STDIN to /dev/null if we want STDIO disabled or if either + // STDOUT or STDERR have been set to something and STDIN hasn't + if (disable_stdio || (stdin_path == NULL && (stdout_path || stderr_path))) stdin_path = "/dev/null"; - if (stdout_path == NULL && (stdin_path || stderr_path)) + // Set STDOUT to /dev/null if we want STDIO disabled or if either + // STDIN or STDERR have been set to something and STDOUT hasn't + if (disable_stdio || (stdout_path == NULL && (stdin_path || stderr_path))) stdout_path = "/dev/null"; - if (stderr_path == NULL && (stdin_path || stdout_path)) + // Set STDERR to /dev/null if we want STDIO disabled or if either + // STDIN or STDOUT have been set to something and STDERR hasn't + if (disable_stdio || (stderr_path == NULL && (stdin_path || stdout_path))) stderr_path = "/dev/null"; if (stdin_path)