Initialize LLVM target and disassembler.
authorMatt Mullins <mmullins@mmlx.us>
Sun, 25 May 2014 23:23:12 +0000 (16:23 -0700)
committerMatt Mullins <mmullins@mmlx.us>
Mon, 26 May 2014 02:21:10 +0000 (19:21 -0700)
fuckit.cpp

index 9cf52a2..5042857 100644 (file)
@@ -3,8 +3,12 @@
 #include <unistd.h>
 #include <ucontext.h>
 
+#include <llvm/Support/TargetRegistry.h>
 #include <llvm/Support/TargetSelect.h>
 
+static const llvm::Target* target;
+static const llvm::MCDisassembler* disassembler;
+
 static void handle_sigsegv(int signal, siginfo_t *info, void *_context)
 {
         (void)(signal); // it's unused, stfu gcc
@@ -24,6 +28,23 @@ static void setup_signals()
         llvm::InitializeAllTargetMCs();
         llvm::InitializeAllDisassemblers();
 
+        std::string dontcare;
+        target = llvm::TargetRegistry::lookupTarget(
+                LLVM_HOST_TRIPLE,
+                dontcare);
+        if (!target) {
+                fprintf(stderr, "Cannot find target\n");
+        }
+
+        llvm::MCSubtargetInfo* sti = target->createMCSubtargetInfo("", "", "");
+        if (!sti) {
+                fprintf(stderr, "Couldn't create subtarget info\n");
+        }
+        disassembler = target->createMCDisassembler(*sti);
+        if (!disassembler) {
+                fprintf(stderr, "Couldn't create disassembler\n");
+        }
+
         fprintf(stderr, "Set up signals\n");
         sigset_t mask;
         sigemptyset(&mask);