diff options
author | Mehdi Amini <mehdi.amini@apple.com> | 2016-10-11 18:22:41 +0000 |
---|---|---|
committer | Mehdi Amini <mehdi.amini@apple.com> | 2016-10-11 18:22:41 +0000 |
commit | d7177be746f97bde5e6cb91a0bd24dca4a44fd20 (patch) | |
tree | 3b35110bd52b02cf8e353b0aa5475baab97cec1d /lib/Target/XCore | |
parent | be78316854c8dcbf3ea623266d74b90bf510110b (diff) |
Fix "static initialization order fiasco" for the XCore Target.
I fixed all the other Targets in r283702, and interestingly the
sanitizers are only now "sometimes" catching this bug on the only
one I missed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283914 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/XCore')
-rw-r--r-- | lib/Target/XCore/Disassembler/XCoreDisassembler.cpp | 4 | ||||
-rw-r--r-- | lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp | 16 | ||||
-rw-r--r-- | lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.h | 3 | ||||
-rw-r--r-- | lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp | 7 | ||||
-rw-r--r-- | lib/Target/XCore/XCoreAsmPrinter.cpp | 2 | ||||
-rw-r--r-- | lib/Target/XCore/XCoreTargetMachine.cpp | 2 |
6 files changed, 19 insertions, 15 deletions
diff --git a/lib/Target/XCore/Disassembler/XCoreDisassembler.cpp b/lib/Target/XCore/Disassembler/XCoreDisassembler.cpp index 2e8f762458a..059b75ef482 100644 --- a/lib/Target/XCore/Disassembler/XCoreDisassembler.cpp +++ b/lib/Target/XCore/Disassembler/XCoreDisassembler.cpp @@ -769,7 +769,7 @@ MCDisassembler::DecodeStatus XCoreDisassembler::getInstruction( } namespace llvm { - extern Target TheXCoreTarget; + Target &getTheXCoreTarget(); } static MCDisassembler *createXCoreDisassembler(const Target &T, @@ -780,6 +780,6 @@ static MCDisassembler *createXCoreDisassembler(const Target &T, extern "C" void LLVMInitializeXCoreDisassembler() { // Register the disassembler. - TargetRegistry::RegisterMCDisassembler(TheXCoreTarget, + TargetRegistry::RegisterMCDisassembler(getTheXCoreTarget(), createXCoreDisassembler); } diff --git a/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp b/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp index 63ca1e7d464..c5859b7786f 100644 --- a/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp +++ b/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp @@ -124,26 +124,28 @@ static MCTargetStreamer *createTargetAsmStreamer(MCStreamer &S, // Force static initialization. extern "C" void LLVMInitializeXCoreTargetMC() { // Register the MC asm info. - RegisterMCAsmInfoFn X(TheXCoreTarget, createXCoreMCAsmInfo); + RegisterMCAsmInfoFn X(getTheXCoreTarget(), createXCoreMCAsmInfo); // Register the MC codegen info. - TargetRegistry::registerMCAdjustCodeGenOpts(TheXCoreTarget, + TargetRegistry::registerMCAdjustCodeGenOpts(getTheXCoreTarget(), adjustCodeGenOpts); // Register the MC instruction info. - TargetRegistry::RegisterMCInstrInfo(TheXCoreTarget, createXCoreMCInstrInfo); + TargetRegistry::RegisterMCInstrInfo(getTheXCoreTarget(), + createXCoreMCInstrInfo); // Register the MC register info. - TargetRegistry::RegisterMCRegInfo(TheXCoreTarget, createXCoreMCRegisterInfo); + TargetRegistry::RegisterMCRegInfo(getTheXCoreTarget(), + createXCoreMCRegisterInfo); // Register the MC subtarget info. - TargetRegistry::RegisterMCSubtargetInfo(TheXCoreTarget, + TargetRegistry::RegisterMCSubtargetInfo(getTheXCoreTarget(), createXCoreMCSubtargetInfo); // Register the MCInstPrinter - TargetRegistry::RegisterMCInstPrinter(TheXCoreTarget, + TargetRegistry::RegisterMCInstPrinter(getTheXCoreTarget(), createXCoreMCInstPrinter); - TargetRegistry::RegisterAsmTargetStreamer(TheXCoreTarget, + TargetRegistry::RegisterAsmTargetStreamer(getTheXCoreTarget(), createTargetAsmStreamer); } diff --git a/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.h b/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.h index 28e0275c72d..ac0f3fefbae 100644 --- a/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.h +++ b/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.h @@ -18,8 +18,7 @@ namespace llvm { class Target; - -extern Target TheXCoreTarget; +Target &getTheXCoreTarget(); } // End llvm namespace diff --git a/lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp b/lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp index c78cde9ac8a..df5774c7e8e 100644 --- a/lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp +++ b/lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp @@ -12,8 +12,11 @@ #include "llvm/Support/TargetRegistry.h" using namespace llvm; -Target llvm::TheXCoreTarget; +Target &llvm::getTheXCoreTarget() { + static Target TheXCoreTarget; + return TheXCoreTarget; +} extern "C" void LLVMInitializeXCoreTargetInfo() { - RegisterTarget<Triple::xcore> X(TheXCoreTarget, "xcore", "XCore"); + RegisterTarget<Triple::xcore> X(getTheXCoreTarget(), "xcore", "XCore"); } diff --git a/lib/Target/XCore/XCoreAsmPrinter.cpp b/lib/Target/XCore/XCoreAsmPrinter.cpp index 62fafd6f79c..a4ce5af2278 100644 --- a/lib/Target/XCore/XCoreAsmPrinter.cpp +++ b/lib/Target/XCore/XCoreAsmPrinter.cpp @@ -297,5 +297,5 @@ void XCoreAsmPrinter::EmitInstruction(const MachineInstr *MI) { // Force static initialization. extern "C" void LLVMInitializeXCoreAsmPrinter() { - RegisterAsmPrinter<XCoreAsmPrinter> X(TheXCoreTarget); + RegisterAsmPrinter<XCoreAsmPrinter> X(getTheXCoreTarget()); } diff --git a/lib/Target/XCore/XCoreTargetMachine.cpp b/lib/Target/XCore/XCoreTargetMachine.cpp index c3eab802f81..bf3138f2164 100644 --- a/lib/Target/XCore/XCoreTargetMachine.cpp +++ b/lib/Target/XCore/XCoreTargetMachine.cpp @@ -89,7 +89,7 @@ void XCorePassConfig::addPreEmitPass() { // Force static initialization. extern "C" void LLVMInitializeXCoreTarget() { - RegisterTargetMachine<XCoreTargetMachine> X(TheXCoreTarget); + RegisterTargetMachine<XCoreTargetMachine> X(getTheXCoreTarget()); } TargetIRAnalysis XCoreTargetMachine::getTargetIRAnalysis() { |