1 //===-- XCOFFYAML.cpp - 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 defines classes for handling the YAML representation of XCOFF. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #include "llvm/ObjectYAML/XCOFFYAML.h" 14 #include "llvm/BinaryFormat/XCOFF.h" 15 #include <string.h> 16 17 namespace llvm { 18 namespace XCOFFYAML { 19 20 Object::Object() { memset(&Header, 0, sizeof(Header)); } 21 22 } // namespace XCOFFYAML 23 24 namespace yaml { 25 26 void ScalarEnumerationTraits<XCOFF::StorageClass>::enumeration( 27 IO &IO, XCOFF::StorageClass &Value) { 28 #define ECase(X) IO.enumCase(Value, #X, XCOFF::X) 29 ECase(C_NULL); 30 ECase(C_AUTO); 31 ECase(C_EXT); 32 ECase(C_STAT); 33 ECase(C_REG); 34 ECase(C_EXTDEF); 35 ECase(C_LABEL); 36 ECase(C_ULABEL); 37 ECase(C_MOS); 38 ECase(C_ARG); 39 ECase(C_STRTAG); 40 ECase(C_MOU); 41 ECase(C_UNTAG); 42 ECase(C_TPDEF); 43 ECase(C_USTATIC); 44 ECase(C_ENTAG); 45 ECase(C_MOE); 46 ECase(C_REGPARM); 47 ECase(C_FIELD); 48 ECase(C_BLOCK); 49 ECase(C_FCN); 50 ECase(C_EOS); 51 ECase(C_FILE); 52 ECase(C_LINE); 53 ECase(C_ALIAS); 54 ECase(C_HIDDEN); 55 ECase(C_HIDEXT); 56 ECase(C_BINCL); 57 ECase(C_EINCL); 58 ECase(C_INFO); 59 ECase(C_WEAKEXT); 60 ECase(C_DWARF); 61 ECase(C_GSYM); 62 ECase(C_LSYM); 63 ECase(C_PSYM); 64 ECase(C_RSYM); 65 ECase(C_RPSYM); 66 ECase(C_STSYM); 67 ECase(C_TCSYM); 68 ECase(C_BCOMM); 69 ECase(C_ECOML); 70 ECase(C_ECOMM); 71 ECase(C_DECL); 72 ECase(C_ENTRY); 73 ECase(C_FUN); 74 ECase(C_BSTAT); 75 ECase(C_ESTAT); 76 ECase(C_GTLS); 77 ECase(C_STTLS); 78 ECase(C_EFCN); 79 #undef ECase 80 } 81 82 void MappingTraits<XCOFFYAML::FileHeader>::mapping( 83 IO &IO, XCOFFYAML::FileHeader &FileHdr) { 84 IO.mapRequired("MagicNumber", FileHdr.Magic); 85 IO.mapRequired("NumberOfSections", FileHdr.NumberOfSections); 86 IO.mapRequired("CreationTime", FileHdr.TimeStamp); 87 IO.mapRequired("OffsetToSymbolTable", FileHdr.SymbolTableOffset); 88 IO.mapRequired("EntriesInSymbolTable", FileHdr.NumberOfSymTableEntries); 89 IO.mapRequired("AuxiliaryHeaderSize", FileHdr.AuxHeaderSize); 90 IO.mapRequired("Flags", FileHdr.Flags); 91 } 92 93 void MappingTraits<XCOFFYAML::Symbol>::mapping(IO &IO, XCOFFYAML::Symbol &S) { 94 IO.mapRequired("Name", S.SymbolName); 95 IO.mapRequired("Value", S.Value); 96 IO.mapRequired("Section", S.SectionName); 97 IO.mapRequired("Type", S.Type); 98 IO.mapRequired("StorageClass", S.StorageClass); 99 IO.mapRequired("NumberOfAuxEntries", S.NumberOfAuxEntries); 100 } 101 102 void MappingTraits<XCOFFYAML::Object>::mapping(IO &IO, XCOFFYAML::Object &Obj) { 103 IO.mapTag("!XCOFF", true); 104 IO.mapRequired("FileHeader", Obj.Header); 105 IO.mapRequired("Symbols", Obj.Symbols); 106 } 107 108 } // namespace yaml 109 } // namespace llvm 110