forked from OSchip/llvm-project
parent
ff461fcf07
commit
0c90ef479a
|
@ -15,7 +15,7 @@
|
|||
#include <vector>
|
||||
|
||||
// Other libraries and framework includes
|
||||
#include "lldb/lldb-forward-rtti.h"
|
||||
#include "lldb/lldb-forward.h"
|
||||
|
||||
namespace lldb_private {
|
||||
class DataExtractor;
|
||||
|
|
|
@ -307,7 +307,7 @@ DynamicLoaderPOSIXDYLD::GetStepThroughTrampolinePlan(Thread &thread, bool stop)
|
|||
return thread_plan_sp;
|
||||
|
||||
SymbolContextList target_symbols;
|
||||
Target &target = thread.GetProcess().GetTarget();
|
||||
Target &target = thread.GetProcess()->GetTarget();
|
||||
ModuleList &images = target.GetImages();
|
||||
|
||||
images.FindSymbolsWithNameAndType(sym_name, eSymbolTypeCode, target_symbols);
|
||||
|
|
|
@ -128,7 +128,8 @@ PlatformLinux::ResolveExecutable (const FileSpec &exe_file,
|
|||
{
|
||||
error = m_remote_platform_sp->ResolveExecutable (exe_file,
|
||||
exe_arch,
|
||||
exe_module_sp);
|
||||
exe_module_sp,
|
||||
NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -152,6 +153,7 @@ PlatformLinux::ResolveExecutable (const FileSpec &exe_file,
|
|||
0,
|
||||
exe_module_sp,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (exe_module_sp->GetObjectFile() == NULL)
|
||||
|
@ -180,6 +182,7 @@ PlatformLinux::ResolveExecutable (const FileSpec &exe_file,
|
|||
0,
|
||||
exe_module_sp,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
// Did we find an executable using one of the
|
||||
if (error.Success())
|
||||
|
@ -367,7 +370,9 @@ PlatformLinux::Attach(ProcessAttachInfo &attach_info,
|
|||
{
|
||||
debugger.GetTargetList().SetSelectedTarget(target);
|
||||
|
||||
process_sp = target->CreateProcess (listener, attach_info.GetProcessPluginName());
|
||||
process_sp = target->CreateProcess (listener,
|
||||
attach_info.GetProcessPluginName(),
|
||||
NULL);
|
||||
|
||||
if (process_sp)
|
||||
error = process_sp->Attach (attach_info);
|
||||
|
|
|
@ -31,10 +31,10 @@ using namespace lldb_private;
|
|||
//------------------------------------------------------------------------------
|
||||
// Static functions.
|
||||
|
||||
Process*
|
||||
ProcessLinux::CreateInstance(Target& target, Listener &listener)
|
||||
ProcessSP
|
||||
ProcessLinux::CreateInstance(Target &target, Listener &listener, const FileSpec *)
|
||||
{
|
||||
return new ProcessLinux(target, listener);
|
||||
return ProcessSP(new ProcessLinux(target, listener));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -105,8 +105,10 @@ ProcessLinux::UpdateThreadList(ThreadList &old_thread_list, ThreadList &new_thre
|
|||
// FIXME: We should be using tid, not pid.
|
||||
assert(m_monitor);
|
||||
ThreadSP thread_sp (old_thread_list.FindThreadByID (GetID(), false));
|
||||
if (!thread_sp)
|
||||
thread_sp.reset(new POSIXThread(*this, GetID()));
|
||||
if (!thread_sp) {
|
||||
ProcessSP me = this->shared_from_this();
|
||||
thread_sp.reset(new POSIXThread(me, GetID()));
|
||||
}
|
||||
|
||||
if (log && log->GetMask().Test(POSIX_LOG_VERBOSE))
|
||||
log->Printf ("ProcessLinux::%s() updated pid = %i", __FUNCTION__, GetID());
|
||||
|
|
|
@ -30,9 +30,10 @@ public:
|
|||
//------------------------------------------------------------------
|
||||
// Static functions.
|
||||
//------------------------------------------------------------------
|
||||
static Process*
|
||||
static lldb::ProcessSP
|
||||
CreateInstance(lldb_private::Target& target,
|
||||
lldb_private::Listener &listener);
|
||||
lldb_private::Listener &listener,
|
||||
const lldb_private::FileSpec *);
|
||||
|
||||
static void
|
||||
Initialize();
|
||||
|
|
|
@ -966,6 +966,7 @@ ProcessMonitor::Launch(LaunchArgs *args)
|
|||
{
|
||||
ProcessMonitor *monitor = args->m_monitor;
|
||||
ProcessLinux &process = monitor->GetProcess();
|
||||
lldb::ProcessSP processSP = process.shared_from_this();
|
||||
const char **argv = args->m_argv;
|
||||
const char **envp = args->m_envp;
|
||||
const char *stdin_path = args->m_stdin_path;
|
||||
|
@ -1104,7 +1105,7 @@ ProcessMonitor::Launch(LaunchArgs *args)
|
|||
// Update the process thread list with this new thread.
|
||||
// FIXME: should we be letting UpdateThreadList handle this?
|
||||
// FIXME: by using pids instead of tids, we can only support one thread.
|
||||
inferior.reset(new POSIXThread(process, pid));
|
||||
inferior.reset(new POSIXThread(processSP, pid));
|
||||
if (log)
|
||||
log->Printf ("ProcessMonitor::%s() adding pid = %i", __FUNCTION__, pid);
|
||||
process.GetThreadList().AddThread(inferior);
|
||||
|
@ -1166,6 +1167,7 @@ ProcessMonitor::Attach(AttachArgs *args)
|
|||
|
||||
ProcessMonitor *monitor = args->m_monitor;
|
||||
ProcessLinux &process = monitor->GetProcess();
|
||||
lldb::ProcessSP processSP = process.shared_from_this();
|
||||
lldb::ThreadSP inferior;
|
||||
LogSP log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS));
|
||||
|
||||
|
@ -1191,7 +1193,7 @@ ProcessMonitor::Attach(AttachArgs *args)
|
|||
}
|
||||
|
||||
// Update the process thread list with the attached thread.
|
||||
inferior.reset(new POSIXThread(process, pid));
|
||||
inferior.reset(new POSIXThread(processSP, pid));
|
||||
if (log)
|
||||
log->Printf ("ProcessMonitor::%s() adding tid = %i", __FUNCTION__, pid);
|
||||
process.GetThreadList().AddThread(inferior);
|
||||
|
|
|
@ -29,10 +29,11 @@
|
|||
|
||||
#include "UnwindLLDB.h"
|
||||
|
||||
using namespace lldb;
|
||||
using namespace lldb_private;
|
||||
|
||||
|
||||
POSIXThread::POSIXThread(Process &process, lldb::tid_t tid)
|
||||
POSIXThread::POSIXThread(ProcessSP &process, lldb::tid_t tid)
|
||||
: Thread(process, tid),
|
||||
m_frame_ap(0)
|
||||
{
|
||||
|
@ -49,7 +50,8 @@ POSIXThread::~POSIXThread()
|
|||
ProcessMonitor &
|
||||
POSIXThread::GetMonitor()
|
||||
{
|
||||
ProcessPOSIX &process = static_cast<ProcessPOSIX&>(GetProcess());
|
||||
ProcessSP base = GetProcess();
|
||||
ProcessPOSIX &process = static_cast<ProcessPOSIX&>(*base);
|
||||
return process.GetMonitor();
|
||||
}
|
||||
|
||||
|
@ -62,7 +64,8 @@ POSIXThread::RefreshStateAfterStop()
|
|||
|
||||
// Let all threads recover from stopping and do any clean up based
|
||||
// on the previous thread state (if any).
|
||||
ProcessPOSIX &process = static_cast<ProcessPOSIX&>(GetProcess());
|
||||
ProcessSP base = GetProcess();
|
||||
ProcessPOSIX &process = static_cast<ProcessPOSIX&>(*base);
|
||||
process.GetThreadList().RefreshStateAfterStop();
|
||||
}
|
||||
|
||||
|
@ -237,7 +240,7 @@ POSIXThread::BreakNotify(const ProcessMessage &message)
|
|||
lldb::addr_t pc = GetRegisterContext()->GetPC();
|
||||
if (log)
|
||||
log->Printf ("POSIXThread::%s () PC=0x%8.8llx", __FUNCTION__, pc);
|
||||
lldb::BreakpointSiteSP bp_site(GetProcess().GetBreakpointSiteList().FindByAddress(pc));
|
||||
lldb::BreakpointSiteSP bp_site(GetProcess()->GetBreakpointSiteList().FindByAddress(pc));
|
||||
assert(bp_site);
|
||||
lldb::break_id_t bp_id = bp_site->GetID();
|
||||
assert(bp_site && bp_site->ValidForThisThread(this));
|
||||
|
|
|
@ -29,7 +29,7 @@ class POSIXThread
|
|||
: public lldb_private::Thread
|
||||
{
|
||||
public:
|
||||
POSIXThread(lldb_private::Process &process, lldb::tid_t tid);
|
||||
POSIXThread(lldb::ProcessSP &process, lldb::tid_t tid);
|
||||
|
||||
virtual ~POSIXThread();
|
||||
|
||||
|
|
|
@ -500,8 +500,10 @@ ProcessPOSIX::UpdateThreadList(ThreadList &old_thread_list, ThreadList &new_thre
|
|||
// FIXME: We should be using tid, not pid.
|
||||
assert(m_monitor);
|
||||
ThreadSP thread_sp (old_thread_list.FindThreadByID (GetID(), false));
|
||||
if (!thread_sp)
|
||||
thread_sp.reset(new POSIXThread(*this, GetID()));
|
||||
if (!thread_sp) {
|
||||
ProcessSP me = this->shared_from_this();
|
||||
thread_sp.reset(new POSIXThread(me, GetID()));
|
||||
}
|
||||
|
||||
if (log && log->GetMask().Test(POSIX_LOG_VERBOSE))
|
||||
log->Printf ("ProcessPOSIX::%s() updated pid = %i", __FUNCTION__, GetID());
|
||||
|
|
|
@ -44,44 +44,38 @@ ProcessPOSIXLog::GetLogIfAllCategoriesSet (uint32_t mask)
|
|||
}
|
||||
|
||||
void
|
||||
ProcessPOSIXLog::DisableLog (Args &args, Stream *feedback_strm)
|
||||
ProcessPOSIXLog::DisableLog (const char **args, Stream *feedback_strm)
|
||||
{
|
||||
LogSP log (GetLog ());
|
||||
if (log)
|
||||
{
|
||||
uint32_t flag_bits = 0;
|
||||
|
||||
const size_t argc = args.GetArgumentCount ();
|
||||
if (argc > 0)
|
||||
flag_bits = log->GetMask().Get();
|
||||
for (; args[0]; args++)
|
||||
{
|
||||
flag_bits = log->GetMask().Get();
|
||||
for (size_t i = 0; i < argc; ++i)
|
||||
{
|
||||
const char *arg = args.GetArgumentAtIndex (i);
|
||||
|
||||
const char *arg = args[0];
|
||||
|
||||
if (::strcasecmp (arg, "all") == 0 ) flag_bits &= ~POSIX_LOG_ALL;
|
||||
else if (::strcasecmp (arg, "async") == 0 ) flag_bits &= ~POSIX_LOG_ASYNC;
|
||||
else if (::strncasecmp (arg, "break", 5) == 0 ) flag_bits &= ~POSIX_LOG_BREAKPOINTS;
|
||||
else if (::strncasecmp (arg, "comm", 4) == 0 ) flag_bits &= ~POSIX_LOG_COMM;
|
||||
else if (::strcasecmp (arg, "default") == 0 ) flag_bits &= ~POSIX_LOG_DEFAULT;
|
||||
else if (::strcasecmp (arg, "packets") == 0 ) flag_bits &= ~POSIX_LOG_PACKETS;
|
||||
else if (::strcasecmp (arg, "memory") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY;
|
||||
else if (::strcasecmp (arg, "data-short") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY_DATA_SHORT;
|
||||
else if (::strcasecmp (arg, "data-long") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY_DATA_LONG;
|
||||
else if (::strcasecmp (arg, "process") == 0 ) flag_bits &= ~POSIX_LOG_PROCESS;
|
||||
else if (::strcasecmp (arg, "ptrace") == 0 ) flag_bits &= ~POSIX_LOG_PTRACE;
|
||||
else if (::strcasecmp (arg, "registers") == 0 ) flag_bits &= ~POSIX_LOG_REGISTERS;
|
||||
else if (::strcasecmp (arg, "step") == 0 ) flag_bits &= ~POSIX_LOG_STEP;
|
||||
else if (::strcasecmp (arg, "thread") == 0 ) flag_bits &= ~POSIX_LOG_THREAD;
|
||||
else if (::strcasecmp (arg, "verbose") == 0 ) flag_bits &= ~POSIX_LOG_VERBOSE;
|
||||
else if (::strncasecmp (arg, "watch", 5) == 0 ) flag_bits &= ~POSIX_LOG_WATCHPOINTS;
|
||||
else
|
||||
{
|
||||
feedback_strm->Printf("error: unrecognized log category '%s'\n", arg);
|
||||
ListLogCategories (feedback_strm);
|
||||
}
|
||||
|
||||
if (::strcasecmp (arg, "all") == 0 ) flag_bits &= ~POSIX_LOG_ALL;
|
||||
else if (::strcasecmp (arg, "async") == 0 ) flag_bits &= ~POSIX_LOG_ASYNC;
|
||||
else if (::strncasecmp (arg, "break", 5) == 0 ) flag_bits &= ~POSIX_LOG_BREAKPOINTS;
|
||||
else if (::strncasecmp (arg, "comm", 4) == 0 ) flag_bits &= ~POSIX_LOG_COMM;
|
||||
else if (::strcasecmp (arg, "default") == 0 ) flag_bits &= ~POSIX_LOG_DEFAULT;
|
||||
else if (::strcasecmp (arg, "packets") == 0 ) flag_bits &= ~POSIX_LOG_PACKETS;
|
||||
else if (::strcasecmp (arg, "memory") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY;
|
||||
else if (::strcasecmp (arg, "data-short") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY_DATA_SHORT;
|
||||
else if (::strcasecmp (arg, "data-long") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY_DATA_LONG;
|
||||
else if (::strcasecmp (arg, "process") == 0 ) flag_bits &= ~POSIX_LOG_PROCESS;
|
||||
else if (::strcasecmp (arg, "ptrace") == 0 ) flag_bits &= ~POSIX_LOG_PTRACE;
|
||||
else if (::strcasecmp (arg, "registers") == 0 ) flag_bits &= ~POSIX_LOG_REGISTERS;
|
||||
else if (::strcasecmp (arg, "step") == 0 ) flag_bits &= ~POSIX_LOG_STEP;
|
||||
else if (::strcasecmp (arg, "thread") == 0 ) flag_bits &= ~POSIX_LOG_THREAD;
|
||||
else if (::strcasecmp (arg, "verbose") == 0 ) flag_bits &= ~POSIX_LOG_VERBOSE;
|
||||
else if (::strncasecmp (arg, "watch", 5) == 0 ) flag_bits &= ~POSIX_LOG_WATCHPOINTS;
|
||||
else
|
||||
{
|
||||
feedback_strm->Printf("error: unrecognized log category '%s'\n", arg);
|
||||
ListLogCategories (feedback_strm);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -95,7 +89,7 @@ ProcessPOSIXLog::DisableLog (Args &args, Stream *feedback_strm)
|
|||
}
|
||||
|
||||
LogSP
|
||||
ProcessPOSIXLog::EnableLog (StreamSP &log_stream_sp, uint32_t log_options, Args &args, Stream *feedback_strm)
|
||||
ProcessPOSIXLog::EnableLog (StreamSP &log_stream_sp, uint32_t log_options, const char **args, Stream *feedback_strm)
|
||||
{
|
||||
// Try see if there already is a log - that way we can reuse its settings.
|
||||
// We could reuse the log in toto, but we don't know that the stream is the same.
|
||||
|
@ -107,17 +101,16 @@ ProcessPOSIXLog::EnableLog (StreamSP &log_stream_sp, uint32_t log_options, Args
|
|||
// Now make a new log with this stream if one was provided
|
||||
if (log_stream_sp)
|
||||
{
|
||||
log = make_shared<Log>(log_stream_sp);
|
||||
log = LogSP(new Log(log_stream_sp));
|
||||
GetLog () = log;
|
||||
}
|
||||
|
||||
if (log)
|
||||
{
|
||||
bool got_unknown_category = false;
|
||||
const size_t argc = args.GetArgumentCount();
|
||||
for (size_t i=0; i<argc; ++i)
|
||||
for (; args[0]; args++)
|
||||
{
|
||||
const char *arg = args.GetArgumentAtIndex(i);
|
||||
const char *arg = args[0];
|
||||
|
||||
if (::strcasecmp (arg, "all") == 0 ) flag_bits |= POSIX_LOG_ALL;
|
||||
else if (::strcasecmp (arg, "async") == 0 ) flag_bits |= POSIX_LOG_ASYNC;
|
||||
|
|
|
@ -54,11 +54,11 @@ public:
|
|||
GetLogIfAllCategoriesSet(uint32_t mask = 0);
|
||||
|
||||
static void
|
||||
DisableLog (lldb_private::Args &args, lldb_private::Stream *feedback_strm);
|
||||
DisableLog (const char **args, lldb_private::Stream *feedback_strm);
|
||||
|
||||
static lldb::LogSP
|
||||
EnableLog (lldb::StreamSP &log_stream_sp, uint32_t log_options,
|
||||
lldb_private::Args &args, lldb_private::Stream *feedback_strm);
|
||||
const char **args, lldb_private::Stream *feedback_strm);
|
||||
|
||||
static void
|
||||
ListLogCategories (lldb_private::Stream *strm);
|
||||
|
|
|
@ -364,7 +364,8 @@ RegisterContext_i386::~RegisterContext_i386()
|
|||
ProcessMonitor &
|
||||
RegisterContext_i386::GetMonitor()
|
||||
{
|
||||
ProcessPOSIX *process = static_cast<ProcessPOSIX*>(CalculateProcess());
|
||||
ProcessSP base = CalculateProcess();
|
||||
ProcessPOSIX *process = static_cast<ProcessPOSIX*>(base.get());
|
||||
return process->GetMonitor();
|
||||
}
|
||||
|
||||
|
|
|
@ -434,7 +434,8 @@ RegisterContext_x86_64::~RegisterContext_x86_64()
|
|||
ProcessMonitor &
|
||||
RegisterContext_x86_64::GetMonitor()
|
||||
{
|
||||
ProcessPOSIX *process = static_cast<ProcessPOSIX*>(CalculateProcess());
|
||||
ProcessSP base = CalculateProcess();
|
||||
ProcessPOSIX *process = static_cast<ProcessPOSIX*>(base.get());
|
||||
return process->GetMonitor();
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ StopInfoMachException::GetDescription ()
|
|||
{
|
||||
ExecutionContext exe_ctx (m_thread.shared_from_this());
|
||||
Target *target = exe_ctx.GetTargetPtr();
|
||||
const llvm::Triple::ArchType cpu = target ? target->GetArchitecture().GetMachine() : llvm::Triple::InvalidArch;
|
||||
const llvm::Triple::ArchType cpu = target ? target->GetArchitecture().GetMachine() : llvm::Triple::UnknownArch;
|
||||
|
||||
const char *exc_desc = NULL;
|
||||
const char *code_label = "code";
|
||||
|
@ -257,7 +257,7 @@ StopInfoMachException::CreateStopReasonWithMachException
|
|||
{
|
||||
ExecutionContext exe_ctx (thread.shared_from_this());
|
||||
Target *target = exe_ctx.GetTargetPtr();
|
||||
const llvm::Triple::ArchType cpu = target ? target->GetArchitecture().GetMachine() : llvm::Triple::InvalidArch;
|
||||
const llvm::Triple::ArchType cpu = target ? target->GetArchitecture().GetMachine() : llvm::Triple::UnknownArch;
|
||||
|
||||
switch (exc_type)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue