1//===----- XCOFFYAML.h - XCOFF YAMLIO implementation ------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file declares classes for handling the YAML representation of XCOFF. 10// 11//===----------------------------------------------------------------------===// 12#ifndef LLVM_OBJECTYAML_XCOFFYAML_H 13#define LLVM_OBJECTYAML_XCOFFYAML_H 14 15#include "llvm/BinaryFormat/XCOFF.h" 16#include "llvm/ObjectYAML/YAML.h" 17#include <vector> 18 19namespace llvm { 20namespace XCOFFYAML { 21 22struct FileHeader { 23 llvm::yaml::Hex16 Magic; 24 uint16_t NumberOfSections; 25 int32_t TimeStamp; 26 llvm::yaml::Hex32 SymbolTableOffset; // File offset to symbol table. 27 int32_t NumberOfSymTableEntries; 28 uint16_t AuxHeaderSize; 29 llvm::yaml::Hex16 Flags; 30}; 31 32struct Symbol { 33 StringRef SymbolName; 34 llvm::yaml::Hex32 Value; // Symbol value; storage class-dependent. 35 StringRef SectionName; 36 llvm::yaml::Hex16 Type; 37 XCOFF::StorageClass StorageClass; 38 uint8_t NumberOfAuxEntries; // Number of auxiliary entries 39}; 40 41struct Object { 42 FileHeader Header; 43 std::vector<Symbol> Symbols; 44 Object(); 45}; 46} // namespace XCOFFYAML 47} // namespace llvm 48LLVM_YAML_IS_SEQUENCE_VECTOR(XCOFFYAML::Symbol) 49namespace llvm { 50namespace yaml { 51 52template <> struct ScalarEnumerationTraits<XCOFF::StorageClass> { 53 static void enumeration(IO &IO, XCOFF::StorageClass &Value); 54}; 55 56template <> struct MappingTraits<XCOFFYAML::FileHeader> { 57 static void mapping(IO &IO, XCOFFYAML::FileHeader &H); 58}; 59 60template <> struct MappingTraits<XCOFFYAML::Object> { 61 static void mapping(IO &IO, XCOFFYAML::Object &Obj); 62}; 63 64template <> struct MappingTraits<XCOFFYAML::Symbol> { 65 static void mapping(IO &IO, XCOFFYAML::Symbol &S); 66}; 67 68} // namespace yaml 69} // namespace llvm 70 71#endif // LLVM_OBJECTYAML_XCOFFYAML_H 72