]> git.siccegge.de Git - frida/frida.git/blobdiff - src/disassembler.old/Target.cxx
Factor out llvm disassembler
[frida/frida.git] / src / disassembler.old / Target.cxx
diff --git a/src/disassembler.old/Target.cxx b/src/disassembler.old/Target.cxx
new file mode 100644 (file)
index 0000000..79d590a
--- /dev/null
@@ -0,0 +1,28 @@
+#include "Target.hxx"
+
+#include <string>
+
+Target::Target(llvm::object::Binary* binary)
+    : _logger(log4cxx::Logger::getLogger("disassembler.Target"))
+    , triple("unknown-unknown-unknown")
+{
+    std::string error;
+    llvm::object::ObjectFile * o = llvm::dyn_cast<llvm::object::ObjectFile>(binary);
+
+    triple.setArch(llvm::Triple::ArchType(o->getArch()));
+    std::string tripleName(triple.getTriple());
+    LOG4CXX_INFO(_logger, "Detected triple " << tripleName);
+
+    target = llvm::TargetRegistry::lookupTarget("", triple, error);
+    if (!target) {
+        LOG4CXX_ERROR(_logger, "Couldn't create Target: " << error);
+        return;
+    }
+    LOG4CXX_INFO(_logger, "Target: " << target->getName());
+
+    STI.reset(target->createMCSubtargetInfo(tripleName, "", ""));
+    if (!STI) {
+        LOG4CXX_ERROR(_logger, "No subtarget for target " << tripleName);
+        return;
+    }
+}