mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-26 23:29:22 +00:00
TLS support for MinGW targets.
MinGW is almost completely compatible to MSVC, with the exception of the _tls_array global not being available. Patch by David Nadlinger! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177257 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
87294b6547
commit
2ee4e428cc
@ -7834,7 +7834,7 @@ X86TargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
|
|||||||
Chain.getValue(1));
|
Chain.getValue(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Subtarget->isTargetWindows()) {
|
if (Subtarget->isTargetWindows() || Subtarget->isTargetMingw()) {
|
||||||
// Just use the implicit TLS architecture
|
// Just use the implicit TLS architecture
|
||||||
// Need to generate someting similar to:
|
// Need to generate someting similar to:
|
||||||
// mov rdx, qword [gs:abs 58H]; Load pointer to ThreadLocalStorage
|
// mov rdx, qword [gs:abs 58H]; Load pointer to ThreadLocalStorage
|
||||||
@ -7854,18 +7854,19 @@ X86TargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
|
|||||||
SDValue Chain = DAG.getEntryNode();
|
SDValue Chain = DAG.getEntryNode();
|
||||||
|
|
||||||
// Get the Thread Pointer, which is %fs:__tls_array (32-bit) or
|
// Get the Thread Pointer, which is %fs:__tls_array (32-bit) or
|
||||||
// %gs:0x58 (64-bit).
|
// %gs:0x58 (64-bit). On MinGW, __tls_array is not available, so directly
|
||||||
|
// use its literal value of 0x2C.
|
||||||
Value *Ptr = Constant::getNullValue(Subtarget->is64Bit()
|
Value *Ptr = Constant::getNullValue(Subtarget->is64Bit()
|
||||||
? Type::getInt8PtrTy(*DAG.getContext(),
|
? Type::getInt8PtrTy(*DAG.getContext(),
|
||||||
256)
|
256)
|
||||||
: Type::getInt32PtrTy(*DAG.getContext(),
|
: Type::getInt32PtrTy(*DAG.getContext(),
|
||||||
257));
|
257));
|
||||||
|
|
||||||
SDValue ThreadPointer = DAG.getLoad(getPointerTy(), dl, Chain,
|
SDValue TlsArray = Subtarget->is64Bit() ? DAG.getIntPtrConstant(0x58) :
|
||||||
Subtarget->is64Bit()
|
(Subtarget->isTargetMingw() ? DAG.getIntPtrConstant(0x2C) :
|
||||||
? DAG.getIntPtrConstant(0x58)
|
DAG.getExternalSymbol("_tls_array", getPointerTy()));
|
||||||
: DAG.getExternalSymbol("_tls_array",
|
|
||||||
getPointerTy()),
|
SDValue ThreadPointer = DAG.getLoad(getPointerTy(), dl, Chain, TlsArray,
|
||||||
MachinePointerInfo(Ptr),
|
MachinePointerInfo(Ptr),
|
||||||
false, false, false, 0);
|
false, false, false, 0);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user