|  | //===-- XCOFFYAML.cpp - 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 defines classes for handling the YAML representation of XCOFF. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "llvm/ObjectYAML/XCOFFYAML.h" | 
|  | #include "llvm/BinaryFormat/XCOFF.h" | 
|  | #include <string.h> | 
|  |  | 
|  | namespace llvm { | 
|  | namespace XCOFFYAML { | 
|  |  | 
|  | Object::Object() { memset(&Header, 0, sizeof(Header)); } | 
|  |  | 
|  | } // namespace XCOFFYAML | 
|  |  | 
|  | namespace yaml { | 
|  |  | 
|  | void ScalarEnumerationTraits<XCOFF::StorageClass>::enumeration( | 
|  | IO &IO, XCOFF::StorageClass &Value) { | 
|  | #define ECase(X) IO.enumCase(Value, #X, XCOFF::X) | 
|  | ECase(C_NULL); | 
|  | ECase(C_AUTO); | 
|  | ECase(C_EXT); | 
|  | ECase(C_STAT); | 
|  | ECase(C_REG); | 
|  | ECase(C_EXTDEF); | 
|  | ECase(C_LABEL); | 
|  | ECase(C_ULABEL); | 
|  | ECase(C_MOS); | 
|  | ECase(C_ARG); | 
|  | ECase(C_STRTAG); | 
|  | ECase(C_MOU); | 
|  | ECase(C_UNTAG); | 
|  | ECase(C_TPDEF); | 
|  | ECase(C_USTATIC); | 
|  | ECase(C_ENTAG); | 
|  | ECase(C_MOE); | 
|  | ECase(C_REGPARM); | 
|  | ECase(C_FIELD); | 
|  | ECase(C_BLOCK); | 
|  | ECase(C_FCN); | 
|  | ECase(C_EOS); | 
|  | ECase(C_FILE); | 
|  | ECase(C_LINE); | 
|  | ECase(C_ALIAS); | 
|  | ECase(C_HIDDEN); | 
|  | ECase(C_HIDEXT); | 
|  | ECase(C_BINCL); | 
|  | ECase(C_EINCL); | 
|  | ECase(C_INFO); | 
|  | ECase(C_WEAKEXT); | 
|  | ECase(C_DWARF); | 
|  | ECase(C_GSYM); | 
|  | ECase(C_LSYM); | 
|  | ECase(C_PSYM); | 
|  | ECase(C_RSYM); | 
|  | ECase(C_RPSYM); | 
|  | ECase(C_STSYM); | 
|  | ECase(C_TCSYM); | 
|  | ECase(C_BCOMM); | 
|  | ECase(C_ECOML); | 
|  | ECase(C_ECOMM); | 
|  | ECase(C_DECL); | 
|  | ECase(C_ENTRY); | 
|  | ECase(C_FUN); | 
|  | ECase(C_BSTAT); | 
|  | ECase(C_ESTAT); | 
|  | ECase(C_GTLS); | 
|  | ECase(C_STTLS); | 
|  | ECase(C_EFCN); | 
|  | #undef ECase | 
|  | } | 
|  |  | 
|  | void MappingTraits<XCOFFYAML::FileHeader>::mapping( | 
|  | IO &IO, XCOFFYAML::FileHeader &FileHdr) { | 
|  | IO.mapRequired("MagicNumber", FileHdr.Magic); | 
|  | IO.mapRequired("NumberOfSections", FileHdr.NumberOfSections); | 
|  | IO.mapRequired("CreationTime", FileHdr.TimeStamp); | 
|  | IO.mapRequired("OffsetToSymbolTable", FileHdr.SymbolTableOffset); | 
|  | IO.mapRequired("EntriesInSymbolTable", FileHdr.NumberOfSymTableEntries); | 
|  | IO.mapRequired("AuxiliaryHeaderSize", FileHdr.AuxHeaderSize); | 
|  | IO.mapRequired("Flags", FileHdr.Flags); | 
|  | } | 
|  |  | 
|  | void MappingTraits<XCOFFYAML::Symbol>::mapping(IO &IO, XCOFFYAML::Symbol &S) { | 
|  | IO.mapRequired("Name", S.SymbolName); | 
|  | IO.mapRequired("Value", S.Value); | 
|  | IO.mapRequired("Section", S.SectionName); | 
|  | IO.mapRequired("Type", S.Type); | 
|  | IO.mapRequired("StorageClass", S.StorageClass); | 
|  | IO.mapRequired("NumberOfAuxEntries", S.NumberOfAuxEntries); | 
|  | } | 
|  |  | 
|  | void MappingTraits<XCOFFYAML::Object>::mapping(IO &IO, XCOFFYAML::Object &Obj) { | 
|  | IO.mapTag("!XCOFF", true); | 
|  | IO.mapRequired("FileHeader", Obj.Header); | 
|  | IO.mapRequired("Symbols", Obj.Symbols); | 
|  | } | 
|  |  | 
|  | } // namespace yaml | 
|  | } // namespace llvm |