ClangExpressionDeclMap.h revision a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ClangExpressionDeclMap.h --------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_ClangExpressionDeclMap_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ClangExpressionDeclMap_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <signal.h> 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <stdint.h> 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 22f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton#include "llvm/ADT/APInt.h" 236df0840c87be29724055716db951aa6d494ddabcSean Callanan#include "llvm/ADT/DenseMap.h" 249b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan#include "clang/AST/Decl.h" 25b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton#include "lldb/lldb-public.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ClangForward.h" 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Value.h" 28a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan#include "lldb/Expression/ClangExpressionVariable.h" 29e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton#include "lldb/Symbol/ClangASTImporter.h" 30841026fc8d1cc22bd3b9e74623b413a3e6aa9d38Sean Callanan#include "lldb/Symbol/TaggedASTType.h" 318de27c761a22187ef63fb60000894be163e7285fGreg Clayton#include "lldb/Symbol/SymbolContext.h" 328de27c761a22187ef63fb60000894be163e7285fGreg Clayton#include "lldb/Target/ExecutionContext.h" 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan//---------------------------------------------------------------------- 37a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// @class ClangExpressionDeclMap ClangExpressionDeclMap.h "lldb/Expression/ClangExpressionDeclMap.h" 38a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// @brief Manages named entities that are defined in LLDB's debug information. 39a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// 40a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// The Clang parser uses the ClangASTSource as an interface to request named 41a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// entities from outside an expression. The ClangASTSource reports back, listing 42a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// all possible objects corresponding to a particular name. But it in turn 43a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// relies on ClangExpressionDeclMap, which performs several important functions. 44a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// 45a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// First, it records what variables and functions were looked up and what Decls 46a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// were returned for them. 47a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// 48a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// Second, it constructs a struct on behalf of IRForTarget, recording which 49a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// variables should be placed where and relaying this information back so that 50a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// IRForTarget can generate context-independent code. 51a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// 52a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// Third, it "materializes" this struct on behalf of the expression command, 53a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// finding the current values of each variable and placing them into the 54a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// struct so that it can be passed to the JITted version of the IR. 55a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// 56a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// Fourth and finally, it "dematerializes" the struct after the JITted code has 57a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// has executed, placing the new values back where it found the old ones. 58a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan//---------------------------------------------------------------------- 59a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callananclass ClangExpressionDeclMap : public ClangASTImporter::NamespaceMapCompleter 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 62a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 63a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Constructor 64a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 656a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// Initializes class variables. 666a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// 676a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// @param[in] keep_result_in_memory 686a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// If true, inhibits the normal deallocation of the memory for 696a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// the result persistent variable, and instead marks the variable 706a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// as persisting. 71aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 726a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan ClangExpressionDeclMap (bool keep_result_in_memory); 73aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 74aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 75aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Destructor 76aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 77427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ~ClangExpressionDeclMap (); 78aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 79aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 80aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Enable the state needed for parsing and IR transformation. 81a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 82a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 83a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context to use when finding types for variables. 84a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Also used to find a "scratch" AST context to store result types. 85166ba106f9d8c377f2fda72112c821550d2e82d1Sean Callanan /// 86166ba106f9d8c377f2fda72112c821550d2e82d1Sean Callanan /// @return 87166ba106f9d8c377f2fda72112c821550d2e82d1Sean Callanan /// True if parsing is possible; false if it is unsafe to continue. 88a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 89166ba106f9d8c377f2fda72112c821550d2e82d1Sean Callanan bool 90427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton WillParse (ExecutionContext &exe_ctx); 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 92a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 93fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan /// [Used by ClangExpressionParser] For each variable that had an unknown 94fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan /// type at the beginning of parsing, determine its final type now. 95fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan /// 96fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan /// @return 97fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan /// True on success; false otherwise. 98fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan //------------------------------------------------------------------ 99fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan bool 100fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan ResolveUnknownTypes(); 101fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan 102fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan //------------------------------------------------------------------ 103aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Disable the state needed for parsing and IR transformation. 104a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 105427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 106427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DidParse (); 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 108a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 109a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Get a new result variable name of the form 110a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// $n, where n is a natural number starting with 0. 111a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 112a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] name 113a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The std::string to place the name into. 114a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1158de27c761a22187ef63fb60000894be163e7285fGreg Clayton const ConstString & 1168de27c761a22187ef63fb60000894be163e7285fGreg Clayton GetPersistentResultName (); 117a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 1186916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton clang::NamespaceDecl * 1196916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton AddNamespace (NameSearchContext &context, 12016b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan ClangASTImporter::NamespaceMapSP &namespace_decls); 1216916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 122a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 12305a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// [Used by IRForTarget] Get a constant variable given a name, 12405a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// a type, and an llvm::APInt. 12505a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// 12605a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// @param[in] name 12705a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// The name of the variable 12805a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// 12905a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// @param[in] type 13005a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// The type of the variable, which will be imported into the 13105a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// target's AST context 13205a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// 13305a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// @param[in] value 13405a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// The value of the variable 13505a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// 13605a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// @return 13705a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan /// The created variable 13805a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan //------------------------------------------------------------------ 13905a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan lldb::ClangExpressionVariableSP 14005a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan BuildIntegerVariable (const ConstString &name, 14105a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan lldb_private::TypeFromParser type, 14205a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan const llvm::APInt& value); 14305a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan 14405a5a1bcbed5c0f31fed29153bb2912d71836e91Sean Callanan //------------------------------------------------------------------ 145696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// [Used by IRForTarget] Cast an existing variable given a Decl and 146696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// a type. 147696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// 148696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// @param[in] name 149696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// The name of the new variable 150696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// 151696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// @param[in] decl 152696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// The Clang variable declaration for the original variable, 153696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// which must be looked up in the map 154696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// 155696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// @param[in] type 156696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// The desired type of the variable after casting 157696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// 158696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// @return 159696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan /// The created variable 160696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan //------------------------------------------------------------------ 161696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan lldb::ClangExpressionVariableSP 162696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan BuildCastVariable (const ConstString &name, 163696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan clang::VarDecl *decl, 164696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan lldb_private::TypeFromParser type); 165696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan 166696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan //------------------------------------------------------------------ 167a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Add a variable to the list of persistent 168a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// variables for the process. 169a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1708c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// @param[in] decl 1718c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// The Clang declaration for the persistent variable, used for 1728c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// lookup during parsing. 1738c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// 174a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] name 175a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The name of the persistent variable, usually $something. 176a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 177a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] type 178a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The type of the variable, in the Clang parser's context. 179a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 180a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 181a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 182a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 183427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 184427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddPersistentVariable (const clang::NamedDecl *decl, 185427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const ConstString &name, 1866a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan TypeFromParser type, 1876a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan bool is_result, 1886a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan bool is_lvalue); 189a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 190a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 191a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Add a variable to the struct that needs to 192a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// be materialized each time the expression runs. 193a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 194a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] decl 195a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Clang declaration for the variable. 196a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 19745690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// @param[in] name 19845690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// The name of the variable. 19945690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// 2008c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// @param[in] value 2018c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// The LLVM IR value for this variable. 202a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 203a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] size 204a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The size of the variable in bytes. 205a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 206a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] alignment 207a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The required alignment of the variable in bytes. 208a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 209a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 210a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 211a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 212427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 213427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddValueToStruct (const clang::NamedDecl *decl, 214427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const ConstString &name, 215427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton llvm::Value *value, 216427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton size_t size, 217427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton off_t alignment); 218a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 219a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 220a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Finalize the struct, laying out the position 221a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// of each object in it. 222a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 223a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 224a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 225a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 226427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 227427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DoStructLayout (); 228a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 229a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 230a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Get general information about the laid-out 231a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// struct after DoStructLayout() has been called. 232a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 233a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] num_elements 234a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The number of elements in the struct. 235a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 236a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] size 237a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The size of the struct, in bytes. 238a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 239a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] alignment 240a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The alignment of the struct, in bytes. 241a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 242a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 243a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the information could be retrieved; false otherwise. 244a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 245427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 246427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetStructInfo (uint32_t &num_elements, 247427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton size_t &size, 248427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton off_t &alignment); 249a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 250a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 251a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Get specific information about one field 252a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// of the laid-out struct after DoStructLayout() has been called. 253a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 254a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] decl 255a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The parsed Decl for the field, as generated by ClangASTSource 256a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// on ClangExpressionDeclMap's behalf. In the case of the result 2578de27c761a22187ef63fb60000894be163e7285fGreg Clayton /// value, this will have the name $__lldb_result even if the 258a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// result value ends up having the name $1. This is an 259a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// implementation detail of IRForTarget. 260a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 261a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] value 262a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The IR value for the field (usually a GlobalVariable). In 263a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// the case of the result value, this will have the correct 264a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// name ($1, for instance). This is an implementation detail 265a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// of IRForTarget. 266a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 267a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] offset 268a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The offset of the field from the beginning of the struct. 269a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// As long as the struct is aligned according to its required 270a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// alignment, this offset will align the field correctly. 271a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 27245690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// @param[out] name 27345690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// The name of the field as used in materialization. 27445690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// 275a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] index 276a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The index of the field about which information is requested. 277a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 278a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 279a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the information could be retrieved; false otherwise. 280a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 281427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 282427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetStructElement (const clang::NamedDecl *&decl, 283427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton llvm::Value *&value, 284427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton off_t &offset, 285427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ConstString &name, 286427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton uint32_t index); 2878bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan 288a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 289a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Get information about a function given its 290a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Decl. 291a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 292a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] decl 293a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The parsed Decl for the Function, as generated by ClangASTSource 294a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// on ClangExpressionDeclMap's behalf. 295a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 296a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] value 297a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// A pointer to the address where a Value for the function's address 298a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// can be stored. IRForTarget typically places a ConstantExpr here. 299a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 300a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] ptr 301a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The absolute address of the function in the target. 302a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 303a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 304a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the information could be retrieved; false otherwise. 305a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 306427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 307427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetFunctionInfo (const clang::NamedDecl *decl, 308427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton llvm::Value**& value, 309427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton uint64_t &ptr); 310a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 311a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 312a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Get the address of a function given nothing 313a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// but its name. Some functions are needed but didn't get Decls made 314a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// during parsing -- specifically, sel_registerName is never called 315a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// in the generated IR but we need to call it nonetheless. 316a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 317a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] name 318a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The name of the function. 319a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 320a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] ptr 321a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The absolute address of the function in the target. 322a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 323a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 324a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the address could be retrieved; false otherwise. 325a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 326427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 327427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetFunctionAddress (const ConstString &name, 328427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton uint64_t &ptr); 329f5857a002d1e0c5fe29b8af9f9e2fe4fac0298d8Sean Callanan 330a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 331c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// [Used by IRForTarget] Get the address of a symbol given nothing 332c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// but its name. 333c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// 334819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] target 335819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The target to find the symbol in. If not provided, 336819749647b1605f75753f625050cb240292c08b0Sean Callanan /// then the current parsing context's Target. 337819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 338c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// @param[in] name 339c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// The name of the symbol. 340c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// 341c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// @return 342cbc07cfd435fb703d8feb69b97ca8590e6ee2fd8Greg Clayton /// Valid load address for the symbol 343c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan //------------------------------------------------------------------ 344cbc07cfd435fb703d8feb69b97ca8590e6ee2fd8Greg Clayton lldb::addr_t 345819749647b1605f75753f625050cb240292c08b0Sean Callanan GetSymbolAddress (Target &target, 346cbc07cfd435fb703d8feb69b97ca8590e6ee2fd8Greg Clayton const ConstString &name); 347819749647b1605f75753f625050cb240292c08b0Sean Callanan 348cbc07cfd435fb703d8feb69b97ca8590e6ee2fd8Greg Clayton lldb::addr_t 349cbc07cfd435fb703d8feb69b97ca8590e6ee2fd8Greg Clayton GetSymbolAddress (const ConstString &name); 350c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan 351c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan //------------------------------------------------------------------ 35247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Get basic target information. 35347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 35447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[out] byte_order 35547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The byte order of the target. 35647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 35747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[out] address_byte_size 35847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The size of a pointer in bytes. 35947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 36047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 36147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// True if the information could be determined; false 36247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// otherwise. 36347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 36447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan struct TargetInfo 36547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan { 36647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb::ByteOrder byte_order; 36747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan size_t address_byte_size; 36847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 36947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan TargetInfo() : 37047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan byte_order(lldb::eByteOrderInvalid), 37147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan address_byte_size(0) 37247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan { 37347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan } 37447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 37547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan bool IsValid() 37647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan { 37747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan return (byte_order != lldb::eByteOrderInvalid && 37847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan address_byte_size != 0); 37947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan } 38047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan }; 38147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan TargetInfo GetTargetInfo(); 38247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 38347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 384557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// [Used by IRInterpreter] Promote an unknown address to a 385557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// LoadAddress or FileAddress depending on the presence of a 386557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// process. 38747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 38847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] addr 389557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// The address to promote. 390557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// 391557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// @return 392557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// The wrapped entity. 393557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan //------------------------------------------------------------------ 394557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan lldb_private::Value WrapBareAddress (lldb::addr_t addr); 395557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan 396557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan //------------------------------------------------------------------ 397557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// [Used by IRInterpreter] Write to the target. 398557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// 399557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// @param[in] value 40047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The address to write to. 40147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 402557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// @param[in] addr 40347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The address of the data buffer to read from. 40447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 40547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] length 40647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The amount of data to write, in bytes. 40747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 40847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 40947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// True if the write could be performed; false otherwise. 41047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 41147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan bool 41247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan WriteTarget (lldb_private::Value &value, 41347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan const uint8_t *data, 41447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan size_t length); 41547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 41647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 41747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Read from the target. 41847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 41947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] data 42047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The address of the data buffer to write to. 42147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 422557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// @param[in] value 42347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The address to read from. 42447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 42547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] length 42647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The amount of data to read, in bytes. 42747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 42847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 42947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// True if the read could be performed; false otherwise. 43047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 43147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan bool 43247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan ReadTarget (uint8_t *data, 43347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb_private::Value &value, 43447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan size_t length); 435557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan 43647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 43747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Get the Value for a NamedDecl. 43847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 43947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] decl 44047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The Decl whose value is to be found. 44147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 44247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 44347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The value, or NULL. 44447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 44547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb_private::Value 44647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan LookupDecl (clang::NamedDecl *decl); 44747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 44847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 44947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Returns true if the result is a 45047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// reference to data in the target, meaning it must be 45147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// dereferenced once more to get its data. 45247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 45347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] name 45447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The name of the result. 45547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 45647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 45747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// True if the result is a reference; false otherwise (or on 45847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// error). 45947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 46047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan bool 46147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan ResultIsReference (const ConstString &name); 46247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 46347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 46447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Find the result persistent variable, 46547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// propagate the given value to it, and return it. 46647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 46747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[out] valobj 46847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// Set to the complete object. 46947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 47047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] value 47147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// A value indicating the location of the value's contents. 47247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 47347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] name 47447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The name of the result. 47547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 47647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] type 47747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The type of the data. 47847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 479a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan /// @param[in] transient 480a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan /// True if the data should be treated as disappearing after the 481a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan /// expression completes. In that case, it gets no live data. 482a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan /// 483557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// @param[in] maybe_make_load 484557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// True if the value is a file address but should be potentially 485557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// upgraded to a load address if a target is presence. 486557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan /// 48747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 48847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// True on success; false otherwise. 48947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 49047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan bool 49147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan CompleteResultVariable (lldb::ClangExpressionVariableSP &valobj, 49247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb_private::Value &value, 49347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan const ConstString &name, 494a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan lldb_private::TypeFromParser type, 495557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan bool transient, 496557ccd6b47c5d4b3736e704e7f1e887a7fff6549Sean Callanan bool maybe_make_load); 49747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 49847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 499a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by CommandObjectExpression] Materialize the entire struct 500a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// at a given address, which should be aligned as specified by 501a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// GetStructInfo(). 502a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 503a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 504a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context at which to dump the struct. 505a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 506a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] struct_address 507a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The address at which the struct should be written. 508a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 509a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] error 510a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 511a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// materializing the struct. 512a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 513a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 514a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 515a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 516427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 517427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Materialize (ExecutionContext &exe_ctx, 518427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::addr_t &struct_address, 519427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &error); 520f328c9ffe0bb00f48601027ec86dbdf238b42c2aSean Callanan 521a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 5223c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// [Used by CommandObjectExpression] Get the "this" pointer 5233c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// from a given execution context. 5243c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// 5253c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// @param[out] object_ptr 5263c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// The this pointer. 5273c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// 5283aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan /// @param[in] object_name 5293aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan /// The name of the object pointer -- "this," "self," or similar 5303aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan /// depending on language 5313aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan /// 5323c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// @param[in] exe_ctx 5333c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// The execution context at which to dump the struct. 5343c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// 5353c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// @param[in] error 5363c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// An Error to populate with any messages related to 5373c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// finding the "this" pointer. 5383c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// 539047923c7bc90275f29c2e179d2385df26b8d81a1Sean Callanan /// @param[in] suppress_type_check 540047923c7bc90275f29c2e179d2385df26b8d81a1Sean Callanan /// True if the type is not needed. 541047923c7bc90275f29c2e179d2385df26b8d81a1Sean Callanan /// 5423c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// @return 5433c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// True on success; false otherwise. 5443c9c5eb466869ede185e879d14a47335fb43194dSean Callanan //------------------------------------------------------------------ 545427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 546427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetObjectPointer (lldb::addr_t &object_ptr, 547427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ConstString &object_name, 548427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ExecutionContext &exe_ctx, 549427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &error, 550427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool suppress_type_check = false); 5513c9c5eb466869ede185e879d14a47335fb43194dSean Callanan 5523c9c5eb466869ede185e879d14a47335fb43194dSean Callanan //------------------------------------------------------------------ 553a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by CommandObjectExpression] Pretty-print a materialized 554a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// struct, which must have been materialized by Materialize(), 555a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// byte for byte on a given stream. 556a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 557a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 558a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context from which to read the struct. 559a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 560a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] s 561a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The stream on which to write the pretty-printed output. 562a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 563a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] error 564a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 565a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// pretty-printing the struct. 566a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 567a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 568a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 569a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 570427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 571427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DumpMaterializedStruct (ExecutionContext &exe_ctx, 572427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Stream &s, 573427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &error); 57432824aa43fdc8393d829c16f126f32ca8d3582adSean Callanan 575a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 576a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by CommandObjectExpression] Deaterialize the entire struct. 577a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 578a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 579a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context from which to read the struct. 580a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 581a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] result 582a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// A ClangExpressionVariable containing the result of the 583a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// expression, for potential re-use. 584a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 5850ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// @param[in] stack_frame_top, stack_frame_bottom 5860ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// If not LLDB_INVALID_ADDRESS, the bounds for the stack frame 5870ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// in which the expression ran. A result whose address falls 5880ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// inside this stack frame is dematerialized as a value 5890ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// requiring rematerialization. 5900ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// 591a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] error 592a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 593a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// dematerializing the struct. 594a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 595a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 596a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 597a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 598427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 599427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Dematerialize (ExecutionContext &exe_ctx, 600427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP &result_sp, 6010ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_top, 6020ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_bottom, 603427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &error); 604810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan 605a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 606a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by ClangASTSource] Find all entities matching a given name, 607a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// using a NameSearchContext to make Decls for them. 608a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 609a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 610a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext that can construct Decls for this name. 611a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 612a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] name 613a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The name as a plain C string. The NameSearchContext contains 614a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// a DeclarationName for the name so at first the name may seem 615a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// redundant, but ClangExpressionDeclMap operates in RTTI land so 616a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// it can't access DeclarationName. 617a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 618a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 619a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 620a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 621427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 62216b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan FindExternalVisibleDecls (NameSearchContext &context, 62316b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan const ConstString &name); 624aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 625aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 6269b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// [Used by ClangASTSource] Find all Decls in a context that match 6279b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// a given criterion. 628e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton /// 629e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton /// @param[in] decl_context 6309b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// The DeclContext to search. 631e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton /// 6329b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// @param[in] predicate 6339b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// Returns True if a DeclKind is desired; False if not. 6349b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// 6359b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// @param[in] decls 6369b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// A list to add all found Decls that have a desired DeclKind 6379b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// into. 6389b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan //------------------------------------------------------------------ 6399b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan clang::ExternalLoadResult 6409b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan FindExternalLexicalDecls (const clang::DeclContext *decl_context, 6419b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan bool (*predicate)(clang::Decl::Kind), 6429b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan llvm::SmallVectorImpl<clang::Decl*> &decls); 6439b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan 6449b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan //------------------------------------------------------------------ 6459b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// [Used by ClangASTSource] Complete the definition of a TagDecl. 6469b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// 6479b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// @param[in] tag_decl 6489b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// The TagDecl to be completed. 649e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton //------------------------------------------------------------------ 6509b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan void 6519b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan CompleteTagDecl (clang::TagDecl *tag_decl); 6529b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan 6539b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan //------------------------------------------------------------------ 6549b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// [Used by ClangASTSource] Complete the definition of an 6559b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// ObjCInterfaceDecl. 6569b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// 6579b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// @param[in] tag_decl 6589b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// The ObjCInterfaceDecl to be completed. 6599b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan //------------------------------------------------------------------ 6609b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan void 6619b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan CompleteObjCInterfaceDecl (clang::ObjCInterfaceDecl *interface_decl); 662e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 663e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton //------------------------------------------------------------------ 664aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// [Used by ClangASTSource] Report whether a $__lldb variable has 665aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// been searched for yet. This is the trigger for beginning to 666aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// actually look for externally-defined names. (Names that come 667aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// before this are typically the names of built-ins that don't need 668aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// to be looked up.) 669aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// 670aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// @return 671aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// True if a $__lldb variable has been found. 672aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 6738de27c761a22187ef63fb60000894be163e7285fGreg Clayton bool 674b01000fd063629facd45044f137446fb748ee179Greg Clayton GetLookupsEnabled () const 6758de27c761a22187ef63fb60000894be163e7285fGreg Clayton { 676aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan assert(m_parser_vars.get()); 677aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan return m_parser_vars->m_enable_lookups; 6788de27c761a22187ef63fb60000894be163e7285fGreg Clayton } 679b01000fd063629facd45044f137446fb748ee179Greg Clayton 680b01000fd063629facd45044f137446fb748ee179Greg Clayton bool 681b01000fd063629facd45044f137446fb748ee179Greg Clayton GetImportInProgress () const 682b01000fd063629facd45044f137446fb748ee179Greg Clayton { 683b01000fd063629facd45044f137446fb748ee179Greg Clayton if (m_parser_vars.get()) 684b01000fd063629facd45044f137446fb748ee179Greg Clayton return m_parser_vars->m_ignore_lookups; 685b01000fd063629facd45044f137446fb748ee179Greg Clayton return false; 686b01000fd063629facd45044f137446fb748ee179Greg Clayton } 6878de27c761a22187ef63fb60000894be163e7285fGreg Clayton 688aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 689aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// [Used by ClangASTSource] Indicate that a $__lldb variable has 690aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// been found. 691aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 6928de27c761a22187ef63fb60000894be163e7285fGreg Clayton void 693aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan SetLookupsEnabled () 6948de27c761a22187ef63fb60000894be163e7285fGreg Clayton { 695aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan assert(m_parser_vars.get()); 696aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_parser_vars->m_enable_lookups = true; 6978de27c761a22187ef63fb60000894be163e7285fGreg Clayton } 698a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan 699a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan //------------------------------------------------------------------ 700a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// [Used by ClangASTImporter] Look up the modules containing a 701a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// given namespace and put the appropriate entries in the namespace 702a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// map. 703a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// 704a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// @param[in] namespace_map 705a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// The map to be completed. 706a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// 707a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// @param[in] name 708a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// The name of the namespace to be found. 709a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// 710a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// @param[in] parent_map 711a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// The map for the namespace's parent namespace, if there is 712a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan /// one. 713a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan //------------------------------------------------------------------ 714a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan void CompleteNamespaceMap (ClangASTImporter::NamespaceMapSP &namespace_map, 715a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan const ConstString &name, 716a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan ClangASTImporter::NamespaceMapSP &parent_map) const; 7178de27c761a22187ef63fb60000894be163e7285fGreg Clayton 718a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callananprivate: 719427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ClangExpressionVariableList m_found_entities; ///< All entities that were looked up for the parser. 720427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ClangExpressionVariableList m_struct_members; ///< All entities that need to be placed in the struct. 7216a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan bool m_keep_result_in_memory; ///< True if result persistent variables generated by this expression should stay in memory. 722aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 723aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 724aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// The following values should not live beyond parsing 725aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 726bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton class ParserVars 727bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton { 728bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton public: 729a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan ParserVars(ClangExpressionDeclMap &decl_map) : 730a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan m_decl_map(decl_map), 731aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_exe_ctx(NULL), 732aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_sym_ctx(), 733aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_persistent_vars(NULL), 734aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_enable_lookups(false), 735aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_ignore_lookups(false) 736aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 737aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 738aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 739427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Target * 740427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetTarget() 741427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton { 742567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (m_exe_ctx && m_exe_ctx->GetTargetPtr()) 743567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton return m_exe_ctx->GetTargetPtr(); 744427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton else if (m_sym_ctx.target_sp) 745427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton m_sym_ctx.target_sp.get(); 746427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return NULL; 747427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton } 748e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 749e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton ClangASTImporter *GetASTImporter (clang::ASTContext *ast_context) 750e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton { 751e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton if (!m_ast_importer.get()) 752e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton m_ast_importer.reset(new ClangASTImporter(ast_context)); 753e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 754e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton if (m_ast_importer->TargetASTContext() != ast_context) 755e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton return NULL; 756e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 757a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan m_ast_importer->InstallMapCompleter(m_decl_map); 758a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan 759e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton return m_ast_importer.get(); 760e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton } 761e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 762aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan ExecutionContext *m_exe_ctx; ///< The execution context to use when parsing. 763aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan SymbolContext m_sym_ctx; ///< The symbol context to use in finding variables and types. 764aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan ClangPersistentVariables *m_persistent_vars; ///< The persistent variables for the process. 765aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan bool m_enable_lookups; ///< Set to true during parsing if we have found the first "$__lldb" name. 766aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan bool m_ignore_lookups; ///< True during an import when we should be ignoring type lookups. 767e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton std::auto_ptr<ClangASTImporter> m_ast_importer; ///< The importer used to import types on the parser's behalf. 76847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan TargetInfo m_target_info; ///< Basic information about the target. 769bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton private: 770a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan ClangExpressionDeclMap &m_decl_map; 771bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton DISALLOW_COPY_AND_ASSIGN (ParserVars); 772aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan }; 773aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 774aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan std::auto_ptr<ParserVars> m_parser_vars; 775aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 776aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 777aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Activate parser-specific variables 778aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 779427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 780427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton EnableParserVars() 781aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 782aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan if (!m_parser_vars.get()) 783a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan m_parser_vars.reset(new ParserVars(*this)); 784aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 785aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 786aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 787aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Deallocate parser-specific variables 788aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 789427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 790427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DisableParserVars() 791aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 792aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_parser_vars.reset(); 793aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 794aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 795aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 796aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// The following values contain layout information for the materialized 797aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// struct, but are not specific to a single materialization 798aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 799aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan struct StructVars { 800aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan StructVars() : 801aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_alignment(0), 802aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_size(0), 803aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_laid_out(false), 804aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_result_name(), 805aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_object_pointer_type(NULL, NULL) 806aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 807aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 808aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 809aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan off_t m_struct_alignment; ///< The alignment of the struct in bytes. 810aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan size_t m_struct_size; ///< The size of the struct in bytes. 811aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan bool m_struct_laid_out; ///< True if the struct has been laid out and the layout is valid (that is, no new fields have been added since). 812aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan ConstString m_result_name; ///< The name of the result variable ($1, for example) 813aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan TypeFromUser m_object_pointer_type; ///< The type of the "this" variable, if one exists 814aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan }; 815aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 816aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan std::auto_ptr<StructVars> m_struct_vars; 817aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 818aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 819aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Activate struct variables 820aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 821427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 822427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton EnableStructVars() 823aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 824aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan if (!m_struct_vars.get()) 825aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_vars.reset(new struct StructVars); 826aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 827aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 828aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 829aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Deallocate struct variables 830aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 831427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 832427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DisableStructVars() 833aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 834aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_vars.reset(); 835aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 836aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 837aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 838aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// The following values refer to a specific materialization of the 839aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// structure in a process 840aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 841aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan struct MaterialVars { 842aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan MaterialVars() : 8432bc9eb3ba78efc64a273729b480bafc3bbaa433aJohnny Chen m_allocated_area(0), 8442bc9eb3ba78efc64a273729b480bafc3bbaa433aJohnny Chen m_materialized_location(0) 845aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 846aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 847aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 848aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan Process *m_process; ///< The process that the struct is materialized into. 849aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan lldb::addr_t m_allocated_area; ///< The base of the memory allocated for the struct. Starts on a potentially unaligned address and may therefore be larger than the struct. 850aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan lldb::addr_t m_materialized_location; ///< The address at which the struct is placed. Falls inside the allocated area. 851aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan }; 852aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 853aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan std::auto_ptr<MaterialVars> m_material_vars; 854aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 855aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 856aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Activate materialization-specific variables 857aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 858427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 859427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton EnableMaterialVars() 860aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 861aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan if (!m_material_vars.get()) 862aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_material_vars.reset(new struct MaterialVars); 863aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 864aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 865aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 866aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Deallocate materialization-specific variables 867aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 868427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 869427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DisableMaterialVars() 870aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 871aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_material_vars.reset(); 872aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 873aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 874a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 87516b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// [Used by ClangASTSource] Find all entities matching a given name, 87616b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// using a NameSearchContext to make Decls for them. 87716b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// 87816b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// @param[in] context 87916b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// The NameSearchContext that can construct Decls for this name. 88016b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// 88116b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// @param[in] module 88216b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// If non-NULL, the module to query. 88316b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// 88494cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// @param[in] namespace_decl 88594cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// If valid and module is non-NULL, the parent namespace. 88616b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// 88716b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// @param[in] name 88816b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// The name as a plain C string. The NameSearchContext contains 88916b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// a DeclarationName for the name so at first the name may seem 89016b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// redundant, but ClangExpressionDeclMap operates in RTTI land so 89116b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// it can't access DeclarationName. 89216b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// 89367bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// @param[in] current_id 89467bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// The ID for the current FindExternalVisibleDecls invocation, 89567bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// for logging purposes. 89667bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// 89716b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// @return 89816b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// True on success; false otherwise. 89916b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan //------------------------------------------------------------------ 90016b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan void 90116b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan FindExternalVisibleDecls (NameSearchContext &context, 90216b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan lldb::ModuleSP module, 90303f64ca626d4dc0488e6acfe7023e4e376b4df30Sean Callanan ClangNamespaceDecl &namespace_decl, 90467bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan const ConstString &name, 90567bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 90616b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan 90716b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan //------------------------------------------------------------------ 908cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// Given a stack frame, find a variable that matches the given name and 909cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// type. We need this for expression re-use; we may not always get the 910cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// same lldb::Variable back, and we want the expression to work wherever 911cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// it can. Returns the variable defined in the tightest scope. 912a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 913cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// @param[in] frame 914cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// The stack frame to use as a basis for finding the variable. 915a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 916a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] name 917a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The name as a plain C string. 918a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 919a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] type 920a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The required type for the variable. This function may be called 921a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// during parsing, in which case we don't know its type; hence the 922a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// default. 923a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 924a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 925a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The LLDB Variable found, or NULL if none was found. 926a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 927696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan lldb::VariableSP 928427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton FindVariableInScope (StackFrame &frame, 929427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const ConstString &name, 930427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton TypeFromUser *type = NULL); 931336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan 932a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 933819749647b1605f75753f625050cb240292c08b0Sean Callanan /// Given a target, find a data symbol that has the given name. 934819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 935819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] target 936819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The target to use as the basis for the search. 937819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 938819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] name 939819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The name as a plain C string. 940819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 941819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @return 942819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The LLDB Symbol found, or NULL if none was found. 943819749647b1605f75753f625050cb240292c08b0Sean Callanan //--------------------------------------------------------- 944819749647b1605f75753f625050cb240292c08b0Sean Callanan Symbol * 945819749647b1605f75753f625050cb240292c08b0Sean Callanan FindGlobalDataSymbol (Target &target, 946aa4a553d4b8cd37f13bd4946f504265000a7bcc4Sean Callanan const ConstString &name); 947819749647b1605f75753f625050cb240292c08b0Sean Callanan 948819749647b1605f75753f625050cb240292c08b0Sean Callanan //------------------------------------------------------------------ 94947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// Given a target, find a variable that matches the given name and 95047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// type. 95147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 95247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] target 95347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The target to use as a basis for finding the variable. 95447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 95594cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// @param[in] module 95694cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// If non-NULL, the module to search. 95794cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// 95847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] name 95947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The name as a plain C string. 96047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 96194cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// @param[in] namespace_decl 96294cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// If non-NULL and module is non-NULL, the parent namespace. 96394cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// 96447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] type 96547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The required type for the variable. This function may be called 96647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// during parsing, in which case we don't know its type; hence the 96747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// default. 96847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 96947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 97047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The LLDB Variable found, or NULL if none was found. 97147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 97247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb::VariableSP 97347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan FindGlobalVariable (Target &target, 97494cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan lldb::ModuleSP &module, 97594cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan const ConstString &name, 97694cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan ClangNamespaceDecl *namespace_decl, 97747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan TypeFromUser *type = NULL); 97847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 97947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 980a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Get the value of a variable in a given execution context and return 981a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// the associated Types if needed. 982a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 983a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 984a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context to look for the variable in. 985a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 986a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] var 987a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The variable to evaluate. 988a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 989a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] parser_ast_context 990a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The AST context of the parser, to store the found type in. 991a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 992a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] found_type 993a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The type of the found value, as it was found in the user process. 994a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// This is only useful when the variable is being inspected on behalf 995a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// of the parser, hence the default. 996a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 997a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] parser_type 998a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The type of the found value, as it was copied into the parser's 999a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// AST context. This is only useful when the variable is being 1000a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// inspected on behalf of the parser, hence the default. 1001a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1002a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] decl 1003a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Decl to be looked up. 1004a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1005a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 1006a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The LLDB Value for the variable. 1007a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1008427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Value * 1009427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetVariableValue (ExecutionContext &exe_ctx, 10104a07832dc5028af55cacf247bedad9933bf8afdcSean Callanan lldb::VariableSP &var, 1011427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton clang::ASTContext *parser_ast_context, 1012427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton TypeFromUser *found_type = NULL, 1013427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton TypeFromParser *parser_type = NULL); 1014336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan 1015a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1016a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given LLDB 1017a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Variable, and put it in the Tuple list. 1018a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1019a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 1020a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 1021a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1022a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] var 1023a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The LLDB Variable that needs a Decl. 1024a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1025427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1026427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneVariable (NameSearchContext &context, 102767bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan lldb::VariableSP var, 102867bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 1029a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 1030a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1031a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 1032819749647b1605f75753f625050cb240292c08b0Sean Callanan /// persistent variable, and put it in the list of found entities. 1033a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1034a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 1035a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 1036a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1037a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] pvar 1038a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The persistent variable that needs a Decl. 103967bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// 104067bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// @param[in] current_id 104167bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// The ID of the current invocation of FindExternalVisibleDecls 104267bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// for logging purposes. 1043a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1044427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1045427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneVariable (NameSearchContext &context, 104667bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan lldb::ClangExpressionVariableSP &pvar_sp, 104767bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 1048a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 1049a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1050819749647b1605f75753f625050cb240292c08b0Sean Callanan /// Use the NameSearchContext to generate a Decl for the given LLDB 1051819749647b1605f75753f625050cb240292c08b0Sean Callanan /// symbol (treated as a variable), and put it in the list of found 1052819749647b1605f75753f625050cb240292c08b0Sean Callanan /// entities. 1053819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 1054819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] context 1055819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The NameSearchContext to use when constructing the Decl. 1056819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 1057819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] var 1058819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The LLDB Variable that needs a Decl. 1059819749647b1605f75753f625050cb240292c08b0Sean Callanan //------------------------------------------------------------------ 1060819749647b1605f75753f625050cb240292c08b0Sean Callanan void 1061819749647b1605f75753f625050cb240292c08b0Sean Callanan AddOneGenericVariable (NameSearchContext &context, 106267bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan Symbol &symbol, 106367bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 1064819749647b1605f75753f625050cb240292c08b0Sean Callanan 1065819749647b1605f75753f625050cb240292c08b0Sean Callanan //------------------------------------------------------------------ 1066a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 1067a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// function. (Functions are not placed in the Tuple list.) Can 1068a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// handle both fully typed functions and generic functions. 1069a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1070a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 1071a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 1072a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1073a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] fun 1074a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Function that needs to be created. If non-NULL, this is 1075a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// a fully-typed function. 1076a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1077a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] sym 1078a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Symbol that corresponds to a function that needs to be 1079a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// created with generic type (unitptr_t foo(...)). 1080a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1081427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1082427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneFunction (NameSearchContext &context, 1083427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Function *fun, 108467bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan Symbol *sym, 108567bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 1086a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 1087a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1088a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 10891ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// register. 10901ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 10911ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] context 10921ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The NameSearchContext to use when constructing the Decl. 10931ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 10941ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] reg_info 10951ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The information corresponding to that register. 10961ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan //------------------------------------------------------------------ 1097427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1098427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneRegister (NameSearchContext &context, 109967bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan const RegisterInfo *reg_info, 110067bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 11011ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan 11021ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan //------------------------------------------------------------------ 11031ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 1104a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// type. (Types are not placed in the Tuple list.) 1105a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1106a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 1107a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 1108a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1109a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] type 11103c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// The type that needs to be created. 11113c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// 11123c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// @param[in] add_method 11138de27c761a22187ef63fb60000894be163e7285fGreg Clayton /// True if a method with signature void $__lldb_expr(void*) 11143c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// should be added to the C++ class type passed in 1115a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1116427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1117427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneType (NameSearchContext &context, 111867bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan TypeFromUser &type, 111967bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id, 1120e3737fdca55be5c078534cc49fb38db409d12e32Sean Callanan bool add_method); 1121810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan 1122a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1123a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Actually do the task of materializing or dematerializing the struct. 1124a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Since both tasks are very similar, although ClangExpressionDeclMap 1125a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// exposes two functions to the outside, both call DoMaterialize. 1126a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1127a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] dematerialize 1128a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the struct is to be dematerialized; false if it is to 1129a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// be materialized. 1130a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1131a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 1132a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context to use. 1133a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 11340ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// @param[in] stack_frame_top, stack_frame_bottom 11350ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// If not LLDB_INVALID_ADDRESS, the bounds for the stack frame 11360ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// in which the expression ran. A result whose address falls 11370ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// inside this stack frame is dematerialized as a value 11380ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// requiring rematerialization. 11390ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// 1140a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] result 1141a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// If the struct is being dematerialized, a pointer into which the 1142a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// location of the result persistent variable is placed. If not, 1143a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// NULL. 1144a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1145a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] err 1146a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 1147a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// (de)materializing the struct. 1148a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1149a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 1150a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 1151a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1152427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 1153427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DoMaterialize (bool dematerialize, 1154427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ExecutionContext &exe_ctx, 11550ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_top, 11560ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_bottom, 1157427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP *result_sp_ptr, 1158427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &err); 1159aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 1160aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 1161aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Clean up the state required to dematerialize the variable. 1162aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 1163427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1164427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DidDematerialize (); 1165f328c9ffe0bb00f48601027ec86dbdf238b42c2aSean Callanan 1166a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1167a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Actually do the task of materializing or dematerializing a persistent 1168a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// variable. 1169a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1170a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] dematerialize 1171a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the variable is to be dematerialized; false if it is to 1172a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// be materialized. 1173a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1174a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 1175a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context to use. 1176a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1177427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton /// @param[in] var_sp 1178427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton /// The persistent variable to materialize 1179a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1180a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] addr 1181a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The address at which to materialize the variable. 1182a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 11830ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// @param[in] stack_frame_top, stack_frame_bottom 11840ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// If not LLDB_INVALID_ADDRESS, the bounds for the stack frame 11850ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// in which the expression ran. A result whose address falls 11860ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// inside this stack frame is dematerialized as a value 11870ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// requiring rematerialization. 11880ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// 1189a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] err 1190a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 1191a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// (de)materializing the persistent variable. 1192a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1193a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 1194a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 1195a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1196427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 1197427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DoMaterializeOnePersistentVariable (bool dematerialize, 1198427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ExecutionContext &exe_ctx, 1199427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP &var_sp, 1200427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::addr_t addr, 12010ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_top, 12020ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_bottom, 1203427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &err); 1204a48fe1637ec6a381e500633c087f76662e364c20Sean Callanan 1205a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1206a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Actually do the task of materializing or dematerializing a 1207a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// variable. 1208a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1209a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] dematerialize 1210a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the variable is to be dematerialized; false if it is to 1211a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// be materialized. 1212a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1213a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 1214a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context to use. 1215a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1216a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] sym_ctx 1217a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The symbol context to use (for looking the variable up). 1218a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 12196a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// @param[in] expr_var 12206a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// The entity that the expression parser uses for the variable. 12216a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// In case the variable needs to be copied into the target's 12226a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// memory, this location is stored in the variable during 12236a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// materialization and cleared when it is demateralized. 1224a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1225a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] addr 1226a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The address at which to materialize the variable. 1227a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1228a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] err 1229a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 1230a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// (de)materializing the persistent variable. 1231a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1232a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 1233a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 1234a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1235427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 1236427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DoMaterializeOneVariable (bool dematerialize, 1237427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ExecutionContext &exe_ctx, 1238427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const SymbolContext &sym_ctx, 12396a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan lldb::ClangExpressionVariableSP &expr_var, 1240427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::addr_t addr, 1241427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &err); 12421ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan 12431ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan //------------------------------------------------------------------ 12441ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// Actually do the task of materializing or dematerializing a 12451ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// register variable. 12461ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12471ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] dematerialize 12481ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// True if the variable is to be dematerialized; false if it is to 12491ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// be materialized. 12501ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12511ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] exe_ctx 12521ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The execution context to use. 12531ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12541ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] reg_ctx 12551ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The register context to use. 12561ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12571ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] reg_info 12581ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The information for the register to read/write. 12591ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12601ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] addr 12611ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The address at which to materialize the variable. 12621ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12631ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] err 12641ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// An Error to populate with any messages related to 12651ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// (de)materializing the persistent variable. 12661ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12671ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @return 12681ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// True on success; false otherwise. 12691ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan //------------------------------------------------------------------ 1270427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 1271427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DoMaterializeOneRegister (bool dematerialize, 1272427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ExecutionContext &exe_ctx, 1273427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton RegisterContext ®_ctx, 1274b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton const RegisterInfo ®_info, 1275427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::addr_t addr, 1276427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &err); 1277ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan 1278ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan //------------------------------------------------------------------ 1279ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// A wrapper for ClangASTContext::CopyType that sets a flag that 1280ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// indicates that we should not respond to queries during import. 1281ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// 1282ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// @param[in] dest_context 1283ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// The target AST context, typically the parser's AST context. 1284ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// 1285ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// @param[in] source_context 1286ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// The source AST context, typically the AST context of whatever 1287ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// symbol file the type was found in. 1288ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// 1289ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// @param[in] clang_type 1290ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// The source type. 1291ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// 1292ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// @return 1293ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// The imported type. 1294ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan //------------------------------------------------------------------ 1295427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void * 1296427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GuardedCopyType (clang::ASTContext *dest_context, 1297427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton clang::ASTContext *source_context, 1298427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void *clang_type); 129924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 130024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 130124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 130224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 130324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_ClangExpressionDeclMap_h_ 1304