Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- DwarfTransformer.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_GSYM_DWARFTRANSFORMER_H
10
#define LLVM_DEBUGINFO_GSYM_DWARFTRANSFORMER_H
11
 
12
#include "llvm/ADT/StringRef.h"
13
#include "llvm/DebugInfo/GSYM/ExtractRanges.h"
14
#include "llvm/Support/Error.h"
15
 
16
namespace llvm {
17
 
18
class raw_ostream;
19
 
20
namespace gsym {
21
 
22
struct CUInfo;
23
struct FunctionInfo;
24
class GsymCreator;
25
 
26
/// A class that transforms the DWARF in a DWARFContext into GSYM information
27
/// by populating the GsymCreator object that it is constructed with. This
28
/// class supports converting all DW_TAG_subprogram DIEs into
29
/// gsym::FunctionInfo objects that includes line table information and inline
30
/// function information. Creating a separate class to transform this data
31
/// allows this class to be unit tested.
32
class DwarfTransformer {
33
public:
34
 
35
  /// Create a DWARF transformer.
36
  ///
37
  /// \param D The DWARF to use when converting to GSYM.
38
  ///
39
  /// \param OS The stream to log warnings and non fatal issues to.
40
  ///
41
  /// \param G The GSYM creator to populate with the function information
42
  /// from the debug info.
43
  DwarfTransformer(DWARFContext &D, raw_ostream &OS, GsymCreator &G) :
44
      DICtx(D), Log(OS), Gsym(G) {}
45
 
46
  /// Extract the DWARF from the supplied object file and convert it into the
47
  /// Gsym format in the GsymCreator object that is passed in. Returns an
48
  /// error if something fatal is encountered.
49
  ///
50
  /// \returns An error indicating any fatal issues that happen when parsing
51
  /// the DWARF, or Error::success() if all goes well.
52
  llvm::Error convert(uint32_t NumThreads);
53
 
54
  llvm::Error verify(StringRef GsymPath);
55
 
56
 
57
private:
58
 
59
  /// Parse the DWARF in the object file and convert it into the GsymCreator.
60
  Error parse();
61
 
62
  /// Handle any DIE (debug info entry) from the DWARF.
63
  ///
64
  /// This function will find all DW_TAG_subprogram DIEs that convert them into
65
  /// GSYM FuntionInfo objects and add them to the GsymCreator supplied during
66
  /// construction. The DIE and all its children will be recursively parsed
67
  /// with calls to this function.
68
  ///
69
  /// \param Strm The thread specific log stream for any non fatal errors and
70
  /// warnings. Once a thread has finished parsing an entire compile unit, all
71
  /// information in this temporary stream will be forwarded to the member
72
  /// variable log. This keeps logging thread safe.
73
  ///
74
  /// \param CUI The compile unit specific information that contains the DWARF
75
  /// line table, cached file list, and other compile unit specific
76
  /// information.
77
  ///
78
  /// \param Die The DWARF debug info entry to parse.
79
  void handleDie(raw_ostream &Strm, CUInfo &CUI, DWARFDie Die);
80
 
81
  DWARFContext &DICtx;
82
  raw_ostream &Log;
83
  GsymCreator &Gsym;
84
 
85
  friend class DwarfTransformerTest;
86
};
87
 
88
} // namespace gsym
89
} // namespace llvm
90
 
91
#endif // LLVM_DEBUGINFO_GSYM_DWARFTRANSFORMER_H