]> git.siccegge.de Git - frida/frida.git/blobdiff - src/disassembler/Target.cxx
Separate out several parts of llvm-using code ; Add logger
[frida/frida.git] / src / disassembler / Target.cxx
diff --git a/src/disassembler/Target.cxx b/src/disassembler/Target.cxx
new file mode 100644 (file)
index 0000000..56042d5
--- /dev/null
@@ -0,0 +1,29 @@
+#include "Target.hxx"
+#include "include.hxx"
+
+#include <string>
+
+Target::    Target(const llvm::OwningPtr<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.get());
+
+    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;
+    }
+}