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
isEmpty() const290b57cec5SDimitry 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
output(const char_16 & Val,void *,raw_ostream & Out)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
input(StringRef Scalar,void *,char_16 & Val)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
mustQuote(StringRef S)560b57cec5SDimitry Andric QuotingType ScalarTraits<char_16>::mustQuote(StringRef S) {
570b57cec5SDimitry Andric return needsQuotes(S);
580b57cec5SDimitry Andric }
590b57cec5SDimitry Andric
output(const uuid_t & Val,void *,raw_ostream & Out)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
input(StringRef Scalar,void *,uuid_t & Val)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
mustQuote(StringRef S)810b57cec5SDimitry Andric QuotingType ScalarTraits<uuid_t>::mustQuote(StringRef S) {
820b57cec5SDimitry Andric return needsQuotes(S);
830b57cec5SDimitry Andric }
840b57cec5SDimitry Andric
mapping(IO & IO,MachOYAML::FileHeader & FileHdr)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
mapping(IO & IO,MachOYAML::Object & Object)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
mapping(IO & IO,MachOYAML::FatHeader & FatHeader)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
mapping(IO & IO,MachOYAML::FatArch & FatArch)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
mapping(IO & IO,MachOYAML::UniversalBinary & UniversalBinary)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
mapping(IO & IO,MachOYAML::LinkEditData & LinkEditData)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
mapping(IO & IO,MachOYAML::RebaseOpcode & RebaseOpcode)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
mapping(IO & IO,MachOYAML::BindOpcode & BindOpcode)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
mapping(IO & IO,MachOYAML::ExportEntry & ExportEntry)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
mapping(IO & IO,MachOYAML::NListEntry & NListEntry)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
mapping(IO & IO,MachOYAML::DataInCodeEntry & DataInCodeEntry)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>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)2200b57cec5SDimitry Andric void mapLoadCommandData(IO &IO, MachOYAML::LoadCommand &LoadCommand) {}
2210b57cec5SDimitry Andric
2220b57cec5SDimitry Andric template <>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)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 <>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)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 <>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)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 <>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)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 <>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)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 <>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)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 <>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)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 <>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)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 <>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)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 <>
mapLoadCommandData(IO & IO,MachOYAML::LoadCommand & LoadCommand)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
mapping(IO & IO,MachOYAML::LoadCommand & LoadCommand)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
mapping(IO & IO,MachO::dyld_info_command & LoadCommand)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
mapping(IO & IO,MachOYAML::Relocation & Relocation)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
mapping(IO & IO,MachOYAML::Section & Section)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
validate(IO & IO,MachOYAML::Section & Section)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
mapping(IO & IO,MachO::build_tool_version & tool)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
mapping(IO & IO,MachO::dylib & DylibStruct)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
mapping(IO & IO,MachO::dylib_command & LoadCommand)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
mapping(IO & IO,MachO::dylinker_command & LoadCommand)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
mapping(IO & IO,MachO::dysymtab_command & LoadCommand)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
mapping(IO & IO,MachO::encryption_info_command & LoadCommand)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
mapping(IO & IO,MachO::encryption_info_command_64 & LoadCommand)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
mapping(IO & IO,MachO::entry_point_command & LoadCommand)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
mapping(IO & IO,MachO::fvmfile_command & LoadCommand)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
mapping(IO & IO,MachO::fvmlib & FVMLib)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
mapping(IO & IO,MachO::fvmlib_command & LoadCommand)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
mapping(IO & IO,MachO::ident_command & LoadCommand)4390b57cec5SDimitry Andric void MappingTraits<MachO::ident_command>::mapping(
4400b57cec5SDimitry Andric IO &IO, MachO::ident_command &LoadCommand) {}
4410b57cec5SDimitry Andric
mapping(IO & IO,MachO::linkedit_data_command & LoadCommand)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
mapping(IO & IO,MachO::linker_option_command & LoadCommand)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
mapping(IO & IO,MachO::prebind_cksum_command & LoadCommand)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
mapping(IO & IO,MachO::load_command & LoadCommand)4580b57cec5SDimitry Andric void MappingTraits<MachO::load_command>::mapping(
4590b57cec5SDimitry Andric IO &IO, MachO::load_command &LoadCommand) {}
4600b57cec5SDimitry Andric
mapping(IO & IO,MachO::prebound_dylib_command & LoadCommand)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
mapping(IO & IO,MachO::routines_command & LoadCommand)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
mapping(IO & IO,MachO::routines_command_64 & LoadCommand)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
mapping(IO & IO,MachO::rpath_command & LoadCommand)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
mapping(IO & IO,MachO::section & Section)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
mapping(IO & IO,MachO::section_64 & Section)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
mapping(IO & IO,MachO::segment_command & LoadCommand)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
mapping(IO & IO,MachO::segment_command_64 & LoadCommand)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
mapping(IO & IO,MachO::source_version_command & LoadCommand)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
mapping(IO & IO,MachO::sub_client_command & LoadCommand)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
mapping(IO & IO,MachO::sub_framework_command & LoadCommand)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
mapping(IO & IO,MachO::sub_library_command & LoadCommand)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
mapping(IO & IO,MachO::sub_umbrella_command & LoadCommand)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
mapping(IO & IO,MachO::symseg_command & LoadCommand)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
mapping(IO & IO,MachO::symtab_command & LoadCommand)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
mapping(IO & IO,MachO::thread_command & LoadCommand)5920b57cec5SDimitry Andric void MappingTraits<MachO::thread_command>::mapping(
5930b57cec5SDimitry Andric IO &IO, MachO::thread_command &LoadCommand) {}
5940b57cec5SDimitry Andric
mapping(IO & IO,MachO::twolevel_hints_command & LoadCommand)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
mapping(IO & IO,MachO::uuid_command & LoadCommand)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
mapping(IO & IO,MachO::version_min_command & LoadCommand)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
mapping(IO & IO,MachO::note_command & LoadCommand)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
mapping(IO & IO,MachO::build_version_command & LoadCommand)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
mapping(IO & IO,MachO::fileset_entry_command & LoadCommand)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