LLVM  14.0.0git
DWARFDebugLine.h
Go to the documentation of this file.
1 //===- DWARFDebugLine.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 LLVM_DEBUGINFO_DWARF_DWARFDEBUGLINE_H
10 #define LLVM_DEBUGINFO_DWARF_DWARFDEBUGLINE_H
11 
12 #include "llvm/ADT/Optional.h"
13 #include "llvm/ADT/StringRef.h"
20 #include "llvm/Support/MD5.h"
21 #include "llvm/Support/Path.h"
22 #include <cstdint>
23 #include <map>
24 #include <string>
25 #include <vector>
26 
27 namespace llvm {
28 
29 class DWARFUnit;
30 class raw_ostream;
31 
33 public:
34  struct FileNameEntry {
35  FileNameEntry() = default;
36 
43  };
44 
45  /// Tracks which optional content types are present in a DWARF file name
46  /// entry format.
48  ContentTypeTracker() = default;
49 
50  /// Whether filename entries provide a modification timestamp.
51  bool HasModTime = false;
52  /// Whether filename entries provide a file size.
53  bool HasLength = false;
54  /// For v5, whether filename entries provide an MD5 checksum.
55  bool HasMD5 = false;
56  /// For v5, whether filename entries provide source text.
57  bool HasSource = false;
58 
59  /// Update tracked content types with \p ContentType.
61  };
62 
63  struct Prologue {
64  Prologue();
65 
66  /// The size in bytes of the statement information for this compilation unit
67  /// (not including the total_length field itself).
69  /// Version, address size (starting in v5), and DWARF32/64 format; these
70  /// parameters affect interpretation of forms (used in the directory and
71  /// file tables starting with v5).
73  /// The number of bytes following the prologue_length field to the beginning
74  /// of the first byte of the statement program itself.
76  /// In v5, size in bytes of a segment selector.
77  uint8_t SegSelectorSize;
78  /// The size in bytes of the smallest target machine instruction. Statement
79  /// program opcodes that alter the address register first multiply their
80  /// operands by this value.
81  uint8_t MinInstLength;
82  /// The maximum number of individual operations that may be encoded in an
83  /// instruction.
84  uint8_t MaxOpsPerInst;
85  /// The initial value of theis_stmtregister.
86  uint8_t DefaultIsStmt;
87  /// This parameter affects the meaning of the special opcodes. See below.
88  int8_t LineBase;
89  /// This parameter affects the meaning of the special opcodes. See below.
90  uint8_t LineRange;
91  /// The number assigned to the first special opcode.
92  uint8_t OpcodeBase;
93  /// This tracks which optional file format content types are present.
95  std::vector<uint8_t> StandardOpcodeLengths;
96  std::vector<DWARFFormValue> IncludeDirectories;
97  std::vector<FileNameEntry> FileNames;
98 
99  const dwarf::FormParams getFormParams() const { return FormParams; }
100  uint16_t getVersion() const { return FormParams.Version; }
101  uint8_t getAddressSize() const { return FormParams.AddrSize; }
102  bool isDWARF64() const { return FormParams.Format == dwarf::DWARF64; }
103 
104  uint32_t sizeofTotalLength() const { return isDWARF64() ? 12 : 4; }
105 
106  uint32_t sizeofPrologueLength() const { return isDWARF64() ? 8 : 4; }
107 
108  bool totalLengthIsValid() const;
109 
110  /// Length of the prologue in bytes.
111  uint64_t getLength() const;
112 
113  /// Get DWARF-version aware access to the file name entry at the provided
114  /// index.
117 
118  bool hasFileAtIndex(uint64_t FileIndex) const;
119 
121 
122  bool
123  getFileNameByIndex(uint64_t FileIndex, StringRef CompDir,
125  std::string &Result,
127 
128  void clear();
129  void dump(raw_ostream &OS, DIDumpOptions DumpOptions) const;
131  function_ref<void(Error)> RecoverableErrorHandler,
132  const DWARFContext &Ctx, const DWARFUnit *U = nullptr);
133  };
134 
135  /// Standard .debug_line state machine structure.
136  struct Row {
137  explicit Row(bool DefaultIsStmt = false);
138 
139  /// Called after a row is appended to the matrix.
140  void postAppend();
141  void reset(bool DefaultIsStmt);
142  void dump(raw_ostream &OS) const;
143 
144  static void dumpTableHeader(raw_ostream &OS, unsigned Indent);
145 
146  static bool orderByAddress(const Row &LHS, const Row &RHS) {
147  return std::tie(LHS.Address.SectionIndex, LHS.Address.Address) <
148  std::tie(RHS.Address.SectionIndex, RHS.Address.Address);
149  }
150 
151  /// The program-counter value corresponding to a machine instruction
152  /// generated by the compiler and section index pointing to the section
153  /// containg this PC. If relocation information is present then section
154  /// index is the index of the section which contains above address.
155  /// Otherwise this is object::SectionedAddress::Undef value.
157  /// An unsigned integer indicating a source line number. Lines are numbered
158  /// beginning at 1. The compiler may emit the value 0 in cases where an
159  /// instruction cannot be attributed to any source line.
161  /// An unsigned integer indicating a column number within a source line.
162  /// Columns are numbered beginning at 1. The value 0 is reserved to indicate
163  /// that a statement begins at the 'left edge' of the line.
165  /// An unsigned integer indicating the identity of the source file
166  /// corresponding to a machine instruction.
168  /// An unsigned integer representing the DWARF path discriminator value
169  /// for this location.
171  /// An unsigned integer whose value encodes the applicable instruction set
172  /// architecture for the current instruction.
173  uint8_t Isa;
174  /// A boolean indicating that the current instruction is the beginning of a
175  /// statement.
176  uint8_t IsStmt : 1,
177  /// A boolean indicating that the current instruction is the
178  /// beginning of a basic block.
180  /// A boolean indicating that the current address is that of the
181  /// first byte after the end of a sequence of target machine
182  /// instructions.
184  /// A boolean indicating that the current address is one (of possibly
185  /// many) where execution should be suspended for an entry breakpoint
186  /// of a function.
188  /// A boolean indicating that the current address is one (of possibly
189  /// many) where execution should be suspended for an exit breakpoint
190  /// of a function.
192  };
193 
194  /// Represents a series of contiguous machine instructions. Line table for
195  /// each compilation unit may consist of multiple sequences, which are not
196  /// guaranteed to be in the order of ascending instruction address.
197  struct Sequence {
198  Sequence();
199 
200  /// Sequence describes instructions at address range [LowPC, HighPC)
201  /// and is described by line table rows [FirstRowIndex, LastRowIndex).
204  /// If relocation information is present then this is the index of the
205  /// section which contains above addresses. Otherwise this is
206  /// object::SectionedAddress::Undef value.
208  unsigned FirstRowIndex;
209  unsigned LastRowIndex;
210  bool Empty;
211 
212  void reset();
213 
214  static bool orderByHighPC(const Sequence &LHS, const Sequence &RHS) {
215  return std::tie(LHS.SectionIndex, LHS.HighPC) <
216  std::tie(RHS.SectionIndex, RHS.HighPC);
217  }
218 
219  bool isValid() const {
220  return !Empty && (LowPC < HighPC) && (FirstRowIndex < LastRowIndex);
221  }
222 
224  return SectionIndex == PC.SectionIndex &&
225  (LowPC <= PC.Address && PC.Address < HighPC);
226  }
227  };
228 
229  struct LineTable {
230  LineTable();
231 
232  /// Represents an invalid row
233  const uint32_t UnknownRowIndex = UINT32_MAX;
234 
235  void appendRow(const DWARFDebugLine::Row &R) { Rows.push_back(R); }
236 
238  Sequences.push_back(S);
239  }
240 
241  /// Returns the index of the row with file/line info for a given address,
242  /// or UnknownRowIndex if there is no such row.
244 
246  std::vector<uint32_t> &Result) const;
247 
248  bool hasFileAtIndex(uint64_t FileIndex) const {
249  return Prologue.hasFileAtIndex(FileIndex);
250  }
251 
254  }
255 
256  /// Extracts filename by its index in filename table in prologue.
257  /// In Dwarf 4, the files are 1-indexed and the current compilation file
258  /// name is not represented in the list. In DWARF v5, the files are
259  /// 0-indexed and the primary source file has the index 0.
260  /// Returns true on success.
261  bool getFileNameByIndex(uint64_t FileIndex, StringRef CompDir,
263  std::string &Result) const {
264  return Prologue.getFileNameByIndex(FileIndex, CompDir, Kind, Result);
265  }
266 
267  /// Fills the Result argument with the file and line information
268  /// corresponding to Address. Returns true on success.
270  const char *CompDir,
272  DILineInfo &Result) const;
273 
274  void dump(raw_ostream &OS, DIDumpOptions DumpOptions) const;
275  void clear();
276 
277  /// Parse prologue and all rows.
278  Error parse(DWARFDataExtractor &DebugLineData, uint64_t *OffsetPtr,
279  const DWARFContext &Ctx, const DWARFUnit *U,
280  function_ref<void(Error)> RecoverableErrorHandler,
281  raw_ostream *OS = nullptr, bool Verbose = false);
282 
283  using RowVector = std::vector<Row>;
284  using RowIter = RowVector::const_iterator;
285  using SequenceVector = std::vector<Sequence>;
286  using SequenceIter = SequenceVector::const_iterator;
287 
291 
292  private:
293  uint32_t findRowInSeq(const DWARFDebugLine::Sequence &Seq,
294  object::SectionedAddress Address) const;
296  getSourceByIndex(uint64_t FileIndex,
298 
299  uint32_t lookupAddressImpl(object::SectionedAddress Address) const;
300 
301  bool lookupAddressRangeImpl(object::SectionedAddress Address, uint64_t Size,
302  std::vector<uint32_t> &Result) const;
303  };
304 
305  const LineTable *getLineTable(uint64_t Offset) const;
308  const DWARFContext &Ctx, const DWARFUnit *U,
309  function_ref<void(Error)> RecoverableErrorHandler);
310 
311  /// Helper to allow for parsing of an entire .debug_line section in sequence.
313  public:
314  using LineToUnitMap = std::map<uint64_t, DWARFUnit *>;
315 
318 
319  /// Get the next line table from the section. Report any issues via the
320  /// handlers.
321  ///
322  /// \param RecoverableErrorHandler - any issues that don't prevent further
323  /// parsing of the table will be reported through this handler.
324  /// \param UnrecoverableErrorHandler - any issues that prevent further
325  /// parsing of the table will be reported through this handler.
326  /// \param OS - if not null, the parser will print information about the
327  /// table as it parses it.
328  /// \param Verbose - if true, the parser will print verbose information when
329  /// printing to the output.
330  LineTable parseNext(function_ref<void(Error)> RecoverableErrorHandler,
331  function_ref<void(Error)> UnrecoverableErrorHandler,
332  raw_ostream *OS = nullptr, bool Verbose = false);
333 
334  /// Skip the current line table and go to the following line table (if
335  /// present) immediately.
336  ///
337  /// \param RecoverableErrorHandler - report any recoverable prologue
338  /// parsing issues via this handler.
339  /// \param UnrecoverableErrorHandler - report any unrecoverable prologue
340  /// parsing issues via this handler.
341  void skip(function_ref<void(Error)> RecoverableErrorHandler,
342  function_ref<void(Error)> UnrecoverableErrorHandler);
343 
344  /// Indicates if the parser has parsed as much as possible.
345  ///
346  /// \note Certain problems with the line table structure might mean that
347  /// parsing stops before the end of the section is reached.
348  bool done() const { return Done; }
349 
350  /// Get the offset the parser has reached.
351  uint64_t getOffset() const { return Offset; }
352 
353  private:
354  DWARFUnit *prepareToParse(uint64_t Offset);
355  void moveToNextTable(uint64_t OldOffset, const Prologue &P);
356 
357  LineToUnitMap LineToUnit;
358 
359  DWARFDataExtractor &DebugLineData;
360  const DWARFContext &Context;
361  uint64_t Offset = 0;
362  bool Done = false;
363  };
364 
365 private:
366  struct ParsingState {
367  ParsingState(struct LineTable *LT, uint64_t TableOffset,
369 
370  void resetRowAndSequence();
371  void appendRowToMatrix();
372 
373  /// Advance the address by the \p OperationAdvance value. \returns the
374  /// amount advanced by.
375  uint64_t advanceAddr(uint64_t OperationAdvance, uint8_t Opcode,
376  uint64_t OpcodeOffset);
377 
380  uint8_t AdjustedOpcode;
381  };
382 
383  /// Advance the address as required by the specified \p Opcode.
384  /// \returns the amount advanced by and the calculated adjusted opcode.
385  AddrAndAdjustedOpcode advanceAddrForOpcode(uint8_t Opcode,
386  uint64_t OpcodeOffset);
387 
390  int32_t Line;
391  };
392 
393  /// Advance the line and address as required by the specified special \p
394  /// Opcode. \returns the address and line delta.
395  AddrAndLineDelta handleSpecialOpcode(uint8_t Opcode, uint64_t OpcodeOffset);
396 
397  /// Line table we're currently parsing.
398  struct LineTable *LineTable;
399  struct Row Row;
400  struct Sequence Sequence;
401 
402  private:
403  uint64_t LineTableOffset;
404 
405  bool ReportAdvanceAddrProblem = true;
406  bool ReportBadLineRange = true;
408  };
409 
410  using LineTableMapTy = std::map<uint64_t, LineTable>;
411  using LineTableIter = LineTableMapTy::iterator;
412  using LineTableConstIter = LineTableMapTy::const_iterator;
413 
414  LineTableMapTy LineTableMap;
415 };
416 
417 } // end namespace llvm
418 
419 #endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGLINE_H
llvm::Check::Size
@ Size
Definition: FileCheck.h:73
DWARFFormValue.h
llvm::dwarf::LineNumberEntryFormat
LineNumberEntryFormat
Definition: Dwarf.h:372
llvm::DWARFDebugLine::Prologue::sizeofTotalLength
uint32_t sizeofTotalLength() const
Definition: DWARFDebugLine.h:104
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AllocatorList.h:23
DWARFCompileUnit.h
llvm::DWARFDebugLine::SectionParser::getOffset
uint64_t getOffset() const
Get the offset the parser has reached.
Definition: DWARFDebugLine.h:351
llvm::DWARFDebugLine::Sequence::reset
void reset()
Definition: DWARFDebugLine.cpp:505
llvm::DWARFDebugLine::LineTable::SequenceVector
std::vector< Sequence > SequenceVector
Definition: DWARFDebugLine.h:285
Optional.h
llvm::DWARFDebugLine::getOrParseLineTable
Expected< const LineTable * > getOrParseLineTable(DWARFDataExtractor &DebugLineData, uint64_t Offset, const DWARFContext &Ctx, const DWARFUnit *U, function_ref< void(Error)> RecoverableErrorHandler)
Definition: DWARFDebugLine.cpp:580
llvm::DWARFDebugLine::Prologue::getAddressSize
uint8_t getAddressSize() const
Definition: DWARFDebugLine.h:101
llvm::DWARFDebugLine::Sequence::LastRowIndex
unsigned LastRowIndex
Definition: DWARFDebugLine.h:209
StringRef.h
P
This currently compiles esp xmm0 movsd esp eax eax esp ret We should use not the dag combiner This is because dagcombine2 needs to be able to see through the X86ISD::Wrapper which DAGCombine can t really do The code for turning x load into a single vector load is target independent and should be moved to the dag combiner The code for turning x load into a vector load can only handle a direct load from a global or a direct load from the stack It should be generalized to handle any load from P
Definition: README-SSE.txt:411
llvm::DWARFDebugLine::SectionParser::done
bool done() const
Indicates if the parser has parsed as much as possible.
Definition: DWARFDebugLine.h:348
llvm::DWARFDebugLine::LineTable::LineTable
LineTable()
Definition: DWARFDebugLine.cpp:514
Path.h
llvm::DWARFDebugLine::Row::EpilogueBegin
uint8_t EpilogueBegin
A boolean indicating that the current address is one (of possibly many) where execution should be sus...
Definition: DWARFDebugLine.h:191
llvm::DWARFDebugLine::Prologue::ContentTypes
ContentTypeTracker ContentTypes
This tracks which optional file format content types are present.
Definition: DWARFDebugLine.h:94
llvm::object::SectionedAddress::Address
uint64_t Address
Definition: ObjectFile.h:147
llvm::DWARFDebugLine::Row::IsStmt
uint8_t IsStmt
A boolean indicating that the current instruction is the beginning of a statement.
Definition: DWARFDebugLine.h:176
llvm::DWARFDebugLine::Row::dump
void dump(raw_ostream &OS) const
Definition: DWARFDebugLine.cpp:494
llvm::DWARFDebugLine::Prologue::IncludeDirectories
std::vector< DWARFFormValue > IncludeDirectories
Definition: DWARFDebugLine.h:96
llvm::DWARFDebugLine::Row::orderByAddress
static bool orderByAddress(const Row &LHS, const Row &RHS)
Definition: DWARFDebugLine.h:146
llvm::DWARFDebugLine::LineTable::appendSequence
void appendSequence(const DWARFDebugLine::Sequence &S)
Definition: DWARFDebugLine.h:237
llvm::DWARFContext
DWARFContext This data structure is the top level entity that deals with dwarf debug information pars...
Definition: DWARFContext.h:53
llvm::DWARFDebugLine::LineTable::UnknownRowIndex
const uint32_t UnknownRowIndex
Represents an invalid row.
Definition: DWARFDebugLine.h:233
llvm::DWARFDebugLine::Prologue::isDWARF64
bool isDWARF64() const
Definition: DWARFDebugLine.h:102
llvm::DWARFDebugLine::ParsingState::AddrAndLineDelta::Line
int32_t Line
Definition: DWARFDebugLine.h:390
llvm::dwarf::FormParams::AddrSize
uint8_t AddrSize
Definition: Dwarf.h:650
DWARFRelocMap.h
llvm::Optional< uint64_t >
llvm::DWARFDebugLine::Prologue::parse
Error parse(DWARFDataExtractor Data, uint64_t *OffsetPtr, function_ref< void(Error)> RecoverableErrorHandler, const DWARFContext &Ctx, const DWARFUnit *U=nullptr)
Definition: DWARFDebugLine.cpp:359
llvm::DWARFDebugLine::Prologue::TotalLength
uint64_t TotalLength
The size in bytes of the statement information for this compilation unit (not including the total_len...
Definition: DWARFDebugLine.h:68
Offset
uint64_t Offset
Definition: ELFObjHandler.cpp:81
llvm::DWARFDebugLine::ContentTypeTracker::HasModTime
bool HasModTime
Whether filename entries provide a modification timestamp.
Definition: DWARFDebugLine.h:51
llvm::Expected
Tagged union holding either a T or a Error.
Definition: APFloat.h:42
llvm::DWARFDebugLine::FileNameEntry::FileNameEntry
FileNameEntry()=default
llvm::DWARFDebugLine::LineTable::RowIter
RowVector::const_iterator RowIter
Definition: DWARFDebugLine.h:284
llvm::DWARFDebugLine::ContentTypeTracker::HasLength
bool HasLength
Whether filename entries provide a file size.
Definition: DWARFDebugLine.h:53
llvm::DWARFDataExtractor
A DataExtractor (typically for an in-memory copy of an object-file section) plus a relocation map for...
Definition: DWARFDataExtractor.h:21
llvm::DWARFDebugLine::LineTable::getFileLineInfoForAddress
bool getFileLineInfoForAddress(object::SectionedAddress Address, const char *CompDir, DILineInfoSpecifier::FileLineInfoKind Kind, DILineInfo &Result) const
Fills the Result argument with the file and line information corresponding to Address.
Definition: DWARFDebugLine.cpp:1399
llvm::DWARFDebugLine::Prologue::sizeofPrologueLength
uint32_t sizeofPrologueLength() const
Definition: DWARFDebugLine.h:106
llvm::dwarf::FormParams::Format
DwarfFormat Format
Definition: Dwarf.h:651
llvm::Data
@ Data
Definition: SIMachineScheduler.h:55
llvm::DWARFDebugLine::Prologue::getFormParams
const dwarf::FormParams getFormParams() const
Definition: DWARFDebugLine.h:99
llvm::DWARFDebugLine::Prologue::LineRange
uint8_t LineRange
This parameter affects the meaning of the special opcodes. See below.
Definition: DWARFDebugLine.h:90
llvm::DWARFDebugLine::Row::BasicBlock
uint8_t BasicBlock
A boolean indicating that the current instruction is the beginning of a basic block.
Definition: DWARFDebugLine.h:179
llvm::DWARFDebugLine::getLineTable
const LineTable * getLineTable(uint64_t Offset) const
Definition: DWARFDebugLine.cpp:573
llvm::object::SectionedAddress::SectionIndex
uint64_t SectionIndex
Definition: ObjectFile.h:148
llvm::DWARFDebugLine::Sequence::Sequence
Sequence()
Definition: DWARFDebugLine.cpp:503
llvm::AArch64CC::LT
@ LT
Definition: AArch64BaseInfo.h:266
llvm::DWARFDebugLine::Row::Row
Row(bool DefaultIsStmt=false)
Definition: DWARFDebugLine.cpp:462
llvm::DWARFDebugLine::Row::EndSequence
uint8_t EndSequence
A boolean indicating that the current address is that of the first byte after the end of a sequence o...
Definition: DWARFDebugLine.h:183
llvm::DWARFDebugLine::Prologue::MinInstLength
uint8_t MinInstLength
The size in bytes of the smallest target machine instruction.
Definition: DWARFDebugLine.h:81
llvm::DWARFDebugLine::ParsingState::AddrAndLineDelta
Definition: DWARFDebugLine.h:388
llvm::DWARFDebugLine::Prologue::getFileNameEntry
const llvm::DWARFDebugLine::FileNameEntry & getFileNameEntry(uint64_t Index) const
Get DWARF-version aware access to the file name entry at the provided index.
Definition: DWARFDebugLine.cpp:95
ErrorHandler
static fatal_error_handler_t ErrorHandler
Definition: ErrorHandling.cpp:42
llvm::DWARFDebugLine::Prologue::MaxOpsPerInst
uint8_t MaxOpsPerInst
The maximum number of individual operations that may be encoded in an instruction.
Definition: DWARFDebugLine.h:84
llvm::DWARFDebugLine::Sequence::SectionIndex
uint64_t SectionIndex
If relocation information is present then this is the index of the section which contains above addre...
Definition: DWARFDebugLine.h:207
llvm::DWARFDebugLine::Row
Standard .debug_line state machine structure.
Definition: DWARFDebugLine.h:136
MD5.h
llvm::DWARFDebugLine::Prologue::hasFileAtIndex
bool hasFileAtIndex(uint64_t FileIndex) const
Definition: DWARFDebugLine.cpp:73
llvm::DWARFDebugLine::LineTable::parse
Error parse(DWARFDataExtractor &DebugLineData, uint64_t *OffsetPtr, const DWARFContext &Ctx, const DWARFUnit *U, function_ref< void(Error)> RecoverableErrorHandler, raw_ostream *OS=nullptr, bool Verbose=false)
Parse prologue and all rows.
Definition: DWARFDebugLine.cpp:724
C
(vector float) vec_cmpeq(*A, *B) C
Definition: README_ALTIVEC.txt:86
llvm::DWARFDebugLine::Prologue::getLastValidFileIndex
Optional< uint64_t > getLastValidFileIndex() const
Definition: DWARFDebugLine.cpp:82
llvm::DWARFDebugLine::LineTable::appendRow
void appendRow(const DWARFDebugLine::Row &R)
Definition: DWARFDebugLine.h:235
llvm::DWARFDebugLine::Row::Isa
uint8_t Isa
An unsigned integer whose value encodes the applicable instruction set architecture for the current i...
Definition: DWARFDebugLine.h:173
llvm::DWARFDebugLine::Prologue::OpcodeBase
uint8_t OpcodeBase
The number assigned to the first special opcode.
Definition: DWARFDebugLine.h:92
llvm::DWARFDebugLine::Prologue::getFileNameByIndex
bool getFileNameByIndex(uint64_t FileIndex, StringRef CompDir, DILineInfoSpecifier::FileLineInfoKind Kind, std::string &Result, sys::path::Style Style=sys::path::Style::native) const
Definition: DWARFDebugLine.cpp:1347
llvm::DWARFDebugLine::Prologue::FormParams
dwarf::FormParams FormParams
Version, address size (starting in v5), and DWARF32/64 format; these parameters affect interpretation...
Definition: DWARFDebugLine.h:72
llvm::DWARFDebugLine::LineTable::Rows
RowVector Rows
Definition: DWARFDebugLine.h:289
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:53
llvm::DWARFFormValue
Definition: DWARFFormValue.h:26
llvm::DWARFDebugLine::SectionParser::parseNext
LineTable parseNext(function_ref< void(Error)> RecoverableErrorHandler, function_ref< void(Error)> UnrecoverableErrorHandler, raw_ostream *OS=nullptr, bool Verbose=false)
Get the next line table from the section.
Definition: DWARFDebugLine.cpp:1444
llvm::DWARFDebugLine::Prologue::totalLengthIsValid
bool totalLengthIsValid() const
Definition: DWARFDebugLine.cpp:1440
llvm::sys::path::Style
Style
Definition: Path.h:28
llvm::DWARFDebugLine::FileNameEntry::Length
uint64_t Length
Definition: DWARFDebugLine.h:40
llvm::DWARFDebugLine::Prologue::SegSelectorSize
uint8_t SegSelectorSize
In v5, size in bytes of a segment selector.
Definition: DWARFDebugLine.h:77
llvm::DWARFDebugLine::Prologue::PrologueLength
uint64_t PrologueLength
The number of bytes following the prologue_length field to the beginning of the first byte of the sta...
Definition: DWARFDebugLine.h:75
llvm::lltok::Kind
Kind
Definition: LLToken.h:18
llvm::DWARFDebugLine::LineTable::lookupAddressRange
bool lookupAddressRange(object::SectionedAddress Address, uint64_t Size, std::vector< uint32_t > &Result) const
Definition: DWARFDebugLine.cpp:1265
llvm::DWARFDebugLine
Definition: DWARFDebugLine.h:32
llvm::function_ref
An efficient, type-erasing, non-owning reference to a callable.
Definition: STLExtras.h:168
llvm::DWARFDebugLine::Sequence::HighPC
uint64_t HighPC
Definition: DWARFDebugLine.h:203
llvm::DWARFDebugLine::Sequence::orderByHighPC
static bool orderByHighPC(const Sequence &LHS, const Sequence &RHS)
Definition: DWARFDebugLine.h:214
llvm::DWARFDebugLine::Sequence
Represents a series of contiguous machine instructions.
Definition: DWARFDebugLine.h:197
llvm::DWARFDebugLine::Prologue
Definition: DWARFDebugLine.h:63
llvm::DWARFDebugLine::ParsingState::AddrAndAdjustedOpcode::AddrDelta
uint64_t AddrDelta
Definition: DWARFDebugLine.h:379
llvm::DWARFDebugLine::LineTable::getFileNameByIndex
bool getFileNameByIndex(uint64_t FileIndex, StringRef CompDir, DILineInfoSpecifier::FileLineInfoKind Kind, std::string &Result) const
Extracts filename by its index in filename table in prologue.
Definition: DWARFDebugLine.h:261
Index
uint32_t Index
Definition: ELFObjHandler.cpp:84
uint64_t
llvm::DWARFDebugLine::SectionParser
Helper to allow for parsing of an entire .debug_line section in sequence.
Definition: DWARFDebugLine.h:312
llvm::DWARFDebugLine::ContentTypeTracker::ContentTypeTracker
ContentTypeTracker()=default
llvm::DWARFDebugLine::ParsingState::AddrAndAdjustedOpcode
Definition: DWARFDebugLine.h:378
llvm::DWARFDebugLine::Row::dumpTableHeader
static void dumpTableHeader(raw_ostream &OS, unsigned Indent)
Definition: DWARFDebugLine.cpp:486
llvm::DWARFDebugLine::Row::reset
void reset(bool DefaultIsStmt)
Definition: DWARFDebugLine.cpp:471
llvm::DWARFDebugLine::LineTable::Sequences
SequenceVector Sequences
Definition: DWARFDebugLine.h:290
llvm::DILineInfo
A format-neutral container for source line information.
Definition: DIContext.h:31
llvm::DILineInfoSpecifier::FileLineInfoKind
FileLineInfoKind
Definition: DIContext.h:136
llvm::DWARFDebugLine::FileNameEntry::DirIdx
uint64_t DirIdx
Definition: DWARFDebugLine.h:38
llvm::HexStyle::Style
Style
Definition: MCInstPrinter.h:32
llvm::dwarf::FormParams
A helper struct providing information about the byte size of DW_FORM values that vary in size dependi...
Definition: Dwarf.h:648
llvm::DWARFDebugLine::ContentTypeTracker::HasMD5
bool HasMD5
For v5, whether filename entries provide an MD5 checksum.
Definition: DWARFDebugLine.h:55
llvm::sys::path::Style::native
@ native
llvm::DWARFDebugLine::LineTable::lookupAddress
uint32_t lookupAddress(object::SectionedAddress Address) const
Returns the index of the row with file/line info for a given address, or UnknownRowIndex if there is ...
Definition: DWARFDebugLine.cpp:1237
llvm::DWARFDebugLine::Sequence::FirstRowIndex
unsigned FirstRowIndex
Definition: DWARFDebugLine.h:208
llvm::DWARFDebugLine::Row::postAppend
void postAppend()
Called after a row is appended to the matrix.
Definition: DWARFDebugLine.cpp:464
llvm::DWARFDebugLine::ParsingState::AddrAndAdjustedOpcode::AdjustedOpcode
uint8_t AdjustedOpcode
Definition: DWARFDebugLine.h:380
llvm::DWARFDebugLine::Row::Discriminator
uint32_t Discriminator
An unsigned integer representing the DWARF path discriminator value for this location.
Definition: DWARFDebugLine.h:170
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:57
llvm::DWARFDebugLine::FileNameEntry
Definition: DWARFDebugLine.h:34
uint32_t
S
add sub stmia L5 ldr r0 bl L_printf $stub Instead of a and a wouldn t it be better to do three moves *Return an aggregate type is even return S
Definition: README.txt:210
llvm::DWARFDebugLine::ContentTypeTracker
Tracks which optional content types are present in a DWARF file name entry format.
Definition: DWARFDebugLine.h:47
llvm::MD5::MD5Result
Definition: MD5.h:43
llvm::DWARFDebugLine::LineTable::SequenceIter
SequenceVector::const_iterator SequenceIter
Definition: DWARFDebugLine.h:286
DIContext.h
llvm::DWARFDebugLine::LineTable::hasFileAtIndex
bool hasFileAtIndex(uint64_t FileIndex) const
Definition: DWARFDebugLine.h:248
uint16_t
llvm::DWARFDebugLine::Sequence::isValid
bool isValid() const
Definition: DWARFDebugLine.h:219
llvm::DWARFUnit
Definition: DWARFUnit.h:203
llvm::DWARFDebugLine::Prologue::getLength
uint64_t getLength() const
Length of the prologue in bytes.
Definition: DWARFDebugLine.cpp:351
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
llvm::DWARFDebugLine::Row::Line
uint32_t Line
An unsigned integer indicating a source line number.
Definition: DWARFDebugLine.h:160
llvm::DWARFDebugLine::ContentTypeTracker::HasSource
bool HasSource
For v5, whether filename entries provide source text.
Definition: DWARFDebugLine.h:57
llvm::DWARFDebugLine::Prologue::DefaultIsStmt
uint8_t DefaultIsStmt
The initial value of theis_stmtregister.
Definition: DWARFDebugLine.h:86
DWARFTypeUnit.h
llvm::DWARFDebugLine::Row::Address
object::SectionedAddress Address
The program-counter value corresponding to a machine instruction generated by the compiler and sectio...
Definition: DWARFDebugLine.h:156
llvm::DWARFDebugLine::FileNameEntry::Checksum
MD5::MD5Result Checksum
Definition: DWARFDebugLine.h:41
llvm::DWARFDebugLine::LineTable::getLastValidFileIndex
Optional< uint64_t > getLastValidFileIndex() const
Definition: DWARFDebugLine.h:252
llvm::DWARFDebugLine::Sequence::containsPC
bool containsPC(object::SectionedAddress PC) const
Definition: DWARFDebugLine.h:223
llvm::DWARFDebugLine::Prologue::LineBase
int8_t LineBase
This parameter affects the meaning of the special opcodes. See below.
Definition: DWARFDebugLine.h:88
llvm::DWARFDebugLine::Row::Column
uint16_t Column
An unsigned integer indicating a column number within a source line.
Definition: DWARFDebugLine.h:164
llvm::dwarf::FormParams::Version
uint16_t Version
Definition: Dwarf.h:649
llvm::DWARFDebugLine::Prologue::FileNames
std::vector< FileNameEntry > FileNames
Definition: DWARFDebugLine.h:97
llvm::DWARFDebugLine::ParsingState::AddrAndLineDelta::Address
uint64_t Address
Definition: DWARFDebugLine.h:389
llvm::DWARFDebugLine::Prologue::clear
void clear()
Definition: DWARFDebugLine.cpp:105
llvm::DWARFDebugLine::LineTable::RowVector
std::vector< Row > RowVector
Definition: DWARFDebugLine.h:283
llvm::DWARFDebugLine::FileNameEntry::Source
DWARFFormValue Source
Definition: DWARFDebugLine.h:42
llvm::DWARFDebugLine::Prologue::Prologue
Prologue()
Definition: DWARFDebugLine.cpp:71
llvm::DWARFDebugLine::Row::PrologueEnd
uint8_t PrologueEnd
A boolean indicating that the current address is one (of possibly many) where execution should be sus...
Definition: DWARFDebugLine.h:187
llvm::DWARFDebugLine::SectionParser::skip
void skip(function_ref< void(Error)> RecoverableErrorHandler, function_ref< void(Error)> UnrecoverableErrorHandler)
Skip the current line table and go to the following line table (if present) immediately.
Definition: DWARFDebugLine.cpp:1460
llvm::DWARFDebugLine::Prologue::StandardOpcodeLengths
std::vector< uint8_t > StandardOpcodeLengths
Definition: DWARFDebugLine.h:95
llvm::DWARFDebugLine::Prologue::getVersion
uint16_t getVersion() const
Definition: DWARFDebugLine.h:100
llvm::object::SectionedAddress
Definition: ObjectFile.h:144
llvm::DWARFDebugLine::Sequence::LowPC
uint64_t LowPC
Sequence describes instructions at address range [LowPC, HighPC) and is described by line table rows ...
Definition: DWARFDebugLine.h:202
llvm::iterator_range
A range adaptor for a pair of iterators.
Definition: iterator_range.h:30
llvm::DWARFDebugLine::LineTable
Definition: DWARFDebugLine.h:229
llvm::DWARFDebugLine::SectionParser::SectionParser
SectionParser(DWARFDataExtractor &Data, const DWARFContext &C, DWARFUnitVector::iterator_range Units)
Definition: DWARFDebugLine.cpp:1431
llvm::DWARFDebugLine::Row::File
uint16_t File
An unsigned integer indicating the identity of the source file corresponding to a machine instruction...
Definition: DWARFDebugLine.h:167
llvm::DWARFDebugLine::SectionParser::LineToUnitMap
std::map< uint64_t, DWARFUnit * > LineToUnitMap
Definition: DWARFDebugLine.h:314
llvm::DWARFDebugLine::FileNameEntry::Name
DWARFFormValue Name
Definition: DWARFDebugLine.h:37
llvm::dwarf::DWARF64
@ DWARF64
Definition: Dwarf.h:92
llvm::DWARFDebugLine::FileNameEntry::ModTime
uint64_t ModTime
Definition: DWARFDebugLine.h:39
llvm::DWARFDebugLine::LineTable::dump
void dump(raw_ostream &OS, DIDumpOptions DumpOptions) const
Definition: DWARFDebugLine.cpp:516
llvm::DWARFDebugLine::LineTable::clear
void clear()
Definition: DWARFDebugLine.cpp:533
llvm::DWARFDebugLine::Sequence::Empty
bool Empty
Definition: DWARFDebugLine.h:210
llvm::DWARFDebugLine::ContentTypeTracker::trackContentType
void trackContentType(dwarf::LineNumberEntryFormat ContentType)
Update tracked content types with ContentType.
Definition: DWARFDebugLine.cpp:49
llvm::DWARFDebugLine::Prologue::dump
void dump(raw_ostream &OS, DIDumpOptions DumpOptions) const
Definition: DWARFDebugLine.cpp:117
DWARFDataExtractor.h
llvm::DIDumpOptions
Container for dump options that control which debug information will be dumped.
Definition: DIContext.h:180