summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/InlineAsm.h6
-rw-r--r--include/llvm/LinkAllVMCore.h2
-rw-r--r--include/llvm/Support/Mangler.h4
-rw-r--r--lib/VMCore/InlineAsm.cpp2
-rw-r--r--lib/VMCore/Mangler.cpp3
-rw-r--r--tools/analyze/analyze.cpp1
-rw-r--r--tools/llc/llc.cpp1
-rw-r--r--tools/llvm-db/llvm-db.cpp1
-rw-r--r--tools/llvm-ld/llvm-ld.cpp20
-rw-r--r--tools/opt/opt.cpp1
10 files changed, 39 insertions, 2 deletions
diff --git a/include/llvm/InlineAsm.h b/include/llvm/InlineAsm.h
index 97774986fe..6e7aab1cb0 100644
--- a/include/llvm/InlineAsm.h
+++ b/include/llvm/InlineAsm.h
@@ -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
diff --git a/include/llvm/LinkAllVMCore.h b/include/llvm/LinkAllVMCore.h
index fa7c39995b..d0366ebe1e 100644
--- a/include/llvm/LinkAllVMCore.h
+++ b/include/llvm/LinkAllVMCore.h
@@ -17,9 +17,11 @@
#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 {
diff --git a/include/llvm/Support/Mangler.h b/include/llvm/Support/Mangler.h
index 30a48a82ae..50e49ff8a5 100644
--- a/include/llvm/Support/Mangler.h
+++ b/include/llvm/Support/Mangler.h
@@ -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
diff --git a/lib/VMCore/InlineAsm.cpp b/lib/VMCore/InlineAsm.cpp
index 0f820641b8..5f05137459 100644
--- a/lib/VMCore/InlineAsm.cpp
+++ b/lib/VMCore/InlineAsm.cpp
@@ -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)
diff --git a/lib/VMCore/Mangler.cpp b/lib/VMCore/Mangler.cpp
index b1a9e3a6ff..53719aff2c 100644
--- a/lib/VMCore/Mangler.cpp
+++ b/lib/VMCore/Mangler.cpp
@@ -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)
diff --git a/tools/analyze/analyze.cpp b/tools/analyze/analyze.cpp
index 71ae65793c..c3411ab627 100644
--- a/tools/analyze/analyze.cpp
+++ b/tools/analyze/analyze.cpp
@@ -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;
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp
index 6a66e52f54..f57f3e1dc7 100644
--- a/tools/llc/llc.cpp
+++ b/tools/llc/llc.cpp
@@ -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>
diff --git a/tools/llvm-db/llvm-db.cpp b/tools/llvm-db/llvm-db.cpp
index a46aa08feb..b270535452 100644
--- a/tools/llvm-db/llvm-db.cpp
+++ b/tools/llvm-db/llvm-db.cpp
@@ -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;
diff --git a/tools/llvm-ld/llvm-ld.cpp b/tools/llvm-ld/llvm-ld.cpp
index 1900cc9866..b93d511e8f 100644
--- a/tools/llvm-ld/llvm-ld.cpp
+++ b/tools/llvm-ld/llvm-ld.cpp
@@ -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.
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index b6ededd9dd..9fddd94438 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -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>