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