LLDB mainline
SymbolFile.h
Go to the documentation of this file.
1//===-- SymbolFile.h --------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_SYMBOL_SYMBOLFILE_H
10#define LLDB_SYMBOL_SYMBOLFILE_H
11
12#include "lldb/Core/Module.h"
22#include "lldb/Symbol/Type.h"
28#include "lldb/lldb-private.h"
29#include "llvm/ADT/DenseSet.h"
30#include "llvm/ADT/SmallSet.h"
31#include "llvm/Support/Errc.h"
32
33#include <mutex>
34#include <optional>
35#include <unordered_map>
36
37#if defined(LLDB_CONFIGURATION_DEBUG)
38#define ASSERT_MODULE_LOCK(expr) (expr->AssertModuleLock())
39#else
40#define ASSERT_MODULE_LOCK(expr) ((void)0)
41#endif
42
43namespace lldb_private {
44
45/// Provides public interface for all SymbolFiles. Any protected
46/// virtual members should go into SymbolFileCommon; most SymbolFile
47/// implementations should inherit from SymbolFileCommon to override
48/// the behaviors except SymbolFileOnDemand which inherits
49/// public interfaces from SymbolFile and forward to underlying concrete
50/// SymbolFile implementation.
52 /// LLVM RTTI support.
53 static char ID;
54
55public:
56 /// LLVM RTTI support.
57 /// \{
58 virtual bool isA(const void *ClassID) const { return ClassID == &ID; }
59 static bool classof(const SymbolFile *obj) { return obj->isA(&ID); }
60 /// \}
61
62 // Symbol file ability bits.
63 //
64 // Each symbol file can claim to support one or more symbol file abilities.
65 // These get returned from SymbolFile::GetAbilities(). These help us to
66 // determine which plug-in will be best to load the debug information found
67 // in files.
68 enum Abilities {
69 CompileUnits = (1u << 0),
70 LineTables = (1u << 1),
71 Functions = (1u << 2),
72 Blocks = (1u << 3),
73 GlobalVariables = (1u << 4),
74 LocalVariables = (1u << 5),
75 VariableTypes = (1u << 6),
76 kAllAbilities = ((1u << 7) - 1u)
77 };
78
79 static SymbolFile *FindPlugin(lldb::ObjectFileSP objfile_sp);
80
81 // Constructors and Destructors
82 SymbolFile() = default;
83
84 ~SymbolFile() override = default;
85
86 /// SymbolFileOnDemand class overrides this to return the underlying
87 /// backing SymbolFile implementation that loads on-demand.
88 virtual SymbolFile *GetBackingSymbolFile() { return this; }
89
90 /// Get a mask of what this symbol file supports for the object file
91 /// that it was constructed with.
92 ///
93 /// Each symbol file gets to respond with a mask of abilities that
94 /// it supports for each object file. This happens when we are
95 /// trying to figure out which symbol file plug-in will get used
96 /// for a given object file. The plug-in that responds with the
97 /// best mix of "SymbolFile::Abilities" bits set, will get chosen to
98 /// be the symbol file parser. This allows each plug-in to check for
99 /// sections that contain data a symbol file plug-in would need. For
100 /// example the DWARF plug-in requires DWARF sections in a file that
101 /// contain debug information. If the DWARF plug-in doesn't find
102 /// these sections, it won't respond with many ability bits set, and
103 /// we will probably fall back to the symbol table SymbolFile plug-in
104 /// which uses any information in the symbol table. Also, plug-ins
105 /// might check for some specific symbols in a symbol table in the
106 /// case where the symbol table contains debug information (STABS
107 /// and COFF). Not a lot of work should happen in these functions
108 /// as the plug-in might not get selected due to another plug-in
109 /// having more abilities. Any initialization work should be saved
110 /// for "void SymbolFile::InitializeObject()" which will get called
111 /// on the SymbolFile object with the best set of abilities.
112 ///
113 /// \return
114 /// A uint32_t mask containing bits from the SymbolFile::Abilities
115 /// enumeration. Any bits that are set represent an ability that
116 /// this symbol plug-in can parse from the object file.
117 virtual uint32_t GetAbilities() = 0;
118 virtual uint32_t CalculateAbilities() = 0;
119
120 /// Symbols file subclasses should override this to return the Module that
121 /// owns the TypeSystem that this symbol file modifies type information in.
122 virtual std::recursive_mutex &GetModuleMutex() const;
123
124 /// Initialize the SymbolFile object.
125 ///
126 /// The SymbolFile object with the best set of abilities (detected
127 /// in "uint32_t SymbolFile::GetAbilities()) will have this function
128 /// called if it is chosen to parse an object file. More complete
129 /// initialization can happen in this function which will get called
130 /// prior to any other functions in the SymbolFile protocol.
131 virtual void InitializeObject() {}
132
133 /// Whether debug info will be loaded or not.
134 ///
135 /// It will be true for most implementations except SymbolFileOnDemand.
136 virtual bool GetLoadDebugInfoEnabled() { return true; }
137
138 /// Specify debug info should be loaded.
139 ///
140 /// It will be no-op for most implementations except SymbolFileOnDemand.
141 virtual void SetLoadDebugInfoEnabled() {}
142
143 // Compile Unit function calls
144 // Approach 1 - iterator
145 virtual uint32_t GetNumCompileUnits() = 0;
146 virtual lldb::CompUnitSP GetCompileUnitAtIndex(uint32_t idx) = 0;
147
148 virtual Symtab *GetSymtab(bool can_create = true) = 0;
149
151 /// Return the Xcode SDK comp_unit was compiled against.
152 virtual XcodeSDK ParseXcodeSDK(CompileUnit &comp_unit) { return {}; }
153
154 /// This function exists because SymbolFileDWARFDebugMap may extra compile
155 /// units which aren't exposed as "real" compile units. In every other
156 /// case this function should behave identically as ParseLanguage.
157 virtual llvm::SmallSet<lldb::LanguageType, 4>
159 llvm::SmallSet<lldb::LanguageType, 4> langs;
160 langs.insert(ParseLanguage(comp_unit));
161 return langs;
162 }
163
164 virtual size_t ParseFunctions(CompileUnit &comp_unit) = 0;
165 virtual bool ParseLineTable(CompileUnit &comp_unit) = 0;
166 virtual bool ParseDebugMacros(CompileUnit &comp_unit) = 0;
167
168 /// Apply a lambda to each external lldb::Module referenced by this
169 /// \p comp_unit. Recursively also descends into the referenced external
170 /// modules of any encountered compilation unit.
171 ///
172 /// This function can be used to traverse Clang -gmodules debug
173 /// information, which is stored in DWARF files separate from the
174 /// object files.
175 ///
176 /// \param comp_unit
177 /// When this SymbolFile consists of multiple auxilliary
178 /// SymbolFiles, for example, a Darwin debug map that references
179 /// multiple .o files, comp_unit helps choose the auxilliary
180 /// file. In most other cases comp_unit's symbol file is
181 /// identical with *this.
182 ///
183 /// \param[in] lambda
184 /// The lambda that should be applied to every function. The lambda can
185 /// return true if the iteration should be aborted earlier.
186 ///
187 /// \param visited_symbol_files
188 /// A set of SymbolFiles that were already visited to avoid
189 /// visiting one file more than once.
190 ///
191 /// \return
192 /// If the lambda early-exited, this function returns true to
193 /// propagate the early exit.
195 lldb_private::CompileUnit &comp_unit,
196 llvm::DenseSet<lldb_private::SymbolFile *> &visited_symbol_files,
197 llvm::function_ref<bool(Module &)> lambda) {
198 return false;
199 }
200 virtual bool ParseSupportFiles(CompileUnit &comp_unit,
201 SupportFileList &support_files) = 0;
202 virtual size_t ParseTypes(CompileUnit &comp_unit) = 0;
203 virtual bool ParseIsOptimized(CompileUnit &comp_unit) { return false; }
204
205 virtual bool
207 std::vector<SourceModule> &imported_modules) = 0;
208 virtual size_t ParseBlocksRecursive(Function &func) = 0;
209 virtual size_t ParseVariablesForContext(const SymbolContext &sc) = 0;
210 virtual Type *ResolveTypeUID(lldb::user_id_t type_uid) = 0;
211
212 /// The characteristics of an array type.
213 struct ArrayInfo {
214 int64_t first_index = 0;
215
216 /// Each entry belongs to a distinct DW_TAG_subrange_type.
217 /// For multi-dimensional DW_TAG_array_types we would have
218 /// an entry for each dimension. An entry represents the
219 /// optional element count of the subrange.
220 ///
221 /// The order of entries follows the order of the DW_TAG_subrange_type
222 /// children of this DW_TAG_array_type.
223 llvm::SmallVector<std::optional<uint64_t>, 1> element_orders;
224 uint32_t byte_stride = 0;
225 uint32_t bit_stride = 0;
226 };
227 /// If \c type_uid points to an array type, return its characteristics.
228 /// To support variable-length array types, this function takes an
229 /// optional \p ExecutionContext. If \c exe_ctx is non-null, the
230 /// dynamic characteristics for that context are returned.
231 virtual std::optional<ArrayInfo>
233 const lldb_private::ExecutionContext *exe_ctx) = 0;
234
235 virtual bool CompleteType(CompilerType &compiler_type) = 0;
237 virtual CompilerDecl GetDeclForUID(lldb::user_id_t uid) { return {}; }
239 return {};
240 }
244 virtual std::vector<CompilerContext>
246 return {};
247 }
248 virtual uint32_t ResolveSymbolContext(const Address &so_addr,
249 lldb::SymbolContextItem resolve_scope,
250 SymbolContext &sc) = 0;
251
252 /// Get an error that describes why variables might be missing for a given
253 /// symbol context.
254 ///
255 /// If there is an error in the debug information that prevents variables from
256 /// being fetched, this error will get filled in. If there is no debug
257 /// informaiton, no error should be returned. But if there is debug
258 /// information and something prevents the variables from being available a
259 /// valid error should be returned. Valid cases include:
260 /// - compiler option that removes variables (-gline-tables-only)
261 /// - missing external files
262 /// - .dwo files in fission are not accessible or missing
263 /// - .o files on darwin when not using dSYM files that are not accessible
264 /// or missing
265 /// - mismatched exteral files
266 /// - .dwo files in fission where the DWO ID doesn't match
267 /// - .o files on darwin when modification timestamp doesn't match
268 /// - corrupted debug info
269 ///
270 /// \param[in] frame
271 /// The stack frame to use as a basis for the context to check. The frame
272 /// address can be used if there is not debug info due to it not being able
273 /// to be loaded, or if there is a debug info context, like a compile unit,
274 /// or function, it can be used to track down more information on why
275 /// variables are missing.
276 ///
277 /// \returns
278 /// An error specifying why there should have been debug info with variable
279 /// information but the variables were not able to be resolved.
282 if (err.Fail())
284 return err;
285 }
286
287 /// Subclasses will override this function to for GetFrameVariableError().
288 ///
289 /// This allows GetFrameVariableError() to set the member variable
290 /// m_debug_info_had_variable_errors correctly without users having to do it
291 /// manually which is error prone.
293 return Status();
294 }
295 virtual uint32_t
296 ResolveSymbolContext(const SourceLocationSpec &src_location_spec,
297 lldb::SymbolContextItem resolve_scope,
298 SymbolContextList &sc_list);
299
300 virtual void DumpClangAST(Stream &s, llvm::StringRef filter,
301 bool show_colors) {}
302 virtual void FindGlobalVariables(ConstString name,
303 const CompilerDeclContext &parent_decl_ctx,
304 uint32_t max_matches,
305 VariableList &variables);
306 virtual void FindGlobalVariables(const RegularExpression &regex,
307 uint32_t max_matches,
308 VariableList &variables);
309 virtual void FindFunctions(const Module::LookupInfo &lookup_info,
310 const CompilerDeclContext &parent_decl_ctx,
311 bool include_inlines, SymbolContextList &sc_list);
312 virtual void FindFunctions(llvm::ArrayRef<Module::LookupInfo> lookup_infos,
313 const CompilerDeclContext &parent_decl_ctx,
314 bool include_inlines, SymbolContextList &sc_list);
315 virtual void FindFunctions(const RegularExpression &regex,
316 bool include_inlines, SymbolContextList &sc_list);
317
318 /// Find types using a type-matching object that contains all search
319 /// parameters.
320 ///
321 /// \see lldb_private::TypeQuery
322 ///
323 /// \param[in] query
324 /// A type matching object that contains all of the details of the type
325 /// search.
326 ///
327 /// \param[in] results
328 /// Any matching types will be populated into the \a results object using
329 /// TypeMap::InsertUnique(...).
330 virtual void FindTypes(const TypeQuery &query, TypeResults &results) {}
331
332 virtual void
333 GetMangledNamesForFunction(const std::string &scope_qualified_name,
334 std::vector<ConstString> &mangled_names);
335
336 /// Resolves the function corresponding to the specified LLDB function
337 /// call \c label.
338 ///
339 /// \param[in,out] label The FunctionCallLabel to be resolved.
340 ///
341 /// \returns An llvm::Error if the specified \c label couldn't be resolved.
342 /// Returns the resolved function (as a SymbolContext) otherwise.
343 virtual llvm::Expected<SymbolContext>
345 return llvm::createStringError("Not implemented");
346 }
347
349 lldb::TypeClass type_mask,
350 lldb_private::TypeList &type_list) = 0;
351
352 virtual void PreloadSymbols();
353
354 virtual llvm::Expected<lldb::TypeSystemSP>
356
357 /// Finds a namespace of name \ref name and whose parent
358 /// context is \ref parent_decl_ctx.
359 ///
360 /// If \code{.cpp} !parent_decl_ctx.IsValid() \endcode
361 /// then this function will consider all namespaces that
362 /// match the name. If \ref only_root_namespaces is
363 /// true, only consider in the search those DIEs that
364 /// represent top-level namespaces.
365 virtual CompilerDeclContext
366 FindNamespace(ConstString name, const CompilerDeclContext &parent_decl_ctx,
367 bool only_root_namespaces = false) {
368 return CompilerDeclContext();
369 }
370
371 virtual ObjectFile *GetObjectFile() = 0;
372 virtual const ObjectFile *GetObjectFile() const = 0;
374
375 virtual std::vector<std::unique_ptr<CallEdge>>
377 return {};
378 }
379
380 virtual void AddSymbols(Symtab &symtab) {}
381
382 /// Notify the SymbolFile that the file addresses in the Sections
383 /// for this module have been changed.
384 virtual void SectionFileAddressesChanged() = 0;
385
387 virtual ~RegisterInfoResolver(); // anchor
388
389 virtual const RegisterInfo *ResolveName(llvm::StringRef name) const = 0;
391 uint32_t number) const = 0;
392 };
393 virtual lldb::UnwindPlanSP
394 GetUnwindPlan(const Address &address, const RegisterInfoResolver &resolver) {
395 return nullptr;
396 }
397
398 /// Return the number of stack bytes taken up by the parameters to this
399 /// function.
400 virtual llvm::Expected<lldb::addr_t> GetParameterStackSize(Symbol &symbol) {
401 return llvm::createStringError(make_error_code(llvm::errc::not_supported),
402 "Operation not supported.");
403 }
404
405 virtual void Dump(Stream &s) = 0;
406
407 /// Metrics gathering functions
408
409 /// Return the size in bytes of all loaded debug information or total possible
410 /// debug info in the symbol file.
411 ///
412 /// If the debug information is contained in sections of an ObjectFile, then
413 /// this call should add the size of all sections that contain debug
414 /// information. Symbols the symbol tables are not considered debug
415 /// information for this call to make it easy and quick for this number to be
416 /// calculated. If the symbol file is all debug information, the size of the
417 /// entire file should be returned. The default implementation of this
418 /// function will iterate over all sections in a module and add up their
419 /// debug info only section byte sizes.
420 ///
421 /// \param load_all_debug_info
422 /// If true, force loading any symbol files if they are not yet loaded and
423 /// add to the total size. Default to false.
424 ///
425 /// \returns
426 /// Total currently loaded debug info size in bytes
427 virtual uint64_t GetDebugInfoSize(bool load_all_debug_info = false) = 0;
428
429 /// Return the time taken to parse the debug information.
430 ///
431 /// \returns 0.0 if no information has been parsed or if there is
432 /// no computational cost to parsing the debug information.
434
435 /// Return the time it took to index the debug information in the object
436 /// file.
437 ///
438 /// \returns 0.0 if the file doesn't need to be indexed or if it
439 /// hasn't been indexed yet, or a valid duration if it has.
441
442 /// Reset the statistics for the symbol file.
443 virtual void ResetStatistics() {}
444
445 /// Get the additional modules that this symbol file uses to parse debug info.
446 ///
447 /// Some debug info is stored in stand alone object files that are represented
448 /// by unique modules that will show up in the statistics module list. Return
449 /// a list of modules that are not in the target module list that this symbol
450 /// file is currently using so that they can be tracked and assoicated with
451 /// the module in the statistics.
453
454 /// Accessors for the bool that indicates if the debug info index was loaded
455 /// from, or saved to the module index cache.
456 ///
457 /// In statistics it is handy to know if a module's debug info was loaded from
458 /// or saved to the cache. When the debug info index is loaded from the cache
459 /// startup times can be faster. When the cache is enabled and the debug info
460 /// index is saved to the cache, debug sessions can be slower. These accessors
461 /// can be accessed by the statistics and emitted to help track these costs.
462 /// \{
463 virtual bool GetDebugInfoIndexWasLoadedFromCache() const = 0;
465 virtual bool GetDebugInfoIndexWasSavedToCache() const = 0;
467 /// \}
468
469 /// Accessors for the bool that indicates if there was debug info, but errors
470 /// stopped variables from being able to be displayed correctly. See
471 /// GetFrameVariableError() for details on what are considered errors.
472 virtual bool GetDebugInfoHadFrameVariableErrors() const = 0;
474
475 /// Return true if separate debug info files are supported and this function
476 /// succeeded, false otherwise.
477 ///
478 /// \param[out] d
479 /// If this function succeeded, then this will be a dictionary that
480 /// contains the keys "type", "symfile", and "separate-debug-info-files".
481 /// "type" can be used to assume the structure of each object in
482 /// "separate-debug-info-files".
483 /// \param errors_only
484 /// If true, then only return separate debug info files that encountered
485 /// errors during loading. If false, then return all expected separate
486 /// debug info files, regardless of whether they were successfully loaded.
487 /// \param load_all_debug_info
488 /// If true, force loading any symbol files if they are not yet loaded.
490 bool errors_only,
491 bool load_all_debug_info = false) {
492 return false;
493 };
494
495 /// Retrieves statistics about DWO files associated with this symbol file.
496 /// This function returns a DWOStats struct containing:
497 /// - The number of successfully loaded/parsed DWO files.
498 /// - The total number of DWO files encountered.
499 /// - The number of DWO CUs that failed to load due to errors.
500 /// If this symbol file does not support DWO files, all counts will be zero.
501 ///
502 /// \returns
503 /// A DWOStats struct with loaded, total, and error counts for DWO files.
504 virtual DWOStats GetDwoStats() { return {}; }
505
506 virtual lldb::TypeSP
508 std::optional<uint64_t> byte_size, SymbolContextScope *context,
509 lldb::user_id_t encoding_uid,
510 Type::EncodingDataType encoding_uid_type, const Declaration &decl,
511 const CompilerType &compiler_qual_type,
512 Type::ResolveState compiler_type_resolve_state,
513 uint32_t opaque_payload = 0) = 0;
514
515 virtual lldb::TypeSP CopyType(const lldb::TypeSP &other_type) = 0;
516
517 /// Returns a map of compilation unit to the compile option arguments
518 /// associated with that compilation unit.
519 std::unordered_map<lldb::CompUnitSP, Args> GetCompileOptions() {
520 std::unordered_map<lldb::CompUnitSP, Args> args;
521 GetCompileOptions(args);
522 return args;
523 }
524
525 std::string GetObjectName() const;
526
527protected:
528 void AssertModuleLock();
529
530 virtual void GetCompileOptions(
531 std::unordered_map<lldb::CompUnitSP, lldb_private::Args> &args) {}
532
533private:
534 SymbolFile(const SymbolFile &) = delete;
535 const SymbolFile &operator=(const SymbolFile &) = delete;
536};
537
538/// Containing protected virtual methods for child classes to override.
539/// Most actual SymbolFile implementations should inherit from this class.
541 /// LLVM RTTI support.
542 static char ID;
543
544public:
545 /// LLVM RTTI support.
546 /// \{
547 bool isA(const void *ClassID) const override {
548 return ClassID == &ID || SymbolFile::isA(ClassID);
549 }
550 static bool classof(const SymbolFileCommon *obj) { return obj->isA(&ID); }
551 /// \}
552
553 // Constructors and Destructors
555 : m_objfile_sp(std::move(objfile_sp)) {}
556
557 ~SymbolFileCommon() override = default;
558
559 uint32_t GetAbilities() override {
563 }
564 return m_abilities;
565 }
566
567 Symtab *GetSymtab(bool can_create = true) override;
568
569 ObjectFile *GetObjectFile() override { return m_objfile_sp.get(); }
570 const ObjectFile *GetObjectFile() const override {
571 return m_objfile_sp.get();
572 }
573 ObjectFile *GetMainObjectFile() override;
574
575 /// Notify the SymbolFile that the file addresses in the Sections
576 /// for this module have been changed.
577 void SectionFileAddressesChanged() override;
578
579 // Compile Unit function calls
580 // Approach 1 - iterator
581 uint32_t GetNumCompileUnits() override;
582 lldb::CompUnitSP GetCompileUnitAtIndex(uint32_t idx) override;
583
584 llvm::Expected<lldb::TypeSystemSP>
586
587 void Dump(Stream &s) override;
588
589 uint64_t GetDebugInfoSize(bool load_all_debug_info = false) override;
590
597 bool GetDebugInfoIndexWasSavedToCache() const override {
599 }
609
610 /// This function is used to create types that belong to a SymbolFile. The
611 /// symbol file will own a strong reference to the type in an internal type
612 /// list.
614 std::optional<uint64_t> byte_size,
615 SymbolContextScope *context,
616 lldb::user_id_t encoding_uid,
617 Type::EncodingDataType encoding_uid_type,
618 const Declaration &decl,
619 const CompilerType &compiler_qual_type,
620 Type::ResolveState compiler_type_resolve_state,
621 uint32_t opaque_payload = 0) override {
622 lldb::TypeSP type_sp (new Type(
623 uid, this, name, byte_size, context, encoding_uid,
624 encoding_uid_type, decl, compiler_qual_type,
625 compiler_type_resolve_state, opaque_payload));
626 m_type_list.Insert(type_sp);
627 return type_sp;
628 }
629
630 lldb::TypeSP CopyType(const lldb::TypeSP &other_type) override {
631 // Make sure the real symbol file matches when copying types.
632 if (GetBackingSymbolFile() != other_type->GetSymbolFile())
633 return lldb::TypeSP();
634 lldb::TypeSP type_sp(new Type(*other_type));
635 m_type_list.Insert(type_sp);
636 return type_sp;
637 }
638
639protected:
640 virtual uint32_t CalculateNumCompileUnits() = 0;
641 virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t idx) = 0;
642 virtual TypeList &GetTypeList() { return m_type_list; }
643 void SetCompileUnitAtIndex(uint32_t idx, const lldb::CompUnitSP &cu_sp);
644
645 lldb::ObjectFileSP m_objfile_sp; // Keep a reference to the object file in
646 // case it isn't the same as the module
647 // object file (debug symbols in a separate
648 // file)
649 std::optional<std::vector<lldb::CompUnitSP>> m_compile_units;
651 uint32_t m_abilities = 0;
655 /// Set to true if any variable feteching errors have been found when calling
656 /// GetFrameVariableError(). This will be emitted in the "statistics dump"
657 /// information for a module.
659
660private:
663
664 /// Do not use m_symtab directly, as it may be freed. Use GetSymtab()
665 /// to access it instead.
666 Symtab *m_symtab = nullptr;
667};
668
669} // namespace lldb_private
670
671#endif // LLDB_SYMBOL_SYMBOLFILE_H
A section + offset based address class.
Definition Address.h:62
A class that describes a compilation unit.
Definition CompileUnit.h:43
Represents a generic declaration context in a program.
Represents a generic declaration such as a function declaration.
Generic representation of a type in a programming language.
A uniqued constant string class.
Definition ConstString.h:40
A class that describes the declaration location of a lldb object.
Definition Declaration.h:24
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
A class that describes a function.
Definition Function.h:400
A collection class for Module objects.
Definition ModuleList.h:104
A class that encapsulates name lookup information.
Definition Module.h:908
A class that describes an executable image and its associated object and symbol files.
Definition Module.h:90
A plug-in interface definition class for object file parsers.
Definition ObjectFile.h:46
"lldb/Core/SourceLocationSpec.h" A source location specifier class.
This base class provides an interface to stack frames.
Definition StackFrame.h:44
std::chrono::duration< double > Duration
Definition Statistics.h:37
An error handling class.
Definition Status.h:118
bool Fail() const
Test for error condition.
Definition Status.cpp:294
A stream class that can stream formatted output to a file.
Definition Stream.h:28
A list of support files for a CompileUnit.
Defines a list of symbol context objects.
"lldb/Symbol/SymbolContextScope.h" Inherit from this if your object is part of a symbol context and c...
Defines a symbol context baton that can be handed other debug core functions.
const SymbolFileCommon & operator=(const SymbolFileCommon &)=delete
~SymbolFileCommon() override=default
bool GetDebugInfoHadFrameVariableErrors() const override
Accessors for the bool that indicates if there was debug info, but errors stopped variables from bein...
Definition SymbolFile.h:603
void SetDebugInfoIndexWasLoadedFromCache() override
Definition SymbolFile.h:594
bool GetDebugInfoIndexWasSavedToCache() const override
Definition SymbolFile.h:597
lldb::CompUnitSP GetCompileUnitAtIndex(uint32_t idx) override
ObjectFile * GetObjectFile() override
Definition SymbolFile.h:569
std::optional< std::vector< lldb::CompUnitSP > > m_compile_units
Definition SymbolFile.h:649
virtual TypeList & GetTypeList()
Definition SymbolFile.h:642
lldb::ObjectFileSP m_objfile_sp
Definition SymbolFile.h:645
bool isA(const void *ClassID) const override
LLVM RTTI support.
Definition SymbolFile.h:547
void SetDebugInfoIndexWasSavedToCache() override
Definition SymbolFile.h:600
virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t idx)=0
ObjectFile * GetMainObjectFile() override
bool m_debug_info_had_variable_errors
Set to true if any variable feteching errors have been found when calling GetFrameVariableError().
Definition SymbolFile.h:658
Symtab * m_symtab
Do not use m_symtab directly, as it may be freed.
Definition SymbolFile.h:666
static char ID
LLVM RTTI support.
Definition SymbolFile.h:542
void SetCompileUnitAtIndex(uint32_t idx, const lldb::CompUnitSP &cu_sp)
SymbolFileCommon(lldb::ObjectFileSP objfile_sp)
Definition SymbolFile.h:554
void SetDebugInfoHadFrameVariableErrors() override
Definition SymbolFile.h:606
static bool classof(const SymbolFileCommon *obj)
Definition SymbolFile.h:550
const ObjectFile * GetObjectFile() const override
Definition SymbolFile.h:570
Symtab * GetSymtab(bool can_create=true) override
uint32_t GetAbilities() override
Get a mask of what this symbol file supports for the object file that it was constructed with.
Definition SymbolFile.h:559
llvm::Expected< lldb::TypeSystemSP > GetTypeSystemForLanguage(lldb::LanguageType language) override
bool GetDebugInfoIndexWasLoadedFromCache() const override
Accessors for the bool that indicates if the debug info index was loaded from, or saved to the module...
Definition SymbolFile.h:591
uint32_t GetNumCompileUnits() override
SymbolFileCommon(const SymbolFileCommon &)=delete
lldb::TypeSP CopyType(const lldb::TypeSP &other_type) override
Definition SymbolFile.h:630
void SectionFileAddressesChanged() override
Notify the SymbolFile that the file addresses in the Sections for this module have been changed.
virtual uint32_t CalculateNumCompileUnits()=0
void Dump(Stream &s) override
lldb::TypeSP MakeType(lldb::user_id_t uid, ConstString name, std::optional< uint64_t > byte_size, SymbolContextScope *context, lldb::user_id_t encoding_uid, Type::EncodingDataType encoding_uid_type, const Declaration &decl, const CompilerType &compiler_qual_type, Type::ResolveState compiler_type_resolve_state, uint32_t opaque_payload=0) override
This function is used to create types that belong to a SymbolFile.
Definition SymbolFile.h:613
uint64_t GetDebugInfoSize(bool load_all_debug_info=false) override
Metrics gathering functions.
Provides public interface for all SymbolFiles.
Definition SymbolFile.h:51
virtual lldb::TypeSP CopyType(const lldb::TypeSP &other_type)=0
virtual llvm::SmallSet< lldb::LanguageType, 4 > ParseAllLanguages(CompileUnit &comp_unit)
This function exists because SymbolFileDWARFDebugMap may extra compile units which aren't exposed as ...
Definition SymbolFile.h:158
virtual void ParseDeclsForContext(CompilerDeclContext decl_ctx)
Definition SymbolFile.h:236
virtual uint64_t GetDebugInfoSize(bool load_all_debug_info=false)=0
Metrics gathering functions.
virtual llvm::Expected< lldb::addr_t > GetParameterStackSize(Symbol &symbol)
Return the number of stack bytes taken up by the parameters to this function.
Definition SymbolFile.h:400
virtual bool GetDebugInfoIndexWasLoadedFromCache() const =0
Accessors for the bool that indicates if the debug info index was loaded from, or saved to the module...
virtual XcodeSDK ParseXcodeSDK(CompileUnit &comp_unit)
Return the Xcode SDK comp_unit was compiled against.
Definition SymbolFile.h:152
virtual void InitializeObject()
Initialize the SymbolFile object.
Definition SymbolFile.h:131
virtual bool CompleteType(CompilerType &compiler_type)=0
virtual Type * ResolveTypeUID(lldb::user_id_t type_uid)=0
virtual bool ParseIsOptimized(CompileUnit &comp_unit)
Definition SymbolFile.h:203
virtual bool isA(const void *ClassID) const
LLVM RTTI support.
Definition SymbolFile.h:58
~SymbolFile() override=default
virtual bool ForEachExternalModule(lldb_private::CompileUnit &comp_unit, llvm::DenseSet< lldb_private::SymbolFile * > &visited_symbol_files, llvm::function_ref< bool(Module &)> lambda)
Apply a lambda to each external lldb::Module referenced by this comp_unit.
Definition SymbolFile.h:194
virtual std::vector< CompilerContext > GetCompilerContextForUID(lldb::user_id_t uid)
Definition SymbolFile.h:245
virtual CompilerDeclContext GetDeclContextForUID(lldb::user_id_t uid)
Definition SymbolFile.h:238
virtual std::vector< std::unique_ptr< CallEdge > > ParseCallEdgesInFunction(UserID func_id)
Definition SymbolFile.h:376
virtual CompilerDeclContext GetDeclContextContainingUID(lldb::user_id_t uid)
Definition SymbolFile.h:241
virtual CompilerDecl GetDeclForUID(lldb::user_id_t uid)
Definition SymbolFile.h:237
virtual const ObjectFile * GetObjectFile() const =0
virtual size_t ParseTypes(CompileUnit &comp_unit)=0
virtual void SectionFileAddressesChanged()=0
Notify the SymbolFile that the file addresses in the Sections for this module have been changed.
virtual void SetLoadDebugInfoEnabled()
Specify debug info should be loaded.
Definition SymbolFile.h:141
virtual DWOStats GetDwoStats()
Retrieves statistics about DWO files associated with this symbol file.
Definition SymbolFile.h:504
virtual void PreloadSymbols()
virtual lldb::UnwindPlanSP GetUnwindPlan(const Address &address, const RegisterInfoResolver &resolver)
Definition SymbolFile.h:394
virtual SymbolFile * GetBackingSymbolFile()
SymbolFileOnDemand class overrides this to return the underlying backing SymbolFile implementation th...
Definition SymbolFile.h:88
virtual void FindGlobalVariables(ConstString name, const CompilerDeclContext &parent_decl_ctx, uint32_t max_matches, VariableList &variables)
virtual Symtab * GetSymtab(bool can_create=true)=0
virtual bool GetDebugInfoIndexWasSavedToCache() const =0
virtual StatsDuration::Duration GetDebugInfoParseTime()
Return the time taken to parse the debug information.
Definition SymbolFile.h:433
virtual size_t ParseFunctions(CompileUnit &comp_unit)=0
virtual ObjectFile * GetMainObjectFile()=0
virtual size_t ParseBlocksRecursive(Function &func)=0
virtual uint32_t GetNumCompileUnits()=0
virtual bool ParseLineTable(CompileUnit &comp_unit)=0
virtual llvm::Expected< lldb::TypeSystemSP > GetTypeSystemForLanguage(lldb::LanguageType language)=0
virtual bool ParseDebugMacros(CompileUnit &comp_unit)=0
static SymbolFile * FindPlugin(lldb::ObjectFileSP objfile_sp)
virtual std::recursive_mutex & GetModuleMutex() const
Symbols file subclasses should override this to return the Module that owns the TypeSystem that this ...
virtual bool GetLoadDebugInfoEnabled()
Whether debug info will be loaded or not.
Definition SymbolFile.h:136
SymbolFile(const SymbolFile &)=delete
virtual lldb::TypeSP MakeType(lldb::user_id_t uid, ConstString name, std::optional< uint64_t > byte_size, SymbolContextScope *context, lldb::user_id_t encoding_uid, Type::EncodingDataType encoding_uid_type, const Declaration &decl, const CompilerType &compiler_qual_type, Type::ResolveState compiler_type_resolve_state, uint32_t opaque_payload=0)=0
Status GetFrameVariableError(StackFrame &frame)
Get an error that describes why variables might be missing for a given symbol context.
Definition SymbolFile.h:280
virtual bool GetDebugInfoHadFrameVariableErrors() const =0
Accessors for the bool that indicates if there was debug info, but errors stopped variables from bein...
virtual void GetTypes(lldb_private::SymbolContextScope *sc_scope, lldb::TypeClass type_mask, lldb_private::TypeList &type_list)=0
virtual std::optional< ArrayInfo > GetDynamicArrayInfoForUID(lldb::user_id_t type_uid, const lldb_private::ExecutionContext *exe_ctx)=0
If type_uid points to an array type, return its characteristics.
virtual void AddSymbols(Symtab &symtab)
Definition SymbolFile.h:380
virtual lldb::LanguageType ParseLanguage(CompileUnit &comp_unit)=0
virtual lldb::CompUnitSP GetCompileUnitAtIndex(uint32_t idx)=0
virtual CompilerDeclContext FindNamespace(ConstString name, const CompilerDeclContext &parent_decl_ctx, bool only_root_namespaces=false)
Finds a namespace of name name and whose parent context is parent_decl_ctx.
Definition SymbolFile.h:366
const SymbolFile & operator=(const SymbolFile &)=delete
virtual llvm::Expected< SymbolContext > ResolveFunctionCallLabel(FunctionCallLabel &label)
Resolves the function corresponding to the specified LLDB function call label.
Definition SymbolFile.h:344
virtual bool ParseImportedModules(const SymbolContext &sc, std::vector< SourceModule > &imported_modules)=0
virtual void SetDebugInfoIndexWasSavedToCache()=0
virtual void FindTypes(const TypeQuery &query, TypeResults &results)
Find types using a type-matching object that contains all search parameters.
Definition SymbolFile.h:330
static char ID
LLVM RTTI support.
Definition SymbolFile.h:53
virtual bool GetSeparateDebugInfo(StructuredData::Dictionary &d, bool errors_only, bool load_all_debug_info=false)
Return true if separate debug info files are supported and this function succeeded,...
Definition SymbolFile.h:489
virtual void FindFunctions(const Module::LookupInfo &lookup_info, const CompilerDeclContext &parent_decl_ctx, bool include_inlines, SymbolContextList &sc_list)
virtual void SetDebugInfoHadFrameVariableErrors()=0
virtual ModuleList GetDebugInfoModules()
Get the additional modules that this symbol file uses to parse debug info.
Definition SymbolFile.h:452
virtual StatsDuration::Duration GetDebugInfoIndexTime()
Return the time it took to index the debug information in the object file.
Definition SymbolFile.h:440
virtual size_t ParseVariablesForContext(const SymbolContext &sc)=0
virtual uint32_t GetAbilities()=0
Get a mask of what this symbol file supports for the object file that it was constructed with.
static bool classof(const SymbolFile *obj)
Definition SymbolFile.h:59
virtual uint32_t CalculateAbilities()=0
virtual void GetCompileOptions(std::unordered_map< lldb::CompUnitSP, lldb_private::Args > &args)
Definition SymbolFile.h:530
std::unordered_map< lldb::CompUnitSP, Args > GetCompileOptions()
Returns a map of compilation unit to the compile option arguments associated with that compilation un...
Definition SymbolFile.h:519
virtual Status CalculateFrameVariableError(StackFrame &frame)
Subclasses will override this function to for GetFrameVariableError().
Definition SymbolFile.h:292
virtual void DumpClangAST(Stream &s, llvm::StringRef filter, bool show_colors)
Definition SymbolFile.h:300
virtual ObjectFile * GetObjectFile()=0
virtual void ResetStatistics()
Reset the statistics for the symbol file.
Definition SymbolFile.h:443
virtual uint32_t ResolveSymbolContext(const Address &so_addr, lldb::SymbolContextItem resolve_scope, SymbolContext &sc)=0
virtual void GetMangledNamesForFunction(const std::string &scope_qualified_name, std::vector< ConstString > &mangled_names)
virtual void Dump(Stream &s)=0
std::string GetObjectName() const
virtual void SetDebugInfoIndexWasLoadedFromCache()=0
virtual bool ParseSupportFiles(CompileUnit &comp_unit, SupportFileList &support_files)=0
A class that contains all state required for type lookups.
Definition Type.h:104
This class tracks the state and results of a TypeQuery.
Definition Type.h:344
An abstraction for Xcode-style SDKs that works like ArchSpec.
Definition XcodeSDK.h:25
A class that represents a running process on the host machine.
std::shared_ptr< lldb_private::ObjectFile > ObjectFileSP
LanguageType
Programming language type.
std::shared_ptr< lldb_private::Type > TypeSP
std::shared_ptr< lldb_private::UnwindPlan > UnwindPlanSP
uint64_t user_id_t
Definition lldb-types.h:82
std::shared_ptr< lldb_private::CompileUnit > CompUnitSP
RegisterKind
Register numbering types.
Holds statistics about DWO (Debug With Object) files.
Definition Statistics.h:127
Holds parsed information about a function call label that LLDB attaches as an AsmLabel to function AS...
Definition Expression.h:110
Every register is described in detail including its name, alternate name (optional),...
The characteristics of an array type.
Definition SymbolFile.h:213
llvm::SmallVector< std::optional< uint64_t >, 1 > element_orders
Each entry belongs to a distinct DW_TAG_subrange_type.
Definition SymbolFile.h:223
virtual const RegisterInfo * ResolveNumber(lldb::RegisterKind kind, uint32_t number) const =0
virtual const RegisterInfo * ResolveName(llvm::StringRef name) const =0
A mix in class that contains a generic user ID.
Definition UserID.h:31