mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-02 07:32:52 +00:00
Implement Thread Local Storage (TLS) in CBackend.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35951 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c763552299
commit
26ca64c884
@ -1505,22 +1505,23 @@ bool CWriter::doInitialization(Module &M) {
|
||||
Out << "\n/* External Global Variable Declarations */\n";
|
||||
for (Module::global_iterator I = M.global_begin(), E = M.global_end();
|
||||
I != E; ++I) {
|
||||
if (I->hasExternalLinkage()) {
|
||||
|
||||
if (I->hasExternalLinkage() || I->hasExternalWeakLinkage())
|
||||
Out << "extern ";
|
||||
printType(Out, I->getType()->getElementType(), false,
|
||||
GetValueName(I));
|
||||
Out << ";\n";
|
||||
} else if (I->hasDLLImportLinkage()) {
|
||||
else if (I->hasDLLImportLinkage())
|
||||
Out << "__declspec(dllimport) ";
|
||||
printType(Out, I->getType()->getElementType(), false,
|
||||
GetValueName(I));
|
||||
Out << ";\n";
|
||||
} else if (I->hasExternalWeakLinkage()) {
|
||||
Out << "extern ";
|
||||
printType(Out, I->getType()->getElementType(), false,
|
||||
GetValueName(I));
|
||||
Out << " __EXTERNAL_WEAK__ ;\n";
|
||||
}
|
||||
else
|
||||
continue; // Internal Global
|
||||
|
||||
// Thread Local Storage
|
||||
if (I->isThreadLocal())
|
||||
Out << "__thread ";
|
||||
|
||||
printType(Out, I->getType()->getElementType(), false, GetValueName(I));
|
||||
|
||||
if (I->hasExternalWeakLinkage())
|
||||
Out << " __EXTERNAL_WEAK__";
|
||||
Out << ";\n";
|
||||
}
|
||||
}
|
||||
|
||||
@ -1563,11 +1564,16 @@ bool CWriter::doInitialization(Module &M) {
|
||||
// Ignore special globals, such as debug info.
|
||||
if (getGlobalVariableClass(I))
|
||||
continue;
|
||||
|
||||
|
||||
if (I->hasInternalLinkage())
|
||||
Out << "static ";
|
||||
else
|
||||
Out << "extern ";
|
||||
|
||||
// Thread Local Storage
|
||||
if (I->isThreadLocal())
|
||||
Out << "__thread ";
|
||||
|
||||
printType(Out, I->getType()->getElementType(), false,
|
||||
GetValueName(I));
|
||||
|
||||
@ -1592,14 +1598,18 @@ bool CWriter::doInitialization(Module &M) {
|
||||
// Ignore special globals, such as debug info.
|
||||
if (getGlobalVariableClass(I))
|
||||
continue;
|
||||
|
||||
|
||||
if (I->hasInternalLinkage())
|
||||
Out << "static ";
|
||||
else if (I->hasDLLImportLinkage())
|
||||
Out << "__declspec(dllimport) ";
|
||||
else if (I->hasDLLExportLinkage())
|
||||
Out << "__declspec(dllexport) ";
|
||||
|
||||
|
||||
// Thread Local Storage
|
||||
if (I->isThreadLocal())
|
||||
Out << "__thread ";
|
||||
|
||||
printType(Out, I->getType()->getElementType(), false,
|
||||
GetValueName(I));
|
||||
if (I->hasLinkOnceLinkage())
|
||||
|
Loading…
Reference in New Issue
Block a user