StackFrameList.h revision 5c4b1607e8783a3d3f1f28fa66fcaa89ac246bd1
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- StackFrameList.h ----------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_StackFrameList_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_StackFrameList_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector>
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Host/Mutex.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/StackFrame.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass StackFrameList
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Constructors and Destructors
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
30f40e30823926f27e3cb9364f3c8fe2e4be0c7658Greg Clayton    StackFrameList (Thread &thread,
315205f0b6585a127acc6ed210021abb6091220a89Greg Clayton                    const lldb::StackFrameListSP &prev_frames_sp,
32f40e30823926f27e3cb9364f3c8fe2e4be0c7658Greg Clayton                    bool show_inline_frames);
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~StackFrameList();
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
375205f0b6585a127acc6ed210021abb6091220a89Greg Clayton    GetNumFrames (bool can_create = true);
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::StackFrameSP
40782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton    GetFrameAtIndex (uint32_t idx);
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4208d7d3ae16110aa68ed40c161eac8571aeb94cd9Greg Clayton    lldb::StackFrameSP
4308d7d3ae16110aa68ed40c161eac8571aeb94cd9Greg Clayton    GetFrameWithConcreteFrameIndex (uint32_t unwind_idx);
445c4b1607e8783a3d3f1f28fa66fcaa89ac246bd1Jim Ingham
455c4b1607e8783a3d3f1f28fa66fcaa89ac246bd1Jim Ingham    lldb::StackFrameSP
465c4b1607e8783a3d3f1f28fa66fcaa89ac246bd1Jim Ingham    GetFrameWithStackID (StackID &stack_id);
4708d7d3ae16110aa68ed40c161eac8571aeb94cd9Greg Clayton
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Mark a stack frame as the current frame
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
50c833295baeec641086f536e78050388af36784f8Jim Ingham    SetSelectedFrame (lldb_private::StackFrame *frame);
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
53c833295baeec641086f536e78050388af36784f8Jim Ingham    GetSelectedFrameIndex () const;
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Mark a stack frame as the current frame using the frame index
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
57c833295baeec641086f536e78050388af36784f8Jim Ingham    SetSelectedFrameByIndex (uint32_t idx);
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Clear ();
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    InvalidateFrames (uint32_t start_idx);
641d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Clayton
651d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Clayton    void
661d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Clayton    Dump (Stream *s);
67ccd584dccb920cdb028de69950774c3bcdc025ecJim Ingham
68ccd584dccb920cdb028de69950774c3bcdc025ecJim Ingham    lldb::StackFrameSP
69ccd584dccb920cdb028de69950774c3bcdc025ecJim Ingham    GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr);
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
711d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Claytonprotected:
72782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton
735205f0b6585a127acc6ed210021abb6091220a89Greg Clayton    friend class Thread;
745205f0b6585a127acc6ed210021abb6091220a89Greg Clayton
75782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton    bool
761d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Clayton    SetFrameAtIndex (uint32_t idx, lldb::StackFrameSP &frame_sp);
77782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton
785205f0b6585a127acc6ed210021abb6091220a89Greg Clayton    static void
795205f0b6585a127acc6ed210021abb6091220a89Greg Clayton    Merge (std::auto_ptr<StackFrameList>& curr_ap,
805205f0b6585a127acc6ed210021abb6091220a89Greg Clayton           lldb::StackFrameListSP& prev_sp);
815205f0b6585a127acc6ed210021abb6091220a89Greg Clayton
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Classes that inherit from StackFrameList can see and modify these
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::vector<lldb::StackFrameSP> collection;
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef collection::iterator iterator;
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef collection::const_iterator const_iterator;
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
89782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton    Thread &m_thread;
905205f0b6585a127acc6ed210021abb6091220a89Greg Clayton    lldb::StackFrameListSP m_prev_frames_sp;
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    mutable Mutex m_mutex;
921d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Clayton    collection m_frames;
93c833295baeec641086f536e78050388af36784f8Jim Ingham    uint32_t m_selected_frame_idx;
94782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton    bool m_show_inlined_frames;
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // For StackFrameList only
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (StackFrameList);
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_StackFrameList_h_
106