LLVM 17.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
16namespace llvm {
17
18class raw_ostream;
19
20namespace gsym {
21
22struct CUInfo;
23struct FunctionInfo;
24class 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.
33public:
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
55
56
57private:
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
86};
87
88} // namespace gsym
89} // namespace llvm
90
91#endif // LLVM_DEBUGINFO_GSYM_DWARFTRANSFORMER_H
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
expand large fp convert
#define G(x, y, z)
Definition: MD5.cpp:56
ppc ctr loops verify
raw_pwrite_stream & OS
DWARFContext This data structure is the top level entity that deals with dwarf debug information pars...
Definition: DWARFContext.h:46
Utility class that carries the DWARF compile/type unit and the debug info entry in an object.
Definition: DWARFDie.h:42
Lightweight error class with error context and mandatory checking.
Definition: Error.h:156
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
A class that transforms the DWARF in a DWARFContext into GSYM information by populating the GsymCreat...
DwarfTransformer(DWARFContext &D, raw_ostream &OS, GsymCreator &G)
Create a DWARF transformer.
GsymCreator is used to emit GSYM data to a stand alone file or section within a file.
Definition: GsymCreator.h:133
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
Function information in GSYM files encodes information for one contiguous address range.
Definition: FunctionInfo.h:88
Definition: regcomp.c:192