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:
Lauro Ramos Venancio 2007-04-12 18:42:08 +00:00
parent c763552299
commit 26ca64c884

View File

@ -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())