--- /dev/null
+#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;
+ }
+}