//===-- LineEntry.h ---------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_SYMBOL_LINEENTRY_H #define LLDB_SYMBOL_LINEENTRY_H #include "lldb/Core/AddressRange.h" #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/SupportFile.h" #include "lldb/lldb-private.h" namespace lldb_private { /// \class LineEntry LineEntry.h "lldb/Symbol/LineEntry.h" /// A line table entry class. struct LineEntry { /// Default constructor. /// /// Initialize all member variables to invalid values. LineEntry(); /// Clear the object's state. /// /// Clears all member variables to invalid values. void Clear(); /// Dump a description of this object to a Stream. /// /// Dump a description of the contents of this object to the supplied stream /// \a s. /// /// \param[in] s /// The stream to which to dump the object description. /// /// \param[in] show_file /// If \b true, display the filename with the line entry which /// requires that the compile unit object \a comp_unit be a /// valid pointer. /// /// \param[in] style /// The display style for the section offset address. /// /// \return /// Returns \b true if the address was able to be displayed /// using \a style. File and load addresses may be unresolved /// and it may not be possible to display a valid address value. /// Returns \b false if the address was not able to be properly /// dumped. /// /// \see Address::DumpStyle bool Dump(Stream *s, Target *target, bool show_file, Address::DumpStyle style, Address::DumpStyle fallback_style, bool show_range) const; bool GetDescription(Stream *s, lldb::DescriptionLevel level, CompileUnit *cu, Target *target, bool show_address_only) const; /// Dumps information specific to a process that stops at this line entry to /// the supplied stream \a s. /// /// \param[in] s /// The stream to which to dump the object description. /// /// \return /// Returns \b true if the file and line were properly dumped, /// \b false otherwise. bool DumpStopContext(Stream *s, bool show_fullpaths) const; /// Check if a line entry object is valid. /// /// \return /// Returns \b true if the line entry contains a valid section /// offset address, file index, and line number, \b false /// otherwise. bool IsValid() const; /// Compare two LineEntry objects. /// /// \param[in] lhs /// The Left Hand Side const LineEntry object reference. /// /// \param[in] rhs /// The Right Hand Side const LineEntry object reference. /// /// \return /// -1 if lhs < rhs /// 0 if lhs == rhs /// 1 if lhs > rhs static int Compare(const LineEntry &lhs, const LineEntry &rhs); /// Give the range for this LineEntry + any additional LineEntries for this /// same source line that are contiguous. /// /// A compiler may emit multiple line entries for a single source line, /// e.g. to indicate subexpressions at different columns. This method will /// get the AddressRange for all of the LineEntries for this source line /// that are contiguous. // /// Line entries with a line number of 0 are treated specially - these are /// compiler-generated line table entries that the user did not write in /// their source code, and we want to skip past in the debugger. If this /// LineEntry is for line 32, and the following LineEntry is for line 0, we /// will extend the range to include the AddressRange of the line 0 /// LineEntry (and it will include the range of the following LineEntries /// that match either 32 or 0.) /// /// When \b include_inlined_functions is \b true inlined functions with /// a call site at this LineEntry will also be included in the complete /// range. /// /// If the initial LineEntry this method is called on is a line #0, only the /// range of continuous LineEntries with line #0 will be included in the /// complete range. /// /// @param[in] include_inlined_functions /// Whether to include inlined functions at the same line or not. /// /// \return /// The contiguous AddressRange for this source line. AddressRange GetSameLineContiguousAddressRange(bool include_inlined_functions) const; /// Apply file mappings from target.source-map to the LineEntry's file. /// /// \param[in] target_sp /// Shared pointer to the target this LineEntry belongs to. void ApplyFileMappings(lldb::TargetSP target_sp); /// Helper to access the file. const FileSpec &GetFile() const { return file_sp->GetSpecOnly(); } /// The section offset address range for this line entry. AddressRange range; /// The source file, possibly mapped by the target.source-map setting. lldb::SupportFileSP file_sp; /// The original source file, from debug info. lldb::SupportFileSP original_file_sp; /// The source line number, or LLDB_INVALID_LINE_NUMBER if there is no line /// number information. uint32_t line = LLDB_INVALID_LINE_NUMBER; /// The column number of the source line, or zero if there is no column /// information. uint16_t column = 0; /// Indicates this entry is the beginning of a statement. uint16_t is_start_of_statement : 1; /// Indicates this entry is the beginning of a basic block. uint16_t is_start_of_basic_block : 1; /// Indicates this entry is one (of possibly many) where execution should be /// suspended for an entry breakpoint of a function. uint16_t is_prologue_end : 1; /// Indicates this entry is one (of possibly many) where execution should be /// suspended for an exit breakpoint of a function. uint16_t is_epilogue_begin : 1; /// Indicates this entry is that of the first byte after the end of a sequence /// of target machine instructions. uint16_t is_terminal_entry : 1; }; /// Less than operator. /// /// \param[in] lhs /// The Left Hand Side const LineEntry object reference. /// /// \param[in] rhs /// The Right Hand Side const LineEntry object reference. /// /// \return /// Returns \b true if lhs < rhs, false otherwise. bool operator<(const LineEntry &lhs, const LineEntry &rhs); } // namespace lldb_private #endif // LLDB_SYMBOL_LINEENTRY_H