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