[llvm] r283914 - Fix "static initialization order fiasco" for the XCore Target.
Mehdi Amini via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 11 11:22:42 PDT 2016
Author: mehdi_amini
Date: Tue Oct 11 13:22:41 2016
New Revision: 283914
URL: http://llvm.org/viewvc/llvm-project?rev=283914&view=rev
Log:
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.
Modified:
llvm/trunk/lib/Target/XCore/Disassembler/XCoreDisassembler.cpp
llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp
llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.h
llvm/trunk/lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp
llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp
llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp
Modified: llvm/trunk/lib/Target/XCore/Disassembler/XCoreDisassembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/Disassembler/XCoreDisassembler.cpp?rev=283914&r1=283913&r2=283914&view=diff
==============================================================================
--- llvm/trunk/lib/Target/XCore/Disassembler/XCoreDisassembler.cpp (original)
+++ llvm/trunk/lib/Target/XCore/Disassembler/XCoreDisassembler.cpp Tue Oct 11 13:22:41 2016
@@ -769,7 +769,7 @@ MCDisassembler::DecodeStatus XCoreDisass
}
namespace llvm {
- extern Target TheXCoreTarget;
+ Target &getTheXCoreTarget();
}
static MCDisassembler *createXCoreDisassembler(const Target &T,
@@ -780,6 +780,6 @@ static MCDisassembler *createXCoreDisass
extern "C" void LLVMInitializeXCoreDisassembler() {
// Register the disassembler.
- TargetRegistry::RegisterMCDisassembler(TheXCoreTarget,
+ TargetRegistry::RegisterMCDisassembler(getTheXCoreTarget(),
createXCoreDisassembler);
}
Modified: llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp?rev=283914&r1=283913&r2=283914&view=diff
==============================================================================
--- llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp (original)
+++ llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp Tue Oct 11 13:22:41 2016
@@ -124,26 +124,28 @@ static MCTargetStreamer *createTargetAsm
// 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);
}
Modified: llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.h?rev=283914&r1=283913&r2=283914&view=diff
==============================================================================
--- llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.h (original)
+++ llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.h Tue Oct 11 13:22:41 2016
@@ -18,8 +18,7 @@
namespace llvm {
class Target;
-
-extern Target TheXCoreTarget;
+Target &getTheXCoreTarget();
} // End llvm namespace
Modified: llvm/trunk/lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp?rev=283914&r1=283913&r2=283914&view=diff
==============================================================================
--- llvm/trunk/lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp (original)
+++ llvm/trunk/lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp Tue Oct 11 13:22:41 2016
@@ -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");
}
Modified: llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp?rev=283914&r1=283913&r2=283914&view=diff
==============================================================================
--- llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp Tue Oct 11 13:22:41 2016
@@ -297,5 +297,5 @@ void XCoreAsmPrinter::EmitInstruction(co
// Force static initialization.
extern "C" void LLVMInitializeXCoreAsmPrinter() {
- RegisterAsmPrinter<XCoreAsmPrinter> X(TheXCoreTarget);
+ RegisterAsmPrinter<XCoreAsmPrinter> X(getTheXCoreTarget());
}
Modified: llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp?rev=283914&r1=283913&r2=283914&view=diff
==============================================================================
--- llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp (original)
+++ llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp Tue Oct 11 13:22:41 2016
@@ -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() {
More information about the llvm-commits
mailing list