124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Module.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_Module_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Module_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ArchSpec.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UUID.h" 1549ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Host/FileSpec.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Host/Mutex.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Host/TimeValue.h" 18b01000fd063629facd45044f137446fb748ee179Greg Clayton#include "lldb/Symbol/ClangASTContext.h" 1949ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Symbol/SymbolContextScope.h" 20964deba8853eb794e59263322b59b09b43669618Greg Clayton#include "lldb/Target/PathMappingList.h" 21964deba8853eb794e59263322b59b09b43669618Greg Clayton 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24964deba8853eb794e59263322b59b09b43669618Greg Clayton//---------------------------------------------------------------------- 25964deba8853eb794e59263322b59b09b43669618Greg Clayton/// @class Module Module.h "lldb/Core/Module.h" 26964deba8853eb794e59263322b59b09b43669618Greg Clayton/// @brief A class that describes an executable image and its associated 27964deba8853eb794e59263322b59b09b43669618Greg Clayton/// object and symbol files. 28964deba8853eb794e59263322b59b09b43669618Greg Clayton/// 29964deba8853eb794e59263322b59b09b43669618Greg Clayton/// The module is designed to be able to select a single slice of an 30964deba8853eb794e59263322b59b09b43669618Greg Clayton/// executable image as it would appear on disk and during program 31964deba8853eb794e59263322b59b09b43669618Greg Clayton/// execution. 32964deba8853eb794e59263322b59b09b43669618Greg Clayton/// 33964deba8853eb794e59263322b59b09b43669618Greg Clayton/// Modules control when and if information is parsed according to which 34964deba8853eb794e59263322b59b09b43669618Greg Clayton/// accessors are called. For example the object file (ObjectFile) 35964deba8853eb794e59263322b59b09b43669618Greg Clayton/// representation will only be parsed if the object file is requested 36964deba8853eb794e59263322b59b09b43669618Greg Clayton/// using the Module::GetObjectFile() is called. The debug symbols 37964deba8853eb794e59263322b59b09b43669618Greg Clayton/// will only be parsed if the symbol vendor (SymbolVendor) is 38964deba8853eb794e59263322b59b09b43669618Greg Clayton/// requested using the Module::GetSymbolVendor() is called. 39964deba8853eb794e59263322b59b09b43669618Greg Clayton/// 40964deba8853eb794e59263322b59b09b43669618Greg Clayton/// The module will parse more detailed information as more queries are 41964deba8853eb794e59263322b59b09b43669618Greg Clayton/// made. 42964deba8853eb794e59263322b59b09b43669618Greg Clayton//---------------------------------------------------------------------- 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Module : 44102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton public std::enable_shared_from_this<Module>, 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public SymbolContextScope 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 48a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain // Static functions that can track the lifetime of module objects. 49899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton // This is handy because we might have Module objects that are in 50899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton // shared pointers that aren't in the global module list (from 51899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton // ModuleList). If this is the case we need to know about it. 52899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton // The modules in the global list maintained by these functions 53899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton // can be viewed using the "target modules list" command using the 54899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton // "--global" (-g for short). 55899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton static size_t 56899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton GetNumberAllocatedModules (); 57899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 58899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton static Module * 59899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton GetAllocatedModuleAtIndex (size_t idx); 60899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 61c149c8b3a88e5c8a94febdf956551e378c531797Greg Clayton static Mutex * 62899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton GetAllocationModuleCollectionMutex(); 63899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with file specification and architecture. 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clients that wish to share modules with other targets should 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// use ModuleList::GetSharedModule(). 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] file_spec 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The file specification for the on disk repesentation of 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this executable image. 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] arch 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The architecture to set as the current architecture in 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this module. 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] object_name 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of an object in a module used to extract a module 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// within a module (.a files and modules that contain multiple 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// architectures). 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] object_offset 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The offset within an existing module used to extract a 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// module within a module (.a files and modules that contain 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// multiple architectures). 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Module (const FileSpec& file_spec, 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ArchSpec& arch, 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString *object_name = NULL, 910e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton off_t object_offset = 0, 920e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton const TimeValue *object_mod_time_ptr = NULL); 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 94444fe998bf707bd076a70c3a779db8575533695eGreg Clayton Module (const ModuleSpec &module_spec); 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 98bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton virtual 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Module (); 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 101444fe998bf707bd076a70c3a779db8575533695eGreg Clayton bool 102444fe998bf707bd076a70c3a779db8575533695eGreg Clayton MatchesModuleSpec (const ModuleSpec &module_ref); 103b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton 104b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton //------------------------------------------------------------------ 105b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// Set the load address for all sections in a module to be the 106b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// file address plus \a slide. 107b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// 108b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// Many times a module will be loaded in a target with a constant 109b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// offset applied to all top level sections. This function can 110b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// set the load address for all top level sections to be the 111b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// section file address + offset. 112b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// 113b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// @param[in] target 114b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// The target in which to apply the section load addresses. 115b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// 116b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// @param[in] offset 117b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// The offset to apply to all file addresses for all top 118b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// level sections in the object file as each section load 119b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// address is being set. 120b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// 121b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// @param[out] changed 122b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// If any section load addresses were changed in \a target, 123b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// then \a changed will be set to \b true. Else \a changed 124b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// will be set to false. This allows this function to be 125b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// called multiple times on the same module for the same 126b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// target. If the module hasn't moved, then \a changed will 127b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// be false and no module updated notification will need to 128b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// be sent out. 129b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// 1307dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton /// @return 131b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// /b True if any sections were successfully loaded in \a target, 132b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton /// /b false otherwise. 133b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton //------------------------------------------------------------------ 134b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton bool 135b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton SetLoadAddress (Target &target, 136b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton lldb::addr_t offset, 137b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton bool &changed); 138b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*) 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContextScope 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CalculateSymbolContext (SymbolContext* sc); 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1473508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton virtual lldb::ModuleSP 148c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton CalculateSymbolContextModule (); 149c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 1507826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice void 15175d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton GetDescription (Stream *s, 15275d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton lldb::DescriptionLevel level = lldb::eDescriptionLevelFull); 1537826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15597a19b21dacd9063bb5475812df7781777262198Greg Clayton /// Get the module path and object name. 15697a19b21dacd9063bb5475812df7781777262198Greg Clayton /// 15797a19b21dacd9063bb5475812df7781777262198Greg Clayton /// Modules can refer to object files. In this case the specification 15897a19b21dacd9063bb5475812df7781777262198Greg Clayton /// is simple and would return the path to the file: 15997a19b21dacd9063bb5475812df7781777262198Greg Clayton /// 16097a19b21dacd9063bb5475812df7781777262198Greg Clayton /// "/usr/lib/foo.dylib" 16197a19b21dacd9063bb5475812df7781777262198Greg Clayton /// 16297a19b21dacd9063bb5475812df7781777262198Greg Clayton /// Modules can be .o files inside of a BSD archive (.a file). In 16397a19b21dacd9063bb5475812df7781777262198Greg Clayton /// this case, the object specification will look like: 16497a19b21dacd9063bb5475812df7781777262198Greg Clayton /// 16597a19b21dacd9063bb5475812df7781777262198Greg Clayton /// "/usr/lib/foo.a(bar.o)" 16697a19b21dacd9063bb5475812df7781777262198Greg Clayton /// 16797a19b21dacd9063bb5475812df7781777262198Greg Clayton /// There are many places where logging wants to log this fully 16897a19b21dacd9063bb5475812df7781777262198Greg Clayton /// qualified specification, so we centralize this functionality 16997a19b21dacd9063bb5475812df7781777262198Greg Clayton /// here. 17097a19b21dacd9063bb5475812df7781777262198Greg Clayton /// 17197a19b21dacd9063bb5475812df7781777262198Greg Clayton /// @return 17297a19b21dacd9063bb5475812df7781777262198Greg Clayton /// The object path + object name if there is one. 17397a19b21dacd9063bb5475812df7781777262198Greg Clayton //------------------------------------------------------------------ 17497a19b21dacd9063bb5475812df7781777262198Greg Clayton std::string 17597a19b21dacd9063bb5475812df7781777262198Greg Clayton GetSpecificationDescription () const; 17697a19b21dacd9063bb5475812df7781777262198Greg Clayton 17797a19b21dacd9063bb5475812df7781777262198Greg Clayton //------------------------------------------------------------------ 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of this object to a Stream. 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of the contents of this object to the 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// supplied stream \a s. The dumped content will be only what has 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// been loaded or parsed up to this point at which this function 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// is called, so this is a good way to see what has been parsed 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in a module. 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to dump the object descripton. 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s); 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @copydoc SymbolContextScope::DumpSymbolContext(Stream*) 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContextScope 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpSymbolContext (Stream *s); 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2002fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2022fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// Find a symbol in the object file's symbol table. 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of the symbol that we are looking for. 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] symbol_type 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If set to eSymbolTypeAny, find a symbol of any type that 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// has a name that matches \a name. If set to any other valid 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolType enumeration value, then search only for 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbols that match \a symbol_type. 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a valid symbol pointer if a symbol was found, 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// NULL otherwise. 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Symbol * 21828d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton FindFirstSymbolWithNameAndType (const ConstString &name, 219b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton lldb::SymbolType symbol_type = lldb::eSymbolTypeAny); 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 2223e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan FindSymbolsWithNameAndType (const ConstString &name, 223b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton lldb::SymbolType symbol_type, 22428d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton SymbolContextList &sc_list); 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 22728d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton FindSymbolsMatchingRegExAndType (const RegularExpression ®ex, 228b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton lldb::SymbolType symbol_type, 22928d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton SymbolContextList &sc_list); 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2322fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// Find a funciton symbols in the object file's symbol table. 2332fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// 2342fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// @param[in] name 2352fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// The name of the symbol that we are looking for. 2362fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// 2372fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// @param[in] name_type_mask 2382fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// A mask that has one or more bitwise OR'ed values from the 2392fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// lldb::FunctionNameType enumeration type that indicate what 2402fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// kind of names we are looking for. 2412fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// 2422fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// @param[out] sc_list 2432fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// A list to append any matching symbol contexts to. 2442fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// 2452fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// @return 2462fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton /// The number of symbol contexts that were added to \a sc_list 2472fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton //------------------------------------------------------------------ 2482fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton size_t 2492fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton FindFunctionSymbols (const ConstString &name, 2502fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton uint32_t name_type_mask, 2512fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton SymbolContextList& sc_list); 2522fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton 2532fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton //------------------------------------------------------------------ 254801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// Find compile units by partial or full path. 255801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// 256801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// Finds all compile units that match \a path in all of the modules 257801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// and returns the results in \a sc_list. 258801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// 259801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// @param[in] path 260801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// The name of the function we are looking for. 261801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// 262801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// @param[in] append 263801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// If \b true, then append any compile units that were found 264801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// to \a sc_list. If \b false, then the \a sc_list is cleared 265801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// and the contents of \a sc_list are replaced. 266801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// 267801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// @param[out] sc_list 268801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// A symbol context list that gets filled in with all of the 269801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// matches. 270801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// 271801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// @return 272801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton /// The number of matches added to \a sc_list. 273801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton //------------------------------------------------------------------ 27436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 275801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton FindCompileUnits (const FileSpec &path, 276801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton bool append, 277801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton SymbolContextList &sc_list); 278801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton 279801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton 280801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton //------------------------------------------------------------------ 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find functions by name. 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 2831dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham /// If the function is an inlined function, it will have a block, 2841dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham /// representing the inlined function, and the function will be the 2851dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham /// containing function. If it is not inlined, then the block will 2861dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham /// be NULL. 2871dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham /// 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 289336dc6006ec498007db726614eefc7cacfe43e1dJim Ingham /// The name of the compile unit we are looking for. 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 2913e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan /// @param[in] namespace_decl 2923e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan /// If valid, a namespace to search in. 2933e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan /// 29412bec71b323dc520f0e985a86e09c4712559e115Greg Clayton /// @param[in] name_type_mask 29512bec71b323dc520f0e985a86e09c4712559e115Greg Clayton /// A bit mask of bits that indicate what kind of names should 29612bec71b323dc520f0e985a86e09c4712559e115Greg Clayton /// be used when doing the lookup. Bits include fully qualified 29712bec71b323dc520f0e985a86e09c4712559e115Greg Clayton /// names, base names, C++ methods, or ObjC selectors. 29812bec71b323dc520f0e985a86e09c4712559e115Greg Clayton /// See FunctionNameType for more details. 29912bec71b323dc520f0e985a86e09c4712559e115Greg Clayton /// 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] append 301cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen /// If \b true, any matches will be appended to \a sc_list, else 302cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen /// matches replace the contents of \a sc_list. 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] sc_list 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context list that gets filled in with all of the 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// matches. 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a sc_list. 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 31136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 3123e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan FindFunctions (const ConstString &name, 3133e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan const ClangNamespaceDecl *namespace_decl, 31428d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton uint32_t name_type_mask, 315302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan bool symbols_ok, 316302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan bool inlines_ok, 31728d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton bool append, 31828d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton SymbolContextList& sc_list); 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find functions by name. 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 3231dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham /// If the function is an inlined function, it will have a block, 3241dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham /// representing the inlined function, and the function will be the 3251dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham /// containing function. If it is not inlined, then the block will 3261dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham /// be NULL. 3271dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham /// 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] regex 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A regular expression to use when matching the name. 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] append 332cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen /// If \b true, any matches will be appended to \a sc_list, else 333cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen /// matches replace the contents of \a sc_list. 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] sc_list 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context list that gets filled in with all of the 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// matches. 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a sc_list. 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 34236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 34328d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton FindFunctions (const RegularExpression& regex, 34428d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton bool symbols_ok, 345302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan bool inlines_ok, 34628d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton bool append, 34728d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton SymbolContextList& sc_list); 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find global and static variables by name. 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of the global or static variable we are looking 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for. 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 3563e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan /// @param[in] namespace_decl 3573e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan /// If valid, a namespace to search in. 3583e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan /// 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] append 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, any matches will be appended to \a 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// variable_list, else matches replace the contents of 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a variable_list. 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] max_matches 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow the number of matches to be limited to \a 366178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton /// max_matches. Specify UINT32_MAX to get all possible matches. 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] variable_list 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A list of variables that gets the matches appended to (if 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a append it \b true), or replace (if \a append is \b false). 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a variable_list. 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 37536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 3763e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan FindGlobalVariables (const ConstString &name, 3773e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan const ClangNamespaceDecl *namespace_decl, 37828d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton bool append, 37936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t max_matches, 38028d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton VariableList& variable_list); 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find global and static variables by regular exression. 38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] regex 38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A regular expression to use when matching the name. 38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] append 38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, any matches will be appended to \a 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// variable_list, else matches replace the contents of 39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a variable_list. 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] max_matches 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow the number of matches to be limited to \a 395178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton /// max_matches. Specify UINT32_MAX to get all possible matches. 39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] variable_list 39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A list of variables that gets the matches appended to (if 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a append it \b true), or replace (if \a append is \b false). 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a variable_list. 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 40436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 40528d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton FindGlobalVariables (const RegularExpression& regex, 40628d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton bool append, 40736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t max_matches, 40828d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton VariableList& variable_list); 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find types by name. 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 413dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// Type lookups in modules go through the SymbolVendor (which will 414dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// use one or more SymbolFile subclasses). The SymbolFile needs to 415dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// be able to lookup types by basename and not the fully qualified 416dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// typename. This allows the type accelerator tables to stay small, 417dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// even with heavily templatized C++. The type search will then 418dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// narrow down the search results. If "exact_match" is true, then 419dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// the type search will only match exact type name matches. If 420dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// "exact_match" is false, the type will match as long as the base 421dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// typename matches and as long as any immediate containing 422dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// namespaces/class scopes that are specified match. So to search 423dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// for a type "d" in "b::c", the name "b::c::d" can be specified 424dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// and it will match any class/namespace "b" which contains a 425dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// class/namespace "c" which contains type "d". We do this to 426dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// allow users to not always have to specify complete scoping on 427dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// all expressions, but it also allows for exact matching when 428dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// required. 429dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// 43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] sc 43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context that scopes where to extract a type list 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// from. 43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 434dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// @param[in] type_name 435dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// The name of the type we are looking for that is a fully 436dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// or partially qualfieid type name. 43724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 438dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// @param[in] exact_match 439dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// If \b true, \a type_name is fully qualifed and must match 440dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// exactly. If \b false, \a type_name is a partially qualfied 441dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// name where the leading namespaces or classes can be 442dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// omitted to make finding types that a user may type 443dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// easier. 4443e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan /// 445dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// @param[out] type_list 446dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// A type list gets populated with any matches. 44724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 448dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// @return 449dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// The number of matches added to \a type_list. 450dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton //------------------------------------------------------------------ 45136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 452dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton FindTypes (const SymbolContext& sc, 453dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton const ConstString &type_name, 454dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton bool exact_match, 45536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t max_matches, 456dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton TypeList& types); 457dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 4580b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton lldb::TypeSP 4590b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton FindFirstType (const SymbolContext& sc, 4600b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton const ConstString &type_name, 4610b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton bool exact_match); 4620b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton 463dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton //------------------------------------------------------------------ 464dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// Find types by name that are in a namespace. This function is 465dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// used by the expression parser when searches need to happen in 466dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// an exact namespace scope. 46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 468dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// @param[in] sc 469dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// A symbol context that scopes where to extract a type list 470dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// from. 47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 472dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// @param[in] type_name 473dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// The name of a type within a namespace that should not include 474dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// any qualifying namespaces (just a type basename). 475dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// 476dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// @param[in] namespace_decl 477dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton /// The namespace declaration that this type must exist in. 47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 47924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] type_list 48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A type list gets populated with any matches. 48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 48224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a type_list. 48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 48536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 486dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton FindTypesInNamespace (const SymbolContext& sc, 487dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton const ConstString &type_name, 488dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton const ClangNamespaceDecl *namespace_decl, 48936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t max_matches, 490dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton TypeList& type_list); 49124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the module architecture. 49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 49524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 49624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the architecture object. 49724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 49824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ArchSpec& 49924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetArchitecture () const; 50024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 50124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 50224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the module file specification. 50324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 50424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// This function returns the file for the module on the host system 50524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// that is running LLDB. This can differ from the path on the 50624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// platform since we might be doing remote debugging. 50724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// 50824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// @return 50924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// A const reference to the file specification object. 51024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton //------------------------------------------------------------------ 51124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton const FileSpec & 51224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetFileSpec () const 51324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 51424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_file; 51524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 51624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 51724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton //------------------------------------------------------------------ 51824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// Get accessor for the module platform file specification. 51924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// 52024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// Platform file refers to the path of the module as it is known on 52124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// the remote system on which it is being debugged. For local 52224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// debugging this is always the same as Module::GetFileSpec(). But 52324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// remote debugging might mention a file "/usr/lib/liba.dylib" 52424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// which might be locally downloaded and cached. In this case the 52524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// platform file could be something like: 52624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// "/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib" 52724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// The file could also be cached in a local developer kit directory. 52824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton /// 52924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 53024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the file specification object. 53124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 53224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const FileSpec & 53324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetPlatformFileSpec () const 53424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 53524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (m_platform_file) 53624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_platform_file; 53724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_file; 53824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 53924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 54024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 54124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton SetPlatformFileSpec (const FileSpec &file) 54224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 54324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_platform_file = file; 54424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 54524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5463508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton const FileSpec & 5473508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton GetSymbolFileFileSpec () const 5483508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton { 5493508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton return m_symfile_spec; 5503508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton } 5513508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton 5523508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton void 55381a96aa6242f7b559770f5dc62316253cb8cb0d4Greg Clayton SetSymbolFileFileSpec (const FileSpec &file); 5543508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton 55524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const TimeValue & 5560e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton GetModificationTime () const 5570e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton { 5580e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton return m_mod_time; 5590e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton } 5600e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton 5610e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton const TimeValue & 5620e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton GetObjectModificationTime () const 5630e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton { 5640e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton return m_object_mod_time; 5650e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton } 5660e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton 5670e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton void 5680e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton SetObjectModificationTime (const TimeValue &mod_time) 5690e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton { 5700e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton m_mod_time = mod_time; 5710e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton } 5720e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton 5737508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 5747508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Tells whether this module is capable of being the main executable 5757508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// for a process. 5767508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 5777508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @return 5787508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// \b true if it is, \b false otherwise. 5797508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 5807508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham bool 5817508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham IsExecutable (); 58251b11e06de746667396f56b303d1867f007baf8bJim Ingham 58351b11e06de746667396f56b303d1867f007baf8bJim Ingham //------------------------------------------------------------------ 58451b11e06de746667396f56b303d1867f007baf8bJim Ingham /// Tells whether this module has been loaded in the target passed in. 58551b11e06de746667396f56b303d1867f007baf8bJim Ingham /// This call doesn't distinguish between whether the module is loaded 58651b11e06de746667396f56b303d1867f007baf8bJim Ingham /// by the dynamic loader, or by a "target module add" type call. 58751b11e06de746667396f56b303d1867f007baf8bJim Ingham /// 58851b11e06de746667396f56b303d1867f007baf8bJim Ingham /// @param[in] target 58951b11e06de746667396f56b303d1867f007baf8bJim Ingham /// The target to check whether this is loaded in. 59051b11e06de746667396f56b303d1867f007baf8bJim Ingham /// 59151b11e06de746667396f56b303d1867f007baf8bJim Ingham /// @return 59251b11e06de746667396f56b303d1867f007baf8bJim Ingham /// \b true if it is, \b false otherwise. 59351b11e06de746667396f56b303d1867f007baf8bJim Ingham //------------------------------------------------------------------ 59451b11e06de746667396f56b303d1867f007baf8bJim Ingham bool 59551b11e06de746667396f56b303d1867f007baf8bJim Ingham IsLoadedInTarget (Target *target); 59624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 597146d9522c95c0c8c5409539813b55e08b99196eeEnrico Granata bool 59802af494c397d62f22bea65d36ad47080b6adc8afEnrico Granata LoadScriptingResourceInTarget (Target *target, 59902af494c397d62f22bea65d36ad47080b6adc8afEnrico Granata Error& error, 60002af494c397d62f22bea65d36ad47080b6adc8afEnrico Granata Stream* feedback_stream = NULL); 601146d9522c95c0c8c5409539813b55e08b99196eeEnrico Granata 60224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 60324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the number of compile units for this module. 60424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 60524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 60624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of compile units that the symbol vendor plug-in 60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// finds. 60824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 60936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 61024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumCompileUnits(); 61124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 61224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::CompUnitSP 61336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetCompileUnitAtIndex (size_t idx); 61424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 61524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString & 61624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetObjectName() const; 61724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 618b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint64_t 619b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetObjectOffset() const 620b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 621b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_object_offset; 622b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 62324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 62424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 62524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the object file representation for the current architecture. 62624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 62724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the object file has not been located or parsed yet, this 62824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function will find the best ObjectFile plug-in that can parse 62924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Module::m_file. 63024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 63124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 63224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If Module::m_file does not exist, or no plug-in was found 63324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that can parse the file, or the object file doesn't contain 63424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the current architecture in Module::m_arch, NULL will be 63524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// returned, else a valid object file interface will be 63624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// returned. The returned pointer is owned by this object and 63724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// remains valid as long as the object is around. 63824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 63949ce8969d3154e1560106cfe530444c09410f217Greg Clayton virtual ObjectFile * 64024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetObjectFile (); 641a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain 642a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain //------------------------------------------------------------------ 643a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain /// Get the unified section list for the module. This is the section 644a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain /// list created by the module's object file and any debug info and 645a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain /// symbol files created by the symbol vendor. 646a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain /// 647a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain /// If the symbol vendor has not been loaded yet, this function 648a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain /// will return the section list for the object file. 649a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain /// 650a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain /// @return 651a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain /// Unified module section list. 652a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain //------------------------------------------------------------------ 653a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain virtual SectionList * 6547940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton GetSectionList (); 6557940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton 656ae2ae94bd72daf435204e99a0e03ccc64470a843Enrico Granata uint32_t 657ae2ae94bd72daf435204e99a0e03ccc64470a843Enrico Granata GetVersion (uint32_t *versions, uint32_t num_versions); 65824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6596c5438bf1d7af0f0ef1e81a30ad53e3fe93c35a8Greg Clayton // Load an object file from memory. 6606c5438bf1d7af0f0ef1e81a30ad53e3fe93c35a8Greg Clayton ObjectFile * 6616c5438bf1d7af0f0ef1e81a30ad53e3fe93c35a8Greg Clayton GetMemoryObjectFile (const lldb::ProcessSP &process_sp, 6626c5438bf1d7af0f0ef1e81a30ad53e3fe93c35a8Greg Clayton lldb::addr_t header_addr, 6636c5438bf1d7af0f0ef1e81a30ad53e3fe93c35a8Greg Clayton Error &error); 66424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 66524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the symbol vendor interface for the current architecture. 66624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 66724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the symbol vendor file has not been located yet, this 66824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function will find the best SymbolVendor plug-in that can 66924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// use the current object file. 67024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 67124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 67224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If this module does not have a valid object file, or no 67324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// plug-in can be found that can use the object file, NULL will 67424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be returned, else a valid symbol vendor plug-in interface 67524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will be returned. The returned pointer is owned by this 67624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// object and remains valid as long as the object is around. 67724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 67849ce8969d3154e1560106cfe530444c09410f217Greg Clayton virtual SymbolVendor* 679188091899842b140313b54e097f16efbe165c998Greg Clayton GetSymbolVendor(bool can_create = true, 680188091899842b140313b54e097f16efbe165c998Greg Clayton lldb_private::Stream *feedback_strm = NULL); 68124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 68224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 68324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor the type list for this module. 68424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 68524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 68624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A valid type list pointer, or NULL if there is no valid 68724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbol vendor for this module. 68824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 68924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TypeList* 69024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetTypeList (); 69124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 69224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 69324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get a pointer to the UUID value contained in this object. 69424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 69524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the executable image file doesn't not have a UUID value built 69624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// into the file format, an MD5 checksum of the entire file, or 69724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// slice of the file for the current architecture should be used. 69824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 69924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 70024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const pointer to the internal copy of the UUID value in 70124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this module if this module has a valid UUID value, NULL 70224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// otherwise. 70324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7040467c78e9a75eff9ec33d3c1f39fa83e1c5d9241Greg Clayton const lldb_private::UUID & 70524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetUUID (); 70624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 70724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 70824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A debugging function that will cause everything in a module to 70924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be parsed. 71024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 71124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// All compile units will be pasred, along with all globals and 71224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// static variables and all functions for those compile units. 71324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// All types, scopes, local variables, static variables, global 71424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// variables, and line tables will be parsed. This can be used 71524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// prior to dumping a module to see a complete list of the 71624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// resuling debug information that gets parsed, or as a debug 71724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function to ensure that the module can consume all of the 71824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// debug data the symbol vendor provides. 71924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 72024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 72124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ParseAllDebugSymbols(); 72224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 72324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 72424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveFileAddress (lldb::addr_t vm_addr, Address& so_addr); 72524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 72624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 72724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveSymbolContextForAddress (const Address& so_addr, uint32_t resolve_scope, SymbolContext& sc); 72824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 72924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 73024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resolve items in the symbol context for a given file and line. 73124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 73224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Tries to resolve \a file_path and \a line to a list of matching 73324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbol contexts. 73424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 73524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The line table entries contains addresses that can be used to 73624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// further resolve the values in each match: the function, block, 73724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbol. Care should be taken to minimize the amount of 73824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information that is requested to only what is needed -- 73924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// typically the module, compile unit, line table and line table 74024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// entry are sufficient. 74124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 74224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] file_path 74324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A path to a source file to match. If \a file_path does not 74424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// specify a directory, then this query will match all files 74524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// whose base filename matches. If \a file_path does specify 74624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a directory, the fullpath to the file must match. 74724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 74824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] line 74924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The source line to match, or zero if just the compile unit 75024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should be resolved. 75124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 75224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] check_inlines 75324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check for inline file and line number matches. This option 75424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should be used sparingly as it will cause all line tables 75524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for every compile unit to be parsed and searched for 75624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// matching inline file entries. 75724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 75824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] resolve_scope 75924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The scope that should be resolved (see 76024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolContext::Scope). 76124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 76224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] sc_list 76324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context list that gets matching symbols contexts 76424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// appended to. 76524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 76624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 76724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches that were added to \a sc_list. 76824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 76924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContext::Scope 77024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 77124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 77224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveSymbolContextForFilePath (const char *file_path, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list); 77324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 77424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 77524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resolve items in the symbol context for a given file and line. 77624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 77724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Tries to resolve \a file_spec and \a line to a list of matching 77824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbol contexts. 77924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 78024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The line table entries contains addresses that can be used to 78124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// further resolve the values in each match: the function, block, 78224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbol. Care should be taken to minimize the amount of 78324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information that is requested to only what is needed -- 78424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// typically the module, compile unit, line table and line table 78524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// entry are sufficient. 78624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 78724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] file_spec 78824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A file spec to a source file to match. If \a file_path does 78924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// not specify a directory, then this query will match all 79024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// files whose base filename matches. If \a file_path does 79124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// specify a directory, the fullpath to the file must match. 79224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 79324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] line 79424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The source line to match, or zero if just the compile unit 79524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should be resolved. 79624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 79724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] check_inlines 79824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check for inline file and line number matches. This option 79924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should be used sparingly as it will cause all line tables 80024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for every compile unit to be parsed and searched for 80124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// matching inline file entries. 80224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 80324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] resolve_scope 80424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The scope that should be resolved (see 80524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolContext::Scope). 80624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 80724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] sc_list 80824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context list that gets filled in with all of the 80924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// matches. 81024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 81124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 81224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A integer that contains SymbolContext::Scope bits set for 81324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// each item that was successfully resolved. 81424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 81524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContext::Scope 81624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 81724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 81824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveSymbolContextsForFileSpec (const FileSpec &file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list); 81924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 82024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 82124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 82224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetFileSpecAndObjectName (const FileSpec &file, 82324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString &object_name); 82424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 825236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton bool 826236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton GetIsDynamicLinkEditor () const 827236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton { 828236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton return m_is_dynamic_loader_module; 829236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton } 830236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton 831236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton void 832236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton SetIsDynamicLinkEditor (bool b) 833236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton { 834236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton m_is_dynamic_loader_module = b; 835236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton } 836236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton 837b01000fd063629facd45044f137446fb748ee179Greg Clayton ClangASTContext & 838b01000fd063629facd45044f137446fb748ee179Greg Clayton GetClangASTContext (); 839b01000fd063629facd45044f137446fb748ee179Greg Clayton 84075d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton // Special error functions that can do printf style formatting that will prepend the message with 84175d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton // something appropriate for this module (like the architecture, path and object name (if any)). 84275d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton // This centralizes code so that everyone doesn't need to format their error and log messages on 84375d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton // their own and keeps the output a bit more consistent. 84475d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton void 84575d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton LogMessage (Log *log, const char *format, ...) __attribute__ ((format (printf, 3, 4))); 84675d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton 84773a35715708b65b1d96c1c8f439548bb0990df08Greg Clayton void 84873a35715708b65b1d96c1c8f439548bb0990df08Greg Clayton LogMessageVerboseBacktrace (Log *log, const char *format, ...) __attribute__ ((format (printf, 3, 4))); 84973a35715708b65b1d96c1c8f439548bb0990df08Greg Clayton 85075d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton void 85175d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton ReportWarning (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 85275d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton 85375d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton void 85475d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton ReportError (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 85575d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton 856df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton // Only report an error once when the module is first detected to be modified 857df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton // so we don't spam the console with many messages. 858df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton void 859df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton ReportErrorIfModifyDetected (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 860df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton 861cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton //------------------------------------------------------------------ 862cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton // Return true if the file backing this module has changed since the 863cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton // module was originally created since we saved the intial file 864cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton // modification time when the module first gets created. 865cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton //------------------------------------------------------------------ 866df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton bool 867cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton FileHasChanged () const; 868df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton 8699482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton //------------------------------------------------------------------ 8709482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton // SymbolVendor, SymbolFile and ObjectFile member objects should 8719482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton // lock the module mutex to avoid deadlocks. 8729482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton //------------------------------------------------------------------ 8739482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton Mutex & 8749482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton GetMutex () const 8759482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton { 8769482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton return m_mutex; 8779482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton } 8789482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton 879964deba8853eb794e59263322b59b09b43669618Greg Clayton PathMappingList & 880964deba8853eb794e59263322b59b09b43669618Greg Clayton GetSourceMappingList () 881964deba8853eb794e59263322b59b09b43669618Greg Clayton { 882964deba8853eb794e59263322b59b09b43669618Greg Clayton return m_source_mappings; 883964deba8853eb794e59263322b59b09b43669618Greg Clayton } 884964deba8853eb794e59263322b59b09b43669618Greg Clayton 885964deba8853eb794e59263322b59b09b43669618Greg Clayton const PathMappingList & 886964deba8853eb794e59263322b59b09b43669618Greg Clayton GetSourceMappingList () const 887964deba8853eb794e59263322b59b09b43669618Greg Clayton { 888964deba8853eb794e59263322b59b09b43669618Greg Clayton return m_source_mappings; 889964deba8853eb794e59263322b59b09b43669618Greg Clayton } 890964deba8853eb794e59263322b59b09b43669618Greg Clayton 8912418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton //------------------------------------------------------------------ 8922418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// Finds a source file given a file spec using the module source 8932418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// path remappings (if any). 8942418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// 8952418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// Tries to resolve \a orig_spec by checking the module source path 8962418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// remappings. It makes sure the file exists, so this call can be 8972418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// expensive if the remappings are on a network file system, so 8982418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// use this function sparingly (not in a tight debug info parsing 8992418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// loop). 9002418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// 9012418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// @param[in] orig_spec 9022418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// The original source file path to try and remap. 9032418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// 9042418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// @param[out] new_spec 9052418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// The newly remapped filespec that is guaranteed to exist. 9062418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// 9072418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// @return 9082418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// /b true if \a orig_spec was successfully located and 9092418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// \a new_spec is filled in with an existing file spec, 9102418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// \b false otherwise. 9112418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton //------------------------------------------------------------------ 912964deba8853eb794e59263322b59b09b43669618Greg Clayton bool 913964deba8853eb794e59263322b59b09b43669618Greg Clayton FindSourceFile (const FileSpec &orig_spec, FileSpec &new_spec) const; 914964deba8853eb794e59263322b59b09b43669618Greg Clayton 9152418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton //------------------------------------------------------------------ 9162418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// Remaps a source file given \a path into \a new_path. 9172418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// 9182418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// Remaps \a path if any source remappings match. This function 9192418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// does NOT stat the file system so it can be used in tight loops 9202418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// where debug info is being parsed. 9212418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// 9222418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// @param[in] path 9232418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// The original source file path to try and remap. 9242418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// 9252418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// @param[out] new_path 9262418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// The newly remapped filespec that is may or may not exist. 9272418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// 9282418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// @return 9292418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// /b true if \a path was successfully located and \a new_path 9302418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton /// is filled in with a new source path, \b false otherwise. 9312418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton //------------------------------------------------------------------ 9322418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton bool 9332418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton RemapSourceFile (const char *path, std::string &new_path) const; 9342418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton 935296b06d325413723f5aac5988eed977b278a7807Greg Clayton 936296b06d325413723f5aac5988eed977b278a7807Greg Clayton //------------------------------------------------------------------ 937296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// Prepare to do a function name lookup. 938296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// 939296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// Looking up functions by name can be a tricky thing. LLDB requires 940296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// that accelerator tables contain full names for functions as well 941296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// as function basenames which include functions, class methods and 942296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// class functions. When the user requests that an action use a 943296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// function by name, we are sometimes asked to automatically figure 944296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// out what a name could possibly map to. A user might request a 945296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// breakpoint be set on "count". If no options are supplied to limit 946296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// the scope of where to search for count, we will by default match 947296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// any function names named "count", all class and instance methods 948296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// named "count" (no matter what the namespace or contained context) 949296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// and any selectors named "count". If a user specifies "a::b" we 950296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// will search for the basename "b", and then prune the results that 951296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// don't match "a::b" (note that "c::a::b" and "d::e::a::b" will 952296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// match a query of "a::b". 953296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// 954296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// @param[in] name 955296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// The user supplied name to use in the lookup 956296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// 957296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// @param[in] name_type_mask 958296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// The mask of bits from lldb::FunctionNameType enumerations 959296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// that tell us what kind of name we are looking for. 960296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// 961296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// @param[out] lookup_name 962296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// The actual name that will be used when calling 963296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// SymbolVendor::FindFunctions() or Symtab::FindFunctionSymbols() 964296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// 965296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// @param[out] lookup_name_type_mask 966296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// The actual name mask that should be used in the calls to 967296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// SymbolVendor::FindFunctions() or Symtab::FindFunctionSymbols() 968296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// 969296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// @param[out] match_name_after_lookup 970296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// A boolean that indicates if we need to iterate through any 971296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// match results obtained from SymbolVendor::FindFunctions() or 972296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// Symtab::FindFunctionSymbols() to see if the name contains 973296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// \a name. For example if \a name is "a::b", this function will 974296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// return a \a lookup_name of "b", with \a match_name_after_lookup 975296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// set to true to indicate any matches will need to be checked 976296b06d325413723f5aac5988eed977b278a7807Greg Clayton /// to make sure they contain \a name. 977296b06d325413723f5aac5988eed977b278a7807Greg Clayton //------------------------------------------------------------------ 978296b06d325413723f5aac5988eed977b278a7807Greg Clayton static void 979296b06d325413723f5aac5988eed977b278a7807Greg Clayton PrepareForFunctionNameLookup (const ConstString &name, 980296b06d325413723f5aac5988eed977b278a7807Greg Clayton uint32_t name_type_mask, 981296b06d325413723f5aac5988eed977b278a7807Greg Clayton ConstString &lookup_name, 982296b06d325413723f5aac5988eed977b278a7807Greg Clayton uint32_t &lookup_name_type_mask, 983296b06d325413723f5aac5988eed977b278a7807Greg Clayton bool &match_name_after_lookup); 984296b06d325413723f5aac5988eed977b278a7807Greg Clayton 98524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 98624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 98724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member Variables 98824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 98924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner mutable Mutex m_mutex; ///< A mutex to keep this object happy in multi-threaded environments. 99024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TimeValue m_mod_time; ///< The modification time for this module when it was created. 9917508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham ArchSpec m_arch; ///< The architecture for this module. 9920467c78e9a75eff9ec33d3c1f39fa83e1c5d9241Greg Clayton lldb_private::UUID m_uuid; ///< Each module is assumed to have a unique identifier to help match it up to debug symbols. 99324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FileSpec m_file; ///< The file representation on disk for this module (if there is one). 99424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton FileSpec m_platform_file;///< The path to the module on the platform on which it is being debugged 9953508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton FileSpec m_symfile_spec; ///< If this path is valid, then this is the file that _will_ be used as the symbol file for this module 99624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString m_object_name; ///< The name an object within this module that is selected, or empty of the module is represented by \a m_file. 997b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint64_t m_object_offset; 9980e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton TimeValue m_object_mod_time; 999e40b6424d9e49306392bec4b44060da36414c382Greg Clayton lldb::ObjectFileSP m_objfile_sp; ///< A shared pointer to the object file parser for this module as it may or may not be shared with the SymbolFile 1000102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<SymbolVendor> m_symfile_ap; ///< A pointer to the symbol vendor for this module. 1001b01000fd063629facd45044f137446fb748ee179Greg Clayton ClangASTContext m_ast; ///< The AST context for this module. 1002964deba8853eb794e59263322b59b09b43669618Greg Clayton PathMappingList m_source_mappings; ///< Module specific source remappings for when you have debug info for a module that doesn't match where the sources currently are 10037940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton std::unique_ptr<lldb_private::SectionList> m_sections_ap; ///< Unified section list for module that is used by the ObjectFile and and ObjectFile instances for the debug info 1004964deba8853eb794e59263322b59b09b43669618Greg Clayton 1005236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton bool m_did_load_objfile:1, 1006236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton m_did_load_symbol_vendor:1, 1007236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton m_did_parse_uuid:1, 1008b01000fd063629facd45044f137446fb748ee179Greg Clayton m_did_init_ast:1, 1009cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton m_is_dynamic_loader_module:1; 1010cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton mutable bool m_file_has_changed:1, 1011cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton m_first_file_changed_log:1; /// See if the module was modified after it was initially opened. 1012236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton 101324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 101424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resolve a file or load virtual address. 101524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 101624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Tries to resolve \a vm_addr as a file address (if \a 101724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// vm_addr_is_file_addr is true) or as a load address if \a 101824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// vm_addr_is_file_addr is false) in the symbol vendor. 101924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a resolve_scope indicates what clients wish to resolve 102024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and can be used to limit the scope of what is parsed. 102124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 102224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 102324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The load virtual address to resolve. 102424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 102524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr_is_file_addr 102624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, \a vm_addr is a file address, else \a vm_addr 102724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if a load address. 102824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 102924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] resolve_scope 103024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The scope that should be resolved (see 103124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolContext::Scope). 103224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 103324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] so_addr 103424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The section offset based address that got resolved if 103524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// any bits are returned. 103624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 103724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] sc 103824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The symbol context that has objects filled in. Each bit 103924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the \a resolve_scope pertains to a member in the \a sc. 104024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 104124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 104224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A integer that contains SymbolContext::Scope bits set for 104324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// each item that was successfully resolved. 104424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 104524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContext::Scope 104624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 104724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 1048236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton ResolveSymbolContextForAddress (lldb::addr_t vm_addr, 1049236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton bool vm_addr_is_file_addr, 1050236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton uint32_t resolve_scope, 1051236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton Address& so_addr, 1052236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton SymbolContext& sc); 10537508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 1054236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton void 1055236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton SymbolIndicesToSymbolContextList (Symtab *symtab, 1056236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton std::vector<uint32_t> &symbol_indexes, 1057236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton SymbolContextList &sc_list); 1058236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton 1059236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton bool 1060236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton SetArchitecture (const ArchSpec &new_arch); 10617508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 10627940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton SectionList * 10637940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton GetUnifiedSectionList(); 10647940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton 106549ce8969d3154e1560106cfe530444c09410f217Greg Clayton friend class ModuleList; 106649ce8969d3154e1560106cfe530444c09410f217Greg Clayton friend class ObjectFile; 10677940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton friend class SymbolFile; 106849ce8969d3154e1560106cfe530444c09410f217Greg Clayton 106924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 1070979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 107136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 1072979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata FindTypes_Impl (const SymbolContext& sc, 10730fcec13c6639ab49216fa9447b25888b7bc9ff59Sean Callanan const ConstString &name, 10740fcec13c6639ab49216fa9447b25888b7bc9ff59Sean Callanan const ClangNamespaceDecl *namespace_decl, 1075979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata bool append, 107636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t max_matches, 1077979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeList& types); 1078979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 1079979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 108024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (Module); 108124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 108224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 108324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 108424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 108524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Module_h_ 1086