diff options
| -rw-r--r-- | llvm/tools/obj2yaml/macho2yaml.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/llvm/tools/obj2yaml/macho2yaml.cpp b/llvm/tools/obj2yaml/macho2yaml.cpp index 76f99c8dc36..dedfb631505 100644 --- a/llvm/tools/obj2yaml/macho2yaml.cpp +++ b/llvm/tools/obj2yaml/macho2yaml.cpp @@ -11,11 +11,39 @@ #include "obj2yaml.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Object/MachOUniversal.h" +#include "llvm/ObjectYAML/MachOYAML.h" using namespace llvm; +class MachODumper { + + const object::MachOObjectFile &Obj; + +public: + MachODumper(const object::MachOObjectFile &O) : Obj(O) {} + Expected<MachOYAML::Object *> dump(); +}; + +Expected<MachOYAML::Object *> MachODumper::dump() { + auto Y = make_unique<MachOYAML::Object>(); + Y->Header.cputype = Obj.getHeader().cputype; + Y->Header.cpusubtype = Obj.getHeader().cpusubtype; + Y->Header.filetype = Obj.getHeader().filetype; + Y->Header.ncmds = Obj.getHeader().ncmds; + Y->Header.flags = Obj.getHeader().flags; + + return Y.release(); +} + Error macho2yaml(raw_ostream &Out, const object::MachOObjectFile &Obj) { - return make_error<Obj2YamlError>(obj2yaml_error::not_implemented); + MachODumper Dumper(Obj); + Expected<MachOYAML::Object *> YAML = Dumper.dump(); + if (!YAML) + return YAML.takeError(); + + yaml::Output Yout(Out); + Yout << *(YAML.get()); + return Error::success(); } Error macho2yaml(raw_ostream &Out, const object::MachOUniversalBinary &Obj) { |

