LLDB mainline
SymbolContext.h
Go to the documentation of this file.
1//===-- SymbolContext.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_SYMBOLCONTEXT_H
10#define LLDB_SYMBOL_SYMBOLCONTEXT_H
11
12#include <memory>
13#include <string>
14#include <vector>
15
16#include "lldb/Core/Address.h"
17#include "lldb/Core/Mangled.h"
20#include "lldb/Utility/Stream.h"
21#include "lldb/lldb-private.h"
22#include "llvm/ADT/DenseMapInfo.h"
23#include "llvm/ADT/Hashing.h"
24#include "llvm/ADT/SetVector.h"
25
26namespace lldb_private {
27
29
30/// \class SymbolContext SymbolContext.h "lldb/Symbol/SymbolContext.h" Defines
31/// a symbol context baton that can be handed other debug core functions.
32///
33/// Many debugger functions require a context when doing lookups. This class
34/// provides a common structure that can be used as the result of a query that
35/// can contain a single result. Examples of such queries include
36/// \li Looking up a load address.
38public:
39 /// Default constructor.
40 ///
41 /// Initialize all pointer members to nullptr and all struct members to
42 /// their default state.
44
45 /// Construct with an object that knows how to reconstruct its symbol
46 /// context.
47 ///
48 /// \param[in] sc_scope
49 /// A symbol context scope object that knows how to reconstruct
50 /// it's context.
51 explicit SymbolContext(SymbolContextScope *sc_scope);
52
53 /// Construct with module, and optional compile unit, function, block, line
54 /// table, line entry and symbol.
55 ///
56 /// Initialize all pointer to the specified values.
57 ///
58 /// \param[in] module_sp
59 /// A Module pointer to the module for this context.
60 ///
61 /// \param[in] comp_unit
62 /// A CompileUnit pointer to the compile unit for this context.
63 ///
64 /// \param[in] function
65 /// A Function pointer to the function for this context.
66 ///
67 /// \param[in] block
68 /// A Block pointer to the deepest block for this context.
69 ///
70 /// \param[in] line_entry
71 /// A LineEntry pointer to the line entry for this context.
72 ///
73 /// \param[in] symbol
74 /// A Symbol pointer to the symbol for this context.
77 CompileUnit *comp_unit = nullptr,
78 Function *function = nullptr, Block *block = nullptr,
79 LineEntry *line_entry = nullptr,
80 Symbol *symbol = nullptr);
81
82 // This version sets the target to a NULL TargetSP if you don't know it.
84 CompileUnit *comp_unit = nullptr,
85 Function *function = nullptr, Block *block = nullptr,
86 LineEntry *line_entry = nullptr,
87 Symbol *symbol = nullptr);
88
90
91 /// Clear the object's state.
92 ///
93 /// Resets all pointer members to nullptr, and clears any class objects to
94 /// their default state.
95 void Clear(bool clear_target);
96
97 /// Dump the stop context in this object to a Stream.
98 ///
99 /// Dump the best description of this object to the stream. The information
100 /// displayed depends on the amount and quality of the information in this
101 /// context. If a module, function, file and line number are available, they
102 /// will be dumped. If only a module and function or symbol name with offset
103 /// is available, that will be output. Else just the address at which the
104 /// target was stopped will be displayed.
105 ///
106 /// \param[in] s
107 /// The stream to which to dump the object description.
108 ///
109 /// \param[in] so_addr
110 /// The resolved section offset address.
111 ///
112 /// \param[in] show_fullpaths
113 /// When printing file paths (with the Module), whether the
114 /// base name of the Module should be printed or the full path.
115 ///
116 /// \param[in] show_module
117 /// Whether the module name should be printed followed by a
118 /// grave accent "`" character.
119 ///
120 /// \param[in] show_inlined_frames
121 /// If a given pc is in inlined function(s), whether the inlined
122 /// functions should be printed on separate lines in addition to
123 /// the concrete function containing the pc.
124 ///
125 /// \param[in] show_function_arguments
126 /// If false, this method will try to elide the function argument
127 /// types when printing the function name. This may be ambiguous
128 /// for languages that have function overloading - but it may
129 /// make the "function name" too long to include all the argument
130 /// types.
131 ///
132 /// \param[in] show_function_name
133 /// Normally this should be true - the function/symbol name should
134 /// be printed. In disassembly formatting, where we want a format
135 /// like "<*+36>", this should be false and "*" will be printed
136 /// instead.
137 ///
138 /// \param[in] show_inline_callsite_line_info
139 /// When processing an inline block, the line info of the callsite
140 /// is dumped if this flag is \b true, otherwise the line info
141 /// of the actual inlined function is dumped.
142 ///
143 /// \param[in] pattern
144 /// An optional regex pattern to match against the stop context
145 /// description. If specified, parts of the description matching this
146 /// pattern may be highlighted or processed differently. If this parameter
147 /// is an empty string or not provided, no highlighting is applied.
148 ///
149 /// \return
150 /// \b true if some text was dumped, \b false otherwise.
151 bool DumpStopContext(
152 Stream *s, ExecutionContextScope *exe_scope, const Address &so_addr,
153 bool show_fullpaths, bool show_module, bool show_inlined_frames,
154 bool show_function_arguments, bool show_function_name,
155 bool show_function_display_name = false,
156 std::optional<Stream::HighlightSettings> settings = std::nullopt) const;
157
158 /// Get the address range contained within a symbol context.
159 ///
160 /// Address range priority is as follows:
161 /// - line_entry address range if line_entry is valid and
162 /// eSymbolContextLineEntry is set in \a scope
163 /// - block address range if block is not nullptr and eSymbolContextBlock
164 /// is set in \a scope
165 /// - function address range if function is not nullptr and
166 /// eSymbolContextFunction is set in \a scope
167 /// - symbol address range if symbol is not nullptr and
168 /// eSymbolContextSymbol is set in \a scope
169 ///
170 /// \param[in] scope
171 /// A mask bits from the \b SymbolContextItem enum telling this function
172 /// which address ranges it can use when trying to extract one from
173 /// the valid (non-nullptr) symbol context classes.
174 ///
175 /// \param[in] range_idx
176 /// The address range index to grab. Since many functions and
177 /// blocks are not always contiguous, they may have more than
178 /// one address range.
179 ///
180 /// \param[in] use_inline_block_range
181 /// If \a scope has the eSymbolContextBlock bit set, and there
182 /// is a valid block in the symbol context, return the block
183 /// address range for the containing inline function block, not
184 /// the deepest most block. This allows us to extract information
185 /// for the address range of the inlined function block, not
186 /// the deepest lexical block.
187 ///
188 /// \param[out] range
189 /// An address range object that will be filled in if \b true
190 /// is returned.
191 ///
192 /// \return
193 /// \b True if this symbol context contains items that describe
194 /// an address range, \b false otherwise.
195 bool GetAddressRange(uint32_t scope, uint32_t range_idx,
196 bool use_inline_block_range, AddressRange &range) const;
197
198 /// Get the address of the function or symbol represented by this symbol
199 /// context.
200 ///
201 /// If both fields are present, the address of the function is returned. If
202 /// both are empty, the result is an invalid address.
204
205 llvm::Error GetAddressRangeFromHereToEndLine(uint32_t end_line,
206 AddressRange &range);
207
208 /// Find the best global data symbol visible from this context.
209 ///
210 /// Symbol priority is:
211 /// - extern symbol in the current module if there is one
212 /// - non-extern symbol in the current module if there is one
213 /// - extern symbol in the target
214 /// - non-extern symbol in the target
215 /// It is an error if the highest-priority result is ambiguous.
216 ///
217 /// \param[in] name
218 /// The name of the symbol to search for.
219 ///
220 /// \param[out] error
221 /// An error that will be populated with a message if there was an
222 /// ambiguous result. The error will not be populated if no result
223 /// was found.
224 ///
225 /// \return
226 /// The symbol that was found, or \b nullptr if none was found.
228
229 void GetDescription(
230 Stream *s, lldb::DescriptionLevel level, Target *target,
231 std::optional<Stream::HighlightSettings> settings = std::nullopt) const;
232
233 uint32_t GetResolvedMask() const;
234
236
237 /// Compares the two symbol contexts, considering that the symbol may or may
238 /// not be present. If both symbols are present, compare them, if one of the
239 /// symbols is not present, consider the symbol contexts as equal as long as
240 /// the other fields are equal.
241 ///
242 /// This function exists because SymbolContexts are often created without the
243 /// symbol, which is filled in later on, after its creation.
245 const SymbolContext &rhs);
246
247 /// Compares the two symbol contexts, except for the symbol field.
248 static bool CompareWithoutSymbol(const SymbolContext &lhs,
249 const SymbolContext &rhs);
250
251 /// Find a block that defines the function represented by this symbol
252 /// context.
253 ///
254 /// If this symbol context points to a block that is an inlined function, or
255 /// is contained within an inlined function, the block that defines the
256 /// inlined function is returned.
257 ///
258 /// If this symbol context has no block in it, or the block is not itself an
259 /// inlined function block or contained within one, we return the top level
260 /// function block.
261 ///
262 /// This is a handy function to call when you want to get the block whose
263 /// variable list will include the arguments for the function that is
264 /// represented by this symbol context (whether the function is an inline
265 /// function or not).
266 ///
267 /// \return
268 /// The block object pointer that defines the function that is
269 /// represented by this symbol context object, nullptr otherwise.
271
272 /// Determines the name of the instance variable for the this decl context.
273 ///
274 /// For C++ the name is "this", for Objective-C the name is "self".
275 ///
276 /// \return
277 /// Returns a StringRef for the name of the instance variable.
278 llvm::StringRef GetInstanceVariableName();
279
280 /// Sorts the types in TypeMap according to SymbolContext to TypeList
281 ///
282 void SortTypeList(TypeMap &type_map, TypeList &type_list) const;
283
284 /// Find a name of the innermost function for the symbol context.
285 ///
286 /// For instance, if the symbol context contains an inlined block, it will
287 /// return the inlined function name.
288 ///
289 /// \return
290 /// The name of the function represented by this symbol context.
293
294 /// Get the line entry that corresponds to the function.
295 ///
296 /// If the symbol context contains an inlined block, the line entry for the
297 /// start address of the inlined function will be returned, otherwise the
298 /// line entry for the start address of the function will be returned. This
299 /// can be used after doing a Module::FindFunctions(...) or
300 /// ModuleList::FindFunctions(...) call in order to get the correct line
301 /// table information for the symbol context. it will return the inlined
302 /// function name.
304
305 /// Find the block containing the inlined block that contains this block.
306 ///
307 /// For instance, if the symbol context contains an inlined block, it will
308 /// return the inlined function name.
309 ///
310 /// \param[in] curr_frame_pc
311 /// The address within the block of this object.
312 ///
313 /// \param[out] next_frame_sc
314 /// A new symbol context that does what the title says it does.
315 ///
316 /// \param[out] inlined_frame_addr
317 /// This is what you should report as the PC in \a next_frame_sc.
318 ///
319 /// \return
320 /// \b true if this SymbolContext specifies a block contained in an
321 /// inlined block. If this returns \b true, \a next_frame_sc and
322 /// \a inlined_frame_addr will be filled in correctly.
323 bool GetParentOfInlinedScope(const Address &curr_frame_pc,
324 SymbolContext &next_frame_sc,
325 Address &inlined_frame_addr) const;
326
327 /// If available, will return the function name according to the specified
328 /// mangling preference. If this object represents an inlined function,
329 /// returns the name of the inlined function. Returns nullptr if no function
330 /// name could be determined.
332
333 // Member variables
334 lldb::TargetSP target_sp; ///< The Target for a given query
335 lldb::ModuleSP module_sp; ///< The Module for a given query
336 CompileUnit *comp_unit = nullptr; ///< The CompileUnit for a given query
337 Function *function = nullptr; ///< The Function for a given query
338 Block *block = nullptr; ///< The Block for a given query
339 LineEntry line_entry; ///< The LineEntry for a given query
340 Symbol *symbol = nullptr; ///< The Symbol for a given query
342 nullptr; ///< The global variable matching the given query
343};
344
346public:
357
358 // This one produces a specifier that matches everything...
359 SymbolContextSpecifier(const lldb::TargetSP &target_sp);
360
362
363 bool AddSpecification(const char *spec_string, SpecificationType type);
364
365 bool AddLineSpecification(uint32_t line_no, SpecificationType type);
366
367 void Clear();
368
369 bool SymbolContextMatches(const SymbolContext &sc);
370
371 bool AddressMatches(lldb::addr_t addr);
372
373 void GetDescription(Stream *s, lldb::DescriptionLevel level) const;
374
375private:
377 std::string m_module_spec;
379 std::unique_ptr<FileSpec> m_file_spec_up;
382 std::string m_function_spec;
383 std::string m_class_name;
384 std::unique_ptr<AddressRange> m_address_range_up;
385 uint32_t m_type; // Or'ed bits from SpecificationType
386};
387
388/// \class SymbolContextList SymbolContext.h "lldb/Symbol/SymbolContext.h"
389/// Defines a list of symbol context objects.
390///
391/// This class provides a common structure that can be used to contain the
392/// result of a query that can contain a multiple results. Examples of such
393/// queries include:
394/// \li Looking up a function by name.
395/// \li Finding all addresses for a specified file and line number.
397public:
398 /// Default constructor.
399 ///
400 /// Initialize with an empty list.
402
403 /// Destructor.
405
406 /// Append a new symbol context to the list.
407 ///
408 /// \param[in] sc
409 /// A symbol context to append to the list.
410 void Append(const SymbolContext &sc);
411
412 void Append(const SymbolContextList &sc_list);
413
414 bool AppendIfUnique(const SymbolContext &sc, bool merge_symbol_into_function);
415
416 uint32_t AppendIfUnique(const SymbolContextList &sc_list,
417 bool merge_symbol_into_function);
418
419 /// Clear the object's state.
420 ///
421 /// Clears the symbol context list.
422 void Clear();
423
424 /// Dump a description of this object to a Stream.
425 ///
426 /// Dump a description of the contents of each symbol context in the list to
427 /// the supplied stream \a s.
428 ///
429 /// \param[in] s
430 /// The stream to which to dump the object description.
431 void Dump(Stream *s, Target *target) const;
432
433 /// Get accessor for a symbol context at index \a idx.
434 ///
435 /// Dump a description of the contents of each symbol context in the list to
436 /// the supplied stream \a s.
437 ///
438 /// \param[in] idx
439 /// The zero based index into the symbol context list.
440 ///
441 /// \param[out] sc
442 /// A reference to the symbol context to fill in.
443 ///
444 /// \return
445 /// Returns \b true if \a idx was a valid index into this
446 /// symbol context list and \a sc was filled in, \b false
447 /// otherwise.
448 bool GetContextAtIndex(size_t idx, SymbolContext &sc) const;
449
450 /// Direct const reference accessor for a symbol context at index \a idx.
451 ///
452 /// The index \a idx must be a valid index, no error checking will be done
453 /// to ensure that it is valid.
454 ///
455 /// \param[in] idx
456 /// The zero based index into the symbol context list.
457 ///
458 /// \return
459 /// A const reference to the symbol context.
460 const SymbolContext &operator[](size_t idx) const {
461 return m_symbol_contexts[idx];
462 }
463
464 /// Replace the symbol in the symbol context at index \a idx.
465 ///
466 /// The symbol field is excluded from the hash and equality used by the
467 /// internal set, so this is the only mutation that is safe to perform on
468 /// an element that is already in the list.
469 void SetSymbolAtIndex(size_t idx, Symbol *symbol) {
470 const_cast<SymbolContext &>(m_symbol_contexts[idx]).symbol = symbol;
471 }
472
473 bool RemoveContextAtIndex(size_t idx);
474
475 /// Get accessor for a symbol context list size.
476 ///
477 /// \return
478 /// Returns the number of symbol context objects in the list.
479 uint32_t GetSize() const;
480
481 bool IsEmpty() const;
482
483 uint32_t NumLineEntriesWithLine(uint32_t line) const;
484
486 Target *target) const;
487
488private:
490 llvm::SetVector<SymbolContext, llvm::SmallVector<SymbolContext>>;
491 using const_iterator = collection::const_iterator;
492
493 // Member variables.
494 collection m_symbol_contexts; ///< The list of symbol contexts.
495
496public:
497 const_iterator begin() const { return m_symbol_contexts.begin(); }
498 const_iterator end() const { return m_symbol_contexts.end(); }
499
500 typedef llvm::iterator_range<const_iterator> SymbolContextIterable;
505};
506
507bool operator==(const SymbolContext &lhs, const SymbolContext &rhs);
508bool operator!=(const SymbolContext &lhs, const SymbolContext &rhs);
509
510bool operator==(const SymbolContextList &lhs, const SymbolContextList &rhs);
511bool operator!=(const SymbolContextList &lhs, const SymbolContextList &rhs);
512
513} // namespace lldb_private
514
515namespace llvm {
516
517/// DenseMapInfo implementation.
518/// \{
519template <> struct DenseMapInfo<lldb_private::SymbolContext> {
522 sc.function = DenseMapInfo<lldb_private::Function *>::getEmptyKey();
523 return sc;
524 }
525
528 sc.function = DenseMapInfo<lldb_private::Function *>::getTombstoneKey();
529 return sc;
530 }
531
532 static unsigned getHashValue(const lldb_private::SymbolContext &sc) {
533 // Hash all fields EXCEPT symbol, since
534 // CompareConsideringPossiblyNullSymbol ignores it.
535 auto line_entry_hash =
537 ? hash_combine(
542 : hash_value(0);
543 return static_cast<unsigned>(hash_combine(
544 sc.function, sc.module_sp.get(), sc.comp_unit, sc.target_sp.get(),
545 line_entry_hash, sc.variable, sc.block));
546 }
547
548 static bool isEqual(const lldb_private::SymbolContext &lhs,
549 const lldb_private::SymbolContext &rhs) {
550 // Check for empty/tombstone keys first, since these are invalid pointers we
551 // don't want to accidentally dereference them in
552 // CompareConsideringPossiblyNullSymbol.
553 if (lhs.function == DenseMapInfo<lldb_private::Function *>::getEmptyKey() ||
554 rhs.function == DenseMapInfo<lldb_private::Function *>::getEmptyKey() ||
555 lhs.function ==
556 DenseMapInfo<lldb_private::Function *>::getTombstoneKey() ||
557 rhs.function ==
558 DenseMapInfo<lldb_private::Function *>::getTombstoneKey())
559 return lhs.function == rhs.function;
560
562 lhs, rhs);
563 }
564};
565/// \}
566
567} // namespace llvm
568
569#endif // LLDB_SYMBOL_SYMBOLCONTEXT_H
static llvm::raw_ostream & error(Stream &strm)
A section + offset based address range class.
Address & GetBaseAddress()
Get accessor for the base address of the range.
lldb::addr_t GetByteSize() const
Get accessor for the byte size of this range.
A section + offset based address class.
Definition Address.h:62
lldb::addr_t GetFileAddress() const
Get the file address.
Definition Address.cpp:281
A class that describes a single lexical block.
Definition Block.h:41
A class that describes a compilation unit.
Definition CompileUnit.h:43
A uniqued constant string class.
Definition ConstString.h:40
"lldb/Target/ExecutionContextScope.h" Inherit from this if your object can reconstruct its execution ...
A class that describes a function.
Definition Function.h:400
A class that handles mangled names.
Definition Mangled.h:34
An error handling class.
Definition Status.h:118
A stream class that can stream formatted output to a file.
Definition Stream.h:28
collection m_symbol_contexts
The list of symbol contexts.
bool GetContextAtIndex(size_t idx, SymbolContext &sc) const
Get accessor for a symbol context at index idx.
uint32_t GetSize() const
Get accessor for a symbol context list size.
void SetSymbolAtIndex(size_t idx, Symbol *symbol)
Replace the symbol in the symbol context at index idx.
llvm::SetVector< SymbolContext, llvm::SmallVector< SymbolContext > > collection
llvm::iterator_range< const_iterator > SymbolContextIterable
const_iterator begin() const
void GetDescription(Stream *s, lldb::DescriptionLevel level, Target *target) const
const_iterator end() const
bool AppendIfUnique(const SymbolContext &sc, bool merge_symbol_into_function)
void Dump(Stream *s, Target *target) const
Dump a description of this object to a Stream.
uint32_t NumLineEntriesWithLine(uint32_t line) const
void Append(const SymbolContext &sc)
Append a new symbol context to the list.
const SymbolContext & operator[](size_t idx) const
Direct const reference accessor for a symbol context at index idx.
SymbolContextIterable SymbolContexts()
collection::const_iterator const_iterator
void Clear()
Clear the object's state.
SymbolContextList()
Default constructor.
"lldb/Symbol/SymbolContextScope.h" Inherit from this if your object is part of a symbol context and c...
void GetDescription(Stream *s, lldb::DescriptionLevel level) const
std::unique_ptr< AddressRange > m_address_range_up
std::unique_ptr< FileSpec > m_file_spec_up
bool AddLineSpecification(uint32_t line_no, SpecificationType type)
bool AddSpecification(const char *spec_string, SpecificationType type)
bool SymbolContextMatches(const SymbolContext &sc)
SymbolContextSpecifier(const lldb::TargetSP &target_sp)
Defines a symbol context baton that can be handed other debug core functions.
static bool CompareWithoutSymbol(const SymbolContext &lhs, const SymbolContext &rhs)
Compares the two symbol contexts, except for the symbol field.
LineEntry GetFunctionStartLineEntry() const
Get the line entry that corresponds to the function.
const Symbol * FindBestGlobalDataSymbol(ConstString name, Status &error)
Find the best global data symbol visible from this context.
lldb::LanguageType GetLanguage() const
void GetDescription(Stream *s, lldb::DescriptionLevel level, Target *target, std::optional< Stream::HighlightSettings > settings=std::nullopt) const
llvm::Error GetAddressRangeFromHereToEndLine(uint32_t end_line, AddressRange &range)
Function * function
The Function for a given query.
Block * GetFunctionBlock()
Find a block that defines the function represented by this symbol context.
llvm::StringRef GetInstanceVariableName()
Determines the name of the instance variable for the this decl context.
bool GetParentOfInlinedScope(const Address &curr_frame_pc, SymbolContext &next_frame_sc, Address &inlined_frame_addr) const
Find the block containing the inlined block that contains this block.
ConstString GetFunctionName(Mangled::NamePreference preference=Mangled::ePreferDemangled) const
Find a name of the innermost function for the symbol context.
void SortTypeList(TypeMap &type_map, TypeList &type_list) const
Sorts the types in TypeMap according to SymbolContext to TypeList.
Block * block
The Block for a given query.
lldb::ModuleSP module_sp
The Module for a given query.
CompileUnit * comp_unit
The CompileUnit for a given query.
bool DumpStopContext(Stream *s, ExecutionContextScope *exe_scope, const Address &so_addr, bool show_fullpaths, bool show_module, bool show_inlined_frames, bool show_function_arguments, bool show_function_name, bool show_function_display_name=false, std::optional< Stream::HighlightSettings > settings=std::nullopt) const
Dump the stop context in this object to a Stream.
void Clear(bool clear_target)
Clear the object's state.
Variable * variable
The global variable matching the given query.
bool GetAddressRange(uint32_t scope, uint32_t range_idx, bool use_inline_block_range, AddressRange &range) const
Get the address range contained within a symbol context.
Symbol * symbol
The Symbol for a given query.
lldb::TargetSP target_sp
The Target for a given query.
LineEntry line_entry
The LineEntry for a given query.
Mangled GetPossiblyInlinedFunctionName() const
If available, will return the function name according to the specified mangling preference.
static bool CompareConsideringPossiblyNullSymbol(const SymbolContext &lhs, const SymbolContext &rhs)
Compares the two symbol contexts, considering that the symbol may or may not be present.
Address GetFunctionOrSymbolAddress() const
Get the address of the function or symbol represented by this symbol context.
SymbolContext()
Default constructor.
A class that represents a running process on the host machine.
bool operator!=(const Address &lhs, const Address &rhs)
Definition Address.cpp:1017
bool operator==(const Address &lhs, const Address &rhs)
Definition Address.cpp:1011
DescriptionLevel
Description levels for "void GetDescription(Stream *, DescriptionLevel)" calls.
LanguageType
Programming language type.
uint64_t addr_t
Definition lldb-types.h:80
std::shared_ptr< lldb_private::Target > TargetSP
std::shared_ptr< lldb_private::Module > ModuleSP
A line table entry class.
Definition LineEntry.h:21
uint16_t column
The column number of the source line, or zero if there is no column information.
Definition LineEntry.h:155
bool IsValid() const
Check if a line entry object is valid.
Definition LineEntry.cpp:35
AddressRange range
The section offset address range for this line entry.
Definition LineEntry.h:137
uint32_t line
The source line number, or LLDB_INVALID_LINE_NUMBER if there is no line number information.
Definition LineEntry.h:151
uint16_t is_terminal_entry
Indicates this entry is that of the first byte after the end of a sequence of target machine instruct...
Definition LineEntry.h:173
static unsigned getHashValue(const lldb_private::SymbolContext &sc)
static lldb_private::SymbolContext getTombstoneKey()
static lldb_private::SymbolContext getEmptyKey()
static bool isEqual(const lldb_private::SymbolContext &lhs, const lldb_private::SymbolContext &rhs)