124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- LineEntry.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_LineEntry_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_LineEntry_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/AddressRange.h"
155f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton#include "lldb/Host/FileSpec.h"
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class LineEntry LineEntry.h "lldb/Symbol/LineEntry.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A line table entry class.
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct LineEntry
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Default constructor.
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Initialize all member variables to invalid values.
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    LineEntry ();
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    LineEntry
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    (
343508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton        const lldb::SectionSP &section_sp,
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        lldb::addr_t section_offset,
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        lldb::addr_t byte_size,
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const FileSpec &file,
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        uint32_t _line,
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        uint16_t _column,
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        bool _is_start_of_statement,
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        bool _is_start_of_basic_block,
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        bool _is_prologue_end,
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        bool _is_epilogue_begin,
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        bool _is_terminal_entry
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    );
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Clear the object's state.
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Clears all member variables to invalid values.
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Clear ();
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Dump a description of this object to a Stream.
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Dump a description of the contents of this object to the
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// supplied stream \a s.
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] s
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The stream to which to dump the object descripton.
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] comp_unit
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The compile unit object that contains the support file
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     list so the line entry can dump the file name (since this
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     object contains a file index into the support file list).
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] show_file
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     If \b true, display the filename with the line entry which
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     requires that the compile unit object \a comp_unit be a
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     valid pointer.
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] style
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The display style for the section offset address.
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if the address was able to be displayed
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     using \a style. File and load addresses may be unresolved
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     and it may not be possible to display a valid address value.
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b false if the address was not able to be properly
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     dumped.
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @see Address::DumpStyle
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
87eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton    Dump (Stream *s, Target *target, bool show_file, Address::DumpStyle style, Address::DumpStyle fallback_style, bool show_range) const;
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
9012bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    GetDescription (Stream *s,
9112bec71b323dc520f0e985a86e09c4712559e115Greg Clayton                    lldb::DescriptionLevel level,
9212bec71b323dc520f0e985a86e09c4712559e115Greg Clayton                    CompileUnit* cu,
93eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton                    Target *target,
9412bec71b323dc520f0e985a86e09c4712559e115Greg Clayton                    bool show_address_only) const;
9512bec71b323dc520f0e985a86e09c4712559e115Greg Clayton
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Dumps information specific to a process that stops at this
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// line entry to the supplied stream \a s.
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] s
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The stream to which to dump the object descripton.
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] comp_unit
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The compile unit object that contains the support file
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     list so the line entry can dump the file name (since this
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     object contains a file index into the support file list).
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if the file and line were properly dumped,
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \b false otherwise.
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
11372b7158235500ae6d4b69ed378cbc36bf6e5cbe1Greg Clayton    DumpStopContext (Stream *s, bool show_fullpaths) const;
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Check if a line entry object is valid.
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if the line entry contains a valid section
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     offset address, file index, and line number, \b false
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     otherwise.
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsValid () const;
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Compare two LineEntry objects.
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] lhs
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The Left Hand Side const LineEntry object reference.
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] rhs
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The Right Hand Side const LineEntry object reference.
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     @li -1 if lhs < rhs
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     @li 0 if lhs == rhs
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     @li 1 if lhs > rhs
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static int
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Compare (const LineEntry& lhs, const LineEntry& rhs);
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Member variables.
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AddressRange    range;                      ///< The section offset address range for this line entry.
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    FileSpec        file;
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t        line;                       ///< The source line number, or zero if there is no line number information.
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint16_t        column;                     ///< The column number of the source line, or zero if there is no column information.
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint16_t        is_start_of_statement:1,    ///< Indicates this entry is the beginning of a statement.
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    is_start_of_basic_block:1,  ///< Indicates this entry is the beginning of a basic block.
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    is_prologue_end:1,          ///< Indicates this entry is one (of possibly many) where execution should be suspended for an entry breakpoint of a function.
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    is_epilogue_begin:1,        ///< Indicates this entry is one (of possibly many) where execution should be suspended for an exit breakpoint of a function.
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    is_terminal_entry:1;        ///< Indicates this entry is that of the first byte after the end of a sequence of target machine instructions.
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Less than operator.
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner///
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @param[in] lhs
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner///     The Left Hand Side const LineEntry object reference.
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner///
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @param[in] rhs
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner///     The Right Hand Side const LineEntry object reference.
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner///
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @return
16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner///     Returns \b true if lhs < rhs, false otherwise.
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool operator<(const LineEntry& lhs, const LineEntry& rhs);
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_LineEntry_h_
175