From af303d53e6013417d189621c75179df6c7cbdcde Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Wed, 7 Jun 2006 23:03:13 +0000 Subject: [PATCH] For PR780: 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 | 6 +++++- include/llvm/LinkAllVMCore.h | 2 ++ include/llvm/Support/Mangler.h | 4 ++++ lib/VMCore/InlineAsm.cpp | 2 ++ lib/VMCore/Mangler.cpp | 3 +++ tools/analyze/analyze.cpp | 1 + tools/llc/llc.cpp | 1 + tools/llvm-db/llvm-db.cpp | 1 + tools/llvm-ld/llvm-ld.cpp | 20 +++++++++++++++++++- tools/opt/opt.cpp | 1 + 10 files changed, 39 insertions(+), 2 deletions(-) diff --git a/include/llvm/InlineAsm.h b/include/llvm/InlineAsm.h index 97774986feb..6e7aab1cb03 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 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 fa7c39995b6..d0366ebe1e1 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 30a48a82ae4..50e49ff8a55 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 #include #include @@ -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 0f820641b87..5f051374598 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 b1a9e3a6ffd..53719aff2cc 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 71ae65793c4..c3411ab627e 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 using namespace llvm; diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index 6a66e52f547..f57f3e1dc71 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 #include #include diff --git a/tools/llvm-db/llvm-db.cpp b/tools/llvm-db/llvm-db.cpp index a46aa08feb5..b270535452b 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 using namespace llvm; diff --git a/tools/llvm-ld/llvm-ld.cpp b/tools/llvm-ld/llvm-ld.cpp index 1900cc9866a..b93d511e8f9 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::optDisableCompression("disable-compression",cl::init(false), cl::desc("Disable writing of compressed bytecode files")); static cl::list 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 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 CO3("soname", cl::Hidden, cl::desc("Compatibility option: ignored")); @@ -93,6 +97,7 @@ static cl::opt CO5("eh-frame-hdr", cl::Hidden, static cl::opt 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 b6ededd9ddd..9fddd944384 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 #include #include -- 2.34.1