summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Driver.cpp8
-rw-r--r--lld/ELF/Driver.h1
-rw-r--r--lld/ELF/InputFiles.cpp5
-rw-r--r--lld/ELF/InputFiles.h1
-rw-r--r--lld/ELF/LTO.cpp14
-rw-r--r--lld/ELF/LTO.h2
6 files changed, 15 insertions, 16 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 5d638a8c685..09cffcec718 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -170,6 +170,12 @@ static void initLLVM(opt::InputArgList &Args) {
InitializeAllAsmPrinters();
InitializeAllAsmParsers();
+ // This is a flag to discard all but GlobalValue names.
+ // We want to enable it by default because it saves memory.
+ // Disable it only when a developer option (-save-temps) is given.
+ Driver->Context.setDiscardValueNames(!Config->SaveTemps);
+ Driver->Context.enableDebugTypeODRUniquing();
+
// Parse and evaluate -mllvm options.
std::vector<const char *> V;
V.push_back("lld (LLVM option parsing)");
@@ -259,8 +265,8 @@ void LinkerDriver::main(ArrayRef<const char *> ArgsArr) {
return;
}
- initLLVM(Args);
readConfigs(Args);
+ initLLVM(Args);
if (!Config->Reproduce.empty())
logCommandline(ArgsArr);
diff --git a/lld/ELF/Driver.h b/lld/ELF/Driver.h
index 28231fbdb3a..f754147aca1 100644
--- a/lld/ELF/Driver.h
+++ b/lld/ELF/Driver.h
@@ -27,6 +27,7 @@ public:
void main(ArrayRef<const char *> Args);
void addFile(StringRef Path);
void addLibrary(StringRef Name);
+ llvm::LLVMContext Context;
private:
std::vector<MemoryBufferRef> getArchiveMembers(MemoryBufferRef MB);
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index 31c9122b99c..957f5d8725b 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "InputFiles.h"
+#include "Driver.h"
#include "Error.h"
#include "InputSection.h"
#include "Symbols.h"
@@ -15,7 +16,6 @@
#include "llvm/CodeGen/Analysis.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
-#include "llvm/Object/IRObjectFile.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
@@ -591,8 +591,7 @@ bool BitcodeFile::shouldSkip(const BasicSymbolRef &Sym) {
}
void BitcodeFile::parse(DenseSet<StringRef> &ComdatGroups) {
- LLVMContext Context;
- std::unique_ptr<IRObjectFile> Obj = check(IRObjectFile::create(MB, Context));
+ Obj = check(IRObjectFile::create(MB, Driver->Context));
const Module &M = Obj->getModule();
DenseSet<const Comdat *> KeptComdats;
diff --git a/lld/ELF/InputFiles.h b/lld/ELF/InputFiles.h
index 0c9a2220e1d..326fd5e401e 100644
--- a/lld/ELF/InputFiles.h
+++ b/lld/ELF/InputFiles.h
@@ -224,6 +224,7 @@ public:
void parse(llvm::DenseSet<StringRef> &ComdatGroups);
ArrayRef<SymbolBody *> getSymbols() { return SymbolBodies; }
static bool shouldSkip(const llvm::object::BasicSymbolRef &Sym);
+ std::unique_ptr<llvm::object::IRObjectFile> Obj;
private:
std::vector<SymbolBody *> SymbolBodies;
diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp
index 8f6f6a31efe..6980993e7f5 100644
--- a/lld/ELF/LTO.cpp
+++ b/lld/ELF/LTO.cpp
@@ -9,6 +9,7 @@
#include "LTO.h"
#include "Config.h"
+#include "Driver.h"
#include "Error.h"
#include "InputFiles.h"
#include "Symbols.h"
@@ -86,18 +87,11 @@ static bool shouldInternalize(const SmallPtrSet<GlobalValue *, 8> &Used,
}
BitcodeCompiler::BitcodeCompiler()
- : Combined(new llvm::Module("ld-temp.o", Context)), Mover(*Combined) {
- // This is a flag to discard all but GlobalValue names.
- // We want to enable it by default because it saves memory.
- // Disable it only when a developer option (-save-temps) is given.
- Context.setDiscardValueNames(!Config->SaveTemps);
-
- Context.enableDebugTypeODRUniquing();
-}
+ : Combined(new llvm::Module("ld-temp.o", Driver->Context)),
+ Mover(*Combined) {}
void BitcodeCompiler::add(BitcodeFile &F) {
- std::unique_ptr<IRObjectFile> Obj =
- check(IRObjectFile::create(F.MB, Context));
+ std::unique_ptr<IRObjectFile> Obj = std::move(F.Obj);
std::vector<GlobalValue *> Keep;
unsigned BodyIndex = 0;
ArrayRef<SymbolBody *> Bodies = F.getSymbols();
diff --git a/lld/ELF/LTO.h b/lld/ELF/LTO.h
index e7d2e7e3e9f..7cfb1ae2176 100644
--- a/lld/ELF/LTO.h
+++ b/lld/ELF/LTO.h
@@ -24,7 +24,6 @@
#include "lld/Core/LLVM.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringSet.h"
-#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Linker/IRMover.h"
@@ -44,7 +43,6 @@ private:
std::vector<std::unique_ptr<InputFile>> runSplitCodegen(
const std::function<std::unique_ptr<llvm::TargetMachine>()> &TMFactory);
- llvm::LLVMContext Context;
std::unique_ptr<llvm::Module> Combined;
llvm::IRMover Mover;
std::vector<SmallString<0>> OwningData;
OpenPOWER on IntegriCloud