124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DWARFDebugLine.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 10d996d0c32b483c2190e1eb288cd3bbbd259c2960Greg Clayton#ifndef SymbolFileDWARF_DWARFDebugLine_h_ 11d996d0c32b483c2190e1eb288cd3bbbd259c2960Greg Clayton#define SymbolFileDWARF_DWARFDebugLine_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <map> 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <string> 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFDefines.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SymbolFileDWARF; 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugInfoEntry; 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// DWARFDebugLine 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugLine 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // FileNameEntry 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner struct FileNameEntry 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FileNameEntry() : 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner name(), 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dir_idx(0), 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner mod_time(0), 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner length(0) 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::string name; 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_sleb128_t dir_idx; 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_sleb128_t mod_time; 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_sleb128_t length; 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Prologue 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner struct Prologue 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Prologue() : 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner total_length(0), 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner version(0), 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner prologue_length(0), 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner min_inst_length(0), 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner default_is_stmt(0), 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner line_base(0), 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner line_range(0), 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner opcode_base(0), 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner standard_opcode_lengths(), 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner include_directories(), 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner file_names() 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 71102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton typedef std::shared_ptr<Prologue> shared_ptr; 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t total_length; // The size in bytes of the statement information for this compilation unit (not including the total_length field itself). 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint16_t version; // Version identifier for the statement information format. 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t prologue_length;// The number of bytes following the prologue_length field to the beginning of the first byte of the statement program itself. 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint8_t min_inst_length;// The size in bytes of the smallest target machine instruction. Statement program opcodes that alter the address register first multiply their operands by this value. 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint8_t default_is_stmt;// The initial value of theis_stmtregister. 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int8_t line_base; // This parameter affects the meaning of the special opcodes. See below. 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint8_t line_range; // This parameter affects the meaning of the special opcodes. See below. 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint8_t opcode_base; // The number assigned to the first special opcode. 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<uint8_t> standard_opcode_lengths; 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<std::string> include_directories; 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<FileNameEntry> file_names; 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Length of the prologue in bytes 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t Length() const { return prologue_length + sizeof(total_length) + sizeof(version) + sizeof(prologue_length); } 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Length of the line table data in bytes (not including the prologue) 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t StatementTableLength() const { return total_length + sizeof(total_length) - Length(); } 899a23becdf4f275a7a4da9e5a0319c1b4501673aeFilipe Cabecinhas int32_t MaxLineIncrementForSpecialOpcode() const { return line_base + (int8_t)line_range - 1; } 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool IsValid() const; 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// void Append(BinaryStreamBuf& buff) const; 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Dump (lldb_private::Log *log); 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Clear() 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner total_length = version = prologue_length = min_inst_length = line_base = line_range = opcode_base = 0; 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner line_base = 0; 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner standard_opcode_lengths.clear(); 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner include_directories.clear(); 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner file_names.clear(); 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool GetFile(uint32_t file_idx, std::string& file, std::string& dir) const; 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Standard .debug_line state machine structure 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner struct Row 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<Row> collection; 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef collection::iterator iterator; 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef collection::const_iterator const_iterator; 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Row(bool default_is_stmt = false); 1138aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala Row(const Row& rhs) : 1148aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala address(rhs.address), 1158aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala line(rhs.line), 1168aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala column(rhs.column), 1178aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala file(rhs.file), 1188aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala is_stmt(rhs.is_stmt), 1198aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala basic_block(rhs.basic_block), 1208aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala end_sequence(rhs.end_sequence), 1218aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala prologue_end(rhs.prologue_end), 1228aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala epilogue_begin(rhs.epilogue_begin), 1238aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala isa(rhs.isa) 1248aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala {} 1258aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala Row& operator =(const Row& rhs) 1268aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala { 1278aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala if (&rhs == this) 1288aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala return *this; 1298aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala 1308aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala address = rhs.address; 1318aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala line = rhs.line; 1328aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala column = rhs.column; 1338aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala file = rhs.file; 1348aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala is_stmt = rhs.is_stmt; 1358aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala basic_block = rhs.basic_block; 1368aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala end_sequence = rhs.end_sequence; 1378aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala prologue_end = rhs.prologue_end; 1388aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala epilogue_begin = rhs.epilogue_begin; 1398aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala isa = rhs.isa; 1408aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala return *this; 1418aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala } 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual ~Row() {} 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void PostAppend (); 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Reset(bool default_is_stmt); 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Dump(lldb_private::Log *log) const; 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void Insert(Row::collection& state_coll, const Row& state); 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void Dump(lldb_private::Log *log, const Row::collection& state_coll); 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_addr_t address; // The program-counter value corresponding to a machine instruction generated by the compiler. 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t line; // An unsigned integer indicating a source line number. Lines are numbered beginning at 1. The compiler may emit the value 0 in cases where an instruction cannot be attributed to any source line. 151d996d0c32b483c2190e1eb288cd3bbbd259c2960Greg Clayton uint16_t column; // An unsigned integer indicating a column number within a source line. Columns are numbered beginning at 1. The value 0 is reserved to indicate that a statement begins at the 'left edge' of the line. 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint16_t file; // An unsigned integer indicating the identity of the source file corresponding to a machine instruction. 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint8_t is_stmt:1, // A boolean indicating that the current instruction is the beginning of a statement. 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner basic_block:1, // A boolean indicating that the current instruction is the beginning of a basic block. 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner end_sequence:1, // A boolean indicating that the current address is that of the first byte after the end of a sequence of target machine instructions. 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner prologue_end:1, // A boolean indicating that the current address is one (of possibly many) where execution should be suspended for an entry breakpoint of a function. 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner epilogue_begin:1;// A boolean indicating that the current address is one (of possibly many) where execution should be suspended for an exit breakpoint of a function. 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t isa; // An unsigned integer whose value encodes the applicable instruction set architecture for the current instruction. 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // LineTable 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner struct LineTable 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 167102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton typedef std::shared_ptr<LineTable> shared_ptr; 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner LineTable() : 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner prologue(), 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner rows() 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void AppendRow(const DWARFDebugLine::Row& state); 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Clear() 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner prologue.reset(); 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner rows.clear(); 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t LookupAddress(dw_addr_t address, dw_addr_t cu_high_pc) const; 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Dump(lldb_private::Log *log) const; 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Prologue::shared_ptr prologue; 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Row::collection rows; 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // State 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner struct State : public Row 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef void (*Callback)(dw_offset_t offset, const State& state, void* userData); 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Special row codes used when calling the callback 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StartParsingLineTable = 0, 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoneParsingLineTable = -1 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner State (Prologue::shared_ptr& prologue_sp, 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::Log *log, 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Callback callback, 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void* userData); 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner AppendRowToMatrix (dw_offset_t offset); 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Finalize (dw_offset_t offset); 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Reset (); 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Prologue::shared_ptr prologue; 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::Log *log; 2195d187e5495ee17f6763337a6ae28c2a7b07e4945Greg Clayton Callback callback; // Callback function that gets called each time an entry is to be added to the matrix 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void* callbackUserData; 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int row; // The row number that starts at zero for the prologue, and increases for each row added to the matrix 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner private: 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (State); 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool DumpOpcodes(lldb_private::Log *log, SymbolFileDWARF* dwarf2Data, dw_offset_t line_offset = DW_INVALID_OFFSET, uint32_t dump_flags = 0); // If line_offset is invalid, dump everything 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool DumpLineTableRows(lldb_private::Log *log, SymbolFileDWARF* dwarf2Data, dw_offset_t line_offset = DW_INVALID_OFFSET); // If line_offset is invalid, dump everything 228964deba8853eb794e59263322b59b09b43669618Greg Clayton static bool ParseSupportFiles(const lldb::ModuleSP &module_sp, const lldb_private::DataExtractor& debug_line_data, const char *cu_comp_dir, dw_offset_t stmt_list, lldb_private::FileSpecList &support_files); 22936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton static bool ParsePrologue(const lldb_private::DataExtractor& debug_line_data, lldb::offset_t* offset_ptr, Prologue* prologue); 23036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton static bool ParseStatementTable(const lldb_private::DataExtractor& debug_line_data, lldb::offset_t* offset_ptr, State::Callback callback, void* userData); 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static dw_offset_t DumpStatementTable(lldb_private::Log *log, const lldb_private::DataExtractor& debug_line_data, const dw_offset_t line_offset); 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static dw_offset_t DumpStatementOpcodes(lldb_private::Log *log, const lldb_private::DataExtractor& debug_line_data, const dw_offset_t line_offset, uint32_t flags); 23336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton static bool ParseStatementTable(const lldb_private::DataExtractor& debug_line_data, lldb::offset_t *offset_ptr, LineTable* line_table); 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void Parse(const lldb_private::DataExtractor& debug_line_data, DWARFDebugLine::State::Callback callback, void* userData); 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// static void AppendLineTableData(const DWARFDebugLine::Prologue* prologue, const DWARFDebugLine::Row::collection& state_coll, const uint32_t addr_size, BinaryStreamBuf &debug_line_data); 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugLine() : 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_lineTableMap() 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Parse(const lldb_private::DataExtractor& debug_line_data); 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void ParseIfNeeded(const lldb_private::DataExtractor& debug_line_data); 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner LineTable::shared_ptr GetLineTable(const dw_offset_t offset) const; 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::map<dw_offset_t, LineTable::shared_ptr> LineTableMap; 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef LineTableMap::iterator LineTableIter; 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef LineTableMap::const_iterator LineTableConstIter; 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner LineTableMap m_lineTableMap; 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 254d996d0c32b483c2190e1eb288cd3bbbd259c2960Greg Clayton#endif // SymbolFileDWARF_DWARFDebugLine_h_ 255