1 //===- ObjectYAML.cpp - YAML utilities for object files -------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines a wrapper class for handling tagged YAML input
12 //===----------------------------------------------------------------------===//
14 #include "llvm/ObjectYAML/ObjectYAML.h"
15 #include "llvm/ADT/Twine.h"
16 #include "llvm/Support/YAMLParser.h"
17 #include "llvm/Support/YAMLTraits.h"
23 void MappingTraits
<YamlObjectFile
>::mapping(IO
&IO
,
24 YamlObjectFile
&ObjectFile
) {
25 if (IO
.outputting()) {
27 MappingTraits
<ELFYAML::Object
>::mapping(IO
, *ObjectFile
.Elf
);
29 MappingTraits
<COFFYAML::Object
>::mapping(IO
, *ObjectFile
.Coff
);
31 MappingTraits
<MachOYAML::Object
>::mapping(IO
, *ObjectFile
.MachO
);
32 if (ObjectFile
.FatMachO
)
33 MappingTraits
<MachOYAML::UniversalBinary
>::mapping(IO
,
34 *ObjectFile
.FatMachO
);
36 if (IO
.mapTag("!ELF")) {
37 ObjectFile
.Elf
.reset(new ELFYAML::Object());
38 MappingTraits
<ELFYAML::Object
>::mapping(IO
, *ObjectFile
.Elf
);
39 } else if (IO
.mapTag("!COFF")) {
40 ObjectFile
.Coff
.reset(new COFFYAML::Object());
41 MappingTraits
<COFFYAML::Object
>::mapping(IO
, *ObjectFile
.Coff
);
42 } else if (IO
.mapTag("!mach-o")) {
43 ObjectFile
.MachO
.reset(new MachOYAML::Object());
44 MappingTraits
<MachOYAML::Object
>::mapping(IO
, *ObjectFile
.MachO
);
45 } else if (IO
.mapTag("!fat-mach-o")) {
46 ObjectFile
.FatMachO
.reset(new MachOYAML::UniversalBinary());
47 MappingTraits
<MachOYAML::UniversalBinary
>::mapping(IO
,
48 *ObjectFile
.FatMachO
);
49 } else if (IO
.mapTag("!WASM")) {
50 ObjectFile
.Wasm
.reset(new WasmYAML::Object());
51 MappingTraits
<WasmYAML::Object
>::mapping(IO
, *ObjectFile
.Wasm
);
53 Input
&In
= (Input
&)IO
;
54 std::string Tag
= In
.getCurrentNode()->getRawTag();
56 IO
.setError("YAML Object File missing document type tag!");
59 Twine("YAML Object File unsupported document type tag '") +
60 Twine(Tag
) + Twine("'!"));