summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/tools/obj2yaml/macho2yaml.cpp30
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) {
OpenPOWER on IntegriCloud