//===----- XCOFFYAML.h - XCOFF YAMLIO implementation ------------*- 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 declares classes for handling the YAML representation of XCOFF. // //===----------------------------------------------------------------------===// #ifndef LLVM_OBJECTYAML_XCOFFYAML_H #define LLVM_OBJECTYAML_XCOFFYAML_H #include "llvm/BinaryFormat/XCOFF.h" #include "llvm/ObjectYAML/YAML.h" #include namespace llvm { namespace XCOFFYAML { struct FileHeader { llvm::yaml::Hex16 Magic; uint16_t NumberOfSections; int32_t TimeStamp; llvm::yaml::Hex32 SymbolTableOffset; // File offset to symbol table. int32_t NumberOfSymTableEntries; uint16_t AuxHeaderSize; llvm::yaml::Hex16 Flags; }; struct Symbol { StringRef SymbolName; llvm::yaml::Hex32 Value; // Symbol value; storage class-dependent. StringRef SectionName; llvm::yaml::Hex16 Type; XCOFF::StorageClass StorageClass; uint8_t NumberOfAuxEntries; // Number of auxiliary entries }; struct Object { FileHeader Header; std::vector Symbols; Object(); }; } // namespace XCOFFYAML } // namespace llvm LLVM_YAML_IS_SEQUENCE_VECTOR(XCOFFYAML::Symbol) namespace llvm { namespace yaml { template <> struct ScalarEnumerationTraits { static void enumeration(IO &IO, XCOFF::StorageClass &Value); }; template <> struct MappingTraits { static void mapping(IO &IO, XCOFFYAML::FileHeader &H); }; template <> struct MappingTraits { static void mapping(IO &IO, XCOFFYAML::Object &Obj); }; template <> struct MappingTraits { static void mapping(IO &IO, XCOFFYAML::Symbol &S); }; } // namespace yaml } // namespace llvm #endif // LLVM_OBJECTYAML_XCOFFYAML_H