/* * Copyright (c) 2021, Itamar S. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Debug::Dwarf { class CompilationUnit; class AttributeValue { friend class DwarfInfo; public: enum class Type : u8 { UnsignedNumber, SignedNumber, String, DieReference, // Reference to another DIE in the same compilation unit Boolean, DwarfExpression, SecOffset, RawBytes, Address }; Type type() const { return m_type; } AttributeDataForm form() const { return m_form; } ErrorOr as_addr() const; u64 as_unsigned() const { return m_data.as_unsigned; } i64 as_signed() const { return m_data.as_signed; } ErrorOr as_string() const; bool as_bool() const { return m_data.as_bool; } ReadonlyBytes as_raw_bytes() const { return m_data.as_raw_bytes; } private: Type m_type; union { FlatPtr as_addr; u64 as_unsigned; i64 as_signed; char const* as_string; // points to bytes in the memory mapped elf image bool as_bool; ReadonlyBytes as_raw_bytes; } m_data {}; AttributeDataForm m_form {}; CompilationUnit const* m_compilation_unit { nullptr }; }; }