//===- DWARFAttribute.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_DWARF_DWARFATTRIBUTE_H #define LLVM_DEBUGINFO_DWARF_DWARFATTRIBUTE_H #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include namespace llvm { //===----------------------------------------------------------------------===// /// Encapsulates a DWARF attribute value and all of the data required to /// describe the attribute value. /// /// This class is designed to be used by clients that want to iterate across all /// attributes in a DWARFDie. struct DWARFAttribute { /// The debug info/types offset for this attribute. uint64_t Offset = 0; /// The debug info/types section byte size of the data for this attribute. uint32_t ByteSize = 0; /// The attribute enumeration of this attribute. dwarf::Attribute Attr = dwarf::Attribute(0); /// The form and value for this attribute. DWARFFormValue Value; bool isValid() const { return Offset != 0 && Attr != dwarf::Attribute(0); } explicit operator bool() const { return isValid(); } /// Identify DWARF attributes that may contain a pointer to a location list. static bool mayHaveLocationList(dwarf::Attribute Attr); /// Identifies DWARF attributes that may contain a reference to a /// DWARF expression. static bool mayHaveLocationExpr(dwarf::Attribute Attr); }; } // end namespace llvm #endif // LLVM_DEBUGINFO_DWARF_DWARFATTRIBUTE_H