123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- DwarfTransformer.h ---------------------------------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_DEBUGINFO_GSYM_DWARFTRANSFORMER_H
- #define LLVM_DEBUGINFO_GSYM_DWARFTRANSFORMER_H
- #include "llvm/ADT/StringRef.h"
- #include "llvm/DebugInfo/GSYM/ExtractRanges.h"
- #include "llvm/Support/Error.h"
- namespace llvm {
- class raw_ostream;
- namespace gsym {
- struct CUInfo;
- struct FunctionInfo;
- class GsymCreator;
- /// A class that transforms the DWARF in a DWARFContext into GSYM information
- /// by populating the GsymCreator object that it is constructed with. This
- /// class supports converting all DW_TAG_subprogram DIEs into
- /// gsym::FunctionInfo objects that includes line table information and inline
- /// function information. Creating a separate class to transform this data
- /// allows this class to be unit tested.
- class DwarfTransformer {
- public:
- /// Create a DWARF transformer.
- ///
- /// \param D The DWARF to use when converting to GSYM.
- ///
- /// \param OS The stream to log warnings and non fatal issues to.
- ///
- /// \param G The GSYM creator to populate with the function information
- /// from the debug info.
- DwarfTransformer(DWARFContext &D, raw_ostream &OS, GsymCreator &G) :
- DICtx(D), Log(OS), Gsym(G) {}
- /// Extract the DWARF from the supplied object file and convert it into the
- /// Gsym format in the GsymCreator object that is passed in. Returns an
- /// error if something fatal is encountered.
- ///
- /// \returns An error indicating any fatal issues that happen when parsing
- /// the DWARF, or Error::success() if all goes well.
- llvm::Error convert(uint32_t NumThreads);
- llvm::Error verify(StringRef GsymPath);
- private:
- /// Parse the DWARF in the object file and convert it into the GsymCreator.
- Error parse();
- /// Handle any DIE (debug info entry) from the DWARF.
- ///
- /// This function will find all DW_TAG_subprogram DIEs that convert them into
- /// GSYM FuntionInfo objects and add them to the GsymCreator supplied during
- /// construction. The DIE and all its children will be recursively parsed
- /// with calls to this function.
- ///
- /// \param Strm The thread specific log stream for any non fatal errors and
- /// warnings. Once a thread has finished parsing an entire compile unit, all
- /// information in this temporary stream will be forwarded to the member
- /// variable log. This keeps logging thread safe.
- ///
- /// \param CUI The compile unit specific information that contains the DWARF
- /// line table, cached file list, and other compile unit specific
- /// information.
- ///
- /// \param Die The DWARF debug info entry to parse.
- void handleDie(raw_ostream &Strm, CUInfo &CUI, DWARFDie Die);
- DWARFContext &DICtx;
- raw_ostream &Log;
- GsymCreator &Gsym;
- friend class DwarfTransformerTest;
- };
- } // namespace gsym
- } // namespace llvm
- #endif // LLVM_DEBUGINFO_GSYM_DWARFTRANSFORMER_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|