Fix Disassmebler compilation for LLVM3.0
 - Change Target/TargetRegistry.h to Support/TargetRegistry.h
 - Change Target/TargetSelect.h to Support/TargetSelect.h
 - Target->createMCSubtargetInfo() now take MCSubtargetInfo
 - MCDisassembler::getInstruction take additional raw_ostream
 - MCInstPrinter::printInst takes additional StringRef

Change-Id: Ic5cf732cd025d2026ad564eefcae90e462748d22
diff --git a/lib/Disassembler/Disassembler.cpp b/lib/Disassembler/Disassembler.cpp
index d0e6000..5011fa3 100644
--- a/lib/Disassembler/Disassembler.cpp
+++ b/lib/Disassembler/Disassembler.cpp
@@ -32,8 +32,8 @@
 #include "llvm/Target/TargetData.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/TargetOptions.h"
-#include "llvm/Target/TargetRegistry.h"
-#include "llvm/Target/TargetSelect.h"
+#include "llvm/Support/TargetRegistry.h"
+#include "llvm/Support/TargetSelect.h"
 
 #include "llvm/LLVMContext.h"
 
@@ -98,13 +98,15 @@
   OS << "Disassembled code: " << Name << "\n";
 
   const llvm::MCAsmInfo *AsmInfo;
+  const llvm::MCSubtargetInfo *SubtargetInfo;
   const llvm::MCDisassembler *Disassmbler;
   llvm::MCInstPrinter *IP;
 
   AsmInfo = Target->createMCAsmInfo(Compiler::getTargetTriple());
-  Disassmbler = Target->createMCDisassembler();
+  SubtargetInfo = Target->createMCSubtargetInfo(Compiler::getTargetTriple(), "", "");
+  Disassmbler = Target->createMCDisassembler(*SubtargetInfo);
   IP = Target->createMCInstPrinter(AsmInfo->getAssemblerDialect(),
-                                   *AsmInfo);
+                                   *AsmInfo, *SubtargetInfo);
 
   const BufferMemoryObject *BufferMObj = new BufferMemoryObject(Func, FuncSize);
 
@@ -115,13 +117,13 @@
     llvm::MCInst Inst;
 
     if (Disassmbler->getInstruction(Inst, Size, *BufferMObj, Index,
-                                    /* REMOVED */ llvm::nulls())) {
+                           /* REMOVED */ llvm::nulls(), llvm::nulls())) {
       OS.indent(4);
       OS.write("0x", 2);
       OS.write_hex((uint32_t)Func + Index);
       OS.write(": 0x", 4);
       OS.write_hex(*(uint32_t *)(Func + Index));
-      IP->printInst(&Inst, OS);
+      IP->printInst(&Inst, OS, "");
       OS << "\n";
     } else {
       if (Size == 0)