LLVM 22.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"
16#include "llvm/Support/Error.h"
17
18namespace llvm {
19
20class raw_ostream;
21
22namespace gsym {
23
24struct CUInfo;
25struct FunctionInfo;
26class GsymCreator;
28
29/// A class that transforms the DWARF in a DWARFContext into GSYM information
30/// by populating the GsymCreator object that it is constructed with. This
31/// class supports converting all DW_TAG_subprogram DIEs into
32/// gsym::FunctionInfo objects that includes line table information and inline
33/// function information. Creating a separate class to transform this data
34/// allows this class to be unit tested.
36public:
37 /// Create a DWARF transformer.
38 ///
39 /// \param D The DWARF to use when converting to GSYM.
40 ///
41 /// \param G The GSYM creator to populate with the function information
42 /// from the debug info.
43 ///
44 /// \param LDCS Flag to indicate whether we should load the call site
45 /// information from DWARF `DW_TAG_call_site` entries
47 : DICtx(D), Gsym(G), LoadDwarfCallSites(LDCS) {}
48
49 /// Extract the DWARF from the supplied object file and convert it into the
50 /// Gsym format in the GsymCreator object that is passed in. Returns an
51 /// error if something fatal is encountered.
52 ///
53 /// \param NumThreads The number of threads that the conversion process can
54 /// use.
55 ///
56 /// \param OS The stream to log warnings and non fatal issues to. If NULL
57 /// then don't log.
58 ///
59 /// \returns An error indicating any fatal issues that happen when parsing
60 /// the DWARF, or Error::success() if all goes well.
62
64
65private:
66
67 /// Parse the DWARF in the object file and convert it into the GsymCreator.
68 Error parse();
69
70 /// Handle any DIE (debug info entry) from the DWARF.
71 ///
72 /// This function will find all DW_TAG_subprogram DIEs that convert them into
73 /// GSYM FuntionInfo objects and add them to the GsymCreator supplied during
74 /// construction. The DIE and all its children will be recursively parsed
75 /// with calls to this function.
76 ///
77 /// \param Strm The thread specific log stream for any non fatal errors and
78 /// warnings. Once a thread has finished parsing an entire compile unit, all
79 /// information in this temporary stream will be forwarded to the member
80 /// variable log. This keeps logging thread safe. If the value is NULL, then
81 /// don't log.
82 ///
83 /// \param CUI The compile unit specific information that contains the DWARF
84 /// line table, cached file list, and other compile unit specific
85 /// information.
86 ///
87 /// \param Die The DWARF debug info entry to parse.
88 void handleDie(OutputAggregator &Strm, CUInfo &CUI, DWARFDie Die);
89
90 /// Parse call site information from DWARF
91 ///
92 /// \param CUI The compile unit info for the current CU.
93 /// \param Die The DWARFDie for the function.
94 /// \param FI The FunctionInfo for the function being populated.
95 void parseCallSiteInfoFromDwarf(CUInfo &CUI, DWARFDie Die, FunctionInfo &FI);
96
97 DWARFContext &DICtx;
98 GsymCreator &Gsym;
99 bool LoadDwarfCallSites;
100
102};
103
104} // namespace gsym
105} // namespace llvm
106
107#endif // LLVM_DEBUGINFO_GSYM_DWARFTRANSFORMER_H
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
#define LLVM_ABI
Definition Compiler.h:213
#define G(x, y, z)
Definition MD5.cpp:56
ppc ctr loops verify
DWARFContext This data structure is the top level entity that deals with dwarf debug information pars...
Utility class that carries the DWARF compile/type unit and the debug info entry in an object.
Definition DWARFDie.h:43
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
LLVM_ABI llvm::Error convert(uint32_t NumThreads, OutputAggregator &OS)
Extract the DWARF from the supplied object file and convert it into the Gsym format in the GsymCreato...
DwarfTransformer(DWARFContext &D, GsymCreator &G, bool LDCS=false)
Create a DWARF transformer.
GsymCreator is used to emit GSYM data to a stand alone file or section within a file.
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
This is an optimization pass for GlobalISel generic memory operations.
Function information in GSYM files encodes information for one contiguous address range.