LLVM  13.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 
38  uint64_t DirIdx = 0;
39  uint64_t ModTime = 0;
40  uint64_t Length = 0;
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).
68  uint64_t TotalLength;
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.
75  uint64_t PrologueLength;
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 
114  return LineBase + (int8_t)LineRange - 1;
115  }
116 
117  /// Get DWARF-version aware access to the file name entry at the provided
118  /// index.
120  getFileNameEntry(uint64_t Index) const;
121 
122  bool hasFileAtIndex(uint64_t FileIndex) const;
123 
125 
126  bool
127  getFileNameByIndex(uint64_t FileIndex, StringRef CompDir,
129  std::string &Result,
131 
132  void clear();
133  void dump(raw_ostream &OS, DIDumpOptions DumpOptions) const;
134  Error parse(DWARFDataExtractor Data, uint64_t *OffsetPtr,
135  function_ref<void(Error)> RecoverableErrorHandler,
136  const DWARFContext &Ctx, const DWARFUnit *U = nullptr);
137  };
138 
139  /// Standard .debug_line state machine structure.
140  struct Row {
141  explicit Row(bool DefaultIsStmt = false);
142 
143  /// Called after a row is appended to the matrix.
144  void postAppend();
145  void reset(bool DefaultIsStmt);
146  void dump(raw_ostream &OS) const;
147 
148  static void dumpTableHeader(raw_ostream &OS, unsigned Indent);
149 
150  static bool orderByAddress(const Row &LHS, const Row &RHS) {
151  return std::tie(LHS.Address.SectionIndex, LHS.Address.Address) <
152  std::tie(RHS.Address.SectionIndex, RHS.Address.Address);
153  }
154 
155  /// The program-counter value corresponding to a machine instruction
156  /// generated by the compiler and section index pointing to the section
157  /// containg this PC. If relocation information is present then section
158  /// index is the index of the section which contains above address.
159  /// Otherwise this is object::SectionedAddress::Undef value.
161  /// An unsigned integer indicating a source line number. Lines are numbered
162  /// beginning at 1. The compiler may emit the value 0 in cases where an
163  /// instruction cannot be attributed to any source line.
165  /// An unsigned integer indicating a column number within a source line.
166  /// Columns are numbered beginning at 1. The value 0 is reserved to indicate
167  /// that a statement begins at the 'left edge' of the line.
169  /// An unsigned integer indicating the identity of the source file
170  /// corresponding to a machine instruction.
172  /// An unsigned integer representing the DWARF path discriminator value
173  /// for this location.
175  /// An unsigned integer whose value encodes the applicable instruction set
176  /// architecture for the current instruction.
177  uint8_t Isa;
178  /// A boolean indicating that the current instruction is the beginning of a
179  /// statement.
180  uint8_t IsStmt : 1,
181  /// A boolean indicating that the current instruction is the
182  /// beginning of a basic block.
184  /// A boolean indicating that the current address is that of the
185  /// first byte after the end of a sequence of target machine
186  /// instructions.
188  /// A boolean indicating that the current address is one (of possibly
189  /// many) where execution should be suspended for an entry breakpoint
190  /// of a function.
192  /// A boolean indicating that the current address is one (of possibly
193  /// many) where execution should be suspended for an exit breakpoint
194  /// of a function.
196  };
197 
198  /// Represents a series of contiguous machine instructions. Line table for
199  /// each compilation unit may consist of multiple sequences, which are not
200  /// guaranteed to be in the order of ascending instruction address.
201  struct Sequence {
202  Sequence();
203 
204  /// Sequence describes instructions at address range [LowPC, HighPC)
205  /// and is described by line table rows [FirstRowIndex, LastRowIndex).
206  uint64_t LowPC;
207  uint64_t HighPC;
208  /// If relocation information is present then this is the index of the
209  /// section which contains above addresses. Otherwise this is
210  /// object::SectionedAddress::Undef value.
211  uint64_t SectionIndex;
212  unsigned FirstRowIndex;
213  unsigned LastRowIndex;
214  bool Empty;
215 
216  void reset();
217 
218  static bool orderByHighPC(const Sequence &LHS, const Sequence &RHS) {
219  return std::tie(LHS.SectionIndex, LHS.HighPC) <
220  std::tie(RHS.SectionIndex, RHS.HighPC);
221  }
222 
223  bool isValid() const {
224  return !Empty && (LowPC < HighPC) && (FirstRowIndex < LastRowIndex);
225  }
226 
228  return SectionIndex == PC.SectionIndex &&
229  (LowPC <= PC.Address && PC.Address < HighPC);
230  }
231  };
232 
233  struct LineTable {
234  LineTable();
235 
236  /// Represents an invalid row
237  const uint32_t UnknownRowIndex = UINT32_MAX;
238 
239  void appendRow(const DWARFDebugLine::Row &R) { Rows.push_back(R); }
240 
242  Sequences.push_back(S);
243  }
244 
245  /// Returns the index of the row with file/line info for a given address,
246  /// or UnknownRowIndex if there is no such row.
248 
249  bool lookupAddressRange(object::SectionedAddress Address, uint64_t Size,
250  std::vector<uint32_t> &Result) const;
251 
252  bool hasFileAtIndex(uint64_t FileIndex) const {
253  return Prologue.hasFileAtIndex(FileIndex);
254  }
255 
258  }
259 
260  /// Extracts filename by its index in filename table in prologue.
261  /// In Dwarf 4, the files are 1-indexed and the current compilation file
262  /// name is not represented in the list. In DWARF v5, the files are
263  /// 0-indexed and the primary source file has the index 0.
264  /// Returns true on success.
265  bool getFileNameByIndex(uint64_t FileIndex, StringRef CompDir,
267  std::string &Result) const {
268  return Prologue.getFileNameByIndex(FileIndex, CompDir, Kind, Result);
269  }
270 
271  /// Fills the Result argument with the file and line information
272  /// corresponding to Address. Returns true on success.
274  const char *CompDir,
276  DILineInfo &Result) const;
277 
278  void dump(raw_ostream &OS, DIDumpOptions DumpOptions) const;
279  void clear();
280 
281  /// Parse prologue and all rows.
282  Error parse(DWARFDataExtractor &DebugLineData, uint64_t *OffsetPtr,
283  const DWARFContext &Ctx, const DWARFUnit *U,
284  function_ref<void(Error)> RecoverableErrorHandler,
285  raw_ostream *OS = nullptr, bool Verbose = false);
286 
287  using RowVector = std::vector<Row>;
288  using RowIter = RowVector::const_iterator;
289  using SequenceVector = std::vector<Sequence>;
290  using SequenceIter = SequenceVector::const_iterator;
291 
295 
296  private:
297  uint32_t findRowInSeq(const DWARFDebugLine::Sequence &Seq,
298  object::SectionedAddress Address) const;
300  getSourceByIndex(uint64_t FileIndex,
302 
303  uint32_t lookupAddressImpl(object::SectionedAddress Address) const;
304 
305  bool lookupAddressRangeImpl(object::SectionedAddress Address, uint64_t Size,
306  std::vector<uint32_t> &Result) const;
307  };
308 
309  const LineTable *getLineTable(uint64_t Offset) const;
311  getOrParseLineTable(DWARFDataExtractor &DebugLineData, uint64_t Offset,
312  const DWARFContext &Ctx, const DWARFUnit *U,
313  function_ref<void(Error)> RecoverableErrorHandler);
314 
315  /// Helper to allow for parsing of an entire .debug_line section in sequence.
317  public:
318  using LineToUnitMap = std::map<uint64_t, DWARFUnit *>;
319 
322 
323  /// Get the next line table from the section. Report any issues via the
324  /// handlers.
325  ///
326  /// \param RecoverableErrorHandler - any issues that don't prevent further
327  /// parsing of the table will be reported through this handler.
328  /// \param UnrecoverableErrorHandler - any issues that prevent further
329  /// parsing of the table will be reported through this handler.
330  /// \param OS - if not null, the parser will print information about the
331  /// table as it parses it.
332  /// \param Verbose - if true, the parser will print verbose information when
333  /// printing to the output.
334  LineTable parseNext(function_ref<void(Error)> RecoverableErrorHandler,
335  function_ref<void(Error)> UnrecoverableErrorHandler,
336  raw_ostream *OS = nullptr, bool Verbose = false);
337 
338  /// Skip the current line table and go to the following line table (if
339  /// present) immediately.
340  ///
341  /// \param RecoverableErrorHandler - report any recoverable prologue
342  /// parsing issues via this handler.
343  /// \param UnrecoverableErrorHandler - report any unrecoverable prologue
344  /// parsing issues via this handler.
345  void skip(function_ref<void(Error)> RecoverableErrorHandler,
346  function_ref<void(Error)> UnrecoverableErrorHandler);
347 
348  /// Indicates if the parser has parsed as much as possible.
349  ///
350  /// \note Certain problems with the line table structure might mean that
351  /// parsing stops before the end of the section is reached.
352  bool done() const { return Done; }
353 
354  /// Get the offset the parser has reached.
355  uint64_t getOffset() const { return Offset; }
356 
357  private:
358  DWARFUnit *prepareToParse(uint64_t Offset);
359  void moveToNextTable(uint64_t OldOffset, const Prologue &P);
360 
361  LineToUnitMap LineToUnit;
362 
363  DWARFDataExtractor &DebugLineData;
364  const DWARFContext &Context;
365  uint64_t Offset = 0;
366  bool Done = false;
367  };
368 
369 private:
370  struct ParsingState {
371  ParsingState(struct LineTable *LT, uint64_t TableOffset,
373 
374  void resetRowAndSequence();
375  void appendRowToMatrix();
376 
377  /// Advance the address by the \p OperationAdvance value. \returns the
378  /// amount advanced by.
379  uint64_t advanceAddr(uint64_t OperationAdvance, uint8_t Opcode,
380  uint64_t OpcodeOffset);
381 
383  uint64_t AddrDelta;
384  uint8_t AdjustedOpcode;
385  };
386 
387  /// Advance the address as required by the specified \p Opcode.
388  /// \returns the amount advanced by and the calculated adjusted opcode.
389  AddrAndAdjustedOpcode advanceAddrForOpcode(uint8_t Opcode,
390  uint64_t OpcodeOffset);
391 
393  uint64_t Address;
394  int32_t Line;
395  };
396 
397  /// Advance the line and address as required by the specified special \p
398  /// Opcode. \returns the address and line delta.
399  AddrAndLineDelta handleSpecialOpcode(uint8_t Opcode, uint64_t OpcodeOffset);
400 
401  /// Line table we're currently parsing.
402  struct LineTable *LineTable;
403  struct Row Row;
404  struct Sequence Sequence;
405 
406  private:
407  uint64_t LineTableOffset;
408 
409  bool ReportAdvanceAddrProblem = true;
410  bool ReportBadLineRange = true;
412  };
413 
414  using LineTableMapTy = std::map<uint64_t, LineTable>;
415  using LineTableIter = LineTableMapTy::iterator;
416  using LineTableConstIter = LineTableMapTy::const_iterator;
417 
418  LineTableMapTy LineTableMap;
419 };
420 
421 } // end namespace llvm
422 
423 #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
Definition: AllocatorList.h:23
DWARFCompileUnit.h
llvm::DWARFDebugLine::SectionParser::getOffset
uint64_t getOffset() const
Get the offset the parser has reached.
Definition: DWARFDebugLine.h:355
llvm::DWARFDebugLine::Sequence::reset
void reset()
Definition: DWARFDebugLine.cpp:505
llvm::DWARFDebugLine::LineTable::SequenceVector
std::vector< Sequence > SequenceVector
Definition: DWARFDebugLine.h:289
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:213
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:352
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:195
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:144
llvm::DWARFDebugLine::Row::IsStmt
uint8_t IsStmt
A boolean indicating that the current instruction is the beginning of a statement.
Definition: DWARFDebugLine.h:180
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:150
llvm::DWARFDebugLine::LineTable::appendSequence
void appendSequence(const DWARFDebugLine::Sequence &S)
Definition: DWARFDebugLine.h:241
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:237
llvm::DWARFDebugLine::Prologue::isDWARF64
bool isDWARF64() const
Definition: DWARFDebugLine.h:102
llvm::DWARFDebugLine::ParsingState::AddrAndLineDelta::Line
int32_t Line
Definition: DWARFDebugLine.h:394
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:288
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:56
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:183
llvm::DWARFDebugLine::getLineTable
const LineTable * getLineTable(uint64_t Offset) const
Definition: DWARFDebugLine.cpp:573
llvm::object::SectionedAddress::SectionIndex
uint64_t SectionIndex
Definition: ObjectFile.h:145
llvm::DWARFDebugLine::Sequence::Sequence
Sequence()
Definition: DWARFDebugLine.cpp:503
llvm::AArch64CC::LT
@ LT
Definition: AArch64BaseInfo.h:247
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:187
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:392
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:211
llvm::DWARFDebugLine::Row
Standard .debug_line state machine structure.
Definition: DWARFDebugLine.h:140
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:239
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:177
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:293
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:50
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:207
llvm::DWARFDebugLine::Sequence::orderByHighPC
static bool orderByHighPC(const Sequence &LHS, const Sequence &RHS)
Definition: DWARFDebugLine.h:218
llvm::DWARFDebugLine::Sequence
Represents a series of contiguous machine instructions.
Definition: DWARFDebugLine.h:201
llvm::DWARFDebugLine::Prologue
Definition: DWARFDebugLine.h:63
llvm::DWARFDebugLine::ParsingState::AddrAndAdjustedOpcode::AddrDelta
uint64_t AddrDelta
Definition: DWARFDebugLine.h:383
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:265
Index
uint32_t Index
Definition: ELFObjHandler.cpp:84
llvm::DWARFDebugLine::SectionParser
Helper to allow for parsing of an entire .debug_line section in sequence.
Definition: DWARFDebugLine.h:316
llvm::DWARFDebugLine::ContentTypeTracker::ContentTypeTracker
ContentTypeTracker()=default
llvm::DWARFDebugLine::ParsingState::AddrAndAdjustedOpcode
Definition: DWARFDebugLine.h:382
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:294
llvm::DILineInfo
A format-neutral container for source line information.
Definition: DIContext.h:31
llvm::DILineInfoSpecifier::FileLineInfoKind
FileLineInfoKind
Definition: DIContext.h:143
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:212
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:384
llvm::DWARFDebugLine::Prologue::getMaxLineIncrementForSpecialOpcode
int32_t getMaxLineIncrementForSpecialOpcode() const
Definition: DWARFDebugLine.h:113
llvm::DWARFDebugLine::Row::Discriminator
uint32_t Discriminator
An unsigned integer representing the DWARF path discriminator value for this location.
Definition: DWARFDebugLine.h:174
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:55
llvm::DWARFDebugLine::LineTable::SequenceIter
SequenceVector::const_iterator SequenceIter
Definition: DWARFDebugLine.h:290
DIContext.h
llvm::DWARFDebugLine::LineTable::hasFileAtIndex
bool hasFileAtIndex(uint64_t FileIndex) const
Definition: DWARFDebugLine.h:252
uint16_t
llvm::DWARFDebugLine::Sequence::isValid
bool isValid() const
Definition: DWARFDebugLine.h:223
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:164
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:160
llvm::DWARFDebugLine::FileNameEntry::Checksum
MD5::MD5Result Checksum
Definition: DWARFDebugLine.h:41
llvm::DWARFDebugLine::LineTable::getLastValidFileIndex
Optional< uint64_t > getLastValidFileIndex() const
Definition: DWARFDebugLine.h:256
llvm::DWARFDebugLine::Sequence::containsPC
bool containsPC(object::SectionedAddress PC) const
Definition: DWARFDebugLine.h:227
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:168
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:393
llvm::DWARFDebugLine::Prologue::clear
void clear()
Definition: DWARFDebugLine.cpp:105
llvm::DWARFDebugLine::LineTable::RowVector
std::vector< Row > RowVector
Definition: DWARFDebugLine.h:287
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:191
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:141
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:206
llvm::iterator_range
A range adaptor for a pair of iterators.
Definition: iterator_range.h:30
llvm::DWARFDebugLine::LineTable
Definition: DWARFDebugLine.h:233
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:171
llvm::DWARFDebugLine::SectionParser::LineToUnitMap
std::map< uint64_t, DWARFUnit * > LineToUnitMap
Definition: DWARFDebugLine.h:318
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:214
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:187