ClangExpressionDeclMap.h revision 4a07832dc5028af55cacf247bedad9933bf8afdc
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//---------------------------------------------------------------------- 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ClangExpressionDeclMap 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 //------------------------------------------------------------------ 38447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Write to the target. 38547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 38647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] addr 38747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The address to write to. 38847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 38947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] data 39047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The address of the data buffer to read from. 39147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 39247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] length 39347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The amount of data to write, in bytes. 39447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 39547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 39647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// True if the write could be performed; false otherwise. 39747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 39847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan bool 39947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan WriteTarget (lldb_private::Value &value, 40047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan const uint8_t *data, 40147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan size_t length); 40247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 40347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 40447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Read from the target. 40547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 40647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] data 40747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The address of the data buffer to write to. 40847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 40947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] addr 41047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The address to read from. 41147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 41247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] length 41347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The amount of data to read, in bytes. 41447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 41547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 41647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// True if the read could be performed; false otherwise. 41747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 41847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan bool 41947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan ReadTarget (uint8_t *data, 42047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb_private::Value &value, 42147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan size_t length); 42247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 42347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 42447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Get the Value for a NamedDecl. 42547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 42647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] decl 42747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The Decl whose value is to be found. 42847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 42947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 43047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The value, or NULL. 43147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 43247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb_private::Value 43347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan LookupDecl (clang::NamedDecl *decl); 43447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 43547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 43647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Returns true if the result is a 43747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// reference to data in the target, meaning it must be 43847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// dereferenced once more to get its data. 43947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 44047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] name 44147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The name of the result. 44247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 44347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 44447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// True if the result is a reference; false otherwise (or on 44547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// error). 44647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 44747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan bool 44847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan ResultIsReference (const ConstString &name); 44947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 45047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 45147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Find the result persistent variable, 45247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// propagate the given value to it, and return it. 45347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 45447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[out] valobj 45547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// Set to the complete object. 45647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 45747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] value 45847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// A value indicating the location of the value's contents. 45947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 46047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] name 46147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The name of the result. 46247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 46347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] type 46447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The type of the data. 46547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 466a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan /// @param[in] transient 467a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan /// True if the data should be treated as disappearing after the 468a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan /// expression completes. In that case, it gets no live data. 469a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan /// 47047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 47147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// True on success; false otherwise. 47247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 47347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan bool 47447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan CompleteResultVariable (lldb::ClangExpressionVariableSP &valobj, 47547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb_private::Value &value, 47647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan const ConstString &name, 477a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan lldb_private::TypeFromParser type, 478a8428a458e779a64c8642fef5d29c7f6cc1b95f9Sean Callanan bool transient); 47947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 48047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 481a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by CommandObjectExpression] Materialize the entire struct 482a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// at a given address, which should be aligned as specified by 483a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// GetStructInfo(). 484a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 485a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 486a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context at which to dump the struct. 487a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 488a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] struct_address 489a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The address at which the struct should be written. 490a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 491a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] error 492a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 493a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// materializing the struct. 494a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 495a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 496a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 497a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 498427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 499427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Materialize (ExecutionContext &exe_ctx, 500427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::addr_t &struct_address, 501427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &error); 502f328c9ffe0bb00f48601027ec86dbdf238b42c2aSean Callanan 503a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 5043c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// [Used by CommandObjectExpression] Get the "this" pointer 5053c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// from a given execution context. 5063c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// 5073c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// @param[out] object_ptr 5083c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// The this pointer. 5093c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// 5103aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan /// @param[in] object_name 5113aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan /// The name of the object pointer -- "this," "self," or similar 5123aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan /// depending on language 5133aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan /// 5143c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// @param[in] exe_ctx 5153c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// The execution context at which to dump the struct. 5163c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// 5173c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// @param[in] error 5183c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// An Error to populate with any messages related to 5193c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// finding the "this" pointer. 5203c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// 521047923c7bc90275f29c2e179d2385df26b8d81a1Sean Callanan /// @param[in] suppress_type_check 522047923c7bc90275f29c2e179d2385df26b8d81a1Sean Callanan /// True if the type is not needed. 523047923c7bc90275f29c2e179d2385df26b8d81a1Sean Callanan /// 5243c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// @return 5253c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// True on success; false otherwise. 5263c9c5eb466869ede185e879d14a47335fb43194dSean Callanan //------------------------------------------------------------------ 527427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 528427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetObjectPointer (lldb::addr_t &object_ptr, 529427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ConstString &object_name, 530427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ExecutionContext &exe_ctx, 531427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &error, 532427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool suppress_type_check = false); 5333c9c5eb466869ede185e879d14a47335fb43194dSean Callanan 5343c9c5eb466869ede185e879d14a47335fb43194dSean Callanan //------------------------------------------------------------------ 535a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by CommandObjectExpression] Pretty-print a materialized 536a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// struct, which must have been materialized by Materialize(), 537a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// byte for byte on a given stream. 538a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 539a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 540a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context from which to read the struct. 541a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 542a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] s 543a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The stream on which to write the pretty-printed output. 544a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 545a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] error 546a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 547a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// pretty-printing the struct. 548a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 549a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 550a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 551a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 552427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 553427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DumpMaterializedStruct (ExecutionContext &exe_ctx, 554427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Stream &s, 555427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &error); 55632824aa43fdc8393d829c16f126f32ca8d3582adSean Callanan 557a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 558a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by CommandObjectExpression] Deaterialize the entire struct. 559a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 560a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 561a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context from which to read the struct. 562a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 563a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] result 564a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// A ClangExpressionVariable containing the result of the 565a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// expression, for potential re-use. 566a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 5670ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// @param[in] stack_frame_top, stack_frame_bottom 5680ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// If not LLDB_INVALID_ADDRESS, the bounds for the stack frame 5690ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// in which the expression ran. A result whose address falls 5700ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// inside this stack frame is dematerialized as a value 5710ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// requiring rematerialization. 5720ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// 573a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] error 574a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 575a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// dematerializing the struct. 576a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 577a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 578a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 579a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 580427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 581427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Dematerialize (ExecutionContext &exe_ctx, 582427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP &result_sp, 5830ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_top, 5840ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_bottom, 585427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &error); 586810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan 587a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 588a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by ClangASTSource] Find all entities matching a given name, 589a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// using a NameSearchContext to make Decls for them. 590a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 591a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 592a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext that can construct Decls for this name. 593a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 594a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] name 595a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The name as a plain C string. The NameSearchContext contains 596a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// a DeclarationName for the name so at first the name may seem 597a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// redundant, but ClangExpressionDeclMap operates in RTTI land so 598a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// it can't access DeclarationName. 599a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 600a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 601a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 602a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 603427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 60416b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan FindExternalVisibleDecls (NameSearchContext &context, 60516b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan const ConstString &name); 606aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 607aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 6089b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// [Used by ClangASTSource] Find all Decls in a context that match 6099b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// a given criterion. 610e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton /// 611e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton /// @param[in] decl_context 6129b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// The DeclContext to search. 613e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton /// 6149b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// @param[in] predicate 6159b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// Returns True if a DeclKind is desired; False if not. 6169b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// 6179b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// @param[in] decls 6189b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// A list to add all found Decls that have a desired DeclKind 6199b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// into. 6209b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan //------------------------------------------------------------------ 6219b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan clang::ExternalLoadResult 6229b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan FindExternalLexicalDecls (const clang::DeclContext *decl_context, 6239b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan bool (*predicate)(clang::Decl::Kind), 6249b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan llvm::SmallVectorImpl<clang::Decl*> &decls); 6259b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan 6269b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan //------------------------------------------------------------------ 6279b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// [Used by ClangASTSource] Complete the definition of a TagDecl. 6289b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// 6299b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// @param[in] tag_decl 6309b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// The TagDecl to be completed. 631e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton //------------------------------------------------------------------ 6329b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan void 6339b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan CompleteTagDecl (clang::TagDecl *tag_decl); 6349b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan 6359b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan //------------------------------------------------------------------ 6369b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// [Used by ClangASTSource] Complete the definition of an 6379b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// ObjCInterfaceDecl. 6389b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// 6399b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// @param[in] tag_decl 6409b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan /// The ObjCInterfaceDecl to be completed. 6419b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan //------------------------------------------------------------------ 6429b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan void 6439b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan CompleteObjCInterfaceDecl (clang::ObjCInterfaceDecl *interface_decl); 644e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 645e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton //------------------------------------------------------------------ 646aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// [Used by ClangASTSource] Report whether a $__lldb variable has 647aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// been searched for yet. This is the trigger for beginning to 648aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// actually look for externally-defined names. (Names that come 649aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// before this are typically the names of built-ins that don't need 650aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// to be looked up.) 651aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// 652aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// @return 653aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// True if a $__lldb variable has been found. 654aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 6558de27c761a22187ef63fb60000894be163e7285fGreg Clayton bool 656b01000fd063629facd45044f137446fb748ee179Greg Clayton GetLookupsEnabled () const 6578de27c761a22187ef63fb60000894be163e7285fGreg Clayton { 658aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan assert(m_parser_vars.get()); 659aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan return m_parser_vars->m_enable_lookups; 6608de27c761a22187ef63fb60000894be163e7285fGreg Clayton } 661b01000fd063629facd45044f137446fb748ee179Greg Clayton 662b01000fd063629facd45044f137446fb748ee179Greg Clayton bool 663b01000fd063629facd45044f137446fb748ee179Greg Clayton GetImportInProgress () const 664b01000fd063629facd45044f137446fb748ee179Greg Clayton { 665b01000fd063629facd45044f137446fb748ee179Greg Clayton if (m_parser_vars.get()) 666b01000fd063629facd45044f137446fb748ee179Greg Clayton return m_parser_vars->m_ignore_lookups; 667b01000fd063629facd45044f137446fb748ee179Greg Clayton return false; 668b01000fd063629facd45044f137446fb748ee179Greg Clayton } 6698de27c761a22187ef63fb60000894be163e7285fGreg Clayton 670aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 671aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// [Used by ClangASTSource] Indicate that a $__lldb variable has 672aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// been found. 673aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 6748de27c761a22187ef63fb60000894be163e7285fGreg Clayton void 675aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan SetLookupsEnabled () 6768de27c761a22187ef63fb60000894be163e7285fGreg Clayton { 677aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan assert(m_parser_vars.get()); 678aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_parser_vars->m_enable_lookups = true; 6798de27c761a22187ef63fb60000894be163e7285fGreg Clayton } 6808de27c761a22187ef63fb60000894be163e7285fGreg Clayton 681a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callananprivate: 682427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ClangExpressionVariableList m_found_entities; ///< All entities that were looked up for the parser. 683427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ClangExpressionVariableList m_struct_members; ///< All entities that need to be placed in the struct. 6846a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan bool m_keep_result_in_memory; ///< True if result persistent variables generated by this expression should stay in memory. 685aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 686aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 687aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// The following values should not live beyond parsing 688aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 689bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton class ParserVars 690bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton { 691bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton public: 692aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan ParserVars() : 693aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_exe_ctx(NULL), 694aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_sym_ctx(), 695aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_persistent_vars(NULL), 696aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_enable_lookups(false), 697aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_ignore_lookups(false) 698aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 699aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 700aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 701427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Target * 702427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetTarget() 703427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton { 704567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (m_exe_ctx && m_exe_ctx->GetTargetPtr()) 705567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton return m_exe_ctx->GetTargetPtr(); 706427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton else if (m_sym_ctx.target_sp) 707427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton m_sym_ctx.target_sp.get(); 708427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return NULL; 709427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton } 710e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 711e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton ClangASTImporter *GetASTImporter (clang::ASTContext *ast_context) 712e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton { 713e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton if (!m_ast_importer.get()) 714e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton m_ast_importer.reset(new ClangASTImporter(ast_context)); 715e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 716e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton if (m_ast_importer->TargetASTContext() != ast_context) 717e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton return NULL; 718e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 719e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton return m_ast_importer.get(); 720e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton } 721e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 722aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan ExecutionContext *m_exe_ctx; ///< The execution context to use when parsing. 723aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan SymbolContext m_sym_ctx; ///< The symbol context to use in finding variables and types. 724aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan ClangPersistentVariables *m_persistent_vars; ///< The persistent variables for the process. 725aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan bool m_enable_lookups; ///< Set to true during parsing if we have found the first "$__lldb" name. 726aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan bool m_ignore_lookups; ///< True during an import when we should be ignoring type lookups. 727e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton std::auto_ptr<ClangASTImporter> m_ast_importer; ///< The importer used to import types on the parser's behalf. 72847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan TargetInfo m_target_info; ///< Basic information about the target. 729bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton private: 730bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton DISALLOW_COPY_AND_ASSIGN (ParserVars); 731aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan }; 732aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 733aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan std::auto_ptr<ParserVars> m_parser_vars; 734aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 735aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 736aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Activate parser-specific variables 737aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 738427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 739427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton EnableParserVars() 740aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 741aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan if (!m_parser_vars.get()) 742d7d3af7201c7aed2ddd0ade31ae5d3543994c55bStephen Wilson m_parser_vars.reset(new ParserVars); 743aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 744aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 745aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 746aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Deallocate parser-specific variables 747aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 748427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 749427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DisableParserVars() 750aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 751aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_parser_vars.reset(); 752aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 753aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 754aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 755aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// The following values contain layout information for the materialized 756aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// struct, but are not specific to a single materialization 757aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 758aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan struct StructVars { 759aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan StructVars() : 760aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_alignment(0), 761aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_size(0), 762aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_laid_out(false), 763aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_result_name(), 764aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_object_pointer_type(NULL, NULL) 765aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 766aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 767aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 768aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan off_t m_struct_alignment; ///< The alignment of the struct in bytes. 769aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan size_t m_struct_size; ///< The size of the struct in bytes. 770aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean 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). 771aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan ConstString m_result_name; ///< The name of the result variable ($1, for example) 772aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan TypeFromUser m_object_pointer_type; ///< The type of the "this" variable, if one exists 773aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan }; 774aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 775aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan std::auto_ptr<StructVars> m_struct_vars; 776aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 777aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 778aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Activate struct variables 779aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 780427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 781427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton EnableStructVars() 782aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 783aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan if (!m_struct_vars.get()) 784aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_vars.reset(new struct StructVars); 785aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 786aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 787aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 788aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Deallocate struct variables 789aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 790427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 791427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DisableStructVars() 792aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 793aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_vars.reset(); 794aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 795aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 796aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 797aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// The following values refer to a specific materialization of the 798aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// structure in a process 799aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 800aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan struct MaterialVars { 801aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan MaterialVars() : 8022bc9eb3ba78efc64a273729b480bafc3bbaa433aJohnny Chen m_allocated_area(0), 8032bc9eb3ba78efc64a273729b480bafc3bbaa433aJohnny Chen m_materialized_location(0) 804aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 805aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 806aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 807aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan Process *m_process; ///< The process that the struct is materialized into. 808aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean 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. 809aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan lldb::addr_t m_materialized_location; ///< The address at which the struct is placed. Falls inside the allocated area. 810aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan }; 811aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 812aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan std::auto_ptr<MaterialVars> m_material_vars; 813aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 814aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 815aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Activate materialization-specific variables 816aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 817427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 818427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton EnableMaterialVars() 819aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 820aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan if (!m_material_vars.get()) 821aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_material_vars.reset(new struct MaterialVars); 822aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 823aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 824aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 825aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Deallocate materialization-specific variables 826aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 827427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 828427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DisableMaterialVars() 829aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 830aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_material_vars.reset(); 831aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 832aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 833a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 83416b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// [Used by ClangASTSource] Find all entities matching a given name, 83516b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// using a NameSearchContext to make Decls for them. 83616b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// 83716b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// @param[in] context 83816b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// The NameSearchContext that can construct Decls for this name. 83916b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// 84016b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// @param[in] module 84116b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// If non-NULL, the module to query. 84216b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// 84394cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// @param[in] namespace_decl 84494cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// If valid and module is non-NULL, the parent namespace. 84516b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// 84616b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// @param[in] name 84716b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// The name as a plain C string. The NameSearchContext contains 84816b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// a DeclarationName for the name so at first the name may seem 84916b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// redundant, but ClangExpressionDeclMap operates in RTTI land so 85016b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// it can't access DeclarationName. 85116b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// 85216b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// @return 85316b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan /// True on success; false otherwise. 85416b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan //------------------------------------------------------------------ 85516b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan void 85616b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan FindExternalVisibleDecls (NameSearchContext &context, 85716b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan lldb::ModuleSP module, 85803f64ca626d4dc0488e6acfe7023e4e376b4df30Sean Callanan ClangNamespaceDecl &namespace_decl, 85916b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan const ConstString &name); 86016b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan 86116b53ab189392cb30056ce1bbc24202cb935bf15Sean Callanan //------------------------------------------------------------------ 862cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// Given a stack frame, find a variable that matches the given name and 863cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// type. We need this for expression re-use; we may not always get the 864cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// same lldb::Variable back, and we want the expression to work wherever 865cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// it can. Returns the variable defined in the tightest scope. 866a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 867cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// @param[in] frame 868cc0746247880e9c87711031ce8a535544f4499d7Sean Callanan /// The stack frame to use as a basis for finding the variable. 869a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 870a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] name 871a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The name as a plain C string. 872a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 873a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] type 874a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The required type for the variable. This function may be called 875a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// during parsing, in which case we don't know its type; hence the 876a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// default. 877a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 878a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 879a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The LLDB Variable found, or NULL if none was found. 880a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 881696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan lldb::VariableSP 882427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton FindVariableInScope (StackFrame &frame, 883427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const ConstString &name, 884427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton TypeFromUser *type = NULL); 885336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan 886a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 887819749647b1605f75753f625050cb240292c08b0Sean Callanan /// Given a target, find a data symbol that has the given name. 888819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 889819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] target 890819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The target to use as the basis for the search. 891819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 8920eca1a7136ec5a48d8cf97decf157dc04c93512aSean Callanan /// @param[in] module 8930eca1a7136ec5a48d8cf97decf157dc04c93512aSean Callanan /// If non-NULL, the module to query. 8940eca1a7136ec5a48d8cf97decf157dc04c93512aSean Callanan /// 895819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] name 896819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The name as a plain C string. 897819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 8980eca1a7136ec5a48d8cf97decf157dc04c93512aSean Callanan /// @param[in] namespace_decl 8990eca1a7136ec5a48d8cf97decf157dc04c93512aSean Callanan /// If valid and module is non-NULL, the parent namespace. 9000eca1a7136ec5a48d8cf97decf157dc04c93512aSean Callanan /// 901819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @return 902819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The LLDB Symbol found, or NULL if none was found. 903819749647b1605f75753f625050cb240292c08b0Sean Callanan //--------------------------------------------------------- 904819749647b1605f75753f625050cb240292c08b0Sean Callanan Symbol * 905819749647b1605f75753f625050cb240292c08b0Sean Callanan FindGlobalDataSymbol (Target &target, 9060eca1a7136ec5a48d8cf97decf157dc04c93512aSean Callanan lldb::ModuleSP &module, 9070eca1a7136ec5a48d8cf97decf157dc04c93512aSean Callanan const ConstString &name, 9080eca1a7136ec5a48d8cf97decf157dc04c93512aSean Callanan ClangNamespaceDecl *namespace_decl); 909819749647b1605f75753f625050cb240292c08b0Sean Callanan 910819749647b1605f75753f625050cb240292c08b0Sean Callanan //------------------------------------------------------------------ 91147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// Given a target, find a variable that matches the given name and 91247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// type. 91347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 91447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] target 91547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The target to use as a basis for finding the variable. 91647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 91794cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// @param[in] module 91894cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// If non-NULL, the module to search. 91994cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// 92047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] name 92147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The name as a plain C string. 92247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 92394cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// @param[in] namespace_decl 92494cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// If non-NULL and module is non-NULL, the parent namespace. 92594cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// 92647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] type 92747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The required type for the variable. This function may be called 92847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// during parsing, in which case we don't know its type; hence the 92947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// default. 93047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 93147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 93247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The LLDB Variable found, or NULL if none was found. 93347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 93447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb::VariableSP 93547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan FindGlobalVariable (Target &target, 93694cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan lldb::ModuleSP &module, 93794cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan const ConstString &name, 93894cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan ClangNamespaceDecl *namespace_decl, 93947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan TypeFromUser *type = NULL); 94047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 94147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 942a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Get the value of a variable in a given execution context and return 943a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// the associated Types if needed. 944a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 945a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 946a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context to look for the variable in. 947a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 948a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] var 949a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The variable to evaluate. 950a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 951a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] parser_ast_context 952a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The AST context of the parser, to store the found type in. 953a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 954a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] found_type 955a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The type of the found value, as it was found in the user process. 956a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// This is only useful when the variable is being inspected on behalf 957a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// of the parser, hence the default. 958a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 959a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] parser_type 960a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The type of the found value, as it was copied into the parser's 961a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// AST context. This is only useful when the variable is being 962a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// inspected on behalf of the parser, hence the default. 963a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 964a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] decl 965a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Decl to be looked up. 966a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 967a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 968a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The LLDB Value for the variable. 969a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 970427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Value * 971427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetVariableValue (ExecutionContext &exe_ctx, 9724a07832dc5028af55cacf247bedad9933bf8afdcSean Callanan lldb::VariableSP &var, 973427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton clang::ASTContext *parser_ast_context, 974427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton TypeFromUser *found_type = NULL, 975427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton TypeFromParser *parser_type = NULL); 976336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan 977a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 978a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given LLDB 979a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Variable, and put it in the Tuple list. 980a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 981a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 982a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 983a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 984a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] var 985a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The LLDB Variable that needs a Decl. 986a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 987427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 988427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneVariable (NameSearchContext &context, 989696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan lldb::VariableSP var); 990a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 991a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 992a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 993819749647b1605f75753f625050cb240292c08b0Sean Callanan /// persistent variable, and put it in the list of found entities. 994a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 995a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 996a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 997a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 998a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] pvar 999a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The persistent variable that needs a Decl. 1000a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1001427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1002427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneVariable (NameSearchContext &context, 1003427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP &pvar_sp); 1004a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 1005a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1006819749647b1605f75753f625050cb240292c08b0Sean Callanan /// Use the NameSearchContext to generate a Decl for the given LLDB 1007819749647b1605f75753f625050cb240292c08b0Sean Callanan /// symbol (treated as a variable), and put it in the list of found 1008819749647b1605f75753f625050cb240292c08b0Sean Callanan /// entities. 1009819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 1010819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] context 1011819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The NameSearchContext to use when constructing the Decl. 1012819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 1013819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] var 1014819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The LLDB Variable that needs a Decl. 1015819749647b1605f75753f625050cb240292c08b0Sean Callanan //------------------------------------------------------------------ 1016819749647b1605f75753f625050cb240292c08b0Sean Callanan void 1017819749647b1605f75753f625050cb240292c08b0Sean Callanan AddOneGenericVariable (NameSearchContext &context, 1018819749647b1605f75753f625050cb240292c08b0Sean Callanan Symbol &symbol); 1019819749647b1605f75753f625050cb240292c08b0Sean Callanan 1020819749647b1605f75753f625050cb240292c08b0Sean Callanan //------------------------------------------------------------------ 1021a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 1022a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// function. (Functions are not placed in the Tuple list.) Can 1023a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// handle both fully typed functions and generic functions. 1024a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1025a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 1026a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 1027a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1028a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] fun 1029a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Function that needs to be created. If non-NULL, this is 1030a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// a fully-typed function. 1031a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1032a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] sym 1033a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Symbol that corresponds to a function that needs to be 1034a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// created with generic type (unitptr_t foo(...)). 1035a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1036427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1037427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneFunction (NameSearchContext &context, 1038427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Function *fun, 1039427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Symbol *sym); 1040a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 1041a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1042a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 10431ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// register. 10441ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 10451ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] context 10461ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The NameSearchContext to use when constructing the Decl. 10471ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 10481ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] reg_info 10491ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The information corresponding to that register. 10501ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan //------------------------------------------------------------------ 1051427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1052427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneRegister (NameSearchContext &context, 1053b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton const RegisterInfo *reg_info); 10541ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan 10551ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan //------------------------------------------------------------------ 10561ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 1057a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// type. (Types are not placed in the Tuple list.) 1058a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1059a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 1060a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 1061a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1062a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] type 10633c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// The type that needs to be created. 10643c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// 10653c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// @param[in] add_method 10668de27c761a22187ef63fb60000894be163e7285fGreg Clayton /// True if a method with signature void $__lldb_expr(void*) 10673c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// should be added to the C++ class type passed in 1068a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1069427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1070427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneType (NameSearchContext &context, 1071427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton TypeFromUser &type, 1072427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool add_method = false); 1073810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan 1074a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1075a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Actually do the task of materializing or dematerializing the struct. 1076a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Since both tasks are very similar, although ClangExpressionDeclMap 1077a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// exposes two functions to the outside, both call DoMaterialize. 1078a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1079a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] dematerialize 1080a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the struct is to be dematerialized; false if it is to 1081a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// be materialized. 1082a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1083a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 1084a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context to use. 1085a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 10860ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// @param[in] stack_frame_top, stack_frame_bottom 10870ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// If not LLDB_INVALID_ADDRESS, the bounds for the stack frame 10880ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// in which the expression ran. A result whose address falls 10890ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// inside this stack frame is dematerialized as a value 10900ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// requiring rematerialization. 10910ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// 1092a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] result 1093a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// If the struct is being dematerialized, a pointer into which the 1094a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// location of the result persistent variable is placed. If not, 1095a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// NULL. 1096a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1097a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] err 1098a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 1099a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// (de)materializing the struct. 1100a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1101a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 1102a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 1103a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1104427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 1105427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DoMaterialize (bool dematerialize, 1106427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ExecutionContext &exe_ctx, 11070ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_top, 11080ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_bottom, 1109427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP *result_sp_ptr, 1110427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &err); 1111aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 1112aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 1113aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Clean up the state required to dematerialize the variable. 1114aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 1115427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 1116427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DidDematerialize (); 1117f328c9ffe0bb00f48601027ec86dbdf238b42c2aSean Callanan 1118a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1119a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Actually do the task of materializing or dematerializing a persistent 1120a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// variable. 1121a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1122a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] dematerialize 1123a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the variable is to be dematerialized; false if it is to 1124a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// be materialized. 1125a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1126a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 1127a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context to use. 1128a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1129427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton /// @param[in] var_sp 1130427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton /// The persistent variable to materialize 1131a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1132a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] addr 1133a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The address at which to materialize the variable. 1134a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 11350ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// @param[in] stack_frame_top, stack_frame_bottom 11360ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// If not LLDB_INVALID_ADDRESS, the bounds for the stack frame 11370ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// in which the expression ran. A result whose address falls 11380ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// inside this stack frame is dematerialized as a value 11390ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// requiring rematerialization. 11400ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan /// 1141a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] err 1142a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 1143a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// (de)materializing the persistent variable. 1144a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1145a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 1146a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 1147a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1148427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 1149427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DoMaterializeOnePersistentVariable (bool dematerialize, 1150427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ExecutionContext &exe_ctx, 1151427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP &var_sp, 1152427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::addr_t addr, 11530ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_top, 11540ddf806dd9e71637846bf0ad46e1b2df7d02cbceSean Callanan lldb::addr_t stack_frame_bottom, 1155427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &err); 1156a48fe1637ec6a381e500633c087f76662e364c20Sean Callanan 1157a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1158a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Actually do the task of materializing or dematerializing a 1159a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// variable. 1160a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1161a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] dematerialize 1162a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the variable is to be dematerialized; false if it is to 1163a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// be materialized. 1164a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1165a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 1166a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context to use. 1167a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1168a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] sym_ctx 1169a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The symbol context to use (for looking the variable up). 1170a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 11716a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// @param[in] expr_var 11726a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// The entity that the expression parser uses for the variable. 11736a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// In case the variable needs to be copied into the target's 11746a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// memory, this location is stored in the variable during 11756a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// materialization and cleared when it is demateralized. 1176a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1177a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] addr 1178a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The address at which to materialize the variable. 1179a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1180a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] err 1181a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// An Error to populate with any messages related to 1182a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// (de)materializing the persistent variable. 1183a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1184a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 1185a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 1186a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 1187427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 1188427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DoMaterializeOneVariable (bool dematerialize, 1189427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ExecutionContext &exe_ctx, 1190427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const SymbolContext &sym_ctx, 11916a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan lldb::ClangExpressionVariableSP &expr_var, 1192427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::addr_t addr, 1193427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &err); 11941ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan 11951ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan //------------------------------------------------------------------ 11961ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// Actually do the task of materializing or dematerializing a 11971ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// register variable. 11981ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 11991ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] dematerialize 12001ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// True if the variable is to be dematerialized; false if it is to 12011ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// be materialized. 12021ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12031ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] exe_ctx 12041ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The execution context to use. 12051ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12061ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] reg_ctx 12071ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The register context to use. 12081ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12091ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] reg_info 12101ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The information for the register to read/write. 12111ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12121ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] addr 12131ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The address at which to materialize the variable. 12141ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12151ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] err 12161ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// An Error to populate with any messages related to 12171ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// (de)materializing the persistent variable. 12181ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 12191ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @return 12201ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// True on success; false otherwise. 12211ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan //------------------------------------------------------------------ 1222427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 1223427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DoMaterializeOneRegister (bool dematerialize, 1224427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ExecutionContext &exe_ctx, 1225427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton RegisterContext ®_ctx, 1226b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton const RegisterInfo ®_info, 1227427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::addr_t addr, 1228427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Error &err); 1229ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan 1230ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan //------------------------------------------------------------------ 1231ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// A wrapper for ClangASTContext::CopyType that sets a flag that 1232ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// indicates that we should not respond to queries during import. 1233ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// 1234ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// @param[in] dest_context 1235ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// The target AST context, typically the parser's AST context. 1236ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// 1237ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// @param[in] source_context 1238ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// The source AST context, typically the AST context of whatever 1239ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// symbol file the type was found in. 1240ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// 1241ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// @param[in] clang_type 1242ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// The source type. 1243ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// 1244ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// @return 1245ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan /// The imported type. 1246ee8fc726f2eff9c3b3db7f00f9fddbaa9735e045Sean Callanan //------------------------------------------------------------------ 1247427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void * 1248427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GuardedCopyType (clang::ASTContext *dest_context, 1249427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton clang::ASTContext *source_context, 1250427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void *clang_type); 125124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 125224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 125324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 125424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 125524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_ClangExpressionDeclMap_h_ 1256