summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2010-08-27 21:47:54 +0000
committerGreg Clayton <gclayton@apple.com>2010-08-27 21:47:54 +0000
commit68275d5e56e7c89b18e7f8da2dbfb529b6ced5b6 (patch)
tree927762ba27c3a95cc811c61758b5055bc7eaf18c
parentaf371b49a8c65bd44223682fd5ee3c669e885fed (diff)
downloadbcm5719-llvm-68275d5e56e7c89b18e7f8da2dbfb529b6ced5b6.tar.gz
bcm5719-llvm-68275d5e56e7c89b18e7f8da2dbfb529b6ced5b6.zip
Made it so we update the current frames from the previous frames by doing STL
swaps on the variable list, value object list, and disassembly. This avoids us having to try and update frame indexes and other things that were getting out of sync. llvm-svn: 112301
-rw-r--r--lldb/include/lldb/Core/ValueObjectList.h3
-rw-r--r--lldb/include/lldb/Target/StackFrame.h9
-rw-r--r--lldb/source/Core/ValueObjectList.cpp6
-rw-r--r--lldb/source/Target/StackFrame.cpp13
-rw-r--r--lldb/source/Target/StackFrameList.cpp27
5 files changed, 29 insertions, 29 deletions
diff --git a/lldb/include/lldb/Core/ValueObjectList.h b/lldb/include/lldb/Core/ValueObjectList.h
index b312790acab..1b310289082 100644
--- a/lldb/include/lldb/Core/ValueObjectList.h
+++ b/lldb/include/lldb/Core/ValueObjectList.h
@@ -59,6 +59,9 @@ public:
lldb::ValueObjectSP
FindValueObjectByUID (lldb::user_id_t uid);
+ void
+ Swap (ValueObjectList &value_object_list);
+
protected:
typedef std::vector<lldb::ValueObjectSP> collection;
//------------------------------------------------------------------
diff --git a/lldb/include/lldb/Target/StackFrame.h b/lldb/include/lldb/Target/StackFrame.h
index 075de243bd9..c9db4abc164 100644
--- a/lldb/include/lldb/Target/StackFrame.h
+++ b/lldb/include/lldb/Target/StackFrame.h
@@ -131,13 +131,8 @@ protected:
}
void
- SetFrameCodeAddress(const Address& frame_code_addr)
- {
- m_frame_code_addr = frame_code_addr;
- }
-
- void
- SetSymbolContext (const SymbolContext& sc);
+ UpdateCurrentFrameFromPreviousFrame (StackFrame &frame);
+
private:
//------------------------------------------------------------------
// For StackFrame only
diff --git a/lldb/source/Core/ValueObjectList.cpp b/lldb/source/Core/ValueObjectList.cpp
index 50ae1de0985..5feeae7309a 100644
--- a/lldb/source/Core/ValueObjectList.cpp
+++ b/lldb/source/Core/ValueObjectList.cpp
@@ -117,3 +117,9 @@ ValueObjectList::FindValueObjectByPointer (ValueObject *valobj)
}
return valobj_sp;
}
+
+void
+ValueObjectList::Swap (ValueObjectList &value_object_list)
+{
+ m_value_objects.swap (value_object_list.m_value_objects);
+}
diff --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp
index 972c19a2175..967df8815f2 100644
--- a/lldb/source/Target/StackFrame.cpp
+++ b/lldb/source/Target/StackFrame.cpp
@@ -531,11 +531,14 @@ StackFrame::Dump (Stream *strm, bool show_frame_index)
m_sc.DumpStopContext(strm, &m_thread.GetProcess(), GetFrameCodeAddress(), show_module, show_inline);
}
-
void
-StackFrame::SetSymbolContext (const SymbolContext& sc)
+StackFrame::UpdateCurrentFrameFromPreviousFrame (StackFrame &frame)
{
- m_sc = sc;
- m_flags.Clear(eSymbolContextEverything);
- m_flags.Set(m_sc.GetResolvedMask ());
+ assert (GetStackID() == frame.GetStackID()); // TODO: remove this after some testing
+ m_variable_list_sp = frame.m_variable_list_sp;
+ m_value_object_list.Swap (frame.m_value_object_list);
+ if (!m_disassembly.GetString().empty())
+ m_disassembly.GetString().swap (m_disassembly.GetString());
}
+
+
diff --git a/lldb/source/Target/StackFrameList.cpp b/lldb/source/Target/StackFrameList.cpp
index 249100ab2ff..be4e6e46da2 100644
--- a/lldb/source/Target/StackFrameList.cpp
+++ b/lldb/source/Target/StackFrameList.cpp
@@ -151,9 +151,9 @@ StackFrameList::GetNumFrames()
StackFrameList *curr_frames = this;
#if defined (DEBUG_STACK_FRAMES)
- s.PutCString("prev_frames:\n");
+ s.PutCString("\nprev_frames:\n");
prev_frames->Dump (&s);
- s.PutCString("curr_frames:\n");
+ s.PutCString("\ncurr_frames:\n");
curr_frames->Dump (&s);
s.EOL();
#endif
@@ -203,8 +203,6 @@ StackFrameList::GetNumFrames()
// Same function different block
if (m_show_inlined_frames)
break;
- else
- prev_frame->SetSymbolContext (curr_frame->m_sc);
}
}
else if (curr_sc.symbol && curr_sc.symbol == prev_sc.symbol)
@@ -217,27 +215,22 @@ StackFrameList::GetNumFrames()
break;
}
- if (curr_frame->GetFrameCodeAddress() != prev_frame->GetFrameCodeAddress())
- {
-#if defined (DEBUG_STACK_FRAMES)
- s.Printf("\nUpdating frame code address and symbol context in previous frame #%u to current frame #%u", prev_frame_idx, curr_frame_idx);
-#endif
- // We have a different code frame address, we might need to copy
- // some stuff in prev_frame, yet update the code address...
- prev_frame->SetFrameCodeAddress (curr_frame->GetFrameCodeAddress());
- prev_frame->SetSymbolContext (curr_frame->m_sc);
- }
-
- curr_frames->m_frames[curr_frame_idx] = prev_frames->m_frames[prev_frame_idx];
+ curr_frame->UpdateCurrentFrameFromPreviousFrame (*prev_frame);
#if defined (DEBUG_STACK_FRAMES)
- s.Printf("\nCopying previous frame #%u to current frame #%u", prev_frame_idx, curr_frame_idx);
+ s.Printf("\n Copying previous frame to current frame");
#endif
}
// We are done with the old stack frame list, we can release it now
m_prev_frames_ap.release();
prev_frames = NULL;
}
+
+#if defined (DEBUG_STACK_FRAMES)
+ s.PutCString("\n\nNew frames:\n");
+ Dump (&s);
+ s.EOL();
+#endif
}
else
{
OpenPOWER on IntegriCloud