brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.6 KiB · 32015dd Raw
638 lines · cpp
1//===- MachOYAML.cpp - MachO YAMLIO implementation ------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8//9// This file defines classes for handling the YAML representation of MachO.10//11//===----------------------------------------------------------------------===//12 13#include "llvm/ObjectYAML/MachOYAML.h"14#include "llvm/ADT/StringRef.h"15#include "llvm/BinaryFormat/MachO.h"16#include "llvm/Support/YAMLTraits.h"17#include "llvm/Support/raw_ostream.h"18#include "llvm/TargetParser/Host.h"19#include <cstdint>20#include <cstring>21 22namespace llvm {23 24MachOYAML::LoadCommand::~LoadCommand() = default;25 26bool MachOYAML::LinkEditData::isEmpty() const {27  return 0 == RebaseOpcodes.size() + BindOpcodes.size() +28                  WeakBindOpcodes.size() + LazyBindOpcodes.size() +29                  ExportTrie.Children.size() + NameList.size() +30                  StringTable.size() + FunctionStarts.size() +31                  ChainedFixups.size() + DataInCode.size();32}33 34namespace yaml {35 36void ScalarTraits<char_16>::output(const char_16 &Val, void *,37                                   raw_ostream &Out) {38  auto Len = strnlen(&Val[0], 16);39  Out << StringRef(&Val[0], Len);40}41 42StringRef ScalarTraits<char_16>::input(StringRef Scalar, void *, char_16 &Val) {43  size_t CopySize = 16 >= Scalar.size() ? 16 : Scalar.size();44  memcpy((void *)Val, Scalar.data(), CopySize);45 46  if (Scalar.size() < 16) {47    memset((void *)&Val[Scalar.size()], 0, 16 - Scalar.size());48  }49 50  return StringRef();51}52 53QuotingType ScalarTraits<char_16>::mustQuote(StringRef S) {54  return needsQuotes(S);55}56 57void ScalarTraits<uuid_t>::output(const uuid_t &Val, void *, raw_ostream &Out) {58  Out.write_uuid(Val);59}60 61StringRef ScalarTraits<uuid_t>::input(StringRef Scalar, void *, uuid_t &Val) {62  size_t OutIdx = 0;63  for (size_t Idx = 0; Idx < Scalar.size(); ++Idx) {64    if (Scalar[Idx] == '-' || OutIdx >= 16)65      continue;66    unsigned long long TempInt;67    if (getAsUnsignedInteger(Scalar.slice(Idx, Idx + 2), 16, TempInt))68      return "invalid number";69    if (TempInt > 0xFF)70      return "out of range number";71    Val[OutIdx] = static_cast<uint8_t>(TempInt);72    ++Idx; // increment idx an extra time because we're consuming 2 chars73    ++OutIdx;74  }75  return StringRef();76}77 78QuotingType ScalarTraits<uuid_t>::mustQuote(StringRef S) {79  return needsQuotes(S);80}81 82void MappingTraits<MachOYAML::FileHeader>::mapping(83    IO &IO, MachOYAML::FileHeader &FileHdr) {84  IO.mapRequired("magic", FileHdr.magic);85  IO.mapRequired("cputype", FileHdr.cputype);86  IO.mapRequired("cpusubtype", FileHdr.cpusubtype);87  IO.mapRequired("filetype", FileHdr.filetype);88  IO.mapRequired("ncmds", FileHdr.ncmds);89  IO.mapRequired("sizeofcmds", FileHdr.sizeofcmds);90  IO.mapRequired("flags", FileHdr.flags);91  if (FileHdr.magic == MachO::MH_MAGIC_64 ||92      FileHdr.magic == MachO::MH_CIGAM_64)93    IO.mapRequired("reserved", FileHdr.reserved);94}95 96void MappingTraits<MachOYAML::Object>::mapping(IO &IO,97                                               MachOYAML::Object &Object) {98  // If the context isn't already set, tag the document as !mach-o.99  // For Fat files there will be a different tag so they can be differentiated.100  if (!IO.getContext()) {101    IO.setContext(&Object);102  }103  IO.mapTag("!mach-o", true);104  IO.mapOptional("IsLittleEndian", Object.IsLittleEndian,105                 sys::IsLittleEndianHost);106  Object.DWARF.IsLittleEndian = Object.IsLittleEndian;107 108  IO.mapRequired("FileHeader", Object.Header);109  Object.DWARF.Is64BitAddrSize = Object.Header.magic == MachO::MH_MAGIC_64 ||110                                 Object.Header.magic == MachO::MH_CIGAM_64;111  IO.mapOptional("LoadCommands", Object.LoadCommands);112 113  if (Object.RawLinkEditSegment || !IO.outputting())114    IO.mapOptional("__LINKEDIT", Object.RawLinkEditSegment);115  if(!Object.LinkEdit.isEmpty() || !IO.outputting())116    IO.mapOptional("LinkEditData", Object.LinkEdit);117 118  if(!Object.DWARF.isEmpty() || !IO.outputting())119    IO.mapOptional("DWARF", Object.DWARF);120 121  if (IO.getContext() == &Object)122    IO.setContext(nullptr);123}124 125void MappingTraits<MachOYAML::FatHeader>::mapping(126    IO &IO, MachOYAML::FatHeader &FatHeader) {127  IO.mapRequired("magic", FatHeader.magic);128  IO.mapRequired("nfat_arch", FatHeader.nfat_arch);129}130 131void MappingTraits<MachOYAML::FatArch>::mapping(IO &IO,132                                                MachOYAML::FatArch &FatArch) {133  IO.mapRequired("cputype", FatArch.cputype);134  IO.mapRequired("cpusubtype", FatArch.cpusubtype);135  IO.mapRequired("offset", FatArch.offset);136  IO.mapRequired("size", FatArch.size);137  IO.mapRequired("align", FatArch.align);138  IO.mapOptional("reserved", FatArch.reserved,139                 static_cast<llvm::yaml::Hex32>(0));140}141 142void MappingTraits<MachOYAML::UniversalBinary>::mapping(143    IO &IO, MachOYAML::UniversalBinary &UniversalBinary) {144  if (!IO.getContext()) {145    IO.setContext(&UniversalBinary);146    IO.mapTag("!fat-mach-o", true);147  }148  IO.mapRequired("FatHeader", UniversalBinary.Header);149  IO.mapRequired("FatArchs", UniversalBinary.FatArchs);150  IO.mapRequired("Slices", UniversalBinary.Slices);151 152  if (IO.getContext() == &UniversalBinary)153    IO.setContext(nullptr);154}155 156void MappingTraits<MachOYAML::LinkEditData>::mapping(157    IO &IO, MachOYAML::LinkEditData &LinkEditData) {158  IO.mapOptional("RebaseOpcodes", LinkEditData.RebaseOpcodes);159  IO.mapOptional("BindOpcodes", LinkEditData.BindOpcodes);160  IO.mapOptional("WeakBindOpcodes", LinkEditData.WeakBindOpcodes);161  IO.mapOptional("LazyBindOpcodes", LinkEditData.LazyBindOpcodes);162  if (!LinkEditData.ExportTrie.Children.empty() || !IO.outputting())163    IO.mapOptional("ExportTrie", LinkEditData.ExportTrie);164  IO.mapOptional("NameList", LinkEditData.NameList);165  IO.mapOptional("StringTable", LinkEditData.StringTable);166  IO.mapOptional("IndirectSymbols", LinkEditData.IndirectSymbols);167  IO.mapOptional("FunctionStarts", LinkEditData.FunctionStarts);168  IO.mapOptional("ChainedFixups", LinkEditData.ChainedFixups);169  IO.mapOptional("DataInCode", LinkEditData.DataInCode);170}171 172void MappingTraits<MachOYAML::RebaseOpcode>::mapping(173    IO &IO, MachOYAML::RebaseOpcode &RebaseOpcode) {174  IO.mapRequired("Opcode", RebaseOpcode.Opcode);175  IO.mapRequired("Imm", RebaseOpcode.Imm);176  IO.mapOptional("ExtraData", RebaseOpcode.ExtraData);177}178 179void MappingTraits<MachOYAML::BindOpcode>::mapping(180    IO &IO, MachOYAML::BindOpcode &BindOpcode) {181  IO.mapRequired("Opcode", BindOpcode.Opcode);182  IO.mapRequired("Imm", BindOpcode.Imm);183  IO.mapOptional("ULEBExtraData", BindOpcode.ULEBExtraData);184  IO.mapOptional("SLEBExtraData", BindOpcode.SLEBExtraData);185  IO.mapOptional("Symbol", BindOpcode.Symbol);186}187 188void MappingTraits<MachOYAML::ExportEntry>::mapping(189    IO &IO, MachOYAML::ExportEntry &ExportEntry) {190  IO.mapRequired("TerminalSize", ExportEntry.TerminalSize);191  IO.mapOptional("NodeOffset", ExportEntry.NodeOffset);192  IO.mapOptional("Name", ExportEntry.Name);193  IO.mapOptional("Flags", ExportEntry.Flags);194  IO.mapOptional("Address", ExportEntry.Address);195  IO.mapOptional("Other", ExportEntry.Other);196  IO.mapOptional("ImportName", ExportEntry.ImportName);197  IO.mapOptional("Children", ExportEntry.Children);198}199 200void MappingTraits<MachOYAML::NListEntry>::mapping(201    IO &IO, MachOYAML::NListEntry &NListEntry) {202  IO.mapRequired("n_strx", NListEntry.n_strx);203  IO.mapRequired("n_type", NListEntry.n_type);204  IO.mapRequired("n_sect", NListEntry.n_sect);205  IO.mapRequired("n_desc", NListEntry.n_desc);206  IO.mapRequired("n_value", NListEntry.n_value);207}208 209void MappingTraits<MachOYAML::DataInCodeEntry>::mapping(210    IO &IO, MachOYAML::DataInCodeEntry &DataInCodeEntry) {211  IO.mapRequired("Offset", DataInCodeEntry.Offset);212  IO.mapRequired("Length", DataInCodeEntry.Length);213  IO.mapRequired("Kind", DataInCodeEntry.Kind);214}215 216template <typename StructType>217void mapLoadCommandData(IO &IO, MachOYAML::LoadCommand &LoadCommand) {}218 219template <>220void mapLoadCommandData<MachO::segment_command>(221    IO &IO, MachOYAML::LoadCommand &LoadCommand) {222  IO.mapOptional("Sections", LoadCommand.Sections);223}224 225template <>226void mapLoadCommandData<MachO::segment_command_64>(227    IO &IO, MachOYAML::LoadCommand &LoadCommand) {228  IO.mapOptional("Sections", LoadCommand.Sections);229}230 231template <>232void mapLoadCommandData<MachO::dylib_command>(233    IO &IO, MachOYAML::LoadCommand &LoadCommand) {234  IO.mapOptional("Content", LoadCommand.Content);235}236 237template <>238void mapLoadCommandData<MachO::rpath_command>(239    IO &IO, MachOYAML::LoadCommand &LoadCommand) {240  IO.mapOptional("Content", LoadCommand.Content);241}242 243template <>244void mapLoadCommandData<MachO::dylinker_command>(245    IO &IO, MachOYAML::LoadCommand &LoadCommand) {246  IO.mapOptional("Content", LoadCommand.Content);247}248 249template <>250void mapLoadCommandData<MachO::sub_framework_command>(251    IO &IO, MachOYAML::LoadCommand &LoadCommand) {252  IO.mapOptional("Content", LoadCommand.Content);253}254 255template <>256void mapLoadCommandData<MachO::sub_umbrella_command>(257    IO &IO, MachOYAML::LoadCommand &LoadCommand) {258  IO.mapOptional("Content", LoadCommand.Content);259}260 261template <>262void mapLoadCommandData<MachO::sub_client_command>(263    IO &IO, MachOYAML::LoadCommand &LoadCommand) {264  IO.mapOptional("Content", LoadCommand.Content);265}266 267template <>268void mapLoadCommandData<MachO::sub_library_command>(269    IO &IO, MachOYAML::LoadCommand &LoadCommand) {270  IO.mapOptional("Content", LoadCommand.Content);271}272 273template <>274void mapLoadCommandData<MachO::build_version_command>(275    IO &IO, MachOYAML::LoadCommand &LoadCommand) {276  IO.mapOptional("Tools", LoadCommand.Tools);277}278 279void MappingTraits<MachOYAML::LoadCommand>::mapping(280    IO &IO, MachOYAML::LoadCommand &LoadCommand) {281  MachO::LoadCommandType TempCmd = static_cast<MachO::LoadCommandType>(282      LoadCommand.Data.load_command_data.cmd);283  IO.mapRequired("cmd", TempCmd);284  LoadCommand.Data.load_command_data.cmd = TempCmd;285  IO.mapRequired("cmdsize", LoadCommand.Data.load_command_data.cmdsize);286 287#define HANDLE_LOAD_COMMAND(LCName, LCValue, LCStruct)                         \288  case MachO::LCName:                                                          \289    MappingTraits<MachO::LCStruct>::mapping(IO,                                \290                                            LoadCommand.Data.LCStruct##_data); \291    mapLoadCommandData<MachO::LCStruct>(IO, LoadCommand);                      \292    break;293 294  switch (LoadCommand.Data.load_command_data.cmd) {295#include "llvm/BinaryFormat/MachO.def"296  }297  IO.mapOptional("PayloadBytes", LoadCommand.PayloadBytes);298  IO.mapOptional("ZeroPadBytes", LoadCommand.ZeroPadBytes, (uint64_t)0ull);299}300 301void MappingTraits<MachO::dyld_info_command>::mapping(302    IO &IO, MachO::dyld_info_command &LoadCommand) {303  IO.mapRequired("rebase_off", LoadCommand.rebase_off);304  IO.mapRequired("rebase_size", LoadCommand.rebase_size);305  IO.mapRequired("bind_off", LoadCommand.bind_off);306  IO.mapRequired("bind_size", LoadCommand.bind_size);307  IO.mapRequired("weak_bind_off", LoadCommand.weak_bind_off);308  IO.mapRequired("weak_bind_size", LoadCommand.weak_bind_size);309  IO.mapRequired("lazy_bind_off", LoadCommand.lazy_bind_off);310  IO.mapRequired("lazy_bind_size", LoadCommand.lazy_bind_size);311  IO.mapRequired("export_off", LoadCommand.export_off);312  IO.mapRequired("export_size", LoadCommand.export_size);313}314 315void MappingTraits<MachOYAML::Relocation>::mapping(316    IO &IO, MachOYAML::Relocation &Relocation) {317  IO.mapRequired("address", Relocation.address);318  IO.mapRequired("symbolnum", Relocation.symbolnum);319  IO.mapRequired("pcrel", Relocation.is_pcrel);320  IO.mapRequired("length", Relocation.length);321  IO.mapRequired("extern", Relocation.is_extern);322  IO.mapRequired("type", Relocation.type);323  IO.mapRequired("scattered", Relocation.is_scattered);324  IO.mapRequired("value", Relocation.value);325}326 327void MappingTraits<MachOYAML::Section>::mapping(IO &IO,328                                                MachOYAML::Section &Section) {329  IO.mapRequired("sectname", Section.sectname);330  IO.mapRequired("segname", Section.segname);331  IO.mapRequired("addr", Section.addr);332  IO.mapRequired("size", Section.size);333  IO.mapRequired("offset", Section.offset);334  IO.mapRequired("align", Section.align);335  IO.mapRequired("reloff", Section.reloff);336  IO.mapRequired("nreloc", Section.nreloc);337  IO.mapRequired("flags", Section.flags);338  IO.mapRequired("reserved1", Section.reserved1);339  IO.mapRequired("reserved2", Section.reserved2);340  IO.mapOptional("reserved3", Section.reserved3);341  IO.mapOptional("content", Section.content);342  IO.mapOptional("relocations", Section.relocations);343}344 345std::string346MappingTraits<MachOYAML::Section>::validate(IO &IO,347                                            MachOYAML::Section &Section) {348  // Can't check the `size`, as it's required and may be left uninitialized by349  // previous error.350  if (!IO.error() && Section.content &&351      Section.size < Section.content->binary_size())352    return "Section size must be greater than or equal to the content size";353  return "";354}355 356void MappingTraits<MachO::build_tool_version>::mapping(357    IO &IO, MachO::build_tool_version &tool) {358  IO.mapRequired("tool", tool.tool);359  IO.mapRequired("version", tool.version);360}361 362void MappingTraits<MachO::dylib>::mapping(IO &IO, MachO::dylib &DylibStruct) {363  IO.mapRequired("name", DylibStruct.name);364  IO.mapRequired("timestamp", DylibStruct.timestamp);365  IO.mapRequired("current_version", DylibStruct.current_version);366  IO.mapRequired("compatibility_version", DylibStruct.compatibility_version);367}368 369void MappingTraits<MachO::dylib_command>::mapping(370    IO &IO, MachO::dylib_command &LoadCommand) {371  IO.mapRequired("dylib", LoadCommand.dylib);372}373 374void MappingTraits<MachO::dylinker_command>::mapping(375    IO &IO, MachO::dylinker_command &LoadCommand) {376  IO.mapRequired("name", LoadCommand.name);377}378 379void MappingTraits<MachO::dysymtab_command>::mapping(380    IO &IO, MachO::dysymtab_command &LoadCommand) {381  IO.mapRequired("ilocalsym", LoadCommand.ilocalsym);382  IO.mapRequired("nlocalsym", LoadCommand.nlocalsym);383  IO.mapRequired("iextdefsym", LoadCommand.iextdefsym);384  IO.mapRequired("nextdefsym", LoadCommand.nextdefsym);385  IO.mapRequired("iundefsym", LoadCommand.iundefsym);386  IO.mapRequired("nundefsym", LoadCommand.nundefsym);387  IO.mapRequired("tocoff", LoadCommand.tocoff);388  IO.mapRequired("ntoc", LoadCommand.ntoc);389  IO.mapRequired("modtaboff", LoadCommand.modtaboff);390  IO.mapRequired("nmodtab", LoadCommand.nmodtab);391  IO.mapRequired("extrefsymoff", LoadCommand.extrefsymoff);392  IO.mapRequired("nextrefsyms", LoadCommand.nextrefsyms);393  IO.mapRequired("indirectsymoff", LoadCommand.indirectsymoff);394  IO.mapRequired("nindirectsyms", LoadCommand.nindirectsyms);395  IO.mapRequired("extreloff", LoadCommand.extreloff);396  IO.mapRequired("nextrel", LoadCommand.nextrel);397  IO.mapRequired("locreloff", LoadCommand.locreloff);398  IO.mapRequired("nlocrel", LoadCommand.nlocrel);399}400 401void MappingTraits<MachO::encryption_info_command>::mapping(402    IO &IO, MachO::encryption_info_command &LoadCommand) {403  IO.mapRequired("cryptoff", LoadCommand.cryptoff);404  IO.mapRequired("cryptsize", LoadCommand.cryptsize);405  IO.mapRequired("cryptid", LoadCommand.cryptid);406}407 408void MappingTraits<MachO::encryption_info_command_64>::mapping(409    IO &IO, MachO::encryption_info_command_64 &LoadCommand) {410  IO.mapRequired("cryptoff", LoadCommand.cryptoff);411  IO.mapRequired("cryptsize", LoadCommand.cryptsize);412  IO.mapRequired("cryptid", LoadCommand.cryptid);413  IO.mapRequired("pad", LoadCommand.pad);414}415 416void MappingTraits<MachO::entry_point_command>::mapping(417    IO &IO, MachO::entry_point_command &LoadCommand) {418  IO.mapRequired("entryoff", LoadCommand.entryoff);419  IO.mapRequired("stacksize", LoadCommand.stacksize);420}421 422void MappingTraits<MachO::fvmfile_command>::mapping(423    IO &IO, MachO::fvmfile_command &LoadCommand) {424  IO.mapRequired("name", LoadCommand.name);425  IO.mapRequired("header_addr", LoadCommand.header_addr);426}427 428void MappingTraits<MachO::fvmlib>::mapping(IO &IO, MachO::fvmlib &FVMLib) {429  IO.mapRequired("name", FVMLib.name);430  IO.mapRequired("minor_version", FVMLib.minor_version);431  IO.mapRequired("header_addr", FVMLib.header_addr);432}433 434void MappingTraits<MachO::fvmlib_command>::mapping(435    IO &IO, MachO::fvmlib_command &LoadCommand) {436  IO.mapRequired("fvmlib", LoadCommand.fvmlib);437}438 439void MappingTraits<MachO::ident_command>::mapping(440    IO &IO, MachO::ident_command &LoadCommand) {}441 442void MappingTraits<MachO::linkedit_data_command>::mapping(443    IO &IO, MachO::linkedit_data_command &LoadCommand) {444  IO.mapRequired("dataoff", LoadCommand.dataoff);445  IO.mapRequired("datasize", LoadCommand.datasize);446}447 448void MappingTraits<MachO::linker_option_command>::mapping(449    IO &IO, MachO::linker_option_command &LoadCommand) {450  IO.mapRequired("count", LoadCommand.count);451}452 453void MappingTraits<MachO::prebind_cksum_command>::mapping(454    IO &IO, MachO::prebind_cksum_command &LoadCommand) {455  IO.mapRequired("cksum", LoadCommand.cksum);456}457 458void MappingTraits<MachO::load_command>::mapping(459    IO &IO, MachO::load_command &LoadCommand) {}460 461void MappingTraits<MachO::prebound_dylib_command>::mapping(462    IO &IO, MachO::prebound_dylib_command &LoadCommand) {463  IO.mapRequired("name", LoadCommand.name);464  IO.mapRequired("nmodules", LoadCommand.nmodules);465  IO.mapRequired("linked_modules", LoadCommand.linked_modules);466}467 468void MappingTraits<MachO::routines_command>::mapping(469    IO &IO, MachO::routines_command &LoadCommand) {470  IO.mapRequired("init_address", LoadCommand.init_address);471  IO.mapRequired("init_module", LoadCommand.init_module);472  IO.mapRequired("reserved1", LoadCommand.reserved1);473  IO.mapRequired("reserved2", LoadCommand.reserved2);474  IO.mapRequired("reserved3", LoadCommand.reserved3);475  IO.mapRequired("reserved4", LoadCommand.reserved4);476  IO.mapRequired("reserved5", LoadCommand.reserved5);477  IO.mapRequired("reserved6", LoadCommand.reserved6);478}479 480void MappingTraits<MachO::routines_command_64>::mapping(481    IO &IO, MachO::routines_command_64 &LoadCommand) {482  IO.mapRequired("init_address", LoadCommand.init_address);483  IO.mapRequired("init_module", LoadCommand.init_module);484  IO.mapRequired("reserved1", LoadCommand.reserved1);485  IO.mapRequired("reserved2", LoadCommand.reserved2);486  IO.mapRequired("reserved3", LoadCommand.reserved3);487  IO.mapRequired("reserved4", LoadCommand.reserved4);488  IO.mapRequired("reserved5", LoadCommand.reserved5);489  IO.mapRequired("reserved6", LoadCommand.reserved6);490}491 492void MappingTraits<MachO::rpath_command>::mapping(493    IO &IO, MachO::rpath_command &LoadCommand) {494  IO.mapRequired("path", LoadCommand.path);495}496 497void MappingTraits<MachO::section>::mapping(IO &IO, MachO::section &Section) {498  IO.mapRequired("sectname", Section.sectname);499  IO.mapRequired("segname", Section.segname);500  IO.mapRequired("addr", Section.addr);501  IO.mapRequired("size", Section.size);502  IO.mapRequired("offset", Section.offset);503  IO.mapRequired("align", Section.align);504  IO.mapRequired("reloff", Section.reloff);505  IO.mapRequired("nreloc", Section.nreloc);506  IO.mapRequired("flags", Section.flags);507  IO.mapRequired("reserved1", Section.reserved1);508  IO.mapRequired("reserved2", Section.reserved2);509}510 511void MappingTraits<MachO::section_64>::mapping(IO &IO,512                                               MachO::section_64 &Section) {513  IO.mapRequired("sectname", Section.sectname);514  IO.mapRequired("segname", Section.segname);515  IO.mapRequired("addr", Section.addr);516  IO.mapRequired("size", Section.size);517  IO.mapRequired("offset", Section.offset);518  IO.mapRequired("align", Section.align);519  IO.mapRequired("reloff", Section.reloff);520  IO.mapRequired("nreloc", Section.nreloc);521  IO.mapRequired("flags", Section.flags);522  IO.mapRequired("reserved1", Section.reserved1);523  IO.mapRequired("reserved2", Section.reserved2);524  IO.mapRequired("reserved3", Section.reserved3);525}526 527void MappingTraits<MachO::segment_command>::mapping(528    IO &IO, MachO::segment_command &LoadCommand) {529  IO.mapRequired("segname", LoadCommand.segname);530  IO.mapRequired("vmaddr", LoadCommand.vmaddr);531  IO.mapRequired("vmsize", LoadCommand.vmsize);532  IO.mapRequired("fileoff", LoadCommand.fileoff);533  IO.mapRequired("filesize", LoadCommand.filesize);534  IO.mapRequired("maxprot", LoadCommand.maxprot);535  IO.mapRequired("initprot", LoadCommand.initprot);536  IO.mapRequired("nsects", LoadCommand.nsects);537  IO.mapRequired("flags", LoadCommand.flags);538}539 540void MappingTraits<MachO::segment_command_64>::mapping(541    IO &IO, MachO::segment_command_64 &LoadCommand) {542  IO.mapRequired("segname", LoadCommand.segname);543  IO.mapRequired("vmaddr", LoadCommand.vmaddr);544  IO.mapRequired("vmsize", LoadCommand.vmsize);545  IO.mapRequired("fileoff", LoadCommand.fileoff);546  IO.mapRequired("filesize", LoadCommand.filesize);547  IO.mapRequired("maxprot", LoadCommand.maxprot);548  IO.mapRequired("initprot", LoadCommand.initprot);549  IO.mapRequired("nsects", LoadCommand.nsects);550  IO.mapRequired("flags", LoadCommand.flags);551}552 553void MappingTraits<MachO::source_version_command>::mapping(554    IO &IO, MachO::source_version_command &LoadCommand) {555  IO.mapRequired("version", LoadCommand.version);556}557 558void MappingTraits<MachO::sub_client_command>::mapping(559    IO &IO, MachO::sub_client_command &LoadCommand) {560  IO.mapRequired("client", LoadCommand.client);561}562 563void MappingTraits<MachO::sub_framework_command>::mapping(564    IO &IO, MachO::sub_framework_command &LoadCommand) {565  IO.mapRequired("umbrella", LoadCommand.umbrella);566}567 568void MappingTraits<MachO::sub_library_command>::mapping(569    IO &IO, MachO::sub_library_command &LoadCommand) {570  IO.mapRequired("sub_library", LoadCommand.sub_library);571}572 573void MappingTraits<MachO::sub_umbrella_command>::mapping(574    IO &IO, MachO::sub_umbrella_command &LoadCommand) {575  IO.mapRequired("sub_umbrella", LoadCommand.sub_umbrella);576}577 578void MappingTraits<MachO::symseg_command>::mapping(579    IO &IO, MachO::symseg_command &LoadCommand) {580  IO.mapRequired("offset", LoadCommand.offset);581  IO.mapRequired("size", LoadCommand.size);582}583 584void MappingTraits<MachO::symtab_command>::mapping(585    IO &IO, MachO::symtab_command &LoadCommand) {586  IO.mapRequired("symoff", LoadCommand.symoff);587  IO.mapRequired("nsyms", LoadCommand.nsyms);588  IO.mapRequired("stroff", LoadCommand.stroff);589  IO.mapRequired("strsize", LoadCommand.strsize);590}591 592void MappingTraits<MachO::thread_command>::mapping(593    IO &IO, MachO::thread_command &LoadCommand) {}594 595void MappingTraits<MachO::twolevel_hints_command>::mapping(596    IO &IO, MachO::twolevel_hints_command &LoadCommand) {597  IO.mapRequired("offset", LoadCommand.offset);598  IO.mapRequired("nhints", LoadCommand.nhints);599}600 601void MappingTraits<MachO::uuid_command>::mapping(602    IO &IO, MachO::uuid_command &LoadCommand) {603  IO.mapRequired("uuid", LoadCommand.uuid);604}605 606void MappingTraits<MachO::version_min_command>::mapping(607    IO &IO, MachO::version_min_command &LoadCommand) {608  IO.mapRequired("version", LoadCommand.version);609  IO.mapRequired("sdk", LoadCommand.sdk);610}611 612void MappingTraits<MachO::note_command>::mapping(613    IO &IO, MachO::note_command &LoadCommand) {614  IO.mapRequired("data_owner", LoadCommand.data_owner);615  IO.mapRequired("offset", LoadCommand.offset);616  IO.mapRequired("size", LoadCommand.size);617}618 619void MappingTraits<MachO::build_version_command>::mapping(620    IO &IO, MachO::build_version_command &LoadCommand) {621  IO.mapRequired("platform", LoadCommand.platform);622  IO.mapRequired("minos", LoadCommand.minos);623  IO.mapRequired("sdk", LoadCommand.sdk);624  IO.mapRequired("ntools", LoadCommand.ntools);625}626 627void MappingTraits<MachO::fileset_entry_command>::mapping(628    IO &IO, MachO::fileset_entry_command &LoadCommand) {629  IO.mapRequired("vmaddr", LoadCommand.vmaddr);630  IO.mapRequired("fileoff", LoadCommand.fileoff);631  IO.mapRequired("id", LoadCommand.entry_id.offset);632  IO.mapOptional("reserved", LoadCommand.reserved);633}634 635} // end namespace yaml636 637} // end namespace llvm638