//===- llvm/CodeGen/DwarfExpression.h - Dwarf Compile Unit ------*- 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 support for writing dwarf compile unit. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_CODEGEN_ASMPRINTER_DWARFEXPRESSION_H #define LLVM_LIB_CODEGEN_ASMPRINTER_DWARFEXPRESSION_H #include "ByteStreamer.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallVector.h" #include "llvm/IR/DebugInfoMetadata.h" #include <cassert> #include <cstdint> #include <iterator> #include <optional> namespace llvm { class AsmPrinter; class APInt; class DwarfCompileUnit; class DIELoc; class TargetRegisterInfo; class MachineLocation; /// Base class containing the logic for constructing DWARF expressions /// independently of whether they are emitted into a DIE or into a .debug_loc /// entry. /// /// Some DWARF operations, e.g. DW_OP_entry_value, need to calculate the size /// of a succeeding DWARF block before the latter is emitted to the output. /// To handle such cases, data can conditionally be emitted to a temporary /// buffer, which can later on be committed to the main output. The size of the /// temporary buffer is queryable, allowing for the size of the data to be /// emitted before the data is committed. class DwarfExpression { … }; /// DwarfExpression implementation for .debug_loc entries. class DebugLocDwarfExpression final : public DwarfExpression { … }; /// DwarfExpression implementation for singular DW_AT_location. class DIEDwarfExpression final : public DwarfExpression { … }; } // end namespace llvm #endif // LLVM_LIB_CODEGEN_ASMPRINTER_DWARFEXPRESSION_H