[lld] r234631 - [Mips] Use std::call_once for thread safe initialization
Simon Atanasyan
simon at atanasyan.com
Fri Apr 10 13:55:04 PDT 2015
Author: atanasyan
Date: Fri Apr 10 15:55:04 2015
New Revision: 234631
URL: http://llvm.org/viewvc/llvm-project?rev=234631&view=rev
Log:
[Mips] Use std::call_once for thread safe initialization
The commit is inspired by r234628. Thanks Rui for the idea.
Modified:
lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h?rev=234631&r1=234630&r2=234631&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h Fri Apr 10 15:55:04 2015
@@ -49,16 +49,17 @@ public:
/// \brief Get '_gp' symbol atom layout.
AtomLayout *getGP() {
- if (!_gpAtom.hasValue())
- _gpAtom = this->findAbsoluteAtom("_gp");
- return *_gpAtom;
+ std::call_once(_gpOnce,
+ [this]() { _gpAtom = this->findAbsoluteAtom("_gp"); });
+ return _gpAtom;
}
/// \brief Get '_gp_disp' symbol atom layout.
AtomLayout *getGPDisp() {
- if (!_gpDispAtom.hasValue())
+ std::call_once(_gpDispOnce, [this]() {
_gpDispAtom = this->findAbsoluteAtom("_gp_disp");
- return *_gpDispAtom;
+ });
+ return _gpDispAtom;
}
/// \brief Return the section order for a input section
@@ -82,8 +83,10 @@ protected:
private:
MipsGOTSection<ELFT> *_gotSection;
MipsPLTSection<ELFT> *_pltSection;
- llvm::Optional<AtomLayout *> _gpAtom;
- llvm::Optional<AtomLayout *> _gpDispAtom;
+ AtomLayout *_gpAtom = nullptr;
+ AtomLayout *_gpDispAtom = nullptr;
+ std::once_flag _gpOnce;
+ std::once_flag _gpDispOnce;
};
/// \brief TargetHandler for Mips
More information about the llvm-commits
mailing list