forked from OSchip/llvm-project
Replace std::call_once with llvm:call_once
Summary: This is required on some platforms, as GNU libstdc++ std::call_once is known to be buggy. This fixes operation of LLD on at least NetBSD and perhaps OpenBSD and Linux PowerPC. The same change has been introduced to LLVM and LLDB. Reviewers: ruiu Reviewed By: ruiu Subscribers: emaste, #lld Tags: #lld Differential Revision: https://reviews.llvm.org/D33508 llvm-svn: 303788
This commit is contained in:
parent
466c82b74f
commit
e739e49c0f
|
@ -23,6 +23,7 @@
|
||||||
#include "llvm/Support/Compression.h"
|
#include "llvm/Support/Compression.h"
|
||||||
#include "llvm/Support/Endian.h"
|
#include "llvm/Support/Endian.h"
|
||||||
#include "llvm/Support/Path.h"
|
#include "llvm/Support/Path.h"
|
||||||
|
#include "llvm/Support/Threading.h"
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
@ -866,7 +867,7 @@ const SectionPiece *MergeInputSection::getSectionPiece(uint64_t Offset) const {
|
||||||
// it is not just an addition to a base output offset.
|
// it is not just an addition to a base output offset.
|
||||||
uint64_t MergeInputSection::getOffset(uint64_t Offset) const {
|
uint64_t MergeInputSection::getOffset(uint64_t Offset) const {
|
||||||
// Initialize OffsetMap lazily.
|
// Initialize OffsetMap lazily.
|
||||||
std::call_once(InitOffsetMap, [&] {
|
llvm::call_once(InitOffsetMap, [&] {
|
||||||
OffsetMap.reserve(Pieces.size());
|
OffsetMap.reserve(Pieces.size());
|
||||||
for (const SectionPiece &Piece : Pieces)
|
for (const SectionPiece &Piece : Pieces)
|
||||||
OffsetMap[Piece.InputOff] = Piece.OutputOff;
|
OffsetMap[Piece.InputOff] = Piece.OutputOff;
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "llvm/ADT/DenseSet.h"
|
#include "llvm/ADT/DenseSet.h"
|
||||||
#include "llvm/ADT/TinyPtrVector.h"
|
#include "llvm/ADT/TinyPtrVector.h"
|
||||||
#include "llvm/Object/ELF.h"
|
#include "llvm/Object/ELF.h"
|
||||||
|
#include "llvm/Support/Threading.h"
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
namespace lld {
|
namespace lld {
|
||||||
|
@ -248,7 +249,7 @@ private:
|
||||||
std::vector<uint32_t> Hashes;
|
std::vector<uint32_t> Hashes;
|
||||||
|
|
||||||
mutable llvm::DenseMap<uint64_t, uint64_t> OffsetMap;
|
mutable llvm::DenseMap<uint64_t, uint64_t> OffsetMap;
|
||||||
mutable std::once_flag InitOffsetMap;
|
mutable llvm::once_flag InitOffsetMap;
|
||||||
|
|
||||||
llvm::DenseSet<uint64_t> LiveOffsets;
|
llvm::DenseSet<uint64_t> LiveOffsets;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue