LLVM  12.0.0git
DwarfTransformer.h
Go to the documentation of this file.
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"
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.
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.
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 // #ifndef LLVM_DEBUGINFO_GSYM_DWARFTRANSFORMER_H
This class represents lattice values for constants.
Definition: AllocatorList.h:23
DwarfTransformer(DWARFContext &D, raw_ostream &OS, GsymCreator &G)
Create a DWARF transformer.
Function information in GSYM files encodes information for one contiguous address range...
Definition: FunctionInfo.h:88
Definition: regcomp.c:192
Utility class that carries the DWARF compile/type unit and the debug info entry in an object...
Definition: DWARFDie.h:43
A class that transforms the DWARF in a DWARFContext into GSYM information by populating the GsymCreat...
llvm::Error convert(uint32_t NumThreads)
Extract the DWARF from the supplied object file and convert it into the Gsym format in the GsymCreato...
const DataFlowGraph & G
Definition: RDFGraph.cpp:202
DWARFContext This data structure is the top level entity that deals with dwarf debug information pars...
Definition: DWARFContext.h:53
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
GsymCreator is used to emit GSYM data to a stand alone file or section within a file.
Definition: GsymCreator.h:134
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:46
llvm::Error verify(StringRef GsymPath)
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:57