mirror of
https://github.com/intel/llvm.git
synced 2026-01-20 10:58:11 +08:00
Roll back the changes I made in r193907 which created a new Frame
pure virtual base class and made StackFrame a subclass of that. As I started to build on top of that arrangement today, I found that it wasn't working out like I intended. Instead I'll try sticking with the single StackFrame class -- there's too much code duplication to make a more complicated class hierarchy sensible I think. llvm-svn: 193983
This commit is contained in:
@@ -9,7 +9,6 @@
|
||||
|
||||
#include "lldb/lldb-python.h"
|
||||
|
||||
#include "lldb/Target/Frame.h"
|
||||
#include "lldb/Target/StackFrame.h"
|
||||
|
||||
// C Includes
|
||||
@@ -205,7 +204,7 @@ StackFrame::GetFrameIndex () const
|
||||
{
|
||||
ThreadSP thread_sp = GetThread();
|
||||
if (thread_sp)
|
||||
return thread_sp->GetStackFrameList()->GetVisibleFrameIndex(m_frame_index);
|
||||
return thread_sp->GetStackFrameList()->GetVisibleStackFrameIndex(m_frame_index);
|
||||
else
|
||||
return m_frame_index;
|
||||
}
|
||||
@@ -247,7 +246,7 @@ StackFrame::GetFrameCodeAddress()
|
||||
return m_frame_code_addr;
|
||||
}
|
||||
|
||||
bool
|
||||
void
|
||||
StackFrame::ChangePC (addr_t pc)
|
||||
{
|
||||
m_frame_code_addr.SetRawAddress(pc);
|
||||
@@ -256,7 +255,6 @@ StackFrame::ChangePC (addr_t pc)
|
||||
ThreadSP thread_sp (GetThread());
|
||||
if (thread_sp)
|
||||
thread_sp->ClearStackFrames ();
|
||||
return true;
|
||||
}
|
||||
|
||||
const char *
|
||||
@@ -1263,8 +1261,8 @@ StackFrame::CalculateThread ()
|
||||
return GetThread();
|
||||
}
|
||||
|
||||
FrameSP
|
||||
StackFrame::CalculateFrame ()
|
||||
StackFrameSP
|
||||
StackFrame::CalculateStackFrame ()
|
||||
{
|
||||
return shared_from_this();
|
||||
}
|
||||
@@ -1329,46 +1327,50 @@ StackFrame::Dump (Stream *strm, bool show_frame_index, bool show_fullpaths)
|
||||
}
|
||||
|
||||
void
|
||||
StackFrame::UpdateCurrentFrameFromPreviousFrame (Frame &prev_frame)
|
||||
StackFrame::UpdateCurrentFrameFromPreviousFrame (StackFrame &prev_frame)
|
||||
{
|
||||
assert (GetStackID() == prev_frame.GetStackID()); // TODO: remove this after some testing
|
||||
if (strcmp (prev_frame.GetFrameType(), "StackFrame") == 0)
|
||||
{
|
||||
StackFrame &prev_stackframe = *static_cast<StackFrame*>(&prev_frame);
|
||||
m_variable_list_sp = prev_stackframe.m_variable_list_sp;
|
||||
m_variable_list_value_objects.Swap (prev_stackframe.m_variable_list_value_objects);
|
||||
if (!m_disassembly.GetString().empty())
|
||||
m_disassembly.GetString().swap (m_disassembly.GetString());
|
||||
}
|
||||
m_variable_list_sp = prev_frame.m_variable_list_sp;
|
||||
m_variable_list_value_objects.Swap (prev_frame.m_variable_list_value_objects);
|
||||
if (!m_disassembly.GetString().empty())
|
||||
m_disassembly.GetString().swap (m_disassembly.GetString());
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
StackFrame::UpdatePreviousFrameFromCurrentFrame (Frame &curr_frame)
|
||||
StackFrame::UpdatePreviousFrameFromCurrentFrame (StackFrame &curr_frame)
|
||||
{
|
||||
assert (GetStackID() == curr_frame.GetStackID()); // TODO: remove this after some testing
|
||||
if (strcmp (curr_frame.GetFrameType(), "StackFrame") == 0)
|
||||
{
|
||||
StackFrame &curr_stackframe = *static_cast<StackFrame*>(&curr_frame);
|
||||
m_id.SetPC (curr_stackframe.m_id.GetPC()); // Update the Stack ID PC value
|
||||
assert (GetThread() == curr_stackframe.GetThread());
|
||||
m_frame_index = curr_stackframe.m_frame_index;
|
||||
m_concrete_frame_index = curr_stackframe.m_concrete_frame_index;
|
||||
m_reg_context_sp = curr_stackframe.m_reg_context_sp;
|
||||
m_frame_code_addr = curr_stackframe.m_frame_code_addr;
|
||||
assert (m_sc.target_sp.get() == NULL || curr_stackframe.m_sc.target_sp.get() == NULL || m_sc.target_sp.get() == curr_stackframe.m_sc.target_sp.get());
|
||||
assert (m_sc.module_sp.get() == NULL || curr_stackframe.m_sc.module_sp.get() == NULL || m_sc.module_sp.get() == curr_stackframe.m_sc.module_sp.get());
|
||||
assert (m_sc.comp_unit == NULL || curr_stackframe.m_sc.comp_unit == NULL || m_sc.comp_unit == curr_stackframe.m_sc.comp_unit);
|
||||
assert (m_sc.function == NULL || curr_stackframe.m_sc.function == NULL || m_sc.function == curr_stackframe.m_sc.function);
|
||||
m_sc = curr_stackframe.m_sc;
|
||||
m_flags.Clear(GOT_FRAME_BASE | eSymbolContextEverything);
|
||||
m_flags.Set (m_sc.GetResolvedMask());
|
||||
m_frame_base.Clear();
|
||||
m_frame_base_error.Clear();
|
||||
}
|
||||
m_id.SetPC (curr_frame.m_id.GetPC()); // Update the Stack ID PC value
|
||||
assert (GetThread() == curr_frame.GetThread());
|
||||
m_frame_index = curr_frame.m_frame_index;
|
||||
m_concrete_frame_index = curr_frame.m_concrete_frame_index;
|
||||
m_reg_context_sp = curr_frame.m_reg_context_sp;
|
||||
m_frame_code_addr = curr_frame.m_frame_code_addr;
|
||||
assert (m_sc.target_sp.get() == NULL || curr_frame.m_sc.target_sp.get() == NULL || m_sc.target_sp.get() == curr_frame.m_sc.target_sp.get());
|
||||
assert (m_sc.module_sp.get() == NULL || curr_frame.m_sc.module_sp.get() == NULL || m_sc.module_sp.get() == curr_frame.m_sc.module_sp.get());
|
||||
assert (m_sc.comp_unit == NULL || curr_frame.m_sc.comp_unit == NULL || m_sc.comp_unit == curr_frame.m_sc.comp_unit);
|
||||
assert (m_sc.function == NULL || curr_frame.m_sc.function == NULL || m_sc.function == curr_frame.m_sc.function);
|
||||
m_sc = curr_frame.m_sc;
|
||||
m_flags.Clear(GOT_FRAME_BASE | eSymbolContextEverything);
|
||||
m_flags.Set (m_sc.GetResolvedMask());
|
||||
m_frame_base.Clear();
|
||||
m_frame_base_error.Clear();
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
StackFrame::HasCachedData () const
|
||||
{
|
||||
if (m_variable_list_sp.get())
|
||||
return true;
|
||||
if (m_variable_list_value_objects.GetSize() > 0)
|
||||
return true;
|
||||
if (!m_disassembly.GetString().empty())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
StackFrame::GetStatus (Stream& strm,
|
||||
bool show_frame_info,
|
||||
|
||||
Reference in New Issue
Block a user