For PR780:
authorReid Spencer <rspencer@reidspencer.com>
Wed, 7 Jun 2006 23:03:13 +0000 (23:03 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Wed, 7 Jun 2006 23:03:13 +0000 (23:03 +0000)
1. Add #includes to LinkAllVMCore.h to get Mangler.o and InlineAsm.o
2. Make Mangler.h and InlineAsm.h use the macros to ensure linkage
3. Make each of the tools with --load options include LinkAllVMCore.h
This should be the last set of changes for this bug and 800.

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

include/llvm/InlineAsm.h
include/llvm/LinkAllVMCore.h
include/llvm/Support/Mangler.h
lib/VMCore/InlineAsm.cpp
lib/VMCore/Mangler.cpp
tools/analyze/analyze.cpp
tools/llc/llc.cpp
tools/llvm-db/llvm-db.cpp
tools/llvm-ld/llvm-ld.cpp
tools/opt/opt.cpp

index 97774986feb773e3164083c98c0bad6c02a787bb..6e7aab1cb03c68ef56b11ef8e6c4ec603114cec5 100644 (file)
@@ -17,6 +17,7 @@
 #define LLVM_INLINEASM_H
 
 #include "llvm/Value.h"
+#include "llvm/Support/IncludeFile.h"
 #include <vector>
 
 namespace llvm {
@@ -35,7 +36,7 @@ class InlineAsm : public Value {
   
   InlineAsm(const FunctionType *Ty, const std::string &AsmString,
             const std::string &Constraints, bool hasSideEffects);
-  ~InlineAsm();
+  virtual ~InlineAsm();
 public:
 
   /// InlineAsm::get - Return the the specified uniqued inline asm string.
@@ -128,4 +129,7 @@ public:
 
 } // End llvm namespace
 
+// Make sure the InlineAsm.cpp file is linked when this one is #included.
+FORCE_DEFINING_FILE_TO_BE_LINKED(InlineAsm)
+
 #endif
index fa7c39995b60321347bb6467583cc5018130fec2..d0366ebe1e1ac40afe5aea520031663daa87e31c 100644 (file)
 #define LLVM_LINKALLVMCORE_H
 
 #include "llvm/Support/IncludeFile.h"
+#include "llvm/Support/Mangler.h"
 #include "llvm/Module.h"
 #include "llvm/Instructions.h"
 #include "llvm/IntrinsicInst.h"
+#include "llvm/InlineAsm.h"
 #include "llvm/Analysis/Verifier.h"
 
 namespace {
index 30a48a82ae46833eab6ae4d466009a353ea5340c..50e49ff8a55b2f036dac3a10aec063b867d01219 100644 (file)
@@ -14,6 +14,7 @@
 #ifndef LLVM_SUPPORT_MANGLER_H
 #define LLVM_SUPPORT_MANGLER_H
 
+#include "llvm/Support/IncludeFile.h"
 #include <map>
 #include <set>
 #include <string>
@@ -103,4 +104,7 @@ private:
 
 } // End llvm namespace
 
+// Force the Mangler.cpp file to be linked when this header is #included
+FORCE_DEFINING_FILE_TO_BE_LINKED(Mangler)
+
 #endif // LLVM_SUPPORT_MANGLER_H
index 0f820641b87ab96a6167b6524962d32db6f2e5d3..5f05137459899aa22a47d50dfa3358896ecdacfb 100644 (file)
@@ -208,3 +208,5 @@ bool InlineAsm::Verify(const FunctionType *Ty, const std::string &ConstStr) {
   if (Ty->getNumParams() != NumInputs) return false;
   return true;
 }
+
+DEFINING_FILE_FOR(InlineAsm)
index b1a9e3a6ffd27dd19435e1be5f2e4c11148887ac..53719aff2cc1405a5461269adc461cfbf1a4f7b5 100644 (file)
@@ -200,3 +200,6 @@ Mangler::Mangler(Module &M, const char *prefix)
   for (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I)
     InsertName(I, Names);
 }
+
+// Cause this file to be linked in when Support/Mangler.h is #included
+DEFINING_FILE_FOR(Mangler)
index 71ae65793c4ee7d29dc04eb04311a1d4746d42bb..c3411ab627e26722a6bd93f578e40924b7067c84 100644 (file)
@@ -27,6 +27,7 @@
 #include "llvm/System/Signals.h"
 #include "llvm/Support/PluginLoader.h"
 #include "llvm/Support/Timer.h"
+#include "llvm/LinkAllVMCore.h"
 #include <algorithm>
 
 using namespace llvm;
index 6a66e52f547d751b3009209156775732d0028f0d..f57f3e1dc7134f13b681f39870389d5bca098f78 100644 (file)
@@ -28,6 +28,7 @@
 #include "llvm/Analysis/Verifier.h"
 #include "llvm/System/Signals.h"
 #include "llvm/Config/config.h"
+#include "llvm/LinkAllVMCore.h"
 #include <fstream>
 #include <iostream>
 #include <memory>
index a46aa08feb5ed2e5a390216d9b7a48d5ef7e0a78..b270535452b4692190fde47b850155831ceb4e99 100644 (file)
@@ -16,6 +16,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/PluginLoader.h"
 #include "llvm/System/Signals.h"
+#include "llvm/LinkAllVMCore.h"
 #include <iostream>
 
 using namespace llvm;
index 1900cc9866a4a80bae1a76c54b9b7698660b76c9..b93d511e8f93fe7c3afcc9baab3a08486f2f616c 100644 (file)
@@ -20,6 +20,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "llvm/LinkAllVMCore.h"
 #include "llvm/Linker.h"
 #include "llvm/System/Program.h"
 #include "llvm/Module.h"
@@ -77,9 +78,12 @@ static cl::opt<bool>DisableCompression("disable-compression",cl::init(false),
   cl::desc("Disable writing of compressed bytecode files"));
 
 static cl::list<std::string> PostLinkOpts("post-link-opts",
-  cl::value_desc("path to post-link optimization programs"),
+  cl::value_desc("path"),
   cl::desc("Run one or more optimization programs after linking"));
 
+static cl::list<std::string> XLinker("Xlinker", cl::value_desc("option"),
+  cl::desc("Pass options to the system linker"));
+
 // Compatibility options that are ignored but supported by LD
 static cl::opt<std::string> CO3("soname", cl::Hidden,
   cl::desc("Compatibility option: ignored"));
@@ -93,6 +97,7 @@ static cl::opt<bool> CO5("eh-frame-hdr", cl::Hidden,
 static  cl::opt<std::string> CO6("h", cl::Hidden,
   cl::desc("Compatibility option: ignored"));
 
+
 /// This is just for convenience so it doesn't have to be passed around
 /// everywhere.
 static std::string progname;
@@ -303,12 +308,25 @@ static int GenerateNative(const std::string &OutputFilename,
   args.push_back(OutputFilename.c_str());
   args.push_back(InputFilename.c_str());
 
+  // Add in the library paths
+  for (unsigned index = 0; index < LibPaths.size(); index++) {
+    args.push_back("-L");
+    args.push_back(LibPaths[index].c_str());
+  }
+
+  // Add the requested options
+  for (unsigned index = 0; index < XLinker.size(); index++) {
+    args.push_back(XLinker[index].c_str());
+    args.push_back(Libraries[index].c_str());
+  }
+
   // Add in the libraries to link.
   for (unsigned index = 0; index < Libraries.size(); index++)
     if (Libraries[index] != "crtend") {
       args.push_back("-l");
       args.push_back(Libraries[index].c_str());
     }
+
   args.push_back(0);
 
   // Run the compiler to assembly and link together the program.
index b6ededd9dddb34759c75dc5a2d868cfea5662491..9fddd94438404256d087f75d3ee6d7d8f7518622 100644 (file)
@@ -25,6 +25,7 @@
 #include "llvm/Support/PluginLoader.h"
 #include "llvm/Support/SystemUtils.h"
 #include "llvm/Transforms/LinkAllPasses.h"
+#include "llvm/LinkAllVMCore.h"
 #include <fstream>
 #include <memory>
 #include <algorithm>