StackFrameList.h revision 5c4b1607e8783a3d3f1f28fa66fcaa89ac246bd1
10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//===-- StackFrameList.h ----------------------------------------*- C++ -*-===//
20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//
30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//                     The LLVM Compiler Infrastructure
40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//
50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// This file is distributed under the University of Illinois Open Source
60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// License. See LICENSE.TXT for details.
70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//
80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//===----------------------------------------------------------------------===//
90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef liblldb_StackFrameList_h_
110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define liblldb_StackFrameList_h_
120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// C Includes
140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// C++ Includes
150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector>
160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Other libraries and framework includes
180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Project includes
190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "lldb/Host/Mutex.h"
200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "lldb/Target/StackFrame.h"
210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace lldb_private {
230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass StackFrameList
250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org{
260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgpublic:
270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    //------------------------------------------------------------------
280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    // Constructors and Destructors
290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    //------------------------------------------------------------------
3013b2d035e2e7f2f18e3a4d3377bc1a09f43a4ff9buildbot@webrtc.org    StackFrameList (Thread &thread,
310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                    const lldb::StackFrameListSP &prev_frames_sp,
32cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org                    bool show_inline_frames);
330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    ~StackFrameList();
350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    uint32_t
370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    GetNumFrames (bool can_create = true);
380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    lldb::StackFrameSP
400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    GetFrameAtIndex (uint32_t idx);
410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    lldb::StackFrameSP
430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    GetFrameWithConcreteFrameIndex (uint32_t unwind_idx);
440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    lldb::StackFrameSP
460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    GetFrameWithStackID (StackID &stack_id);
470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    // Mark a stack frame as the current frame
490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    uint32_t
500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    SetSelectedFrame (lldb_private::StackFrame *frame);
510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    uint32_t
530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    GetSelectedFrameIndex () const;
540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    // Mark a stack frame as the current frame using the frame index
560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    void
570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    SetSelectedFrameByIndex (uint32_t idx);
580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    void
600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    Clear ();
610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    void
630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    InvalidateFrames (uint32_t start_idx);
640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    void
660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    Dump (Stream *s);
670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    lldb::StackFrameSP
690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr);
700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgprotected:
720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    friend class Thread;
740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    bool
760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    SetFrameAtIndex (uint32_t idx, lldb::StackFrameSP &frame_sp);
770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    static void
790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    Merge (std::auto_ptr<StackFrameList>& curr_ap,
800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org           lldb::StackFrameListSP& prev_sp);
810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    //------------------------------------------------------------------
830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    // Classes that inherit from StackFrameList can see and modify these
840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    //------------------------------------------------------------------
850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    typedef std::vector<lldb::StackFrameSP> collection;
860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    typedef collection::iterator iterator;
870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    typedef collection::const_iterator const_iterator;
880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    Thread &m_thread;
900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    lldb::StackFrameListSP m_prev_frames_sp;
910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    mutable Mutex m_mutex;
920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    collection m_frames;
930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    uint32_t m_selected_frame_idx;
940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    bool m_show_inlined_frames;
950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgprivate:
970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    //------------------------------------------------------------------
980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    // For StackFrameList only
990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    //------------------------------------------------------------------
1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    DISALLOW_COPY_AND_ASSIGN (StackFrameList);
1012a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org};
1022a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org
1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace lldb_private
1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif  // liblldb_StackFrameList_h_
1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org