diff options
Diffstat (limited to 'lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 43f399a61f..b5d9db98ef 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -81,38 +81,36 @@ void CodeGenModule::EmitGlobalCtors() { VoidArgs, false); // i32, function type pair - CtorFields.push_back(llvm::PointerType::getUnqual(CtorFuncTy)); - llvm::StructType* CtorStructTy = llvm::StructType::get(CtorFields, false); + const llvm::Type *FPType = llvm::PointerType::getUnqual(CtorFuncTy); + llvm::StructType* CtorStructTy = + llvm::StructType::get(llvm::Type::Int32Ty, FPType, NULL); // Array of fields - llvm::ArrayType* GlobalCtorsTy = llvm::ArrayType::get(CtorStructTy, - GlobalCtors.size()); + llvm::ArrayType* GlobalCtorsTy = + llvm::ArrayType::get(CtorStructTy, GlobalCtors.size()); - const std::string GlobalCtorsVar = std::string("llvm.global_ctors"); // Define the global variable - llvm::GlobalVariable *GlobalCtorsVal = new llvm::GlobalVariable( - GlobalCtorsTy, - false, - llvm::GlobalValue::AppendingLinkage, - (llvm::Constant*)0, - GlobalCtorsVar, - &TheModule); + llvm::GlobalVariable *GlobalCtorsVal = + new llvm::GlobalVariable(GlobalCtorsTy, false, + llvm::GlobalValue::AppendingLinkage, + (llvm::Constant*)0, "llvm.global_ctors", + &TheModule); // Populate the array std::vector<llvm::Constant*> CtorValues; - llvm::Constant *MagicNumber = llvm::ConstantInt::get(llvm::IntegerType::Int32Ty, - 65535, - false); + llvm::Constant *MagicNumber = + llvm::ConstantInt::get(llvm::Type::Int32Ty, 65535, false); + std::vector<llvm::Constant*> StructValues; for (std::vector<llvm::Constant*>::iterator I = GlobalCtors.begin(), - E = GlobalCtors.end(); I != E; ++I) { - std::vector<llvm::Constant*> StructValues; + E = GlobalCtors.end(); I != E; ++I) { + StructValues.clear(); StructValues.push_back(MagicNumber); StructValues.push_back(*I); - llvm::Constant* CtorEntry = llvm::ConstantStruct::get(CtorStructTy, StructValues); - CtorValues.push_back(CtorEntry); + CtorValues.push_back(llvm::ConstantStruct::get(CtorStructTy, StructValues)); } - llvm::Constant* CtorArray = llvm::ConstantArray::get(GlobalCtorsTy, CtorValues); - GlobalCtorsVal->setInitializer(CtorArray); + + GlobalCtorsVal->setInitializer(llvm::ConstantArray::get(GlobalCtorsTy, + CtorValues)); } |