StackID.h revision 33ed170599d41fe407a4dcf5f0875c75e1ad1375
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- StackID.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_StackID_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_StackID_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/AddressRange.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass StackID
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Constructors and Destructors
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    StackID ();
2933ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    explicit StackID (lldb::addr_t cfa, uint32_t inline_id);
3033ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    StackID (const Address& start_address, lldb::addr_t cfa, uint32_t inline_id);
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    StackID (const StackID& rhs);
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual ~StackID();
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const Address&
3533ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    GetStartAddress() const
3633ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    {
3733ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton        return m_start_address;
3833ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    }
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
4133ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    SetStartAddress(const Address& start_address)
4233ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    {
4333ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton        m_start_address = start_address;
4433ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    }
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::addr_t
4733ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    GetCallFrameAddress() const
4833ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    {
4933ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton        return m_cfa;
5033ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    }
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5233ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    uint32_t
5333ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    GetInlineHeight () const
5433ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    {
5533ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton        return m_inline_height;
5633ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    }
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Operators
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const StackID&
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator=(const StackID& rhs);
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Classes that inherit from StackID can see and modify these
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Address m_start_address;    // The address range for the function for this frame
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::addr_t m_cfa;         // The call frame address (stack pointer) value
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                // at the beginning of the function that uniquely
7033ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton                                // identifies this frame (along with m_inline_height below)
7133ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton    uint32_t m_inline_height;   // The inline height of a stack frame. Zero is the actual
7233ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton                                // value for the place where a thread stops, 1 and above
7333ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton                                // are for the inlined frames above the concrete base frame.
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool operator== (const StackID& lhs, const StackID& rhs);
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool operator!= (const StackID& lhs, const StackID& rhs);
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool operator<  (const StackID& lhs, const StackID& rhs);
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_StackID_h_
83