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 13c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan#include "lldb/Core/ClangForward.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/AddressRange.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Block.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Declaration.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Expression/DWARFExpression.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Mangled.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UserID.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class FunctionInfo Function.h "lldb/Symbol/Function.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A class that contains generic function information. 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// This provides generic function information that gets resused between 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// inline functions and function types. 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass FunctionInfo 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with the function method name and optional declaration 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information. 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A C string name for the method name for this function. This 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// value should not be the mangled named, but the simple method 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// name. 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] decl_ptr 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional declaration information that describes where the 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function was declared. This can be NULL. 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FunctionInfo (const char *name, const Declaration *decl_ptr); 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with the function method name and optional declaration 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information. 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A name for the method name for this function. This value 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should not be the mangled named, but the simple method name. 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] decl_ptr 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional declaration information that describes where the 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function was declared. This can be NULL. 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FunctionInfo (const ConstString& name, const Declaration *decl_ptr); 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The destructor is virtual since classes inherit from this class. 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~FunctionInfo (); 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Compare two function information objects. 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// First compares the method names, and if equal, then compares 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the declaration information. 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] lhs 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Left Hand Side const FunctionInfo object reference. 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] rhs 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Right Hand Side const FunctionInfo object reference. 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li -1 if lhs < rhs 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li 0 if lhs == rhs 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li 1 if lhs > rhs 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Compare (const FunctionInfo& lhs, const FunctionInfo& rhs); 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of this object to a Stream. 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of the contents of this object to the 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// supplied stream \a s. 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to dump the object descripton. 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 1001924e2408687e0ee41976010c6b9410bdd01270dGreg Clayton Dump (Stream *s, bool show_fullpaths) const; 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the declaration information. 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A reference to the declaration object. 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration& 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetDeclaration (); 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the declaration information. 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the declaration object. 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Declaration& 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetDeclaration () const; 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the method name. 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the method name object. 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString& 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName () const; 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the memory cost of this object. 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that this object occupies in memory. 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The returned value does not include the bytes for any 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// shared string values. 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see ConstString::StaticMemorySize () 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner MemorySize () const; 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables. 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString m_name; ///< Function method name (not a mangled name). 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration m_declaration; ///< Information describing where this function information was defined. 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class InlineFunctionInfo Function.h "lldb/Symbol/Function.h" 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A class that describes information for an inlined function. 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass InlineFunctionInfo : public FunctionInfo 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with the function method name, mangled name, and 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optional declaration information. 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A C string name for the method name for this function. This 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// value should not be the mangled named, but the simple method 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// name. 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] mangled 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A C string name for the mangled name for this function. This 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// value can be NULL if there is no mangled information. 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] decl_ptr 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional declaration information that describes where the 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function was declared. This can be NULL. 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] call_decl_ptr 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional calling location declaration information that 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// describes from where this inlined function was called. 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner InlineFunctionInfo(const char *name, const char *mangled, const Declaration *decl_ptr, const Declaration *call_decl_ptr); 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with the function method name, mangled name, and 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optional declaration information. 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A name for the method name for this function. This value 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should not be the mangled named, but the simple method name. 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] mangled 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A name for the mangled name for this function. This value 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can be empty if there is no mangled information. 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] decl_ptr 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional declaration information that describes where the 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function was declared. This can be NULL. 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] call_decl_ptr 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Optional calling location declaration information that 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// describes from where this inlined function was called. 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner InlineFunctionInfo(const ConstString& name, const Mangled &mangled, const Declaration *decl_ptr, const Declaration *call_decl_ptr); 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~InlineFunctionInfo(); 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Compare two inlined function information objects. 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// First compares the FunctionInfo objects, and if equal, 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// compares the mangled names. 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] lhs 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Left Hand Side const InlineFunctionInfo object 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// reference. 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] rhs 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Right Hand Side const InlineFunctionInfo object 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// reference. 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li -1 if lhs < rhs 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li 0 if lhs == rhs 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li 1 if lhs > rhs 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Compare(const InlineFunctionInfo& lhs, const InlineFunctionInfo& rhs); 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of this object to a Stream. 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of the contents of this object to the 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// supplied stream \a s. 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to dump the object descripton. 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 2401924e2408687e0ee41976010c6b9410bdd01270dGreg Clayton Dump(Stream *s, bool show_fullpaths) const; 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpStopContext (Stream *s) const; 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24533ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton const ConstString & 24633ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton GetName () const; 24733ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the call site declaration information. 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A reference to the declaration object. 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration& 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetCallSite (); 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the call site declaration information. 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the declaration object. 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Declaration& 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetCallSite () const; 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the mangled name object. 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A reference to the mangled name object. 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Mangled& 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetMangled(); 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the mangled name object. 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the mangled name object. 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Mangled& 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetMangled() const; 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the memory cost of this object. 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that this object occupies in memory. 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The returned value does not include the bytes for any 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// shared string values. 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see ConstString::StaticMemorySize () 29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner MemorySize() const; 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables. 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Mangled m_mangled; ///< Mangled inlined function name (can be empty if there is no mangled information). 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration m_call_decl; 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class Function Function.h "lldb/Symbol/Function.h" 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A class that describes a function. 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Functions belong to CompileUnit objects (Function::m_comp_unit), 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// have unique user IDs (Function::UserID), know how to reconstruct 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// their symbol context (Function::SymbolContextScope), have a 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// specific function type (Function::m_type_uid), have a simple 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// method name (FunctionInfo::m_name), be declared at a specific 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// location (FunctionInfo::m_declaration), possibly have mangled 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// names (Function::m_mangled), an optional return type 31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// (Function::m_type), and contains lexical blocks 31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// (Function::m_blocks). 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The function inforation is split into a few pieces: 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @li The concrete instance information 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @li The abstract information 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The abstract information is found in the function type (Type) that 32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// describes a function information, return type and parameter types. 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The concreate information is the address range information and 32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// specific locations for an instance of this function. 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Function : 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public UserID, 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public SymbolContextScope 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with a compile unit, function UID, function type UID, 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optional mangled name, function type, and a section offset 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// based address range. 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] comp_unit 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The compile unit to which this function belongs. 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_uid 34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The UID for this function. This value is provided by the 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolFile plug-in and can be any value that allows 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the plug-in to quickly find and parse more detailed 34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information when and if more information is needed. 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_type_uid 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The type UID for the function Type to allow for lazy type 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// parsing from the debug information. 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] mangled 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The optional mangled name for this function. If empty, there 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// is no mangled information. 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_type 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The optional function type. If NULL, the function type will 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be parsed on demand when accessed using the 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Function::GetType() function by asking the SymbolFile 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// plug-in to get the type for \a func_type_uid. 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] range 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The section offset based address for this function. 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Function ( 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CompileUnit *comp_unit, 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t func_uid, 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t func_type_uid, 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Mangled &mangled, 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type * func_type, 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const AddressRange& range); 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with a compile unit, function UID, function type UID, 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optional mangled name, function type, and a section offset 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// based address range. 37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] comp_unit 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The compile unit to which this function belongs. 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_uid 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The UID for this function. This value is provided by the 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolFile plug-in and can be any value that allows 38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the plug-in to quickly find and parse more detailed 38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information when and if more information is needed. 38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_type_uid 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The type UID for the function Type to allow for lazy type 38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// parsing from the debug information. 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] mangled 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The optional mangled name for this function. If empty, there 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// is no mangled information. 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] func_type 39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The optional function type. If NULL, the function type will 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be parsed on demand when accessed using the 39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Function::GetType() function by asking the SymbolFile 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// plug-in to get the type for \a func_type_uid. 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] range 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The section offset based address for this function. 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Function ( 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CompileUnit *comp_unit, 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t func_uid, 40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t func_type_uid, 40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *mangled, 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type * func_type, 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const AddressRange& range); 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Function (); 41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*) 41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContextScope 42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CalculateSymbolContext(SymbolContext* sc); 42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4253508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton virtual lldb::ModuleSP 426c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton CalculateSymbolContextModule (); 427c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 428c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton virtual CompileUnit * 429c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton CalculateSymbolContextCompileUnit (); 430c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 431c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton virtual Function * 432c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton CalculateSymbolContextFunction (); 433c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 43424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const AddressRange & 43575ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton GetAddressRange() 43675ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton { 43775ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton return m_range; 43875ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton } 43975ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton 440b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham //------------------------------------------------------------------ 441b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// Find the file and line number of the source location of the start 442b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// of the function. This will use the declaration if present and fall 443b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// back on the line table if that fails. So there may NOT be a line 444b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// table entry for this source file/line combo. 445b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// 446b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// @param[out] source_file 447b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// The source file. 448b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// 449b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// @param[out] line_no 450b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// The line number. 451b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham //------------------------------------------------------------------ 452b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham void 453b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham GetStartLineSourceInfo (FileSpec &source_file, uint32_t &line_no); 454b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham 455b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham //------------------------------------------------------------------ 456b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// Find the file and line number of the source location of the end 457b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// of the function. 458b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// 459b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// 460b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// @param[out] source_file 461b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// The source file. 462b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// 463b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// @param[out] line_no 464b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham /// The line number. 465b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham //------------------------------------------------------------------ 4667dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton void 467b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham GetEndLineSourceInfo (FileSpec &source_file, uint32_t &line_no); 468b75b466aac3fac6f49c429a11129fa5648db3f7cJim Ingham 46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 47024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the block list. 47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 47324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The block list object that describes all lexical blocks 47424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the function. 47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 47624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see BlockList 47724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 47875ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton Block& 47975ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton GetBlock (bool can_create); 48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 48224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the compile unit that owns this function. 48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A compile unit object pointer. 48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CompileUnit* 48824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetCompileUnit(); 48924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 49124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the compile unit that owns this function. 49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const compile unit object pointer. 49524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 49624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const CompileUnit* 49724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetCompileUnit() const; 49824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49912bec71b323dc520f0e985a86e09c4712559e115Greg Clayton void 500eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton GetDescription(Stream *s, lldb::DescriptionLevel level, Target *target); 50112bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 50224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 50324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the frame base location. 50424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 50524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 50624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A location expression that describes the function frame 50724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// base. 50824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 50924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFExpression & 51024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFrameBaseExpression() 51124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 51224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_frame_base; 51324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 51424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 51524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 51624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the frame base location. 51724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 51824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 51924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const compile unit object pointer. 52024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 52124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFExpression & 52224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFrameBaseExpression() const 52324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 52424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_frame_base; 52524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 52624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 527d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton const ConstString & 528d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton GetName() const 529d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton { 530d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton return m_mangled.GetName(); 531d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton } 532d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton 53324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Mangled & 53424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetMangled() const 53524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 53624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_mangled; 53724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 53824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 53924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 540c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan /// Get the DeclContext for this function, if available. 541c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan /// 542c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan /// @return 543c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan /// The DeclContext, or NULL if none exists. 544c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan //------------------------------------------------------------------ 545c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan clang::DeclContext * 546c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan GetClangDeclContext(); 547c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 548c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan //------------------------------------------------------------------ 54924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the type that describes the function 55024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// return value type, and paramter types. 55124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 55224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 55324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A type object pointer. 55424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 55524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type* 55624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetType(); 55724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 55824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 55924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the type that describes the function 56024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// return value type, and paramter types. 56124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 56224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 56324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const type object pointer. 56424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 56524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Type* 56624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetType() const; 56752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 56852f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 56952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetClangType (); 57024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 57124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 57224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPrologueByteSize (); 57324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 57424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 57524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of this object to a Stream. 57624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 57724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of the contents of this object to the 57824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// supplied stream \a s. 57924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 58024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 58124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to dump the object descripton. 58224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 58324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] show_context 58424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, variables will dump their symbol context 58524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information. 58624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 58724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 58824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump(Stream *s, bool show_context) const; 58924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 59024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 59124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @copydoc SymbolContextScope::DumpSymbolContext(Stream*) 59224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 59324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContextScope 59424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 59524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 59624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpSymbolContext(Stream *s); 59724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 59824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 59924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the memory cost of this object. 60024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 60124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 60224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that this object occupies in memory. 60324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The returned value does not include the bytes for any 60424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// shared string values. 60524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 60624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see ConstString::StaticMemorySize () 60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 60824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 60924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner MemorySize () const; 61024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 61124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 61224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 61324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 61424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 615e28824e0b988221c7eedf8e3d212527d2bdac6a7Eli Friedman flagsCalculatedPrologueSize = (1 << 0) ///< Have we already tried to calculate the prologue size? 61624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 61724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 61824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 61924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 62024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 62124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables. 62224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 62375ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton CompileUnit *m_comp_unit; ///< The compile unit that owns this function. 62424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t m_type_uid; ///< The user ID of for the prototype Type for this function. 62575ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton Type * m_type; ///< The function prototype type for this function that include the function info (FunctionInfo), return type and parameters. 62675ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton Mangled m_mangled; ///< The mangled function name if any, if empty, there is no mangled information. 62775ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton Block m_block; ///< All lexical blocks contained in this function. 62875ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton AddressRange m_range; ///< The function address range that covers the widest range needed to contain all blocks 62924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFExpression m_frame_base; ///< The frame base expression for variables that are relative to the frame pointer. 63024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Flags m_flags; 63175ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton uint32_t m_prologue_byte_size; ///< Compute the prologue size once and cache it 63224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 63324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN(Function); 63424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 63524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 63624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 63724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 63824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Function_h_ 639