Function.h revision 24943d2ee8bfaa7cf5893e4709143924157a5c1e
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Function.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_Function_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Function_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/AddressRange.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Block.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Declaration.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Expression/DWARFExpression.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Mangled.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UserID.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class FunctionInfo Function.h "lldb/Symbol/Function.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A class that contains generic function information. 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// This provides generic function information that gets resused between 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// inline functions and function types. 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass FunctionInfo 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with the function method name and optional declaration 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information. 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A C string name for the method name for this function. This 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// value should not be the mangled named, but the simple method 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// name. 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] decl_ptr 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional declaration information that describes where the 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function was declared. This can be NULL. 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FunctionInfo (const char *name, const Declaration *decl_ptr); 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with the function method name and optional declaration 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information. 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A name for the method name for this function. This value 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should not be the mangled named, but the simple method name. 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] decl_ptr 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional declaration information that describes where the 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function was declared. This can be NULL. 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FunctionInfo (const ConstString& name, const Declaration *decl_ptr); 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The destructor is virtual since classes inherit from this class. 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~FunctionInfo (); 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Compare two function information objects. 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// First compares the method names, and if equal, then compares 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the declaration information. 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] lhs 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Left Hand Side const FunctionInfo object reference. 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] rhs 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Right Hand Side const FunctionInfo object reference. 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li -1 if lhs < rhs 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li 0 if lhs == rhs 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li 1 if lhs > rhs 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Compare (const FunctionInfo& lhs, const FunctionInfo& rhs); 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of this object to a Stream. 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of the contents of this object to the 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// supplied stream \a s. 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to dump the object descripton. 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s) const; 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the declaration information. 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A reference to the declaration object. 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration& 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetDeclaration (); 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the declaration information. 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the declaration object. 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Declaration& 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetDeclaration () const; 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the method name. 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the method name object. 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString& 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName () const; 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the memory cost of this object. 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that this object occupies in memory. 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The returned value does not include the bytes for any 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// shared string values. 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see ConstString::StaticMemorySize () 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner MemorySize () const; 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables. 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString m_name; ///< Function method name (not a mangled name). 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration m_declaration; ///< Information describing where this function information was defined. 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class InlineFunctionInfo Function.h "lldb/Symbol/Function.h" 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A class that describes information for an inlined function. 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass InlineFunctionInfo : public FunctionInfo 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with the function method name, mangled name, and 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optional declaration information. 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A C string name for the method name for this function. This 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// value should not be the mangled named, but the simple method 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// name. 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] mangled 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A C string name for the mangled name for this function. This 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// value can be NULL if there is no mangled information. 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] decl_ptr 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional declaration information that describes where the 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function was declared. This can be NULL. 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] call_decl_ptr 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional calling location declaration information that 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// describes from where this inlined function was called. 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner InlineFunctionInfo(const char *name, const char *mangled, const Declaration *decl_ptr, const Declaration *call_decl_ptr); 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with the function method name, mangled name, and 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optional declaration information. 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A name for the method name for this function. This value 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should not be the mangled named, but the simple method name. 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] mangled 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A name for the mangled name for this function. This value 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can be empty if there is no mangled information. 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] decl_ptr 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional declaration information that describes where the 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function was declared. This can be NULL. 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] call_decl_ptr 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional calling location declaration information that 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// describes from where this inlined function was called. 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner InlineFunctionInfo(const ConstString& name, const Mangled &mangled, const Declaration *decl_ptr, const Declaration *call_decl_ptr); 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~InlineFunctionInfo(); 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Compare two inlined function information objects. 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// First compares the FunctionInfo objects, and if equal, 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// compares the mangled names. 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] lhs 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Left Hand Side const InlineFunctionInfo object 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// reference. 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] rhs 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Right Hand Side const InlineFunctionInfo object 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// reference. 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li -1 if lhs < rhs 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li 0 if lhs == rhs 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li 1 if lhs > rhs 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Compare(const InlineFunctionInfo& lhs, const InlineFunctionInfo& rhs); 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of this object to a Stream. 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of the contents of this object to the 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// supplied stream \a s. 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to dump the object descripton. 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump(Stream *s) const; 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpStopContext (Stream *s) const; 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the call site declaration information. 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A reference to the declaration object. 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration& 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetCallSite (); 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the call site declaration information. 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the declaration object. 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Declaration& 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetCallSite () const; 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the mangled name object. 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A reference to the mangled name object. 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Mangled& 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetMangled(); 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the mangled name object. 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the mangled name object. 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Mangled& 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetMangled() const; 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the memory cost of this object. 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that this object occupies in memory. 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The returned value does not include the bytes for any 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// shared string values. 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see ConstString::StaticMemorySize () 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner MemorySize() const; 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables. 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Mangled m_mangled; ///< Mangled inlined function name (can be empty if there is no mangled information). 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration m_call_decl; 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class Function Function.h "lldb/Symbol/Function.h" 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A class that describes a function. 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Functions belong to CompileUnit objects (Function::m_comp_unit), 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// have unique user IDs (Function::UserID), know how to reconstruct 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// their symbol context (Function::SymbolContextScope), have a 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// specific function type (Function::m_type_uid), have a simple 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// method name (FunctionInfo::m_name), be declared at a specific 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// location (FunctionInfo::m_declaration), possibly have mangled 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// names (Function::m_mangled), an optional return type 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// (Function::m_type), and contains lexical blocks 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// (Function::m_blocks). 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The function inforation is split into a few pieces: 31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @li The concrete instance information 31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @li The abstract information 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The abstract information is found in the function type (Type) that 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// describes a function information, return type and parameter types. 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The concreate information is the address range information and 32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// specific locations for an instance of this function. 32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Function : 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public UserID, 32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public SymbolContextScope 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with a compile unit, function UID, function type UID, 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optional mangled name, function type, and a section offset 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// based address range. 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] comp_unit 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The compile unit to which this function belongs. 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_uid 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The UID for this function. This value is provided by the 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolFile plug-in and can be any value that allows 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the plug-in to quickly find and parse more detailed 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information when and if more information is needed. 34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_type_uid 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The type UID for the function Type to allow for lazy type 34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// parsing from the debug information. 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] mangled 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The optional mangled name for this function. If empty, there 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// is no mangled information. 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_type 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The optional function type. If NULL, the function type will 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be parsed on demand when accessed using the 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Function::GetType() function by asking the SymbolFile 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// plug-in to get the type for \a func_type_uid. 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] range 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The section offset based address for this function. 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Function ( 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CompileUnit *comp_unit, 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t func_uid, 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t func_type_uid, 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Mangled &mangled, 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type * func_type, 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const AddressRange& range); 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with a compile unit, function UID, function type UID, 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optional mangled name, function type, and a section offset 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// based address range. 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] comp_unit 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The compile unit to which this function belongs. 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_uid 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The UID for this function. This value is provided by the 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolFile plug-in and can be any value that allows 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the plug-in to quickly find and parse more detailed 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information when and if more information is needed. 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_type_uid 38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The type UID for the function Type to allow for lazy type 38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// parsing from the debug information. 38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] mangled 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The optional mangled name for this function. If empty, there 38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// is no mangled information. 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_type 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The optional function type. If NULL, the function type will 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be parsed on demand when accessed using the 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Function::GetType() function by asking the SymbolFile 39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// plug-in to get the type for \a func_type_uid. 39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] range 39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The section offset based address for this function. 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Function ( 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CompileUnit *comp_unit, 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t func_uid, 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t func_type_uid, 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *mangled, 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type * func_type, 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const AddressRange& range); 40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Function (); 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*) 41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContextScope 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CalculateSymbolContext(SymbolContext* sc); 42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const AddressRange & 42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetAddressRange(); 42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the block list. 42624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 42724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The block list object that describes all lexical blocks 42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the function. 43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see BlockList 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BlockList& 43424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBlocks (bool can_create); 43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 43724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the compile unit that owns this function. 43824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 44024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A compile unit object pointer. 44124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 44224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CompileUnit* 44324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetCompileUnit(); 44424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the compile unit that owns this function. 44724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 44824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const compile unit object pointer. 45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 45124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const CompileUnit* 45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetCompileUnit() const; 45324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 45524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the frame base location. 45624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 45724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 45824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A location expression that describes the function frame 45924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// base. 46024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 46124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFExpression & 46224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFrameBaseExpression() 46324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 46424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_frame_base; 46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 46624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 46824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the frame base location. 46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 47024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const compile unit object pointer. 47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 47324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFExpression & 47424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFrameBaseExpression() const 47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 47624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_frame_base; 47724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 47924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Mangled & 48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetMangled() const 48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 48224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_mangled; 48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the type that describes the function 48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// return value type, and paramter types. 48824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 48924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 49024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A type object pointer. 49124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type* 49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetType(); 49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 49624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the type that describes the function 49724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// return value type, and paramter types. 49824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 49924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 50024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const type object pointer. 50124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 50224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Type* 50324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetType() const; 50424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 50524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type 50624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetReturnType (); 50724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 50824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The Number of arguments, or -1 for an unprototyped function. 50924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int 51024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetArgumentCount (); 51124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 51224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Type 51324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetArgumentTypeAtIndex (size_t idx); 51424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 51524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 51624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetArgumentNameAtIndex (size_t idx); 51724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 51824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 51924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsVariadic (); 52024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 52124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 52224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPrologueByteSize (); 52324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 52424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 52524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of this object to a Stream. 52624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 52724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of the contents of this object to the 52824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// supplied stream \a s. 52924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 53024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 53124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to dump the object descripton. 53224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 53324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] show_context 53424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, variables will dump their symbol context 53524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information. 53624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 53724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 53824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump(Stream *s, bool show_context) const; 53924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 54024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 54124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @copydoc SymbolContextScope::DumpSymbolContext(Stream*) 54224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 54324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContextScope 54424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 54524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 54624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpSymbolContext(Stream *s); 54724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 54824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 54924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the memory cost of this object. 55024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 55124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 55224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that this object occupies in memory. 55324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The returned value does not include the bytes for any 55424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// shared string values. 55524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 55624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see ConstString::StaticMemorySize () 55724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 55824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 55924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner MemorySize () const; 56024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 56224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 56424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 56524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsCalculatedPrologueSize = (1 << 0), ///< Have we already tried to calculate the prologue size? 56624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 56724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 57024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 57124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables. 57224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 57324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CompileUnit *m_comp_unit; ///< The compile unit that owns this function. 57424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t m_type_uid; ///< The user ID of for the prototype Type for this function. 57524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type * m_type; ///< The function prototype type for this function that include the function info (FunctionInfo), return type and parameters. 57624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Mangled m_mangled; ///< The mangled function name if any, if empty, there is no mangled information. 57724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BlockList m_blocks; ///< All lexical blocks contained in this function. 57824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFExpression m_frame_base; ///< The frame base expression for variables that are relative to the frame pointer. 57924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Flags m_flags; 58024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t m_prologue_byte_size; ///< Compute the prologue size once and cache it 58124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 58224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN(Function); 58324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 58424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 58524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 58624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 58724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Function_h_ 588