10b57cec5SDimitry Andric //===- MachOYAML.cpp - MachO YAMLIO implementation ------------------------===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric // 90b57cec5SDimitry Andric // This file defines classes for handling the YAML representation of MachO. 100b57cec5SDimitry Andric // 110b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric #include "llvm/ObjectYAML/MachOYAML.h" 140b57cec5SDimitry Andric #include "llvm/ADT/StringRef.h" 150b57cec5SDimitry Andric #include "llvm/BinaryFormat/MachO.h" 160b57cec5SDimitry Andric #include "llvm/Support/Format.h" 17*5f757f3fSDimitry Andric #include "llvm/Support/SystemZ/zOSSupport.h" 180b57cec5SDimitry Andric #include "llvm/Support/YAMLTraits.h" 190b57cec5SDimitry Andric #include "llvm/Support/raw_ostream.h" 2006c3fb27SDimitry Andric #include "llvm/TargetParser/Host.h" 210b57cec5SDimitry Andric #include <cinttypes> 220b57cec5SDimitry Andric #include <cstdint> 230b57cec5SDimitry Andric #include <cstring> 240b57cec5SDimitry Andric 250b57cec5SDimitry Andric namespace llvm { 260b57cec5SDimitry Andric 270b57cec5SDimitry Andric MachOYAML::LoadCommand::~LoadCommand() = default; 280b57cec5SDimitry Andric 290b57cec5SDimitry Andric bool MachOYAML::LinkEditData::isEmpty() const { 3081ad6265SDimitry Andric return 0 == RebaseOpcodes.size() + BindOpcodes.size() + 3181ad6265SDimitry Andric WeakBindOpcodes.size() + LazyBindOpcodes.size() + 3281ad6265SDimitry Andric ExportTrie.Children.size() + NameList.size() + 33bdd1243dSDimitry Andric StringTable.size() + FunctionStarts.size() + 34bdd1243dSDimitry Andric ChainedFixups.size() + DataInCode.size(); 350b57cec5SDimitry Andric } 360b57cec5SDimitry Andric 370b57cec5SDimitry Andric namespace yaml { 380b57cec5SDimitry Andric 390b57cec5SDimitry Andric void ScalarTraits<char_16>::output(const char_16 &Val, void *, 400b57cec5SDimitry Andric raw_ostream &Out) { 410b57cec5SDimitry Andric auto Len = strnlen(&Val[0], 16); 420b57cec5SDimitry Andric Out << StringRef(&Val[0], Len); 430b57cec5SDimitry Andric } 440b57cec5SDimitry Andric 450b57cec5SDimitry Andric StringRef ScalarTraits<char_16>::input(StringRef Scalar, void *, char_16 &Val) { 460b57cec5SDimitry Andric size_t CopySize = 16 >= Scalar.size() ? 16 : Scalar.size(); 470b57cec5SDimitry Andric memcpy((void *)Val, Scalar.data(), CopySize); 480b57cec5SDimitry Andric 490b57cec5SDimitry Andric if (Scalar.size() < 16) { 500b57cec5SDimitry Andric memset((void *)&Val[Scalar.size()], 0, 16 - Scalar.size()); 510b57cec5SDimitry Andric } 520b57cec5SDimitry Andric 530b57cec5SDimitry Andric return StringRef(); 540b57cec5SDimitry Andric } 550b57cec5SDimitry Andric 560b57cec5SDimitry Andric QuotingType ScalarTraits<char_16>::mustQuote(StringRef S) { 570b57cec5SDimitry Andric return needsQuotes(S); 580b57cec5SDimitry Andric } 590b57cec5SDimitry Andric 600b57cec5SDimitry Andric void ScalarTraits<uuid_t>::output(const uuid_t &Val, void *, raw_ostream &Out) { 610b57cec5SDimitry Andric Out.write_uuid(Val); 620b57cec5SDimitry Andric } 630b57cec5SDimitry Andric 640b57cec5SDimitry Andric StringRef ScalarTraits<uuid_t>::input(StringRef Scalar, void *, uuid_t &Val) { 650b57cec5SDimitry Andric size_t OutIdx = 0; 660b57cec5SDimitry Andric for (size_t Idx = 0; Idx < Scalar.size(); ++Idx) { 670b57cec5SDimitry Andric if (Scalar[Idx] == '-' || OutIdx >= 16) 680b57cec5SDimitry Andric continue; 690b57cec5SDimitry Andric unsigned long long TempInt; 700b57cec5SDimitry Andric if (getAsUnsignedInteger(Scalar.slice(Idx, Idx + 2), 16, TempInt)) 710b57cec5SDimitry Andric return "invalid number"; 720b57cec5SDimitry Andric if (TempInt > 0xFF) 730b57cec5SDimitry Andric return "out of range number"; 740b57cec5SDimitry Andric Val[OutIdx] = static_cast<uint8_t>(TempInt); 750b57cec5SDimitry Andric ++Idx; // increment idx an extra time because we're consuming 2 chars 760b57cec5SDimitry Andric ++OutIdx; 770b57cec5SDimitry Andric } 780b57cec5SDimitry Andric return StringRef(); 790b57cec5SDimitry Andric } 800b57cec5SDimitry Andric 810b57cec5SDimitry Andric QuotingType ScalarTraits<uuid_t>::mustQuote(StringRef S) { 820b57cec5SDimitry Andric return needsQuotes(S); 830b57cec5SDimitry Andric } 840b57cec5SDimitry Andric 850b57cec5SDimitry Andric void MappingTraits<MachOYAML::FileHeader>::mapping( 860b57cec5SDimitry Andric IO &IO, MachOYAML::FileHeader &FileHdr) { 870b57cec5SDimitry Andric IO.mapRequired("magic", FileHdr.magic); 880b57cec5SDimitry Andric IO.mapRequired("cputype", FileHdr.cputype); 890b57cec5SDimitry Andric IO.mapRequired("cpusubtype", FileHdr.cpusubtype); 900b57cec5SDimitry Andric IO.mapRequired("filetype", FileHdr.filetype); 910b57cec5SDimitry Andric IO.mapRequired("ncmds", FileHdr.ncmds); 920b57cec5SDimitry Andric IO.mapRequired("sizeofcmds", FileHdr.sizeofcmds); 930b57cec5SDimitry Andric IO.mapRequired("flags", FileHdr.flags); 940b57cec5SDimitry Andric if (FileHdr.magic == MachO::MH_MAGIC_64 || 950b57cec5SDimitry Andric FileHdr.magic == MachO::MH_CIGAM_64) 960b57cec5SDimitry Andric IO.mapRequired("reserved", FileHdr.reserved); 970b57cec5SDimitry Andric } 980b57cec5SDimitry Andric 990b57cec5SDimitry Andric void MappingTraits<MachOYAML::Object>::mapping(IO &IO, 1000b57cec5SDimitry Andric MachOYAML::Object &Object) { 1010b57cec5SDimitry Andric // If the context isn't already set, tag the document as !mach-o. 1020b57cec5SDimitry Andric // For Fat files there will be a different tag so they can be differentiated. 1030b57cec5SDimitry Andric if (!IO.getContext()) { 1040b57cec5SDimitry Andric IO.setContext(&Object); 1050b57cec5SDimitry Andric } 1060b57cec5SDimitry Andric IO.mapTag("!mach-o", true); 1070b57cec5SDimitry Andric IO.mapOptional("IsLittleEndian", Object.IsLittleEndian, 1080b57cec5SDimitry Andric sys::IsLittleEndianHost); 1090b57cec5SDimitry Andric Object.DWARF.IsLittleEndian = Object.IsLittleEndian; 1100b57cec5SDimitry Andric 1110b57cec5SDimitry Andric IO.mapRequired("FileHeader", Object.Header); 1125ffd83dbSDimitry Andric Object.DWARF.Is64BitAddrSize = Object.Header.magic == MachO::MH_MAGIC_64 || 1135ffd83dbSDimitry Andric Object.Header.magic == MachO::MH_CIGAM_64; 1140b57cec5SDimitry Andric IO.mapOptional("LoadCommands", Object.LoadCommands); 115349cc55cSDimitry Andric 116349cc55cSDimitry Andric if (Object.RawLinkEditSegment || !IO.outputting()) 117349cc55cSDimitry Andric IO.mapOptional("__LINKEDIT", Object.RawLinkEditSegment); 1180b57cec5SDimitry Andric if(!Object.LinkEdit.isEmpty() || !IO.outputting()) 1190b57cec5SDimitry Andric IO.mapOptional("LinkEditData", Object.LinkEdit); 1200b57cec5SDimitry Andric 1210b57cec5SDimitry Andric if(!Object.DWARF.isEmpty() || !IO.outputting()) 1220b57cec5SDimitry Andric IO.mapOptional("DWARF", Object.DWARF); 1230b57cec5SDimitry Andric 1240b57cec5SDimitry Andric if (IO.getContext() == &Object) 1250b57cec5SDimitry Andric IO.setContext(nullptr); 1260b57cec5SDimitry Andric } 1270b57cec5SDimitry Andric 1280b57cec5SDimitry Andric void MappingTraits<MachOYAML::FatHeader>::mapping( 1290b57cec5SDimitry Andric IO &IO, MachOYAML::FatHeader &FatHeader) { 1300b57cec5SDimitry Andric IO.mapRequired("magic", FatHeader.magic); 1310b57cec5SDimitry Andric IO.mapRequired("nfat_arch", FatHeader.nfat_arch); 1320b57cec5SDimitry Andric } 1330b57cec5SDimitry Andric 1340b57cec5SDimitry Andric void MappingTraits<MachOYAML::FatArch>::mapping(IO &IO, 1350b57cec5SDimitry Andric MachOYAML::FatArch &FatArch) { 1360b57cec5SDimitry Andric IO.mapRequired("cputype", FatArch.cputype); 1370b57cec5SDimitry Andric IO.mapRequired("cpusubtype", FatArch.cpusubtype); 1380b57cec5SDimitry Andric IO.mapRequired("offset", FatArch.offset); 1390b57cec5SDimitry Andric IO.mapRequired("size", FatArch.size); 1400b57cec5SDimitry Andric IO.mapRequired("align", FatArch.align); 1410b57cec5SDimitry Andric IO.mapOptional("reserved", FatArch.reserved, 1420b57cec5SDimitry Andric static_cast<llvm::yaml::Hex32>(0)); 1430b57cec5SDimitry Andric } 1440b57cec5SDimitry Andric 1450b57cec5SDimitry Andric void MappingTraits<MachOYAML::UniversalBinary>::mapping( 1460b57cec5SDimitry Andric IO &IO, MachOYAML::UniversalBinary &UniversalBinary) { 1470b57cec5SDimitry Andric if (!IO.getContext()) { 1480b57cec5SDimitry Andric IO.setContext(&UniversalBinary); 1490b57cec5SDimitry Andric IO.mapTag("!fat-mach-o", true); 1500b57cec5SDimitry Andric } 1510b57cec5SDimitry Andric IO.mapRequired("FatHeader", UniversalBinary.Header); 1520b57cec5SDimitry Andric IO.mapRequired("FatArchs", UniversalBinary.FatArchs); 1530b57cec5SDimitry Andric IO.mapRequired("Slices", UniversalBinary.Slices); 1540b57cec5SDimitry Andric 1550b57cec5SDimitry Andric if (IO.getContext() == &UniversalBinary) 1560b57cec5SDimitry Andric IO.setContext(nullptr); 1570b57cec5SDimitry Andric } 1580b57cec5SDimitry Andric 1590b57cec5SDimitry Andric void MappingTraits<MachOYAML::LinkEditData>::mapping( 1600b57cec5SDimitry Andric IO &IO, MachOYAML::LinkEditData &LinkEditData) { 1610b57cec5SDimitry Andric IO.mapOptional("RebaseOpcodes", LinkEditData.RebaseOpcodes); 1620b57cec5SDimitry Andric IO.mapOptional("BindOpcodes", LinkEditData.BindOpcodes); 1630b57cec5SDimitry Andric IO.mapOptional("WeakBindOpcodes", LinkEditData.WeakBindOpcodes); 1640b57cec5SDimitry Andric IO.mapOptional("LazyBindOpcodes", LinkEditData.LazyBindOpcodes); 1650b57cec5SDimitry Andric if (!LinkEditData.ExportTrie.Children.empty() || !IO.outputting()) 1660b57cec5SDimitry Andric IO.mapOptional("ExportTrie", LinkEditData.ExportTrie); 1670b57cec5SDimitry Andric IO.mapOptional("NameList", LinkEditData.NameList); 1680b57cec5SDimitry Andric IO.mapOptional("StringTable", LinkEditData.StringTable); 1694824e7fdSDimitry Andric IO.mapOptional("IndirectSymbols", LinkEditData.IndirectSymbols); 17081ad6265SDimitry Andric IO.mapOptional("FunctionStarts", LinkEditData.FunctionStarts); 171bdd1243dSDimitry Andric IO.mapOptional("ChainedFixups", LinkEditData.ChainedFixups); 172bdd1243dSDimitry Andric IO.mapOptional("DataInCode", LinkEditData.DataInCode); 1730b57cec5SDimitry Andric } 1740b57cec5SDimitry Andric 1750b57cec5SDimitry Andric void MappingTraits<MachOYAML::RebaseOpcode>::mapping( 1760b57cec5SDimitry Andric IO &IO, MachOYAML::RebaseOpcode &RebaseOpcode) { 1770b57cec5SDimitry Andric IO.mapRequired("Opcode", RebaseOpcode.Opcode); 1780b57cec5SDimitry Andric IO.mapRequired("Imm", RebaseOpcode.Imm); 1790b57cec5SDimitry Andric IO.mapOptional("ExtraData", RebaseOpcode.ExtraData); 1800b57cec5SDimitry Andric } 1810b57cec5SDimitry Andric 1820b57cec5SDimitry Andric void MappingTraits<MachOYAML::BindOpcode>::mapping( 1830b57cec5SDimitry Andric IO &IO, MachOYAML::BindOpcode &BindOpcode) { 1840b57cec5SDimitry Andric IO.mapRequired("Opcode", BindOpcode.Opcode); 1850b57cec5SDimitry Andric IO.mapRequired("Imm", BindOpcode.Imm); 1860b57cec5SDimitry Andric IO.mapOptional("ULEBExtraData", BindOpcode.ULEBExtraData); 1870b57cec5SDimitry Andric IO.mapOptional("SLEBExtraData", BindOpcode.SLEBExtraData); 1880b57cec5SDimitry Andric IO.mapOptional("Symbol", BindOpcode.Symbol); 1890b57cec5SDimitry Andric } 1900b57cec5SDimitry Andric 1910b57cec5SDimitry Andric void MappingTraits<MachOYAML::ExportEntry>::mapping( 1920b57cec5SDimitry Andric IO &IO, MachOYAML::ExportEntry &ExportEntry) { 1930b57cec5SDimitry Andric IO.mapRequired("TerminalSize", ExportEntry.TerminalSize); 1940b57cec5SDimitry Andric IO.mapOptional("NodeOffset", ExportEntry.NodeOffset); 1950b57cec5SDimitry Andric IO.mapOptional("Name", ExportEntry.Name); 1960b57cec5SDimitry Andric IO.mapOptional("Flags", ExportEntry.Flags); 1970b57cec5SDimitry Andric IO.mapOptional("Address", ExportEntry.Address); 1980b57cec5SDimitry Andric IO.mapOptional("Other", ExportEntry.Other); 1990b57cec5SDimitry Andric IO.mapOptional("ImportName", ExportEntry.ImportName); 2000b57cec5SDimitry Andric IO.mapOptional("Children", ExportEntry.Children); 2010b57cec5SDimitry Andric } 2020b57cec5SDimitry Andric 2030b57cec5SDimitry Andric void MappingTraits<MachOYAML::NListEntry>::mapping( 2040b57cec5SDimitry Andric IO &IO, MachOYAML::NListEntry &NListEntry) { 2050b57cec5SDimitry Andric IO.mapRequired("n_strx", NListEntry.n_strx); 2060b57cec5SDimitry Andric IO.mapRequired("n_type", NListEntry.n_type); 2070b57cec5SDimitry Andric IO.mapRequired("n_sect", NListEntry.n_sect); 2080b57cec5SDimitry Andric IO.mapRequired("n_desc", NListEntry.n_desc); 2090b57cec5SDimitry Andric IO.mapRequired("n_value", NListEntry.n_value); 2100b57cec5SDimitry Andric } 2110b57cec5SDimitry Andric 212bdd1243dSDimitry Andric void MappingTraits<MachOYAML::DataInCodeEntry>::mapping( 213bdd1243dSDimitry Andric IO &IO, MachOYAML::DataInCodeEntry &DataInCodeEntry) { 214bdd1243dSDimitry Andric IO.mapRequired("Offset", DataInCodeEntry.Offset); 215bdd1243dSDimitry Andric IO.mapRequired("Length", DataInCodeEntry.Length); 216bdd1243dSDimitry Andric IO.mapRequired("Kind", DataInCodeEntry.Kind); 217bdd1243dSDimitry Andric } 218bdd1243dSDimitry Andric 2190b57cec5SDimitry Andric template <typename StructType> 2200b57cec5SDimitry Andric void mapLoadCommandData(IO &IO, MachOYAML::LoadCommand &LoadCommand) {} 2210b57cec5SDimitry Andric 2220b57cec5SDimitry Andric template <> 2230b57cec5SDimitry Andric void mapLoadCommandData<MachO::segment_command>( 2240b57cec5SDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 2250b57cec5SDimitry Andric IO.mapOptional("Sections", LoadCommand.Sections); 2260b57cec5SDimitry Andric } 2270b57cec5SDimitry Andric 2280b57cec5SDimitry Andric template <> 2290b57cec5SDimitry Andric void mapLoadCommandData<MachO::segment_command_64>( 2300b57cec5SDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 2310b57cec5SDimitry Andric IO.mapOptional("Sections", LoadCommand.Sections); 2320b57cec5SDimitry Andric } 2330b57cec5SDimitry Andric 2340b57cec5SDimitry Andric template <> 2350b57cec5SDimitry Andric void mapLoadCommandData<MachO::dylib_command>( 2360b57cec5SDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 237fe6060f1SDimitry Andric IO.mapOptional("Content", LoadCommand.Content); 2380b57cec5SDimitry Andric } 2390b57cec5SDimitry Andric 2400b57cec5SDimitry Andric template <> 2410b57cec5SDimitry Andric void mapLoadCommandData<MachO::rpath_command>( 2420b57cec5SDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 243fe6060f1SDimitry Andric IO.mapOptional("Content", LoadCommand.Content); 2440b57cec5SDimitry Andric } 2450b57cec5SDimitry Andric 2460b57cec5SDimitry Andric template <> 2470b57cec5SDimitry Andric void mapLoadCommandData<MachO::dylinker_command>( 2480b57cec5SDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 249fe6060f1SDimitry Andric IO.mapOptional("Content", LoadCommand.Content); 2500b57cec5SDimitry Andric } 2510b57cec5SDimitry Andric 2520b57cec5SDimitry Andric template <> 253349cc55cSDimitry Andric void mapLoadCommandData<MachO::sub_framework_command>( 254349cc55cSDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 255349cc55cSDimitry Andric IO.mapOptional("Content", LoadCommand.Content); 256349cc55cSDimitry Andric } 257349cc55cSDimitry Andric 258349cc55cSDimitry Andric template <> 259349cc55cSDimitry Andric void mapLoadCommandData<MachO::sub_umbrella_command>( 260349cc55cSDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 261349cc55cSDimitry Andric IO.mapOptional("Content", LoadCommand.Content); 262349cc55cSDimitry Andric } 263349cc55cSDimitry Andric 264349cc55cSDimitry Andric template <> 265349cc55cSDimitry Andric void mapLoadCommandData<MachO::sub_client_command>( 266349cc55cSDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 267349cc55cSDimitry Andric IO.mapOptional("Content", LoadCommand.Content); 268349cc55cSDimitry Andric } 269349cc55cSDimitry Andric 270349cc55cSDimitry Andric template <> 271349cc55cSDimitry Andric void mapLoadCommandData<MachO::sub_library_command>( 272349cc55cSDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 273349cc55cSDimitry Andric IO.mapOptional("Content", LoadCommand.Content); 274349cc55cSDimitry Andric } 275349cc55cSDimitry Andric 276349cc55cSDimitry Andric template <> 2770b57cec5SDimitry Andric void mapLoadCommandData<MachO::build_version_command>( 2780b57cec5SDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 2790b57cec5SDimitry Andric IO.mapOptional("Tools", LoadCommand.Tools); 2800b57cec5SDimitry Andric } 2810b57cec5SDimitry Andric 2820b57cec5SDimitry Andric void MappingTraits<MachOYAML::LoadCommand>::mapping( 2830b57cec5SDimitry Andric IO &IO, MachOYAML::LoadCommand &LoadCommand) { 2840b57cec5SDimitry Andric MachO::LoadCommandType TempCmd = static_cast<MachO::LoadCommandType>( 2850b57cec5SDimitry Andric LoadCommand.Data.load_command_data.cmd); 2860b57cec5SDimitry Andric IO.mapRequired("cmd", TempCmd); 2870b57cec5SDimitry Andric LoadCommand.Data.load_command_data.cmd = TempCmd; 2880b57cec5SDimitry Andric IO.mapRequired("cmdsize", LoadCommand.Data.load_command_data.cmdsize); 2890b57cec5SDimitry Andric 2900b57cec5SDimitry Andric #define HANDLE_LOAD_COMMAND(LCName, LCValue, LCStruct) \ 2910b57cec5SDimitry Andric case MachO::LCName: \ 2920b57cec5SDimitry Andric MappingTraits<MachO::LCStruct>::mapping(IO, \ 2930b57cec5SDimitry Andric LoadCommand.Data.LCStruct##_data); \ 2940b57cec5SDimitry Andric mapLoadCommandData<MachO::LCStruct>(IO, LoadCommand); \ 2950b57cec5SDimitry Andric break; 2960b57cec5SDimitry Andric 2970b57cec5SDimitry Andric switch (LoadCommand.Data.load_command_data.cmd) { 2980b57cec5SDimitry Andric #include "llvm/BinaryFormat/MachO.def" 2990b57cec5SDimitry Andric } 3000b57cec5SDimitry Andric IO.mapOptional("PayloadBytes", LoadCommand.PayloadBytes); 3010b57cec5SDimitry Andric IO.mapOptional("ZeroPadBytes", LoadCommand.ZeroPadBytes, (uint64_t)0ull); 3020b57cec5SDimitry Andric } 3030b57cec5SDimitry Andric 3040b57cec5SDimitry Andric void MappingTraits<MachO::dyld_info_command>::mapping( 3050b57cec5SDimitry Andric IO &IO, MachO::dyld_info_command &LoadCommand) { 3060b57cec5SDimitry Andric IO.mapRequired("rebase_off", LoadCommand.rebase_off); 3070b57cec5SDimitry Andric IO.mapRequired("rebase_size", LoadCommand.rebase_size); 3080b57cec5SDimitry Andric IO.mapRequired("bind_off", LoadCommand.bind_off); 3090b57cec5SDimitry Andric IO.mapRequired("bind_size", LoadCommand.bind_size); 3100b57cec5SDimitry Andric IO.mapRequired("weak_bind_off", LoadCommand.weak_bind_off); 3110b57cec5SDimitry Andric IO.mapRequired("weak_bind_size", LoadCommand.weak_bind_size); 3120b57cec5SDimitry Andric IO.mapRequired("lazy_bind_off", LoadCommand.lazy_bind_off); 3130b57cec5SDimitry Andric IO.mapRequired("lazy_bind_size", LoadCommand.lazy_bind_size); 3140b57cec5SDimitry Andric IO.mapRequired("export_off", LoadCommand.export_off); 3150b57cec5SDimitry Andric IO.mapRequired("export_size", LoadCommand.export_size); 3160b57cec5SDimitry Andric } 3170b57cec5SDimitry Andric 3185ffd83dbSDimitry Andric void MappingTraits<MachOYAML::Relocation>::mapping( 3195ffd83dbSDimitry Andric IO &IO, MachOYAML::Relocation &Relocation) { 3205ffd83dbSDimitry Andric IO.mapRequired("address", Relocation.address); 3215ffd83dbSDimitry Andric IO.mapRequired("symbolnum", Relocation.symbolnum); 3225ffd83dbSDimitry Andric IO.mapRequired("pcrel", Relocation.is_pcrel); 3235ffd83dbSDimitry Andric IO.mapRequired("length", Relocation.length); 3245ffd83dbSDimitry Andric IO.mapRequired("extern", Relocation.is_extern); 3255ffd83dbSDimitry Andric IO.mapRequired("type", Relocation.type); 3265ffd83dbSDimitry Andric IO.mapRequired("scattered", Relocation.is_scattered); 3275ffd83dbSDimitry Andric IO.mapRequired("value", Relocation.value); 3285ffd83dbSDimitry Andric } 3295ffd83dbSDimitry Andric 3300b57cec5SDimitry Andric void MappingTraits<MachOYAML::Section>::mapping(IO &IO, 3310b57cec5SDimitry Andric MachOYAML::Section &Section) { 3320b57cec5SDimitry Andric IO.mapRequired("sectname", Section.sectname); 3330b57cec5SDimitry Andric IO.mapRequired("segname", Section.segname); 3340b57cec5SDimitry Andric IO.mapRequired("addr", Section.addr); 3350b57cec5SDimitry Andric IO.mapRequired("size", Section.size); 3360b57cec5SDimitry Andric IO.mapRequired("offset", Section.offset); 3370b57cec5SDimitry Andric IO.mapRequired("align", Section.align); 3380b57cec5SDimitry Andric IO.mapRequired("reloff", Section.reloff); 3390b57cec5SDimitry Andric IO.mapRequired("nreloc", Section.nreloc); 3400b57cec5SDimitry Andric IO.mapRequired("flags", Section.flags); 3410b57cec5SDimitry Andric IO.mapRequired("reserved1", Section.reserved1); 3420b57cec5SDimitry Andric IO.mapRequired("reserved2", Section.reserved2); 3430b57cec5SDimitry Andric IO.mapOptional("reserved3", Section.reserved3); 3448bcb0991SDimitry Andric IO.mapOptional("content", Section.content); 3455ffd83dbSDimitry Andric IO.mapOptional("relocations", Section.relocations); 3468bcb0991SDimitry Andric } 3478bcb0991SDimitry Andric 348e8d8bef9SDimitry Andric std::string 3498bcb0991SDimitry Andric MappingTraits<MachOYAML::Section>::validate(IO &IO, 3508bcb0991SDimitry Andric MachOYAML::Section &Section) { 3518bcb0991SDimitry Andric if (Section.content && Section.size < Section.content->binary_size()) 3528bcb0991SDimitry Andric return "Section size must be greater than or equal to the content size"; 353e8d8bef9SDimitry Andric return ""; 3540b57cec5SDimitry Andric } 3550b57cec5SDimitry Andric 3560b57cec5SDimitry Andric void MappingTraits<MachO::build_tool_version>::mapping( 3570b57cec5SDimitry Andric IO &IO, MachO::build_tool_version &tool) { 3580b57cec5SDimitry Andric IO.mapRequired("tool", tool.tool); 3590b57cec5SDimitry Andric IO.mapRequired("version", tool.version); 3600b57cec5SDimitry Andric } 3610b57cec5SDimitry Andric 3620b57cec5SDimitry Andric void MappingTraits<MachO::dylib>::mapping(IO &IO, MachO::dylib &DylibStruct) { 3630b57cec5SDimitry Andric IO.mapRequired("name", DylibStruct.name); 3640b57cec5SDimitry Andric IO.mapRequired("timestamp", DylibStruct.timestamp); 3650b57cec5SDimitry Andric IO.mapRequired("current_version", DylibStruct.current_version); 3660b57cec5SDimitry Andric IO.mapRequired("compatibility_version", DylibStruct.compatibility_version); 3670b57cec5SDimitry Andric } 3680b57cec5SDimitry Andric 3690b57cec5SDimitry Andric void MappingTraits<MachO::dylib_command>::mapping( 3700b57cec5SDimitry Andric IO &IO, MachO::dylib_command &LoadCommand) { 3710b57cec5SDimitry Andric IO.mapRequired("dylib", LoadCommand.dylib); 3720b57cec5SDimitry Andric } 3730b57cec5SDimitry Andric 3740b57cec5SDimitry Andric void MappingTraits<MachO::dylinker_command>::mapping( 3750b57cec5SDimitry Andric IO &IO, MachO::dylinker_command &LoadCommand) { 3760b57cec5SDimitry Andric IO.mapRequired("name", LoadCommand.name); 3770b57cec5SDimitry Andric } 3780b57cec5SDimitry Andric 3790b57cec5SDimitry Andric void MappingTraits<MachO::dysymtab_command>::mapping( 3800b57cec5SDimitry Andric IO &IO, MachO::dysymtab_command &LoadCommand) { 3810b57cec5SDimitry Andric IO.mapRequired("ilocalsym", LoadCommand.ilocalsym); 3820b57cec5SDimitry Andric IO.mapRequired("nlocalsym", LoadCommand.nlocalsym); 3830b57cec5SDimitry Andric IO.mapRequired("iextdefsym", LoadCommand.iextdefsym); 3840b57cec5SDimitry Andric IO.mapRequired("nextdefsym", LoadCommand.nextdefsym); 3850b57cec5SDimitry Andric IO.mapRequired("iundefsym", LoadCommand.iundefsym); 3860b57cec5SDimitry Andric IO.mapRequired("nundefsym", LoadCommand.nundefsym); 3870b57cec5SDimitry Andric IO.mapRequired("tocoff", LoadCommand.tocoff); 3880b57cec5SDimitry Andric IO.mapRequired("ntoc", LoadCommand.ntoc); 3890b57cec5SDimitry Andric IO.mapRequired("modtaboff", LoadCommand.modtaboff); 3900b57cec5SDimitry Andric IO.mapRequired("nmodtab", LoadCommand.nmodtab); 3910b57cec5SDimitry Andric IO.mapRequired("extrefsymoff", LoadCommand.extrefsymoff); 3920b57cec5SDimitry Andric IO.mapRequired("nextrefsyms", LoadCommand.nextrefsyms); 3930b57cec5SDimitry Andric IO.mapRequired("indirectsymoff", LoadCommand.indirectsymoff); 3940b57cec5SDimitry Andric IO.mapRequired("nindirectsyms", LoadCommand.nindirectsyms); 3950b57cec5SDimitry Andric IO.mapRequired("extreloff", LoadCommand.extreloff); 3960b57cec5SDimitry Andric IO.mapRequired("nextrel", LoadCommand.nextrel); 3970b57cec5SDimitry Andric IO.mapRequired("locreloff", LoadCommand.locreloff); 3980b57cec5SDimitry Andric IO.mapRequired("nlocrel", LoadCommand.nlocrel); 3990b57cec5SDimitry Andric } 4000b57cec5SDimitry Andric 4010b57cec5SDimitry Andric void MappingTraits<MachO::encryption_info_command>::mapping( 4020b57cec5SDimitry Andric IO &IO, MachO::encryption_info_command &LoadCommand) { 4030b57cec5SDimitry Andric IO.mapRequired("cryptoff", LoadCommand.cryptoff); 4040b57cec5SDimitry Andric IO.mapRequired("cryptsize", LoadCommand.cryptsize); 4050b57cec5SDimitry Andric IO.mapRequired("cryptid", LoadCommand.cryptid); 4060b57cec5SDimitry Andric } 4070b57cec5SDimitry Andric 4080b57cec5SDimitry Andric void MappingTraits<MachO::encryption_info_command_64>::mapping( 4090b57cec5SDimitry Andric IO &IO, MachO::encryption_info_command_64 &LoadCommand) { 4100b57cec5SDimitry Andric IO.mapRequired("cryptoff", LoadCommand.cryptoff); 4110b57cec5SDimitry Andric IO.mapRequired("cryptsize", LoadCommand.cryptsize); 4120b57cec5SDimitry Andric IO.mapRequired("cryptid", LoadCommand.cryptid); 4130b57cec5SDimitry Andric IO.mapRequired("pad", LoadCommand.pad); 4140b57cec5SDimitry Andric } 4150b57cec5SDimitry Andric 4160b57cec5SDimitry Andric void MappingTraits<MachO::entry_point_command>::mapping( 4170b57cec5SDimitry Andric IO &IO, MachO::entry_point_command &LoadCommand) { 4180b57cec5SDimitry Andric IO.mapRequired("entryoff", LoadCommand.entryoff); 4190b57cec5SDimitry Andric IO.mapRequired("stacksize", LoadCommand.stacksize); 4200b57cec5SDimitry Andric } 4210b57cec5SDimitry Andric 4220b57cec5SDimitry Andric void MappingTraits<MachO::fvmfile_command>::mapping( 4230b57cec5SDimitry Andric IO &IO, MachO::fvmfile_command &LoadCommand) { 4240b57cec5SDimitry Andric IO.mapRequired("name", LoadCommand.name); 4250b57cec5SDimitry Andric IO.mapRequired("header_addr", LoadCommand.header_addr); 4260b57cec5SDimitry Andric } 4270b57cec5SDimitry Andric 4280b57cec5SDimitry Andric void MappingTraits<MachO::fvmlib>::mapping(IO &IO, MachO::fvmlib &FVMLib) { 4290b57cec5SDimitry Andric IO.mapRequired("name", FVMLib.name); 4300b57cec5SDimitry Andric IO.mapRequired("minor_version", FVMLib.minor_version); 4310b57cec5SDimitry Andric IO.mapRequired("header_addr", FVMLib.header_addr); 4320b57cec5SDimitry Andric } 4330b57cec5SDimitry Andric 4340b57cec5SDimitry Andric void MappingTraits<MachO::fvmlib_command>::mapping( 4350b57cec5SDimitry Andric IO &IO, MachO::fvmlib_command &LoadCommand) { 4360b57cec5SDimitry Andric IO.mapRequired("fvmlib", LoadCommand.fvmlib); 4370b57cec5SDimitry Andric } 4380b57cec5SDimitry Andric 4390b57cec5SDimitry Andric void MappingTraits<MachO::ident_command>::mapping( 4400b57cec5SDimitry Andric IO &IO, MachO::ident_command &LoadCommand) {} 4410b57cec5SDimitry Andric 4420b57cec5SDimitry Andric void MappingTraits<MachO::linkedit_data_command>::mapping( 4430b57cec5SDimitry Andric IO &IO, MachO::linkedit_data_command &LoadCommand) { 4440b57cec5SDimitry Andric IO.mapRequired("dataoff", LoadCommand.dataoff); 4450b57cec5SDimitry Andric IO.mapRequired("datasize", LoadCommand.datasize); 4460b57cec5SDimitry Andric } 4470b57cec5SDimitry Andric 4480b57cec5SDimitry Andric void MappingTraits<MachO::linker_option_command>::mapping( 4490b57cec5SDimitry Andric IO &IO, MachO::linker_option_command &LoadCommand) { 4500b57cec5SDimitry Andric IO.mapRequired("count", LoadCommand.count); 4510b57cec5SDimitry Andric } 4520b57cec5SDimitry Andric 4530b57cec5SDimitry Andric void MappingTraits<MachO::prebind_cksum_command>::mapping( 4540b57cec5SDimitry Andric IO &IO, MachO::prebind_cksum_command &LoadCommand) { 4550b57cec5SDimitry Andric IO.mapRequired("cksum", LoadCommand.cksum); 4560b57cec5SDimitry Andric } 4570b57cec5SDimitry Andric 4580b57cec5SDimitry Andric void MappingTraits<MachO::load_command>::mapping( 4590b57cec5SDimitry Andric IO &IO, MachO::load_command &LoadCommand) {} 4600b57cec5SDimitry Andric 4610b57cec5SDimitry Andric void MappingTraits<MachO::prebound_dylib_command>::mapping( 4620b57cec5SDimitry Andric IO &IO, MachO::prebound_dylib_command &LoadCommand) { 4630b57cec5SDimitry Andric IO.mapRequired("name", LoadCommand.name); 4640b57cec5SDimitry Andric IO.mapRequired("nmodules", LoadCommand.nmodules); 4650b57cec5SDimitry Andric IO.mapRequired("linked_modules", LoadCommand.linked_modules); 4660b57cec5SDimitry Andric } 4670b57cec5SDimitry Andric 4680b57cec5SDimitry Andric void MappingTraits<MachO::routines_command>::mapping( 4690b57cec5SDimitry Andric IO &IO, MachO::routines_command &LoadCommand) { 4700b57cec5SDimitry Andric IO.mapRequired("init_address", LoadCommand.init_address); 4710b57cec5SDimitry Andric IO.mapRequired("init_module", LoadCommand.init_module); 4720b57cec5SDimitry Andric IO.mapRequired("reserved1", LoadCommand.reserved1); 4730b57cec5SDimitry Andric IO.mapRequired("reserved2", LoadCommand.reserved2); 4740b57cec5SDimitry Andric IO.mapRequired("reserved3", LoadCommand.reserved3); 4750b57cec5SDimitry Andric IO.mapRequired("reserved4", LoadCommand.reserved4); 4760b57cec5SDimitry Andric IO.mapRequired("reserved5", LoadCommand.reserved5); 4770b57cec5SDimitry Andric IO.mapRequired("reserved6", LoadCommand.reserved6); 4780b57cec5SDimitry Andric } 4790b57cec5SDimitry Andric 4800b57cec5SDimitry Andric void MappingTraits<MachO::routines_command_64>::mapping( 4810b57cec5SDimitry Andric IO &IO, MachO::routines_command_64 &LoadCommand) { 4820b57cec5SDimitry Andric IO.mapRequired("init_address", LoadCommand.init_address); 4830b57cec5SDimitry Andric IO.mapRequired("init_module", LoadCommand.init_module); 4840b57cec5SDimitry Andric IO.mapRequired("reserved1", LoadCommand.reserved1); 4850b57cec5SDimitry Andric IO.mapRequired("reserved2", LoadCommand.reserved2); 4860b57cec5SDimitry Andric IO.mapRequired("reserved3", LoadCommand.reserved3); 4870b57cec5SDimitry Andric IO.mapRequired("reserved4", LoadCommand.reserved4); 4880b57cec5SDimitry Andric IO.mapRequired("reserved5", LoadCommand.reserved5); 4890b57cec5SDimitry Andric IO.mapRequired("reserved6", LoadCommand.reserved6); 4900b57cec5SDimitry Andric } 4910b57cec5SDimitry Andric 4920b57cec5SDimitry Andric void MappingTraits<MachO::rpath_command>::mapping( 4930b57cec5SDimitry Andric IO &IO, MachO::rpath_command &LoadCommand) { 4940b57cec5SDimitry Andric IO.mapRequired("path", LoadCommand.path); 4950b57cec5SDimitry Andric } 4960b57cec5SDimitry Andric 4970b57cec5SDimitry Andric void MappingTraits<MachO::section>::mapping(IO &IO, MachO::section &Section) { 4980b57cec5SDimitry Andric IO.mapRequired("sectname", Section.sectname); 4990b57cec5SDimitry Andric IO.mapRequired("segname", Section.segname); 5000b57cec5SDimitry Andric IO.mapRequired("addr", Section.addr); 5010b57cec5SDimitry Andric IO.mapRequired("size", Section.size); 5020b57cec5SDimitry Andric IO.mapRequired("offset", Section.offset); 5030b57cec5SDimitry Andric IO.mapRequired("align", Section.align); 5040b57cec5SDimitry Andric IO.mapRequired("reloff", Section.reloff); 5050b57cec5SDimitry Andric IO.mapRequired("nreloc", Section.nreloc); 5060b57cec5SDimitry Andric IO.mapRequired("flags", Section.flags); 5070b57cec5SDimitry Andric IO.mapRequired("reserved1", Section.reserved1); 5080b57cec5SDimitry Andric IO.mapRequired("reserved2", Section.reserved2); 5090b57cec5SDimitry Andric } 5100b57cec5SDimitry Andric 5110b57cec5SDimitry Andric void MappingTraits<MachO::section_64>::mapping(IO &IO, 5120b57cec5SDimitry Andric MachO::section_64 &Section) { 5130b57cec5SDimitry Andric IO.mapRequired("sectname", Section.sectname); 5140b57cec5SDimitry Andric IO.mapRequired("segname", Section.segname); 5150b57cec5SDimitry Andric IO.mapRequired("addr", Section.addr); 5160b57cec5SDimitry Andric IO.mapRequired("size", Section.size); 5170b57cec5SDimitry Andric IO.mapRequired("offset", Section.offset); 5180b57cec5SDimitry Andric IO.mapRequired("align", Section.align); 5190b57cec5SDimitry Andric IO.mapRequired("reloff", Section.reloff); 5200b57cec5SDimitry Andric IO.mapRequired("nreloc", Section.nreloc); 5210b57cec5SDimitry Andric IO.mapRequired("flags", Section.flags); 5220b57cec5SDimitry Andric IO.mapRequired("reserved1", Section.reserved1); 5230b57cec5SDimitry Andric IO.mapRequired("reserved2", Section.reserved2); 5240b57cec5SDimitry Andric IO.mapRequired("reserved3", Section.reserved3); 5250b57cec5SDimitry Andric } 5260b57cec5SDimitry Andric 5270b57cec5SDimitry Andric void MappingTraits<MachO::segment_command>::mapping( 5280b57cec5SDimitry Andric IO &IO, MachO::segment_command &LoadCommand) { 5290b57cec5SDimitry Andric IO.mapRequired("segname", LoadCommand.segname); 5300b57cec5SDimitry Andric IO.mapRequired("vmaddr", LoadCommand.vmaddr); 5310b57cec5SDimitry Andric IO.mapRequired("vmsize", LoadCommand.vmsize); 5320b57cec5SDimitry Andric IO.mapRequired("fileoff", LoadCommand.fileoff); 5330b57cec5SDimitry Andric IO.mapRequired("filesize", LoadCommand.filesize); 5340b57cec5SDimitry Andric IO.mapRequired("maxprot", LoadCommand.maxprot); 5350b57cec5SDimitry Andric IO.mapRequired("initprot", LoadCommand.initprot); 5360b57cec5SDimitry Andric IO.mapRequired("nsects", LoadCommand.nsects); 5370b57cec5SDimitry Andric IO.mapRequired("flags", LoadCommand.flags); 5380b57cec5SDimitry Andric } 5390b57cec5SDimitry Andric 5400b57cec5SDimitry Andric void MappingTraits<MachO::segment_command_64>::mapping( 5410b57cec5SDimitry Andric IO &IO, MachO::segment_command_64 &LoadCommand) { 5420b57cec5SDimitry Andric IO.mapRequired("segname", LoadCommand.segname); 5430b57cec5SDimitry Andric IO.mapRequired("vmaddr", LoadCommand.vmaddr); 5440b57cec5SDimitry Andric IO.mapRequired("vmsize", LoadCommand.vmsize); 5450b57cec5SDimitry Andric IO.mapRequired("fileoff", LoadCommand.fileoff); 5460b57cec5SDimitry Andric IO.mapRequired("filesize", LoadCommand.filesize); 5470b57cec5SDimitry Andric IO.mapRequired("maxprot", LoadCommand.maxprot); 5480b57cec5SDimitry Andric IO.mapRequired("initprot", LoadCommand.initprot); 5490b57cec5SDimitry Andric IO.mapRequired("nsects", LoadCommand.nsects); 5500b57cec5SDimitry Andric IO.mapRequired("flags", LoadCommand.flags); 5510b57cec5SDimitry Andric } 5520b57cec5SDimitry Andric 5530b57cec5SDimitry Andric void MappingTraits<MachO::source_version_command>::mapping( 5540b57cec5SDimitry Andric IO &IO, MachO::source_version_command &LoadCommand) { 5550b57cec5SDimitry Andric IO.mapRequired("version", LoadCommand.version); 5560b57cec5SDimitry Andric } 5570b57cec5SDimitry Andric 5580b57cec5SDimitry Andric void MappingTraits<MachO::sub_client_command>::mapping( 5590b57cec5SDimitry Andric IO &IO, MachO::sub_client_command &LoadCommand) { 5600b57cec5SDimitry Andric IO.mapRequired("client", LoadCommand.client); 5610b57cec5SDimitry Andric } 5620b57cec5SDimitry Andric 5630b57cec5SDimitry Andric void MappingTraits<MachO::sub_framework_command>::mapping( 5640b57cec5SDimitry Andric IO &IO, MachO::sub_framework_command &LoadCommand) { 5650b57cec5SDimitry Andric IO.mapRequired("umbrella", LoadCommand.umbrella); 5660b57cec5SDimitry Andric } 5670b57cec5SDimitry Andric 5680b57cec5SDimitry Andric void MappingTraits<MachO::sub_library_command>::mapping( 5690b57cec5SDimitry Andric IO &IO, MachO::sub_library_command &LoadCommand) { 5700b57cec5SDimitry Andric IO.mapRequired("sub_library", LoadCommand.sub_library); 5710b57cec5SDimitry Andric } 5720b57cec5SDimitry Andric 5730b57cec5SDimitry Andric void MappingTraits<MachO::sub_umbrella_command>::mapping( 5740b57cec5SDimitry Andric IO &IO, MachO::sub_umbrella_command &LoadCommand) { 5750b57cec5SDimitry Andric IO.mapRequired("sub_umbrella", LoadCommand.sub_umbrella); 5760b57cec5SDimitry Andric } 5770b57cec5SDimitry Andric 5780b57cec5SDimitry Andric void MappingTraits<MachO::symseg_command>::mapping( 5790b57cec5SDimitry Andric IO &IO, MachO::symseg_command &LoadCommand) { 5800b57cec5SDimitry Andric IO.mapRequired("offset", LoadCommand.offset); 5810b57cec5SDimitry Andric IO.mapRequired("size", LoadCommand.size); 5820b57cec5SDimitry Andric } 5830b57cec5SDimitry Andric 5840b57cec5SDimitry Andric void MappingTraits<MachO::symtab_command>::mapping( 5850b57cec5SDimitry Andric IO &IO, MachO::symtab_command &LoadCommand) { 5860b57cec5SDimitry Andric IO.mapRequired("symoff", LoadCommand.symoff); 5870b57cec5SDimitry Andric IO.mapRequired("nsyms", LoadCommand.nsyms); 5880b57cec5SDimitry Andric IO.mapRequired("stroff", LoadCommand.stroff); 5890b57cec5SDimitry Andric IO.mapRequired("strsize", LoadCommand.strsize); 5900b57cec5SDimitry Andric } 5910b57cec5SDimitry Andric 5920b57cec5SDimitry Andric void MappingTraits<MachO::thread_command>::mapping( 5930b57cec5SDimitry Andric IO &IO, MachO::thread_command &LoadCommand) {} 5940b57cec5SDimitry Andric 5950b57cec5SDimitry Andric void MappingTraits<MachO::twolevel_hints_command>::mapping( 5960b57cec5SDimitry Andric IO &IO, MachO::twolevel_hints_command &LoadCommand) { 5970b57cec5SDimitry Andric IO.mapRequired("offset", LoadCommand.offset); 5980b57cec5SDimitry Andric IO.mapRequired("nhints", LoadCommand.nhints); 5990b57cec5SDimitry Andric } 6000b57cec5SDimitry Andric 6010b57cec5SDimitry Andric void MappingTraits<MachO::uuid_command>::mapping( 6020b57cec5SDimitry Andric IO &IO, MachO::uuid_command &LoadCommand) { 6030b57cec5SDimitry Andric IO.mapRequired("uuid", LoadCommand.uuid); 6040b57cec5SDimitry Andric } 6050b57cec5SDimitry Andric 6060b57cec5SDimitry Andric void MappingTraits<MachO::version_min_command>::mapping( 6070b57cec5SDimitry Andric IO &IO, MachO::version_min_command &LoadCommand) { 6080b57cec5SDimitry Andric IO.mapRequired("version", LoadCommand.version); 6090b57cec5SDimitry Andric IO.mapRequired("sdk", LoadCommand.sdk); 6100b57cec5SDimitry Andric } 6110b57cec5SDimitry Andric 6120b57cec5SDimitry Andric void MappingTraits<MachO::note_command>::mapping( 6130b57cec5SDimitry Andric IO &IO, MachO::note_command &LoadCommand) { 6140b57cec5SDimitry Andric IO.mapRequired("data_owner", LoadCommand.data_owner); 6150b57cec5SDimitry Andric IO.mapRequired("offset", LoadCommand.offset); 6160b57cec5SDimitry Andric IO.mapRequired("size", LoadCommand.size); 6170b57cec5SDimitry Andric } 6180b57cec5SDimitry Andric 6190b57cec5SDimitry Andric void MappingTraits<MachO::build_version_command>::mapping( 6200b57cec5SDimitry Andric IO &IO, MachO::build_version_command &LoadCommand) { 6210b57cec5SDimitry Andric IO.mapRequired("platform", LoadCommand.platform); 6220b57cec5SDimitry Andric IO.mapRequired("minos", LoadCommand.minos); 6230b57cec5SDimitry Andric IO.mapRequired("sdk", LoadCommand.sdk); 6240b57cec5SDimitry Andric IO.mapRequired("ntools", LoadCommand.ntools); 6250b57cec5SDimitry Andric } 6260b57cec5SDimitry Andric 627bdd1243dSDimitry Andric void MappingTraits<MachO::fileset_entry_command>::mapping( 628bdd1243dSDimitry Andric IO &IO, MachO::fileset_entry_command &LoadCommand) { 629bdd1243dSDimitry Andric IO.mapRequired("vmaddr", LoadCommand.vmaddr); 630bdd1243dSDimitry Andric IO.mapRequired("fileoff", LoadCommand.fileoff); 631*5f757f3fSDimitry Andric IO.mapRequired("id", LoadCommand.entry_id.offset); 632*5f757f3fSDimitry Andric IO.mapOptional("reserved", LoadCommand.reserved); 633bdd1243dSDimitry Andric } 634bdd1243dSDimitry Andric 6350b57cec5SDimitry Andric } // end namespace yaml 6360b57cec5SDimitry Andric 6370b57cec5SDimitry Andric } // end namespace llvm 638