blob: 15b4dc8f9be8868fa996725595328e333ae092ba [file] [log] [blame]
//===-- 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;
}