[llvm] r180737 - Emit the TLS initialization function pointers into the correct section.
Bill Wendling
isanbard at gmail.com
Mon Apr 29 15:29:19 PDT 2013
See the clang commit.
-bw
On Apr 29, 2013, at 3:27 PM, Rafael EspĂndola <rafael.espindola at gmail.com> wrote:
> testcase?
>
> On 29 April 2013 18:25, Bill Wendling <isanbard at gmail.com> wrote:
>> Author: void
>> Date: Mon Apr 29 17:25:40 2013
>> New Revision: 180737
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=180737&view=rev
>> Log:
>> Emit the TLS initialization function pointers into the correct section.
>>
>> The `llvm.tls_init_funcs' (created by the front-end) holds pointers to the TLS
>> initialization functions. These need to be placed into the correct section so
>> that they are run before `main()'.
>>
>> <rdar://problem/13733006>
>>
>> Modified:
>> llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
>> llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>>
>> Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=180737&r1=180736&r2=180737&view=diff
>> ==============================================================================
>> --- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)
>> +++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Mon Apr 29 17:25:40 2013
>> @@ -486,6 +486,7 @@ namespace llvm {
>> unsigned uid) const;
>> void EmitLLVMUsedList(const ConstantArray *InitList);
>> void EmitXXStructorList(const Constant *List, bool isCtor);
>> + void EmitTLSInitFuncs(const ConstantArray *InitList);
>> GCMetadataPrinter *GetOrCreateGCPrinter(GCStrategy *C);
>> };
>> }
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=180737&r1=180736&r2=180737&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Mon Apr 29 17:25:40 2013
>> @@ -1254,6 +1254,11 @@ bool AsmPrinter::EmitSpecialLLVMGlobal(c
>> return true;
>> }
>>
>> + if (GV->getName() == "llvm.tls_init_funcs") {
>> + EmitTLSInitFuncs(cast<ConstantArray>(GV->getInitializer()));
>> + return true;
>> + }
>> +
>> return false;
>> }
>>
>> @@ -1320,6 +1325,16 @@ void AsmPrinter::EmitXXStructorList(cons
>> }
>> }
>>
>> +/// EmitTLSInitFuncs - Emit the TLS initialization functions.
>> +void AsmPrinter::EmitTLSInitFuncs(const ConstantArray *InitList) {
>> + const DataLayout *TD = TM.getDataLayout();
>> + OutStreamer.SwitchSection(getObjFileLowering().getTLSThreadInitSection());
>> + EmitAlignment(Log2_32(TD->getPointerPrefAlignment()));
>> + for (unsigned I = 0, E = InitList->getNumOperands(); I != E; ++I)
>> + EmitGlobalConstant(
>> + dyn_cast<Constant>(InitList->getOperand(I)->stripPointerCasts()));
>> +}
>> +
>> //===--------------------------------------------------------------------===//
>> // Emission and print routines
>> //
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list