forked from OSchip/llvm-project
[lld] Move Threads to Common
Summary: This will allow using the functionality from other linkers. It is also a prerequisite for sharing the error logging code. Reviewers: ruiu Reviewed By: ruiu Subscribers: emaste, mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D38822 llvm-svn: 315725
This commit is contained in:
parent
bfc20343a3
commit
4f5c8c29ac
|
|
@ -5,6 +5,7 @@ endif()
|
|||
add_lld_library(lldCommon
|
||||
Reproduce.cpp
|
||||
TargetOptionsCommandFlags.cpp
|
||||
Threads.cpp
|
||||
Version.cpp
|
||||
|
||||
ADDITIONAL_HEADER_DIRS
|
||||
|
|
|
|||
|
|
@ -7,13 +7,15 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "Threads.h"
|
||||
#include "lld/Common/Threads.h"
|
||||
#include <thread>
|
||||
|
||||
static std::vector<std::thread> Threads;
|
||||
|
||||
bool lld::ThreadsEnabled = true;
|
||||
|
||||
// Runs a given function in a new thread.
|
||||
void lld::elf::runBackground(std::function<void()> Fn) {
|
||||
void lld::runBackground(std::function<void()> Fn) {
|
||||
Threads.emplace_back(Fn);
|
||||
}
|
||||
|
||||
|
|
@ -22,7 +24,7 @@ void lld::elf::runBackground(std::function<void()> Fn) {
|
|||
// You need to call this function from the main thread before exiting
|
||||
// because it is not defined what will happen to non-main threads when
|
||||
// the main thread exits.
|
||||
void lld::elf::waitForBackgroundThreads() {
|
||||
void lld::waitForBackgroundThreads() {
|
||||
for (std::thread &T : Threads)
|
||||
if (T.joinable())
|
||||
T.join();
|
||||
|
|
@ -40,7 +40,6 @@ add_lld_library(lldELF
|
|||
Symbols.cpp
|
||||
SyntheticSections.cpp
|
||||
Target.cpp
|
||||
Threads.cpp
|
||||
Thunks.cpp
|
||||
Writer.cpp
|
||||
|
||||
|
|
|
|||
|
|
@ -139,7 +139,6 @@ struct Configuration {
|
|||
bool Static = false;
|
||||
bool SysvHash = false;
|
||||
bool Target1Rel;
|
||||
bool Threads;
|
||||
bool Trace;
|
||||
bool Verbose;
|
||||
bool WarnCommon;
|
||||
|
|
|
|||
|
|
@ -38,9 +38,9 @@
|
|||
#include "SymbolTable.h"
|
||||
#include "SyntheticSections.h"
|
||||
#include "Target.h"
|
||||
#include "Threads.h"
|
||||
#include "Writer.h"
|
||||
#include "lld/Common/Driver.h"
|
||||
#include "lld/Common/Threads.h"
|
||||
#include "lld/Common/Version.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
|
|
@ -684,7 +684,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
|
|||
parseCachePruningPolicy(Args.getLastArgValue(OPT_thinlto_cache_policy)),
|
||||
"--thinlto-cache-policy: invalid cache policy");
|
||||
Config->ThinLTOJobs = getInteger(Args, OPT_thinlto_jobs, -1u);
|
||||
Config->Threads = getArg(Args, OPT_threads, OPT_no_threads, true);
|
||||
ThreadsEnabled = getArg(Args, OPT_threads, OPT_no_threads, true);
|
||||
Config->Trace = Args.hasArg(OPT_trace);
|
||||
Config->Undefined = getArgs(Args, OPT_undefined);
|
||||
Config->UnresolvedSymbols = getUnresolvedSymbolPolicy(Args);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@
|
|||
|
||||
#include "Error.h"
|
||||
#include "Config.h"
|
||||
#include "Threads.h"
|
||||
|
||||
#include "lld/Common/Threads.h"
|
||||
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
#include "Filesystem.h"
|
||||
#include "Config.h"
|
||||
#include "Threads.h"
|
||||
#include "lld/Common/Threads.h"
|
||||
#include "llvm/Support/FileOutputBuffer.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
|
||||
|
|
@ -38,7 +38,7 @@ using namespace lld::elf;
|
|||
// This function spawns a background thread to call unlink.
|
||||
// The calling thread returns almost immediately.
|
||||
void elf::unlinkAsync(StringRef Path) {
|
||||
if (!Config->Threads || !sys::fs::exists(Config->OutputFile) ||
|
||||
if (!ThreadsEnabled || !sys::fs::exists(Config->OutputFile) ||
|
||||
!sys::fs::is_regular_file(Config->OutputFile))
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
#include "ICF.h"
|
||||
#include "Config.h"
|
||||
#include "SymbolTable.h"
|
||||
#include "Threads.h"
|
||||
#include "lld/Common/Threads.h"
|
||||
#include "llvm/ADT/Hashing.h"
|
||||
#include "llvm/BinaryFormat/ELF.h"
|
||||
#include "llvm/Object/ELF.h"
|
||||
|
|
@ -366,7 +366,7 @@ template <class ELFT>
|
|||
void ICF<ELFT>::forEachClass(std::function<void(size_t, size_t)> Fn) {
|
||||
// If threading is disabled or the number of sections are
|
||||
// too small to use threading, call Fn sequentially.
|
||||
if (!Config->Threads || Sections.size() < 1024) {
|
||||
if (!ThreadsEnabled || Sections.size() < 1024) {
|
||||
forEachClassRange(0, Sections.size(), Fn);
|
||||
++Cnt;
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@
|
|||
#include "Symbols.h"
|
||||
#include "SyntheticSections.h"
|
||||
#include "Target.h"
|
||||
#include "Threads.h"
|
||||
#include "Writer.h"
|
||||
#include "lld/Common/Threads.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/BinaryFormat/ELF.h"
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@
|
|||
#include "Strings.h"
|
||||
#include "SymbolTable.h"
|
||||
#include "SyntheticSections.h"
|
||||
#include "Threads.h"
|
||||
|
||||
#include "lld/Common/Threads.h"
|
||||
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
#include "SymbolTable.h"
|
||||
#include "SyntheticSections.h"
|
||||
#include "Target.h"
|
||||
#include "Threads.h"
|
||||
#include "lld/Common/Threads.h"
|
||||
#include "llvm/BinaryFormat/Dwarf.h"
|
||||
#include "llvm/Support/Compression.h"
|
||||
#include "llvm/Support/MD5.h"
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@
|
|||
#include "Strings.h"
|
||||
#include "SymbolTable.h"
|
||||
#include "Target.h"
|
||||
#include "Threads.h"
|
||||
#include "Writer.h"
|
||||
#include "lld/Common/Threads.h"
|
||||
#include "lld/Common/Version.h"
|
||||
#include "llvm/BinaryFormat/Dwarf.h"
|
||||
#include "llvm/DebugInfo/DWARF/DWARFDebugPubTable.h"
|
||||
|
|
@ -2258,7 +2258,7 @@ void MergeNoTailSection::finalizeContents() {
|
|||
// Concurrency level. Must be a power of 2 to avoid expensive modulo
|
||||
// operations in the following tight loop.
|
||||
size_t Concurrency = 1;
|
||||
if (Config->Threads)
|
||||
if (ThreadsEnabled)
|
||||
Concurrency =
|
||||
std::min<size_t>(PowerOf2Floor(hardware_concurrency()), NumShards);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
#include "SymbolTable.h"
|
||||
#include "SyntheticSections.h"
|
||||
#include "Target.h"
|
||||
#include "Threads.h"
|
||||
#include "lld/Common/Threads.h"
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/Support/FileOutputBuffer.h"
|
||||
|
|
|
|||
|
|
@ -56,19 +56,18 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLD_ELF_THREADS_H
|
||||
#define LLD_ELF_THREADS_H
|
||||
|
||||
#include "Config.h"
|
||||
#ifndef LLD_COMMON_THREADS_H
|
||||
#define LLD_COMMON_THREADS_H
|
||||
|
||||
#include "llvm/Support/Parallel.h"
|
||||
#include <functional>
|
||||
|
||||
namespace lld {
|
||||
namespace elf {
|
||||
|
||||
extern bool ThreadsEnabled;
|
||||
|
||||
template <typename R, class FuncTy> void parallelForEach(R &&Range, FuncTy Fn) {
|
||||
if (Config->Threads)
|
||||
if (ThreadsEnabled)
|
||||
for_each(llvm::parallel::par, std::begin(Range), std::end(Range), Fn);
|
||||
else
|
||||
for_each(llvm::parallel::seq, std::begin(Range), std::end(Range), Fn);
|
||||
|
|
@ -76,7 +75,7 @@ template <typename R, class FuncTy> void parallelForEach(R &&Range, FuncTy Fn) {
|
|||
|
||||
inline void parallelForEachN(size_t Begin, size_t End,
|
||||
std::function<void(size_t)> Fn) {
|
||||
if (Config->Threads)
|
||||
if (ThreadsEnabled)
|
||||
for_each_n(llvm::parallel::par, Begin, End, Fn);
|
||||
else
|
||||
for_each_n(llvm::parallel::seq, Begin, End, Fn);
|
||||
|
|
@ -85,7 +84,6 @@ inline void parallelForEachN(size_t Begin, size_t End,
|
|||
void runBackground(std::function<void()> Fn);
|
||||
void waitForBackgroundThreads();
|
||||
|
||||
} // namespace elf
|
||||
} // namespace lld
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue