void MappingTraits<YAMLDebugSubsection>::mapping( IO &IO, YAMLDebugSubsection &Subsection) { if (!IO.outputting()) { if (IO.mapTag("!FileChecksums")) { auto SS = std::make_shared<YAMLChecksumsSubsection>(); Subsection.Subsection = SS; } else if (IO.mapTag("!Lines")) { Subsection.Subsection = std::make_shared<YAMLLinesSubsection>(); } else if (IO.mapTag("!InlineeLines")) { Subsection.Subsection = std::make_shared<YAMLInlineeLinesSubsection>(); } else if (IO.mapTag("!CrossModuleExports")) { Subsection.Subsection = std::make_shared<YAMLCrossModuleExportsSubsection>(); } else if (IO.mapTag("!CrossModuleImports")) { Subsection.Subsection = std::make_shared<YAMLCrossModuleImportsSubsection>(); } else if (IO.mapTag("!Symbols")) { Subsection.Subsection = std::make_shared<YAMLSymbolsSubsection>(); } else if (IO.mapTag("!StringTable")) { Subsection.Subsection = std::make_shared<YAMLStringTableSubsection>(); } else if (IO.mapTag("!FrameData")) { Subsection.Subsection = std::make_shared<YAMLFrameDataSubsection>(); } else if (IO.mapTag("!COFFSymbolRVAs")) { Subsection.Subsection = std::make_shared<YAMLCoffSymbolRVASubsection>(); } else { llvm_unreachable("Unexpected subsection tag!"); } } Subsection.Subsection->map(IO); }
void MappingTraits<WasmYAML::Object>::mapping(IO &IO, WasmYAML::Object &Object) { IO.setContext(&Object); IO.mapTag("!WASM", true); IO.mapRequired("FileHeader", Object.Header); IO.mapOptional("Sections", Object.Sections); IO.setContext(nullptr); }
void YAMLLinesSubsection::map(IO &IO) { IO.mapTag("!Lines", true); IO.mapRequired("CodeSize", Lines.CodeSize); IO.mapRequired("Flags", Lines.Flags); IO.mapRequired("RelocOffset", Lines.RelocOffset); IO.mapRequired("RelocSegment", Lines.RelocSegment); IO.mapRequired("Blocks", Lines.Blocks); }
void MappingTraits<YamlObjectFile>::mapping(IO &IO, YamlObjectFile &ObjectFile) { if (IO.outputting()) { if (ObjectFile.Elf) MappingTraits<ELFYAML::Object>::mapping(IO, *ObjectFile.Elf); if (ObjectFile.Coff) MappingTraits<COFFYAML::Object>::mapping(IO, *ObjectFile.Coff); if (ObjectFile.MachO) MappingTraits<MachOYAML::Object>::mapping(IO, *ObjectFile.MachO); if (ObjectFile.FatMachO) MappingTraits<MachOYAML::UniversalBinary>::mapping(IO, *ObjectFile.FatMachO); } else { if (IO.mapTag("!ELF")) { ObjectFile.Elf.reset(new ELFYAML::Object()); MappingTraits<ELFYAML::Object>::mapping(IO, *ObjectFile.Elf); } else if (IO.mapTag("!COFF")) { ObjectFile.Coff.reset(new COFFYAML::Object()); MappingTraits<COFFYAML::Object>::mapping(IO, *ObjectFile.Coff); } else if (IO.mapTag("!mach-o")) { ObjectFile.MachO.reset(new MachOYAML::Object()); MappingTraits<MachOYAML::Object>::mapping(IO, *ObjectFile.MachO); } else if (IO.mapTag("!fat-mach-o")) { ObjectFile.FatMachO.reset(new MachOYAML::UniversalBinary()); MappingTraits<MachOYAML::UniversalBinary>::mapping(IO, *ObjectFile.FatMachO); } else if (IO.mapTag("!WASM")) { ObjectFile.Wasm.reset(new WasmYAML::Object()); MappingTraits<WasmYAML::Object>::mapping(IO, *ObjectFile.Wasm); } else { Input &In = (Input &)IO; std::string Tag = In.getCurrentNode()->getRawTag(); if (Tag.empty()) IO.setError("YAML Object File missing document type tag!"); else IO.setError( llvm::Twine("YAML Object File unsupported document type tag '") + llvm::Twine(Tag) + llvm::Twine("'!")); } } }
void MappingTraits<MachOYAML::UniversalBinary>::mapping( IO &IO, MachOYAML::UniversalBinary &UniversalBinary) { if (!IO.getContext()) { IO.setContext(&UniversalBinary); IO.mapTag("!fat-mach-o", true); } IO.mapRequired("FatHeader", UniversalBinary.Header); IO.mapRequired("FatArchs", UniversalBinary.FatArchs); IO.mapRequired("Slices", UniversalBinary.Slices); if (IO.getContext() == &UniversalBinary) IO.setContext(nullptr); }
void MappingTraits<MachOYAML::Object>::mapping(IO &IO, MachOYAML::Object &Object) { // If the context isn't already set, tag the document as !mach-o. // For Fat files there will be a different tag so they can be differentiated. if (!IO.getContext()) { IO.setContext(&Object); IO.mapTag("!mach-o", true); } IO.mapRequired("FileHeader", Object.Header); IO.mapOptional("LoadCommands", Object.LoadCommands); IO.mapOptional("LinkEditData", Object.LinkEdit); IO.setContext(nullptr); }
void MappingTraits<DiagnosticInfoOptimizationBase *>::mapping( IO &io, DiagnosticInfoOptimizationBase *&OptDiag) { assert(io.outputting() && "input not yet implemented"); if (io.mapTag("!Passed", (OptDiag->getKind() == DK_OptimizationRemark || OptDiag->getKind() == DK_MachineOptimizationRemark))) ; else if (io.mapTag( "!Missed", (OptDiag->getKind() == DK_OptimizationRemarkMissed || OptDiag->getKind() == DK_MachineOptimizationRemarkMissed))) ; else if (io.mapTag( "!Analysis", (OptDiag->getKind() == DK_OptimizationRemarkAnalysis || OptDiag->getKind() == DK_MachineOptimizationRemarkAnalysis))) ; else if (io.mapTag("!AnalysisFPCommute", OptDiag->getKind() == DK_OptimizationRemarkAnalysisFPCommute)) ; else if (io.mapTag("!AnalysisAliasing", OptDiag->getKind() == DK_OptimizationRemarkAnalysisAliasing)) ; else if (io.mapTag("!Failure", OptDiag->getKind() == DK_OptimizationFailure)) ; else llvm_unreachable("Unknown remark type"); // These are read-only for now. DiagnosticLocation DL = OptDiag->getLocation(); StringRef FN = GlobalValue::dropLLVMManglingEscape(OptDiag->getFunction().getName()); StringRef PassName(OptDiag->PassName); io.mapRequired("Pass", PassName); io.mapRequired("Name", OptDiag->RemarkName); if (!io.outputting() || DL.isValid()) io.mapOptional("DebugLoc", DL); io.mapRequired("Function", FN); io.mapOptional("Hotness", OptDiag->Hotness); io.mapOptional("Args", OptDiag->Args); }
void MappingTraits<MachOYAML::Object>::mapping(IO &IO, MachOYAML::Object &Object) { // If the context isn't already set, tag the document as !mach-o. // For Fat files there will be a different tag so they can be differentiated. if (!IO.getContext()) { IO.setContext(&Object); } IO.mapTag("!mach-o", true); IO.mapOptional("IsLittleEndian", Object.IsLittleEndian, sys::IsLittleEndianHost); Object.DWARF.IsLittleEndian = Object.IsLittleEndian; IO.mapRequired("FileHeader", Object.Header); IO.mapOptional("LoadCommands", Object.LoadCommands); if(!Object.LinkEdit.isEmpty() || !IO.outputting()) IO.mapOptional("LinkEditData", Object.LinkEdit); if(!Object.DWARF.isEmpty() || !IO.outputting()) IO.mapOptional("DWARF", Object.DWARF); if (IO.getContext() == &Object) IO.setContext(nullptr); }
void YAMLCoffSymbolRVASubsection::map(IO &IO) { IO.mapTag("!COFFSymbolRVAs", true); IO.mapRequired("RVAs", RVAs); }
void YAMLFrameDataSubsection::map(IO &IO) { IO.mapTag("!FrameData", true); IO.mapRequired("Frames", Frames); }
void YAMLStringTableSubsection::map(IO &IO) { IO.mapTag("!StringTable", true); IO.mapRequired("Strings", Strings); }
void YAMLSymbolsSubsection::map(IO &IO) { IO.mapTag("!Symbols", true); IO.mapRequired("Records", Symbols); }
void YAMLCrossModuleImportsSubsection::map(IO &IO) { IO.mapTag("!CrossModuleImports", true); IO.mapOptional("Imports", Imports); }
void YAMLInlineeLinesSubsection::map(IO &IO) { IO.mapTag("!InlineeLines", true); IO.mapRequired("HasExtraFiles", InlineeLines.HasExtraFiles); IO.mapRequired("Sites", InlineeLines.Sites); }
void YAMLChecksumsSubsection::map(IO &IO) { IO.mapTag("!FileChecksums", true); IO.mapRequired("Checksums", Checksums); }