void MappingTraits<std::unique_ptr<ELFYAML::Section>>::mapping( IO &IO, std::unique_ptr<ELFYAML::Section> &Section) { ELFYAML::ELF_SHT sectionType; if (IO.outputting()) sectionType = Section->Type; else IO.mapRequired("Type", sectionType); switch (sectionType) { case ELF::SHT_REL: case ELF::SHT_RELA: if (!IO.outputting()) Section.reset(new ELFYAML::RelocationSection()); sectionMapping(IO, *cast<ELFYAML::RelocationSection>(Section.get())); break; default: if (!IO.outputting()) Section.reset(new ELFYAML::RawContentSection()); sectionMapping(IO, *cast<ELFYAML::RawContentSection>(Section.get())); } }
void MappingTraits<std::unique_ptr<ELFYAML::Section>>::mapping( IO &IO, std::unique_ptr<ELFYAML::Section> &Section) { ELFYAML::ELF_SHT sectionType; if (IO.outputting()) sectionType = Section->Type; else IO.mapRequired("Type", sectionType); switch (sectionType) { case ELF::SHT_REL: case ELF::SHT_RELA: if (!IO.outputting()) Section.reset(new ELFYAML::RelocationSection()); sectionMapping(IO, *cast<ELFYAML::RelocationSection>(Section.get())); break; case ELF::SHT_GROUP: if (!IO.outputting()) Section.reset(new ELFYAML::Group()); groupSectionMapping(IO, *cast<ELFYAML::Group>(Section.get())); break; case ELF::SHT_NOBITS: if (!IO.outputting()) Section.reset(new ELFYAML::NoBitsSection()); sectionMapping(IO, *cast<ELFYAML::NoBitsSection>(Section.get())); break; case ELF::SHT_MIPS_ABIFLAGS: if (!IO.outputting()) Section.reset(new ELFYAML::MipsABIFlags()); sectionMapping(IO, *cast<ELFYAML::MipsABIFlags>(Section.get())); break; default: if (!IO.outputting()) Section.reset(new ELFYAML::RawContentSection()); sectionMapping(IO, *cast<ELFYAML::RawContentSection>(Section.get())); } }
void MappingTraits<std::unique_ptr<WasmYAML::Section>>::mapping( IO &IO, std::unique_ptr<WasmYAML::Section> &Section) { WasmYAML::SectionType SectionType; if (IO.outputting()) SectionType = Section->Type; else IO.mapRequired("Type", SectionType); switch (SectionType) { case wasm::WASM_SEC_CUSTOM: { StringRef SectionName; if (IO.outputting()) { auto CustomSection = cast<WasmYAML::CustomSection>(Section.get()); SectionName = CustomSection->Name; } else { IO.mapRequired("Name", SectionName); } if (SectionName == "linking") { if (!IO.outputting()) Section.reset(new WasmYAML::LinkingSection()); sectionMapping(IO, *cast<WasmYAML::LinkingSection>(Section.get())); } else if (SectionName == "name") { if (!IO.outputting()) Section.reset(new WasmYAML::NameSection()); sectionMapping(IO, *cast<WasmYAML::NameSection>(Section.get())); } else { if (!IO.outputting()) Section.reset(new WasmYAML::CustomSection(SectionName)); sectionMapping(IO, *cast<WasmYAML::CustomSection>(Section.get())); } break; } case wasm::WASM_SEC_TYPE: if (!IO.outputting()) Section.reset(new WasmYAML::TypeSection()); sectionMapping(IO, *cast<WasmYAML::TypeSection>(Section.get())); break; case wasm::WASM_SEC_IMPORT: if (!IO.outputting()) Section.reset(new WasmYAML::ImportSection()); sectionMapping(IO, *cast<WasmYAML::ImportSection>(Section.get())); break; case wasm::WASM_SEC_FUNCTION: if (!IO.outputting()) Section.reset(new WasmYAML::FunctionSection()); sectionMapping(IO, *cast<WasmYAML::FunctionSection>(Section.get())); break; case wasm::WASM_SEC_TABLE: if (!IO.outputting()) Section.reset(new WasmYAML::TableSection()); sectionMapping(IO, *cast<WasmYAML::TableSection>(Section.get())); break; case wasm::WASM_SEC_MEMORY: if (!IO.outputting()) Section.reset(new WasmYAML::MemorySection()); sectionMapping(IO, *cast<WasmYAML::MemorySection>(Section.get())); break; case wasm::WASM_SEC_GLOBAL: if (!IO.outputting()) Section.reset(new WasmYAML::GlobalSection()); sectionMapping(IO, *cast<WasmYAML::GlobalSection>(Section.get())); break; case wasm::WASM_SEC_EXPORT: if (!IO.outputting()) Section.reset(new WasmYAML::ExportSection()); sectionMapping(IO, *cast<WasmYAML::ExportSection>(Section.get())); break; case wasm::WASM_SEC_START: if (!IO.outputting()) Section.reset(new WasmYAML::StartSection()); sectionMapping(IO, *cast<WasmYAML::StartSection>(Section.get())); break; case wasm::WASM_SEC_ELEM: if (!IO.outputting()) Section.reset(new WasmYAML::ElemSection()); sectionMapping(IO, *cast<WasmYAML::ElemSection>(Section.get())); break; case wasm::WASM_SEC_CODE: if (!IO.outputting()) Section.reset(new WasmYAML::CodeSection()); sectionMapping(IO, *cast<WasmYAML::CodeSection>(Section.get())); break; case wasm::WASM_SEC_DATA: if (!IO.outputting()) Section.reset(new WasmYAML::DataSection()); sectionMapping(IO, *cast<WasmYAML::DataSection>(Section.get())); break; default: llvm_unreachable("Unknown section type"); } }