1c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//===- MachOYAML.h - Mach-O YAMLIO implementation ---------------*- C++ -*-===//
2c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//
3c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//                     The LLVM Compiler Infrastructure
4c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//
5c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// This file is distributed under the University of Illinois Open Source
6c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// License. See LICENSE.TXT for details.
7c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//
8c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//===----------------------------------------------------------------------===//
9c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot///
10c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// \file
11c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// \brief This file declares classes for handling the YAML representation
12c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// of Mach-O.
13c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot///
14c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//===----------------------------------------------------------------------===//
15c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
16c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#ifndef LLVM_OBJECTYAML_MACHOYAML_H
17c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#define LLVM_OBJECTYAML_MACHOYAML_H
18c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
19c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/ADT/StringRef.h"
20c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/BinaryFormat/MachO.h"
21c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/ObjectYAML/DWARFYAML.h"
22c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/Support/YAMLTraits.h"
23c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include <cstdint>
24c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include <string>
25c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include <vector>
26c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
27c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotnamespace llvm {
28c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotnamespace MachOYAML {
29c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
30c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct Section {
31c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  char sectname[16];
32c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  char segname[16];
33c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex64 addr;
34c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint64_t size;
35c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 offset;
36c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint32_t align;
37c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 reloff;
38c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint32_t nreloc;
39c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 flags;
40c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 reserved1;
41c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 reserved2;
42c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 reserved3;
43c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
44c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
45c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct FileHeader {
46c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 magic;
47c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 cputype;
48c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 cpusubtype;
49c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 filetype;
50c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint32_t ncmds;
51c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint32_t sizeofcmds;
52c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 flags;
53c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 reserved;
54c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
55c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
56c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct LoadCommand {
57c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  virtual ~LoadCommand();
58c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
59c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::MachO::macho_load_command Data;
60c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<Section> Sections;
61c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<MachO::build_tool_version> Tools;
62c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<llvm::yaml::Hex8> PayloadBytes;
63c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::string PayloadString;
64c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint64_t ZeroPadBytes;
65c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
66c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
67c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct NListEntry {
68c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint32_t n_strx;
69c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex8 n_type;
70c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint8_t n_sect;
71c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint16_t n_desc;
72c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint64_t n_value;
73c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
74c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
75c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct RebaseOpcode {
76c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  MachO::RebaseOpcode Opcode;
77c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint8_t Imm;
78c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<yaml::Hex64> ExtraData;
79c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
80c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
81c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct BindOpcode {
82c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  MachO::BindOpcode Opcode;
83c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint8_t Imm;
84c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<yaml::Hex64> ULEBExtraData;
85c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<int64_t> SLEBExtraData;
86c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  StringRef Symbol;
87c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
88c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
89c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct ExportEntry {
90c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint64_t TerminalSize = 0;
91c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint64_t NodeOffset = 0;
92c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::string Name;
93c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex64 Flags = 0;
94c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex64 Address = 0;
95c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex64 Other = 0;
96c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::string ImportName;
97c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<MachOYAML::ExportEntry> Children;
98c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
99c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
100c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct LinkEditData {
101c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<MachOYAML::RebaseOpcode> RebaseOpcodes;
102c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<MachOYAML::BindOpcode> BindOpcodes;
103c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<MachOYAML::BindOpcode> WeakBindOpcodes;
104c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<MachOYAML::BindOpcode> LazyBindOpcodes;
105c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  MachOYAML::ExportEntry ExportTrie;
106c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<NListEntry> NameList;
107c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<StringRef> StringTable;
108c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
109c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  bool isEmpty() const;
110c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
111c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
112c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct Object {
113c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  bool IsLittleEndian;
114c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  FileHeader Header;
115c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<LoadCommand> LoadCommands;
116c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<Section> Sections;
117c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  LinkEditData LinkEdit;
118c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  DWARFYAML::Data DWARF;
119c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
120c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
121c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct FatHeader {
122c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 magic;
123c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint32_t nfat_arch;
124c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
125c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
126c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct FatArch {
127c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 cputype;
128c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 cpusubtype;
129c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex64 offset;
130c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint64_t size;
131c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  uint32_t align;
132c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  llvm::yaml::Hex32 reserved;
133c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
134c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
135c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotstruct UniversalBinary {
136c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  FatHeader Header;
137c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<FatArch> FatArchs;
138c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  std::vector<Object> Slices;
139c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
140c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
141c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot} // end namespace MachOYAML
142c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot} // end namespace llvm
143c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
144c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotLLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::LoadCommand)
145c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotLLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::Section)
146c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotLLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::RebaseOpcode)
147c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotLLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::BindOpcode)
148c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotLLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::ExportEntry)
149c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotLLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::NListEntry)
150c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotLLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::Object)
151c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotLLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::FatArch)
152c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotLLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachO::build_tool_version)
153c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
154c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotnamespace llvm {
155c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
156c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotclass raw_ostream;
157c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
158c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotnamespace yaml {
159c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
160c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::FileHeader> {
161c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::FileHeader &FileHeader);
162c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
163c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
164c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::Object> {
165c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::Object &Object);
166c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
167c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
168c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::FatHeader> {
169c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::FatHeader &FatHeader);
170c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
171c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
172c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::FatArch> {
173c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::FatArch &FatArch);
174c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
175c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
176c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::UniversalBinary> {
177c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::UniversalBinary &UniversalBinary);
178c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
179c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
180c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::LoadCommand> {
181c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::LoadCommand &LoadCommand);
182c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
183c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
184c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::LinkEditData> {
185c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::LinkEditData &LinkEditData);
186c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
187c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
188c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::RebaseOpcode> {
189c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::RebaseOpcode &RebaseOpcode);
190c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
191c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
192c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::BindOpcode> {
193c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::BindOpcode &BindOpcode);
194c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
195c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
196c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::ExportEntry> {
197c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::ExportEntry &ExportEntry);
198c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
199c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
200c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::Section> {
201c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::Section &Section);
202c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
203c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
204c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachOYAML::NListEntry> {
205c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachOYAML::NListEntry &NListEntry);
206c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
207c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
208c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachO::build_tool_version> {
209c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachO::build_tool_version &tool);
210c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
211c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
212c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#define HANDLE_LOAD_COMMAND(LCName, LCValue, LCStruct)                         \
213c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  io.enumCase(value, #LCName, MachO::LCName);
214c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
215c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct ScalarEnumerationTraits<MachO::LoadCommandType> {
216c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void enumeration(IO &io, MachO::LoadCommandType &value) {
217c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/BinaryFormat/MachO.def"
218c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    io.enumFallback<Hex32>(value);
219c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  }
220c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
221c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
222c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#define ENUM_CASE(Enum) io.enumCase(value, #Enum, MachO::Enum);
223c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
224c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct ScalarEnumerationTraits<MachO::RebaseOpcode> {
225c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void enumeration(IO &io, MachO::RebaseOpcode &value) {
226c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(REBASE_OPCODE_DONE)
227c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(REBASE_OPCODE_SET_TYPE_IMM)
228c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB)
229c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(REBASE_OPCODE_ADD_ADDR_ULEB)
230c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(REBASE_OPCODE_ADD_ADDR_IMM_SCALED)
231c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(REBASE_OPCODE_DO_REBASE_IMM_TIMES)
232c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(REBASE_OPCODE_DO_REBASE_ULEB_TIMES)
233c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB)
234c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB)
235c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    io.enumFallback<Hex8>(value);
236c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  }
237c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
238c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
239c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct ScalarEnumerationTraits<MachO::BindOpcode> {
240c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void enumeration(IO &io, MachO::BindOpcode &value) {
241c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_DONE)
242c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_SET_DYLIB_ORDINAL_IMM)
243c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB)
244c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_SET_DYLIB_SPECIAL_IMM)
245c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM)
246c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_SET_TYPE_IMM)
247c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_SET_ADDEND_SLEB)
248c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB)
249c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_ADD_ADDR_ULEB)
250c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_DO_BIND)
251c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB)
252c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED)
253c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    ENUM_CASE(BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB)
254c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    io.enumFallback<Hex8>(value);
255c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  }
256c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
257c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
258c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// This trait is used for 16-byte chars in Mach structures used for strings
259c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotusing char_16 = char[16];
260c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
261c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct ScalarTraits<char_16> {
262c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void output(const char_16 &Val, void *, raw_ostream &Out);
263c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static StringRef input(StringRef Scalar, void *, char_16 &Val);
264c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static bool mustQuote(StringRef S);
265c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
266c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
267c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// This trait is used for UUIDs. It reads and writes them matching otool's
268c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// formatting style.
269c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotusing uuid_t = raw_ostream::uuid_t;
270c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
271c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct ScalarTraits<uuid_t> {
272c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void output(const uuid_t &Val, void *, raw_ostream &Out);
273c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static StringRef input(StringRef Scalar, void *, uuid_t &Val);
274c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static bool mustQuote(StringRef S);
275c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
276c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
277c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// Load Command struct mapping traits
278c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
279c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#define LOAD_COMMAND_STRUCT(LCStruct)                                          \
280c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  template <> struct MappingTraits<MachO::LCStruct> {                          \
281c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot    static void mapping(IO &IO, MachO::LCStruct &LoadCommand);                 \
282c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  };
283c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
284c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/BinaryFormat/MachO.def"
285c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
286c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// Extra structures used by load commands
287c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachO::dylib> {
288c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachO::dylib &LoadCommand);
289c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
290c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
291c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachO::fvmlib> {
292c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachO::fvmlib &LoadCommand);
293c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
294c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
295c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachO::section> {
296c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachO::section &LoadCommand);
297c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
298c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
299c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robottemplate <> struct MappingTraits<MachO::section_64> {
300c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot  static void mapping(IO &IO, MachO::section_64 &LoadCommand);
301c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot};
302c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
303c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot} // end namespace yaml
304c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
305c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot} // end namespace llvm
306c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
307c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#endif // LLVM_OBJECTYAML_MACHOYAML_H
308