Module.h revision 2418fddf2e200c827da5bc6c855f3d4971b2d867
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===-- Module.h ------------------------------------------------*- C++ -*-===// 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// The LLVM Compiler Infrastructure 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details. 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#ifndef liblldb_Module_h_ 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define liblldb_Module_h_ 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "lldb/Core/ArchSpec.h" 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "lldb/Core/Section.h" 1549aa7ff1245abd03e6e998e01302df31e4c6f8f6Argyrios Kyrtzidis#include "lldb/Core/UUID.h" 16980e508ca70d6de75d2abfd96b4681fc98bb2698Steve Naroff#include "lldb/Symbol/ObjectFile.h" 17aaba5e346dffdbad5d1c42765a89e4a7afb0da67Douglas Gregor#include "lldb/Host/Mutex.h" 18e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar#include "lldb/Host/TimeValue.h" 19e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar#include "lldb/Symbol/ClangASTContext.h" 205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "lldb/Symbol/CompileUnit.h" 2185f9bceab1542aafff012d4d28e998f4ba16e362Anders Carlsson#include "lldb/Symbol/SymbolContext.h" 227192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek#include "lldb/Symbol/Symtab.h" 237192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek#include "lldb/Symbol/TypeList.h" 246fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman#include "lldb/Target/PathMappingList.h" 2585f9bceab1542aafff012d4d28e998f4ba16e362Anders Carlsson 265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace lldb_private { 285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass ModuleSpec 305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer{ 315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 3261710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner ModuleSpec () : 3361710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner m_file (), 34e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar m_platform_file (), 35c0ac4923f08b25ae973a8ee7942cf3eb89da57b7Steve Naroff m_symbol_file (), 36bd4c1ada2e8668f43a865dc2c662085cf61940c4Anders Carlsson m_arch (), 37c0ac4923f08b25ae973a8ee7942cf3eb89da57b7Steve Naroff m_uuid (), 382e1cd4264d363ca869bf37ef160902f211d21b8cDouglas Gregor m_object_name (), 39e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar m_object_offset (0), 40e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar m_source_mappings () 41e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar { 42e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar } 43e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar 44e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar ModuleSpec (const FileSpec &file_spec) : 45e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar m_file (file_spec), 465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_platform_file (), 475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_symbol_file (), 485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_arch (), 494b05b1dee6cc65ae61d93dab7edff72710f24589Ted Kremenek m_uuid (), 505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_object_name (), 515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_object_offset (0), 52b26153c2b06934b6d39886cae2a379988d9c3e2bEli Friedman m_source_mappings () 53b74668edbc119880eb0a7e563432314432cb775dNuno Lopes { 54b74668edbc119880eb0a7e563432314432cb775dNuno Lopes } 55b74668edbc119880eb0a7e563432314432cb775dNuno Lopes 56b74668edbc119880eb0a7e563432314432cb775dNuno Lopes ModuleSpec (const FileSpec &file_spec, const ArchSpec &arch) : 57b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_file (file_spec), 58b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_platform_file (), 59b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_symbol_file (), 60b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_arch (arch), 61b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_uuid (), 62b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_object_name (), 63b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_object_offset (0), 64b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_source_mappings () 65b74668edbc119880eb0a7e563432314432cb775dNuno Lopes { 66b74668edbc119880eb0a7e563432314432cb775dNuno Lopes } 67b74668edbc119880eb0a7e563432314432cb775dNuno Lopes 68b74668edbc119880eb0a7e563432314432cb775dNuno Lopes ModuleSpec (const ModuleSpec &rhs) : 69b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_file (rhs.m_file), 70b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_platform_file (rhs.m_platform_file), 71b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_symbol_file (rhs.m_symbol_file), 72b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_arch (rhs.m_arch), 73b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_uuid (rhs.m_uuid), 74b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_object_name (rhs.m_object_name), 75b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_object_offset (rhs.m_object_offset), 76b74668edbc119880eb0a7e563432314432cb775dNuno Lopes m_source_mappings (rhs.m_source_mappings) 77b74668edbc119880eb0a7e563432314432cb775dNuno Lopes { 78b74668edbc119880eb0a7e563432314432cb775dNuno Lopes } 79b74668edbc119880eb0a7e563432314432cb775dNuno Lopes 80b26153c2b06934b6d39886cae2a379988d9c3e2bEli Friedman ModuleSpec & 815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer operator = (const ModuleSpec &rhs) 825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (this != &rhs) 845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_file = rhs.m_file; 865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_platform_file = rhs.m_platform_file; 87248e1c01d3c9de4b62bdd291e0b99a91552cc487Daniel Dunbar m_symbol_file = rhs.m_symbol_file; 885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_arch = rhs.m_arch; 89f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl m_uuid = rhs.m_uuid; 905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_object_name = rhs.m_object_name; 915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_object_offset = rhs.m_object_offset; 92a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek m_source_mappings = rhs.m_source_mappings; 93a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek } 946cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff return *this; 955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer FileSpec * 985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetFileSpecPtr () 995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 1005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (m_file) 1015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return &m_file; 102248e1c01d3c9de4b62bdd291e0b99a91552cc487Daniel Dunbar return NULL; 103248e1c01d3c9de4b62bdd291e0b99a91552cc487Daniel Dunbar } 1045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const FileSpec * 106f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl GetFileSpecPtr () const 107f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl { 1086d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner if (m_file) 1096d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner return &m_file; 1105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return NULL; 1115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1126d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner 1136d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner FileSpec & 1145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetFileSpec () 1155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 1165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return m_file; 1175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const FileSpec & 1195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetFileSpec () const 1205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 1215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return m_file; 12239ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis } 1235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 12439ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis FileSpec * 12539ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis GetPlatformFileSpecPtr () 12639ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis { 12739ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis if (m_platform_file) 1285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return &m_platform_file; 129a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek return NULL; 130a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek } 131a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek 132a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek const FileSpec * 133a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek GetPlatformFileSpecPtr () const 134a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek { 1356cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff if (m_platform_file) 1366cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff return &m_platform_file; 1376cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff return NULL; 1386cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff } 1393f128ad2691d299b96663da85a9e069c4081ea7cSteve Naroff 140beb663677aa20db59da4e5ab7d535804ec6f963cChris Lattner FileSpec & 1415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetPlatformFileSpec () 1425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 1435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return m_platform_file; 1445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const FileSpec & 147248e1c01d3c9de4b62bdd291e0b99a91552cc487Daniel Dunbar GetPlatformFileSpec () const 1485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 149f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl return m_platform_file; 1506d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner } 1515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1526d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner FileSpec * 1535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetSymbolFileSpecPtr () 1545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 1555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (m_symbol_file) 1565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return &m_symbol_file; 1575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return NULL; 1585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const FileSpec * 161a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek GetSymbolFileSpecPtr () const 162beb663677aa20db59da4e5ab7d535804ec6f963cChris Lattner { 163a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek if (m_symbol_file) 164c569249ca0ab755ac79d8cbbfcb2bcae19743624Fariborz Jahanian return &m_symbol_file; 165a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek return NULL; 1666cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff } 1676cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff 1686cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff FileSpec & 1695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetSymbolFileSpec () 1705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 1716d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner return m_symbol_file; 172f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl } 1735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const FileSpec & 1756cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff GetSymbolFileSpec () const 1766cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff { 1775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return m_symbol_file; 1785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 181f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff ArchSpec * 1825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetArchitecturePtr () 1835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 1845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (m_arch.IsValid()) 1855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return &m_arch; 1865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return NULL; 1875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1895f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const ArchSpec * 1905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetArchitecturePtr () const 1915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 1925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (m_arch.IsValid()) 19398be4943e8dc4f3905629a7102668960873cf863Chris Lattner return &m_arch; 1945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return NULL; 1955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ArchSpec & 1985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetArchitecture () 1995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 2005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return m_arch; 2015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const ArchSpec & 2045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetArchitecture () const 2055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 2065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return m_arch; 2075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer UUID * 2105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetUUIDPtr () 2115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 2125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (m_uuid.IsValid()) 2135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return &m_uuid; 2145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return NULL; 21564c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis } 21664c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis 21764c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis const UUID * 21864c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis GetUUIDPtr () const 2198e9bebdea69c590dedfbf27374114cb76fe12fbdDouglas Gregor { 220898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor if (m_uuid.IsValid()) 221898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor return &m_uuid; 222898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor return NULL; 223898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor } 224898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 225898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor UUID & 226898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor GetUUID () 227898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor { 2288e9bebdea69c590dedfbf27374114cb76fe12fbdDouglas Gregor return m_uuid; 2295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const UUID & 2325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetUUID () const 2338e9bebdea69c590dedfbf27374114cb76fe12fbdDouglas Gregor { 2347e219e47de26346885d667131977bd9ca2d7662aSteve Naroff return m_uuid; 235a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek } 2367e219e47de26346885d667131977bd9ca2d7662aSteve Naroff 237a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek ConstString & 2388baaca50f07d0c10bba69c8d88c1b9078c92d06dAnders Carlsson GetObjectName () 2398baaca50f07d0c10bba69c8d88c1b9078c92d06dAnders Carlsson { 240a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek return m_object_name; 24133e1d64ab5cd5d27f8530ccd056191fe2c9f3f2eFariborz Jahanian } 24233e1d64ab5cd5d27f8530ccd056191fe2c9f3f2eFariborz Jahanian 24333e1d64ab5cd5d27f8530ccd056191fe2c9f3f2eFariborz Jahanian const ConstString & 2445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetObjectName () const 2455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 246464175bba1318bef7905122e9fda20cff926df78Chris Lattner return m_object_name; 247464175bba1318bef7905122e9fda20cff926df78Chris Lattner } 248464175bba1318bef7905122e9fda20cff926df78Chris Lattner 249a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner uint64_t 250b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner GetObjectOffset () const 251b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner { 252b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner return m_object_offset; 253b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner } 254b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner 255b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner void 256b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner SetObjectOffset (uint64_t object_offset) 257b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner { 258b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner m_object_offset = object_offset; 259b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner } 260b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner 261b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner PathMappingList & 262b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner GetSourceMappingList () const 263af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner { 264af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner return m_source_mappings; 265af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner } 266af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner 267af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattnerprotected: 268af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner FileSpec m_file; 269af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner FileSpec m_platform_file; 270af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner FileSpec m_symbol_file; 271af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner ArchSpec m_arch; 272af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner UUID m_uuid; 273af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner ConstString m_object_name; 274af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner uint64_t m_object_offset; 275af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner mutable PathMappingList m_source_mappings; 276af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner}; 277af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner 278af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner//---------------------------------------------------------------------- 279af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner/// @class Module Module.h "lldb/Core/Module.h" 280af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner/// @brief A class that describes an executable image and its associated 281af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner/// object and symbol files. 282af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner/// 283b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner/// The module is designed to be able to select a single slice of an 284a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner/// executable image as it would appear on disk and during program 285a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner/// execution. 286d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner/// 2871d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar/// Modules control when and if information is parsed according to which 288f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner/// accessors are called. For example the object file (ObjectFile) 2899e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner/// representation will only be parsed if the object file is requested 290d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner/// using the Module::GetObjectFile() is called. The debug symbols 291a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner/// will only be parsed if the symbol vendor (SymbolVendor) is 292030d8846c7e520330007087e949f621989876e3aChris Lattner/// requested using the Module::GetSymbolVendor() is called. 2935d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner/// 2945d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner/// The module will parse more detailed information as more queries are 295692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner/// made. 296b1c2df99ba67ec6c29ac7dceaa4eb2c8cda4a017Chris Lattner//---------------------------------------------------------------------- 297fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroffclass Module : 298fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff public STD_ENABLE_SHARED_FROM_THIS(Module), 299898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor public SymbolContextScope 300898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor{ 301fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroffpublic: 3021d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar friend class ModuleList; 303030d8846c7e520330007087e949f621989876e3aChris Lattner friend bool ObjectFile::SetModulesArchitecture (const ArchSpec &new_arch); 30498be4943e8dc4f3905629a7102668960873cf863Chris Lattner 3059e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner // Static functions that can track the lifetime of moodule objects. 306030d8846c7e520330007087e949f621989876e3aChris Lattner // This is handy because we might have Module objects that are in 307030d8846c7e520330007087e949f621989876e3aChris Lattner // shared pointers that aren't in the global module list (from 3085c09a02a5db85e08a432b6eeced9aa656349710dChristopher Lamb // ModuleList). If this is the case we need to know about it. 309213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman // The modules in the global list maintained by these functions 310030d8846c7e520330007087e949f621989876e3aChris Lattner // can be viewed using the "target modules list" command using the 311030d8846c7e520330007087e949f621989876e3aChris Lattner // "--global" (-g for short). 31298be4943e8dc4f3905629a7102668960873cf863Chris Lattner static size_t 3139e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner GetNumberAllocatedModules (); 3144bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman 3156fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman static Module * 3166fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman GetAllocatedModuleAtIndex (size_t idx); 3176fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman 3186fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman static Mutex * 319030d8846c7e520330007087e949f621989876e3aChris Lattner GetAllocationModuleCollectionMutex(); 320030d8846c7e520330007087e949f621989876e3aChris Lattner 3215d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner //------------------------------------------------------------------ 3229e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// Construct with file specification and architecture. 323a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner /// 324692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner /// Clients that wish to share modules with other targets should 325d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner /// use ModuleList::GetSharedModule(). 326d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner /// 3276f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// @param[in] file_spec 3289e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// The file specification for the on disk repesentation of 3299e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// this executable image. 3306f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// 331692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner /// @param[in] arch 332692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner /// The architecture to set as the current architecture in 333692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner /// this module. 3346f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// 3359e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// @param[in] object_name 3369e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// The name of an object in a module used to extract a module 3376f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// within a module (.a files and modules that contain multiple 33864c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis /// architectures). 33964c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis /// 34064c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis /// @param[in] object_offset 34164c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis /// The offset within an existing module used to extract a 342692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner /// module within a module (.a files and modules that contain 3436f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// multiple architectures). 3449e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner //------------------------------------------------------------------ 3459e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner Module (const FileSpec& file_spec, 3466f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner const ArchSpec& arch, 347692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner const ConstString *object_name = NULL, 3486f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner off_t object_offset = 0); 3499e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner 3509e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner Module (const ModuleSpec &module_spec); 3516f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner //------------------------------------------------------------------ 352692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner /// Destructor. 3536f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner //------------------------------------------------------------------ 3549e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner virtual 3559e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner ~Module (); 3566f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner 357692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner bool 3586f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner MatchesModuleSpec (const ModuleSpec &module_ref); 3599e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner 3609e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner //------------------------------------------------------------------ 3616f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// Set the load address for all sections in a module to be the 3626f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// file address plus \a slide. 3639e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// 3649e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// Many times a module will be loaded in a target with a constant 3656f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// offset applied to all top level sections. This function can 3666f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// set the load address for all top level sections to be the 3675426bf6456a5aeac416a9150de157904d101c819Chris Lattner /// section file address + offset. 3685426bf6456a5aeac416a9150de157904d101c819Chris Lattner /// 3696f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// @param[in] target 3706f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// The target in which to apply the section load addresses. 3719e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// 3729e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// @param[in] offset 3736f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// The offset to apply to all file addresses for all top 374a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner /// level sections in the object file as each section load 375bfef6d7c67831a135d6ab79931f010f750a730adChris Lattner /// address is being set. 376ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb /// 37798be4943e8dc4f3905629a7102668960873cf863Chris Lattner /// @param[out] changed 37898be4943e8dc4f3905629a7102668960873cf863Chris Lattner /// If any section load addresses were changed in \a target, 37998be4943e8dc4f3905629a7102668960873cf863Chris Lattner /// then \a changed will be set to \b true. Else \a changed 380a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek /// will be set to false. This allows this function to be 3815426bf6456a5aeac416a9150de157904d101c819Chris Lattner /// called multiple times on the same module for the same 382f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner /// target. If the module hasn't moved, then \a changed will 3836f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner /// be false and no module updated notification will need to 384485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff /// be sent out. 385485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff /// 386485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff /// @return 387485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff /// /b True if any sections were successfully loaded in \a target, 388485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff /// /b false otherwise. 389485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff //------------------------------------------------------------------ 390f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner bool 391f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner SetLoadAddress (Target &target, 3925426bf6456a5aeac416a9150de157904d101c819Chris Lattner lldb::addr_t offset, 393f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner bool &changed); 394f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner 395f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner //------------------------------------------------------------------ 396a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner /// @copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*) 3977ab2ed8e881ffdc84e890f5265c41b930df17ceeChris Lattner /// 3985d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner /// @see SymbolContextScope 3996f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner //------------------------------------------------------------------ 4006f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner virtual void 401bdcd637c29ec1540f912ea6860c88b910e78c329Chris Lattner CalculateSymbolContext (SymbolContext* sc); 402f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl 4038edef7c31d27fc9d5d163660702a8a7730a0d19fSebastian Redl virtual lldb::ModuleSP 404f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl CalculateSymbolContextModule (); 405f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl 4068edef7c31d27fc9d5d163660702a8a7730a0d19fSebastian Redl void 4078edef7c31d27fc9d5d163660702a8a7730a0d19fSebastian Redl GetDescription (Stream *s, 408f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl lldb::DescriptionLevel level = lldb::eDescriptionLevelFull); 409f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl 410f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl //------------------------------------------------------------------ 411f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// Dump a description of this object to a Stream. 412f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// 413f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// Dump a description of the contents of this object to the 414f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// supplied stream \a s. The dumped content will be only what has 415f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// been loaded or parsed up to this point at which this function 4165d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner /// is called, so this is a good way to see what has been parsed 4175d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner /// in a module. 4185d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner /// 4195d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner /// @param[in] s 42098be4943e8dc4f3905629a7102668960873cf863Chris Lattner /// The stream to which to dump the object descripton. 4219e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner //------------------------------------------------------------------ 4225d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner void 4235d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner Dump (Stream *s); 4245d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner 42544a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel //------------------------------------------------------------------ 4261d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar /// @copydoc SymbolContextScope::DumpSymbolContext(Stream*) 42744a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// 42844a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// @see SymbolContextScope 42944a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel //------------------------------------------------------------------ 43044a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel virtual void 43144a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel DumpSymbolContext (Stream *s); 4327176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner 4331d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar //------------------------------------------------------------------ 4341d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar /// Find a symbol in the object files symbol table. 4351d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar /// 4368389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner /// @param[in] name 4378389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner /// The name of the symbol that we are looking for. 4388389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner /// 4398389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner /// @param[in] symbol_type 4408389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner /// If set to eSymbolTypeAny, find a symbol of any type that 4411d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar /// has a name that matches \a name. If set to any other valid 4427176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner /// SymbolType enumeration value, then search only for 4437176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner /// symbols that match \a symbol_type. 4441d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar /// 4457176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner /// @return 4467176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner /// Returns a valid symbol pointer if a symbol was found, 4477176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner /// NULL otherwise. 448dc0d73e6495404418acf8548875aeaff07791a74Chris Lattner //------------------------------------------------------------------ 449a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner const Symbol * 4507176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner FindFirstSymbolWithNameAndType (const ConstString &name, 451d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner lldb::SymbolType symbol_type = lldb::eSymbolTypeAny); 452464175bba1318bef7905122e9fda20cff926df78Chris Lattner 4539e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner size_t 454a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner FindSymbolsWithNameAndType (const ConstString &name, 455a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner lldb::SymbolType symbol_type, 45634ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner SymbolContextList &sc_list); 45734ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner 45834ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner size_t 45934ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner FindSymbolsMatchingRegExAndType (const RegularExpression ®ex, 46034ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner lldb::SymbolType symbol_type, 46134ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner SymbolContextList &sc_list); 46234ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner 46334ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner //------------------------------------------------------------------ 46434ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner /// Find compile units by partial or full path. 46534ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner /// 46632b978c1e2da0555df367897840330e514168aecFariborz Jahanian /// Finds all compile units that match \a path in all of the modules 46734ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner /// and returns the results in \a sc_list. 46834ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner /// 46934ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner /// @param[in] path 47034ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner /// The name of the function we are looking for. 47134ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner /// 4728b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// @param[in] append 4738b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// If \b true, then append any compile units that were found 4743b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// to \a sc_list. If \b false, then the \a sc_list is cleared 4758b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// and the contents of \a sc_list are replaced. 4763b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// 4778b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// @param[out] sc_list 4788b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// A symbol context list that gets filled in with all of the 4798b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// matches. 4803b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// 4813b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// @return 4823b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// The number of matches added to \a sc_list. 4833b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar //------------------------------------------------------------------ 4843b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar uint32_t 4858b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel FindCompileUnits (const FileSpec &path, 4868b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel bool append, 4878b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel SymbolContextList &sc_list); 4888b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel 48932442bbc98bafa512fa42d46fedf60ed7d79f574Daniel Dunbar 49032442bbc98bafa512fa42d46fedf60ed7d79f574Daniel Dunbar //------------------------------------------------------------------ 4918b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// Find functions by name. 4928b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// 4938b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// If the function is an inlined function, it will have a block, 4948b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// representing the inlined function, and the function will be the 4958b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// containing function. If it is not inlined, then the block will 4963b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// be NULL. 4973b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// 4983b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// @param[in] name 4993b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// The name of the compile unit we are looking for. 5003b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// 5018b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// @param[in] namespace_decl 5023b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// If valid, a namespace to search in. 5033b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// 5048b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// @param[in] name_type_mask 5058b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// A bit mask of bits that indicate what kind of names should 5068b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// be used when doing the lookup. Bits include fully qualified 5078b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// names, base names, C++ methods, or ObjC selectors. 5088b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// See FunctionNameType for more details. 5098b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// 5108b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// @param[in] append 5118b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// If \b true, any matches will be appended to \a sc_list, else 5128b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// matches replace the contents of \a sc_list. 5138b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// 5148b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// @param[out] sc_list 5158b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// A symbol context list that gets filled in with all of the 5168389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner /// matches. 5178389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner /// 5188b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// @return 5198b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// The number of matches added to \a sc_list. 5208b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel //------------------------------------------------------------------ 5218b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel uint32_t 522c63a1f276f7b324fd9a4be82098b1c8f7bf30733Chris Lattner FindFunctions (const ConstString &name, 5238b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel const ClangNamespaceDecl *namespace_decl, 5248b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel uint32_t name_type_mask, 5258b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel bool symbols_ok, 5268b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel bool inlines_ok, 5278b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel bool append, 5288b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel SymbolContextList& sc_list); 5298b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel 5308b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel //------------------------------------------------------------------ 5313b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// Find functions by name. 5323b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// 5333b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// If the function is an inlined function, it will have a block, 5343b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// representing the inlined function, and the function will be the 5353b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// containing function. If it is not inlined, then the block will 5363b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// be NULL. 5373b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// 5383b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// @param[in] regex 5393b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// A regular expression to use when matching the name. 5408b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// 5418b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// @param[in] append 5428b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// If \b true, any matches will be appended to \a sc_list, else 5438b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// matches replace the contents of \a sc_list. 5448b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// 5458b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// @param[out] sc_list 5468b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// A symbol context list that gets filled in with all of the 5478b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// matches. 5488b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// 5498b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// @return 5508b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// The number of matches added to \a sc_list. 5518b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel //------------------------------------------------------------------ 5528b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel uint32_t 5538b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel FindFunctions (const RegularExpression& regex, 5548b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel bool symbols_ok, 5558b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel bool inlines_ok, 5568b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel bool append, 5578b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel SymbolContextList& sc_list); 5588b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel 5598b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel //------------------------------------------------------------------ 5608b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// Find global and static variables by name. 561a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// 562a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// @param[in] name 563a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// The name of the global or static variable we are looking 564a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// for. 565a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// 566a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// @param[in] namespace_decl 567a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// If valid, a namespace to search in. 568a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// 569a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// @param[in] append 570a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// If \b true, any matches will be appended to \a 571a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// variable_list, else matches replace the contents of 572a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// \a variable_list. 573a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// 574a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// @param[in] max_matches 575a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// Allow the number of matches to be limited to \a 576a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// max_matches. Specify UINT32_MAX to get all possible matches. 577a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// 578a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// @param[in] variable_list 579a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// A list of variables that gets the matches appended to (if 580a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// \a append it \b true), or replace (if \a append is \b false). 581a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// 582a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// @return 583a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// The number of matches added to \a variable_list. 584a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian //------------------------------------------------------------------ 585a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian uint32_t 586a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian FindGlobalVariables (const ConstString &name, 587a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian const ClangNamespaceDecl *namespace_decl, 588a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian bool append, 589a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian uint32_t max_matches, 590a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian VariableList& variable_list); 591a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian 592a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian //------------------------------------------------------------------ 593a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// Find global and static variables by regular exression. 5944afa39deaa245592977136d367251ee2c173dd8dDouglas Gregor /// 595482b77d1cb4ca08391d1f749436f092a4cc24427Douglas Gregor /// @param[in] regex 596a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// A regular expression to use when matching the name. 597a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// 598a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// @param[in] append 599a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// If \b true, any matches will be appended to \a 600a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian /// variable_list, else matches replace the contents of 60144a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// \a variable_list. 602efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian /// 603efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian /// @param[in] max_matches 604efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian /// Allow the number of matches to be limited to \a 605efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian /// max_matches. Specify UINT32_MAX to get all possible matches. 606efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian /// 607efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian /// @param[in] variable_list 608efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian /// A list of variables that gets the matches appended to (if 609efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian /// \a append it \b true), or replace (if \a append is \b false). 610efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian /// 611efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian /// @return 61261710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner /// The number of matches added to \a variable_list. 61361710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner //------------------------------------------------------------------ 61444a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel uint32_t 61544a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel FindGlobalVariables (const RegularExpression& regex, 61644a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel bool append, 61744a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel uint32_t max_matches, 61844a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel VariableList& variable_list); 61944a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel 62044a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel //------------------------------------------------------------------ 62144a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// Find types by name. 62244a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// 6236a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// @param[in] sc 6246a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// A symbol context that scopes where to extract a type list 6256a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// from. 6266a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// 6276a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// @param[in] name 6286a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// The name of the type we are looking for. 6296a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// 6306a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// @param[in] namespace_decl 6316a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// If valid, a namespace to search in. 63261710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner /// 63361710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner /// @param[in] append 6346a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// If \b true, any matches will be appended to \a 6356a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// variable_list, else matches replace the contents of 6366a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// \a variable_list. 6376a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel /// 63844a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// @param[in] max_matches 63944a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// Allow the number of matches to be limited to \a 6403b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// max_matches. Specify UINT32_MAX to get all possible matches. 6413b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// 6423b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// @param[in] encoding 64344a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// Limit the search to specific types, or get all types if 64444a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// set to Type::invalid. 64544a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// 64644a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// @param[in] udt_name 64744a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// If the encoding is a user defined type, specify the name 64844a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// of the user defined type ("struct", "union", "class", etc). 64944a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// 65044a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// @param[out] type_list 65144a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// A type list gets populated with any matches. 65244a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// 6533b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar /// @return 65444a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel /// The number of matches added to \a type_list. 65544a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel //------------------------------------------------------------------ 65644a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel uint32_t 65744a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel FindTypes (const SymbolContext& sc, 65844a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel const ConstString &name, 65944a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel const ClangNamespaceDecl *namespace_decl, 66044a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel bool append, 66144a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel uint32_t max_matches, 66288a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel TypeList& types); 663464175bba1318bef7905122e9fda20cff926df78Chris Lattner 664464175bba1318bef7905122e9fda20cff926df78Chris Lattner //------------------------------------------------------------------ 66598be4943e8dc4f3905629a7102668960873cf863Chris Lattner /// Get const accessor for the module architecture. 6664b7c98378ae0c1a3635f0b7756848b4a9923f8bcTed Kremenek /// 6674b7c98378ae0c1a3635f0b7756848b4a9923f8bcTed Kremenek /// @return 6684bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman /// A const reference to the architecture object. 669464175bba1318bef7905122e9fda20cff926df78Chris Lattner //------------------------------------------------------------------ 67088a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel const ArchSpec& 671464175bba1318bef7905122e9fda20cff926df78Chris Lattner GetArchitecture () const; 6724bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman 67388a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel //------------------------------------------------------------------ 67488a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel /// Get const accessor for the module file specification. 67588a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel /// 676464175bba1318bef7905122e9fda20cff926df78Chris Lattner /// This function returns the file for the module on the host system 6774bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman /// that is running LLDB. This can differ from the path on the 678e267ff35b2f4e9d2b0d8bf24109d41cc7398b61bDouglas Gregor /// platform since we might be doing remote debugging. 67944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor /// 68039ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis /// @return 681464175bba1318bef7905122e9fda20cff926df78Chris Lattner /// A const reference to the file specification object. 6823b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar //------------------------------------------------------------------ 6833b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar const FileSpec & 6843b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar GetFileSpec () const 6853b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar { 6864bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman return m_file; 6878b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel } 6888b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel 6894bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman //------------------------------------------------------------------ 6904bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman /// Get accessor for the module platform file specification. 6914bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman /// 69244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor /// Platform file refers to the path of the module as it is known on 693f8d49f64ef6ab7e632717a31631fc289aab69428Douglas Gregor /// the remote system on which it is being debugged. For local 694f8d49f64ef6ab7e632717a31631fc289aab69428Douglas Gregor /// debugging this is always the same as Module::GetFileSpec(). But 69544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor /// remote debugging might mention a file "/usr/lib/liba.dylib" 69644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor /// which might be locally downloaded and cached. In this case the 6974bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman /// platform file could be something like: 6984bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman /// "/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib" 6994bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman /// The file could also be cached in a local developer kit directory. 7008b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel /// 7015d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner /// @return 702464175bba1318bef7905122e9fda20cff926df78Chris Lattner /// A const reference to the file specification object. 703464175bba1318bef7905122e9fda20cff926df78Chris Lattner //------------------------------------------------------------------ 704a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner const FileSpec & 705a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner GetPlatformFileSpec () const 706a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner { 707a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner if (m_platform_file) 708ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb return m_platform_file; 709f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner return m_file; 710f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner } 711f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner 712f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner void 713f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner SetPlatformFileSpec (const FileSpec &file) 714f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner { 715f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner m_platform_file = file; 716f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner } 717f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner 718f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner const FileSpec & 719f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner GetSymbolFileFileSpec () const 720ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb { 721f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner return m_symfile_spec; 722ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb } 723ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb 724ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb void 725ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb SetSymbolFileFileSpec (const FileSpec &file) 726ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb { 727ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb m_symfile_spec = file; 728ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb } 729ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb 730f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner const TimeValue & 731ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb GetModificationTime () const; 732ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb 733ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb //------------------------------------------------------------------ 734f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner /// Tells whether this module is capable of being the main executable 735ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb /// for a process. 736f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff /// 737f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff /// @return 738ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb /// \b true if it is, \b false otherwise. 739ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb //------------------------------------------------------------------ 740f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner bool 741ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb IsExecutable (); 742ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb 743a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner //------------------------------------------------------------------ 7445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// Tells whether this module has been loaded in the target passed in. 7455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// This call doesn't distinguish between whether the module is loaded 7465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// by the dynamic loader, or by a "target module add" type call. 7475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 7485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @param[in] target 7495f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// The target to check whether this is loaded in. 7505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 7515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @return 7525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// \b true if it is, \b false otherwise. 7535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 7545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool 7555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer IsLoadedInTarget (Target *target); 7565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 7575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 7585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// Get the number of compile units for this module. 7595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 760f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner /// @return 7615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// The number of compile units that the symbol vendor plug-in 7625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// finds. 7635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 764f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner uint32_t 7655f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetNumCompileUnits(); 766f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff 7675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer lldb::CompUnitSP 7685f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetCompileUnitAtIndex (uint32_t); 7695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 7705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const ConstString & 7715f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetObjectName() const; 7725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 7735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer uint64_t 7745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetObjectOffset() const 7755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 7765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return m_object_offset; 7775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 7785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 7795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 7805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// Get the object file representation for the current architecture. 7815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 7825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// If the object file has not been located or parsed yet, this 7835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// function will find the best ObjectFile plug-in that can parse 7845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// Module::m_file. 7855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 7865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @return 7875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// If Module::m_file does not exist, or no plug-in was found 7885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// that can parse the file, or the object file doesn't contain 789f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner /// the current architecture in Module::m_arch, NULL will be 7905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// returned, else a valid object file interface will be 7915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// returned. The returned pointer is owned by this object and 7925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// remains valid as long as the object is around. 793f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner //------------------------------------------------------------------ 7945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ObjectFile * 795f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff GetObjectFile (); 7965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 7975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Load an object file from memory. 7985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ObjectFile * 7995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetMemoryObjectFile (const lldb::ProcessSP &process_sp, 8005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer lldb::addr_t header_addr, 8015618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff Error &error); 8025618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff //------------------------------------------------------------------ 8035618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// Get the symbol vendor interface for the current architecture. 804296e8d5fdcf9946f51e866adc8d281379e51efe9Steve Naroff /// 805296e8d5fdcf9946f51e866adc8d281379e51efe9Steve Naroff /// If the symbol vendor file has not been located yet, this 8065618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// function will find the best SymbolVendor plug-in that can 8075618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// use the current object file. 8085618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// 8095618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// @return 8105618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// If this module does not have a valid object file, or no 8115618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// plug-in can be found that can use the object file, NULL will 8125618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// be returned, else a valid symbol vendor plug-in interface 8135618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// will be returned. The returned pointer is owned by this 8145618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// object and remains valid as long as the object is around. 815296e8d5fdcf9946f51e866adc8d281379e51efe9Steve Naroff //------------------------------------------------------------------ 8165618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff SymbolVendor* 8175618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff GetSymbolVendor(bool can_create = true); 8185618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff 8195618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff //------------------------------------------------------------------ 8205618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// Get accessor the type list for this module. 8215618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// 8225618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// @return 8235618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// A valid type list pointer, or NULL if there is no valid 824f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner /// symbol vendor for this module. 8255618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff //------------------------------------------------------------------ 826f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff TypeList* 8275618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff GetTypeList (); 8285618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff 8295618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff //------------------------------------------------------------------ 8305618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// Get a pointer to the UUID value contained in this object. 8315618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff /// 8325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// If the executable image file doesn't not have a UUID value built 8335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// into the file format, an MD5 checksum of the entire file, or 8345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// slice of the file for the current architecture should be used. 8355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 8365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @return 8375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// A const pointer to the internal copy of the UUID value in 8385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// this module if this module has a valid UUID value, NULL 8395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// otherwise. 8405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 8415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const lldb_private::UUID & 8425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetUUID (); 8435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 8445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 8455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// A debugging function that will cause everything in a module to 8465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// be parsed. 8475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 848f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner /// All compile units will be pasred, along with all globals and 8495f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// static variables and all functions for those compile units. 8505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// All types, scopes, local variables, static variables, global 8515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// variables, and line tables will be parsed. This can be used 852f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner /// prior to dumping a module to see a complete list of the 8535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// resuling debug information that gets parsed, or as a debug 8545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// function to ensure that the module can consume all of the 855f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff /// debug data the symbol vendor provides. 8565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 8575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer void 8585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ParseAllDebugSymbols(); 8595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 8605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool 861f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl ResolveFileAddress (lldb::addr_t vm_addr, Address& so_addr); 862f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl 863f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl uint32_t 864f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl ResolveSymbolContextForAddress (const Address& so_addr, uint32_t resolve_scope, SymbolContext& sc); 865f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl 866f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl //------------------------------------------------------------------ 867f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// Resolve items in the symbol context for a given file and line. 868f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// 869f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// Tries to resolve \a file_path and \a line to a list of matching 870f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// symbol contexts. 871f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// 872f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// The line table entries contains addresses that can be used to 873f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// further resolve the values in each match: the function, block, 874f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// symbol. Care should be taken to minimize the amount of 875f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// information that is requested to only what is needed -- 876f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// typically the module, compile unit, line table and line table 877f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// entry are sufficient. 878f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// 879f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// @param[in] file_path 880f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// A path to a source file to match. If \a file_path does not 881f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// specify a directory, then this query will match all files 882f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// whose base filename matches. If \a file_path does specify 883f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// a directory, the fullpath to the file must match. 884f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// 885f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// @param[in] line 886f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff /// The source line to match, or zero if just the compile unit 887f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// should be resolved. 888f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// 889f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// @param[in] check_inlines 890f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// Check for inline file and line number matches. This option 891f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl /// should be used sparingly as it will cause all line tables 892fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff /// for every compile unit to be parsed and searched for 893fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff /// matching inline file entries. 894fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff /// 895c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff /// @param[in] resolve_scope 896c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff /// The scope that should be resolved (see 897c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff /// SymbolContext::Scope). 8985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 899fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff /// @param[out] sc_list 9005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// A symbol context list that gets matching symbols contexts 9015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// appended to. 9027192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek /// 9037192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek /// @return 9045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// The number of matches that were added to \a sc_list. 9055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 9065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @see SymbolContext::Scope 9075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 9085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer uint32_t 9095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ResolveSymbolContextForFilePath (const char *file_path, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list); 910f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner 911c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff //------------------------------------------------------------------ 9125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// Resolve items in the symbol context for a given file and line. 9137192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek /// 9147192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek /// Tries to resolve \a file_spec and \a line to a list of matching 915f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner /// symbol contexts. 9165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 9175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// The line table entries contains addresses that can be used to 918566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek /// further resolve the values in each match: the function, block, 919f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff /// symbol. Care should be taken to minimize the amount of 9207192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek /// information that is requested to only what is needed -- 9215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// typically the module, compile unit, line table and line table 9225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// entry are sufficient. 9235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 9245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @param[in] file_spec 925bdbf7b030a3e0ddb95240076683830e6f78c79a5Steve Naroff /// A file spec to a source file to match. If \a file_path does 926bdbf7b030a3e0ddb95240076683830e6f78c79a5Steve Naroff /// not specify a directory, then this query will match all 927c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff /// files whose base filename matches. If \a file_path does 928c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff /// specify a directory, the fullpath to the file must match. 929c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff /// 930c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman /// @param[in] line 931c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman /// The source line to match, or zero if just the compile unit 932c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman /// should be resolved. 933566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek /// 934f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff /// @param[in] check_inlines 935c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman /// Check for inline file and line number matches. This option 936c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman /// should be used sparingly as it will cause all line tables 937c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman /// for every compile unit to be parsed and searched for 938c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman /// matching inline file entries. 939c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman /// 940c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman /// @param[in] resolve_scope 941898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// The scope that should be resolved (see 942898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// SymbolContext::Scope). 943898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// 944898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// @param[out] sc_list 945898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// A symbol context list that gets filled in with all of the 946898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// matches. 947898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// 948898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// @return 949898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// A integer that contains SymbolContext::Scope bits set for 950898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// each item that was successfully resolved. 951898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// 952898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor /// @see SymbolContext::Scope 953898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor //------------------------------------------------------------------ 954566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek uint32_t 955f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff ResolveSymbolContextsForFileSpec (const FileSpec &file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list); 956f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff 957898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 958898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor void 959898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor SetFileSpecAndObjectName (const FileSpec &file, 960898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor const ConstString &object_name); 961898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 962898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor bool 963c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman GetIsDynamicLinkEditor () const 964c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman { 965c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman return m_is_dynamic_loader_module; 966c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman } 967c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman 968c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman void 969c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman SetIsDynamicLinkEditor (bool b) 970c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman { 971c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman m_is_dynamic_loader_module = b; 972c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman } 973c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman 974c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman ClangASTContext & 975c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman GetClangASTContext (); 976c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman 977c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman // Special error functions that can do printf style formatting that will prepend the message with 978c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman // something appropriate for this module (like the architecture, path and object name (if any)). 979f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner // This centralizes code so that everyone doesn't need to format their error and log messages on 9802bd24ba6d10f8c811c8e2a57c8397e07082ba497Ted Kremenek // their own and keeps the output a bit more consistent. 981c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman void 982c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman LogMessage (Log *log, const char *format, ...) __attribute__ ((format (printf, 3, 4))); 983c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman 984c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman void 985f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner ReportWarning (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 9862bd24ba6d10f8c811c8e2a57c8397e07082ba497Ted Kremenek 987c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman void 988f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff ReportError (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 989566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek 990c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman // Only report an error once when the module is first detected to be modified 991c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman // so we don't spam the console with many messages. 992c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman void 993c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman ReportErrorIfModifyDetected (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 994fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff 995fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff bool 99673322924127c873c13101b705dd823f5539ffa5fSteve Naroff GetModified (bool use_cached_only); 99773322924127c873c13101b705dd823f5539ffa5fSteve Naroff 99873322924127c873c13101b705dd823f5539ffa5fSteve Naroff bool 9995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer SetModified (bool b); 10005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1001f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner //------------------------------------------------------------------ 100273322924127c873c13101b705dd823f5539ffa5fSteve Naroff // SymbolVendor, SymbolFile and ObjectFile member objects should 10035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // lock the module mutex to avoid deadlocks. 10045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 10055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Mutex & 100673322924127c873c13101b705dd823f5539ffa5fSteve Naroff GetMutex () const 10075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 10085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return m_mutex; 10095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 10105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 10115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer PathMappingList & 10125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetSourceMappingList () 10135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 10145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return m_source_mappings; 1015f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner } 10165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 10175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const PathMappingList & 10185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetSourceMappingList () const 1019f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner { 10205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return m_source_mappings; 1021f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff } 10225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 10235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 10245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// Finds a source file given a file spec using the module source 10255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// path remappings (if any). 10265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 1027213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman /// Tries to resolve \a orig_spec by checking the module source path 102873322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// remappings. It makes sure the file exists, so this call can be 1029213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman /// expensive if the remappings are on a network file system, so 103073322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// use this function sparingly (not in a tight debug info parsing 103173322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// loop). 1032f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner /// 1033213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman /// @param[in] orig_spec 103473322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// The original source file path to try and remap. 103573322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// 103673322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// @param[out] new_spec 1037213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman /// The newly remapped filespec that is guaranteed to exist. 103873322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// 103973322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// @return 104073322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// /b true if \a orig_spec was successfully located and 104173322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// \a new_spec is filled in with an existing file spec, 104273322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// \b false otherwise. 104373322924127c873c13101b705dd823f5539ffa5fSteve Naroff //------------------------------------------------------------------ 104473322924127c873c13101b705dd823f5539ffa5fSteve Naroff bool 104573322924127c873c13101b705dd823f5539ffa5fSteve Naroff FindSourceFile (const FileSpec &orig_spec, FileSpec &new_spec) const; 1046213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman 104773322924127c873c13101b705dd823f5539ffa5fSteve Naroff //------------------------------------------------------------------ 104873322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// Remaps a source file given \a path into \a new_path. 104973322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// 1050f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner /// Remaps \a path if any source remappings match. This function 105173322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// does NOT stat the file system so it can be used in tight loops 1052f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff /// where debug info is being parsed. 105373322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// 105473322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// @param[in] path 105573322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// The original source file path to try and remap. 105673322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// 105773322924127c873c13101b705dd823f5539ffa5fSteve Naroff /// @param[out] new_path 10585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// The newly remapped filespec that is may or may not exist. 10595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 10605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @return 10615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// /b true if \a path was successfully located and \a new_path 10625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// is filled in with a new source path, \b false otherwise. 10635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 10645f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool 10655f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer RemapSourceFile (const char *path, std::string &new_path) const; 10665f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 10675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerprotected: 10685f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 10695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Member Variables 10705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 10715f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer mutable Mutex m_mutex; ///< A mutex to keep this object happy in multi-threaded environments. 10725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer TimeValue m_mod_time; ///< The modification time for this module when it was created. 1073f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner ArchSpec m_arch; ///< The architecture for this module. 10745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer lldb_private::UUID m_uuid; ///< Each module is assumed to have a unique identifier to help match it up to debug symbols. 10755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer FileSpec m_file; ///< The file representation on disk for this module (if there is one). 10765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer FileSpec m_platform_file;///< The path to the module on the platform on which it is being debugged 10775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 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 1078f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris 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. 10795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer uint64_t m_object_offset; 10805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 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 1081f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff std::auto_ptr<SymbolVendor> m_symfile_ap; ///< A pointer to the symbol vendor for this module. 10825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ClangASTContext m_ast; ///< The AST context for this module. 108356cd7e3848c2d59ca2ec3b72d0834192edf0bcdfEli Friedman 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 10845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 10855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool m_did_load_objfile:1, 10865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_did_load_symbol_vendor:1, 10875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_did_parse_uuid:1, 10885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer m_did_init_ast:1, 108961710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner m_is_dynamic_loader_module:1, 1090971c4fae6092976338b755af1d47dac07c8f16e3Argyrios Kyrtzidis m_was_modified:1; /// See if the module was modified after it was initially opened. 1091971c4fae6092976338b755af1d47dac07c8f16e3Argyrios Kyrtzidis 10925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 10935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// Resolve a file or load virtual address. 10945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 1095971c4fae6092976338b755af1d47dac07c8f16e3Argyrios Kyrtzidis /// Tries to resolve \a vm_addr as a file address (if \a 1096971c4fae6092976338b755af1d47dac07c8f16e3Argyrios Kyrtzidis /// vm_addr_is_file_addr is true) or as a load address if \a 10975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// vm_addr_is_file_addr is false) in the symbol vendor. 10985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// \a resolve_scope indicates what clients wish to resolve 10995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// and can be used to limit the scope of what is parsed. 11005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 11015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @param[in] vm_addr 11025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// The load virtual address to resolve. 11035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 11045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @param[in] vm_addr_is_file_addr 11055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// If \b true, \a vm_addr is a file address, else \a vm_addr 11065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// if a load address. 11075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 11085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @param[in] resolve_scope 11095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// The scope that should be resolved (see 11105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// SymbolContext::Scope). 11115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 11125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @param[out] so_addr 11135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// The section offset based address that got resolved if 11145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// any bits are returned. 1115f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner /// 11165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @param[out] sc 1117f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner // The symbol context that has objects filled in. Each bit 11185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// in the \a resolve_scope pertains to a member in the \a sc. 11197fb5e4888221cd36652d078c6b171ac55e7f406dArgyrios Kyrtzidis /// 11205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// @return 11215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// A integer that contains SymbolContext::Scope bits set for 11225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// each item that was successfully resolved. 11235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 1124f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner /// @see SymbolContext::Scope 11255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //------------------------------------------------------------------ 11265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer uint32_t 1127566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek ResolveSymbolContextForAddress (lldb::addr_t vm_addr, 1128566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek bool vm_addr_is_file_addr, 11295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer uint32_t resolve_scope, 1130c0ac4923f08b25ae973a8ee7942cf3eb89da57b7Steve Naroff Address& so_addr, 1131c0ac4923f08b25ae973a8ee7942cf3eb89da57b7Steve Naroff SymbolContext& sc); 11325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1133971c4fae6092976338b755af1d47dac07c8f16e3Argyrios Kyrtzidis void 11345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer SymbolIndicesToSymbolContextList (Symtab *symtab, 11355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer std::vector<uint32_t> &symbol_indexes, 11365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer SymbolContextList &sc_list); 11375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 11385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool 11392ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor SetArchitecture (const ArchSpec &new_arch); 11402ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor 11414b7c98378ae0c1a3635f0b7756848b4a9923f8bcTed Kremenekprivate: 11421e6759e9e33dcaa73ce14c8a908ac9f87ac16463Argyrios Kyrtzidis 11432ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor uint32_t 11442ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor FindTypes_Impl (const SymbolContext& sc, 11451e6759e9e33dcaa73ce14c8a908ac9f87ac16463Argyrios Kyrtzidis const ConstString &name, 11462ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor const ClangNamespaceDecl *namespace_decl, 114772c3f314d92d65c050ee1c07b7753623c044d6c7Douglas Gregor bool append, 114872c3f314d92d65c050ee1c07b7753623c044d6c7Douglas Gregor uint32_t max_matches, 11491e6759e9e33dcaa73ce14c8a908ac9f87ac16463Argyrios Kyrtzidis TypeList& types); 11502ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor 115149aa7ff1245abd03e6e998e01302df31e4c6f8f6Argyrios Kyrtzidis 11521e6759e9e33dcaa73ce14c8a908ac9f87ac16463Argyrios Kyrtzidis DISALLOW_COPY_AND_ASSIGN (Module); 1153566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek}; 1154566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek 1155f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff} // namespace lldb_private 1156f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff 11574b7c98378ae0c1a3635f0b7756848b4a9923f8bcTed Kremenek#endif // liblldb_Module_h_ 11581e6759e9e33dcaa73ce14c8a908ac9f87ac16463Argyrios Kyrtzidis