1139804Simp//===----- XCOFFYAML.h - XCOFF YAMLIO implementation ------------*- C++ -*-===// 23332Sphk// 33332Sphk// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 493149Sphk// See https://llvm.org/LICENSE.txt for license information. 53332Sphk// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 63332Sphk// 73332Sphk//===----------------------------------------------------------------------===// 8139804Simp// 9139804Simp// This file declares classes for handling the YAML representation of XCOFF. 10139804Simp// 113332Sphk//===----------------------------------------------------------------------===// 123784Sphk#ifndef LLVM_OBJECTYAML_XCOFFYAML_H 133332Sphk#define LLVM_OBJECTYAML_XCOFFYAML_H 143332Sphk 153332Sphk#include "llvm/BinaryFormat/XCOFF.h" 163332Sphk#include "llvm/ObjectYAML/YAML.h" 173332Sphk#include <vector> 183332Sphk 193332Sphknamespace llvm { 203332Sphknamespace XCOFFYAML { 213417Scsgr 223332Sphkstruct FileHeader { 233332Sphk llvm::yaml::Hex16 Magic; 24116182Sobrien uint16_t NumberOfSections; 25116182Sobrien int32_t TimeStamp; 26116182Sobrien llvm::yaml::Hex32 SymbolTableOffset; // File offset to symbol table. 273784Sphk int32_t NumberOfSymTableEntries; 283332Sphk uint16_t AuxHeaderSize; 293332Sphk llvm::yaml::Hex16 Flags; 303332Sphk}; 313332Sphk 3276166Smarkmstruct Symbol { 333507Scsgr StringRef SymbolName; 3476166Smarkm llvm::yaml::Hex32 Value; // Symbol value; storage class-dependent. 3515494Sbde StringRef SectionName; 36220373Strasz llvm::yaml::Hex16 Type; 373507Scsgr XCOFF::StorageClass StorageClass; 383332Sphk uint8_t NumberOfAuxEntries; // Number of auxiliary entries 393507Scsgr}; 4015494Sbde 413784Sphkstruct Object { 423332Sphk FileHeader Header; 433332Sphk std::vector<Symbol> Symbols; 4412662Sdg Object(); 4512662Sdg}; 4612662Sdg} // namespace XCOFFYAML 473332Sphk} // namespace llvm 4812662SdgLLVM_YAML_IS_SEQUENCE_VECTOR(XCOFFYAML::Symbol) 493332Sphknamespace llvm { 503784Sphknamespace yaml { 513784Sphk 523784Sphktemplate <> struct ScalarEnumerationTraits<XCOFF::StorageClass> { 533784Sphk static void enumeration(IO &IO, XCOFF::StorageClass &Value); 5448079Shoek}; 553784Sphk 563784Sphktemplate <> struct MappingTraits<XCOFFYAML::FileHeader> { 573784Sphk static void mapping(IO &IO, XCOFFYAML::FileHeader &H); 583784Sphk}; 593784Sphk 603784Sphktemplate <> struct MappingTraits<XCOFFYAML::Object> { 613784Sphk static void mapping(IO &IO, XCOFFYAML::Object &Obj); 623784Sphk}; 633784Sphk 6492723Salfredtemplate <> struct MappingTraits<XCOFFYAML::Symbol> { 6592723Salfred static void mapping(IO &IO, XCOFFYAML::Symbol &S); 6692723Salfred}; 6792723Salfred 683784Sphk} // namespace yaml 6912568Sbde} // namespace llvm 7012130Sdg 7112130Sdg#endif // LLVM_OBJECTYAML_XCOFFYAML_H 723332Sphk