forked from OSchip/llvm-project
108 lines
2.4 KiB
C++
108 lines
2.4 KiB
C++
//===-- ExecutionContext.cpp ------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
//
|
|
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
#include "lldb/Target/ExecutionContext.h"
|
|
#include "lldb/Target/ExecutionContextScope.h"
|
|
#include "lldb/Target/StackFrame.h"
|
|
#include "lldb/Target/Process.h"
|
|
#include "lldb/Target/Target.h"
|
|
#include "lldb/Target/Thread.h"
|
|
|
|
using namespace lldb_private;
|
|
|
|
ExecutionContext::ExecutionContext() :
|
|
target (NULL),
|
|
process (NULL),
|
|
thread (NULL),
|
|
frame (NULL)
|
|
{
|
|
}
|
|
|
|
ExecutionContext::ExecutionContext (Target* t, bool fill_current_process_thread_frame) :
|
|
target (t),
|
|
process (NULL),
|
|
thread (NULL),
|
|
frame (NULL)
|
|
{
|
|
if (t && fill_current_process_thread_frame)
|
|
{
|
|
process = t->GetProcessSP().get();
|
|
if (process)
|
|
{
|
|
thread = process->GetThreadList().GetSelectedThread().get();
|
|
if (thread)
|
|
frame = thread->GetSelectedFrame().get();
|
|
}
|
|
}
|
|
}
|
|
|
|
ExecutionContext::ExecutionContext(Process* p, Thread *t, StackFrame *f) :
|
|
target (p ? &p->GetTarget() : NULL),
|
|
process (p),
|
|
thread (t),
|
|
frame (f)
|
|
{
|
|
}
|
|
|
|
ExecutionContext::ExecutionContext (ExecutionContextScope *exe_scope_ptr)
|
|
{
|
|
if (exe_scope_ptr)
|
|
exe_scope_ptr->CalculateExecutionContext (*this);
|
|
else
|
|
{
|
|
target = NULL;
|
|
process = NULL;
|
|
thread = NULL;
|
|
frame = NULL;
|
|
}
|
|
}
|
|
|
|
ExecutionContext::ExecutionContext (ExecutionContextScope &exe_scope_ref)
|
|
{
|
|
exe_scope_ref.CalculateExecutionContext (*this);
|
|
}
|
|
|
|
void
|
|
ExecutionContext::Clear()
|
|
{
|
|
target = NULL;
|
|
process = NULL;
|
|
thread = NULL;
|
|
frame = NULL;
|
|
}
|
|
|
|
|
|
RegisterContext *
|
|
ExecutionContext::GetRegisterContext () const
|
|
{
|
|
if (frame)
|
|
return frame->GetRegisterContext().get();
|
|
else if (thread)
|
|
return thread->GetRegisterContext().get();
|
|
return NULL;
|
|
}
|
|
|
|
ExecutionContextScope *
|
|
ExecutionContext::GetBestExecutionContextScope () const
|
|
{
|
|
if (frame)
|
|
return frame;
|
|
if (thread)
|
|
return thread;
|
|
if (process)
|
|
return process;
|
|
return target;
|
|
}
|