//===- MCDwarf.h - Machine Code Dwarf support -------------------*- 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 // //===----------------------------------------------------------------------===// // // This file contains the declaration of the MCDwarfFile to support the dwarf // .file directive and the .loc directive. // //===----------------------------------------------------------------------===// #ifndef LLVM_MC_MCDWARF_H #define LLVM_MC_MCDWARF_H #include "llvm/ADT/MapVector.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/MC/StringTableBuilder.h" #include "llvm/Support/Error.h" #include "llvm/Support/MD5.h" #include "llvm/Support/SMLoc.h" #include "llvm/Support/StringSaver.h" #include <cassert> #include <cstdint> #include <optional> #include <string> #include <utility> #include <vector> namespace llvm { template <typename T> class ArrayRef; class MCAsmBackend; class MCContext; class MCObjectStreamer; class MCSection; class MCStreamer; class MCSymbol; class raw_ostream; class SourceMgr; namespace mcdwarf { // Emit the common part of the DWARF 5 range/locations list tables header. MCSymbol *emitListsTableHeaderStart(MCStreamer &S); } // namespace mcdwarf /// Manage the .debug_line_str section contents, if we use it. class MCDwarfLineStr { … }; /// Instances of this class represent the name of the dwarf .file directive and /// its associated dwarf file number in the MC file. MCDwarfFile's are created /// and uniqued by the MCContext class. In Dwarf 4 file numbers start from 1; /// i.e. the entry with file number 1 is the first element in the vector of /// DwarfFiles and there is no MCDwarfFile with file number 0. In Dwarf 5 file /// numbers start from 0, with the MCDwarfFile with file number 0 being the /// primary source file, and file numbers correspond to their index in the /// vector. struct MCDwarfFile { … }; /// Instances of this class represent the information from a /// dwarf .loc directive. class MCDwarfLoc { … }; /// Instances of this class represent the line information for /// the dwarf line table entries. Which is created after a machine /// instruction is assembled and uses an address from a temporary label /// created at the current address in the current section and the info from /// the last .loc directive seen as stored in the context. class MCDwarfLineEntry : public MCDwarfLoc { … }; /// Instances of this class represent the line information for a compile /// unit where machine instructions have been assembled after seeing .loc /// directives. This is the information used to build the dwarf line /// table for a section. class MCLineSection { … }; struct MCDwarfLineTableParams { … }; struct MCDwarfLineTableHeader { … }; class MCDwarfDwoLineTable { … }; class MCDwarfLineTable { … }; class MCDwarfLineAddr { … }; class MCGenDwarfInfo { … }; // When generating dwarf for assembly source files this is the info that is // needed to be gathered for each symbol that will have a dwarf label. class MCGenDwarfLabelEntry { … }; class MCCFIInstruction { … }; struct MCDwarfFrameInfo { … }; class MCDwarfFrameEmitter { … }; } // end namespace llvm #endif // LLVM_MC_MCDWARF_H