Clients are responsible for initializing the targets, remove it from the disassembler...
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 11 Nov 2011 13:20:40 +0000 (13:20 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 11 Nov 2011 13:20:40 +0000 (13:20 +0000)
This will break users of the LLVMCreateDisasm API (not that I know of any). They have to call the
LLVMInitializeAll* functions from llvm-c/Target.h themselves now. edis' C API in all its horribleness
should be unaffected.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144385 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCDisassembler/Disassembler.cpp
lib/MC/MCDisassembler/EDDisassembler.cpp
lib/MC/MCDisassembler/EDDisassembler.h
lib/MC/MCDisassembler/LLVMBuild.txt
tools/edis/EDMain.cpp
tools/llvm-mc/Disassembler.cpp

index 16e66dc98e74dc329fed21ac3384763bd8596168..f156760875cb88c38b501cfd88ed2de915f2d085 100644 (file)
@@ -18,7 +18,6 @@
 #include "llvm/MC/MCRegisterInfo.h"
 #include "llvm/Support/MemoryObject.h"
 #include "llvm/Support/TargetRegistry.h"
-#include "llvm/Support/TargetSelect.h"
 
 namespace llvm {
 class Target;
@@ -35,12 +34,6 @@ using namespace llvm;
 LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo,
                                       int TagType, LLVMOpInfoCallback GetOpInfo,
                                       LLVMSymbolLookupCallback SymbolLookUp) {
-  // Initialize targets and assembly printers/parsers.
-  llvm::InitializeAllTargetInfos();
-  llvm::InitializeAllTargetMCs();
-  llvm::InitializeAllAsmParsers();
-  llvm::InitializeAllDisassemblers();
-
   // Get the target.
   std::string Error;
   const Target *TheTarget = TargetRegistry::lookupTarget(TripleName, Error);
index 5633cb11e796be8f9c5ce9fda06ad69a2eeb1fa6..3540334344fa541c816ce3c23c637bbe29a19b9a 100644 (file)
 #include "llvm/Support/MemoryObject.h"
 #include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/TargetRegistry.h"
-#include "llvm/Support/TargetSelect.h"
 using namespace llvm;
 
-bool EDDisassembler::sInitialized = false;
 EDDisassembler::DisassemblerMap_t EDDisassembler::sDisassemblers;
 
 struct TripleMap {
@@ -98,20 +96,6 @@ static int getLLVMSyntaxVariant(Triple::ArchType arch,
   }
 }
 
-void EDDisassembler::initialize() {
-  if (sInitialized)
-    return;
-  
-  sInitialized = true;
-  
-  InitializeAllTargetInfos();
-  InitializeAllTargetMCs();
-  InitializeAllAsmParsers();
-  InitializeAllDisassemblers();
-}
-
-#undef BRINGUP_TARGET
-
 EDDisassembler *EDDisassembler::getDisassembler(Triple::ArchType arch,
                                                 AssemblySyntax syntax) {
   CPUKey key;
index 38c22038c5106c45631fc21cad66ba1f4cdabd45..97c2d1fd99b7be53c2e77817d6f46188e3f8e3af 100644 (file)
@@ -94,8 +94,6 @@ struct EDDisassembler {
   
   typedef std::map<CPUKey, EDDisassembler*> DisassemblerMap_t;
   
-  /// True if the disassembler registry has been initialized; false if not
-  static bool sInitialized;
   /// A map from disassembler specifications to disassemblers.  Populated
   ///   lazily.
   static DisassemblerMap_t sDisassemblers;
@@ -116,9 +114,6 @@ struct EDDisassembler {
   static EDDisassembler *getDisassembler(llvm::StringRef str,
                                          AssemblySyntax syntax);
   
-  /// initialize - Initializes the disassembler registry and the LLVM backend
-  static void initialize();
-  
   ////////////////////////
   // Per-object members //
   ////////////////////////
index 7b8c7ffc28c75a50fa9031de220de656165c75a3..d73c6adcbb47f33f8767e7a452d5907da978bf40 100644 (file)
@@ -19,7 +19,4 @@
 type = Library
 name = MCDisassembler
 parent = MC
-; FIXME: This is really horrible, MCDisassembler should not in and of its own
-; accord depending on every target.
-required_libraries = all-targets MC MCParser Support
-
+required_libraries = MC MCParser Support
index 16855b3f45d8d314349e1817ce9d3214be49ef98..14a17d66e63b2e3ebce0a22f146ae0ca410e1b46 100644 (file)
 #include "../../lib/MC/MCDisassembler/EDInst.h"
 #include "../../lib/MC/MCDisassembler/EDOperand.h"
 #include "../../lib/MC/MCDisassembler/EDToken.h"
+#include "llvm/Support/TargetSelect.h"
 #include "llvm-c/EnhancedDisassembly.h"
 using namespace llvm;
 
 int EDGetDisassembler(EDDisassemblerRef *disassembler,
                       const char *triple,
                       EDAssemblySyntax_t syntax) {
-  EDDisassembler::initialize();
-  
+  static bool initialized;
+  if (!initialized) {
+    // Initialize targets and assembly printers/parsers.
+    llvm::InitializeAllTargetInfos();
+    llvm::InitializeAllTargetMCs();
+    llvm::InitializeAllAsmParsers();
+    llvm::InitializeAllDisassemblers();
+    initialized = true;
+  }
+
   EDDisassembler::AssemblySyntax Syntax;
   switch (syntax) {
   default: assert(0 && "Unknown assembly syntax!");
index e0064888ded75e7814a63583c1d7c511c24a7d44..1b5aa5775ce8e057d4366be85ee6adbb5db7095b 100644 (file)
@@ -249,7 +249,6 @@ int Disassembler::disassembleEnhanced(const std::string &TS,
     break;
   }
 
-  EDDisassembler::initialize();
   OwningPtr<EDDisassembler>
     disassembler(EDDisassembler::getDisassembler(TS.c_str(), AS));