openbsd-ports/devel/llvm/patches/patch-lib_CodeGen_StackProtector_cpp
2012-08-04 14:47:52 +00:00

32 lines
1.4 KiB
Plaintext

$OpenBSD: patch-lib_CodeGen_StackProtector_cpp,v 1.1 2012/08/04 14:47:52 pascal Exp $
--- lib/CodeGen/StackProtector.cpp.orig Wed Nov 23 08:13:56 2011
+++ lib/CodeGen/StackProtector.cpp Sun Jul 22 19:55:03 2012
@@ -169,7 +169,7 @@ bool StackProtector::InsertStackProtectors() {
StackGuardVar = ConstantExpr::getIntToPtr(OffsetVal,
PointerType::get(PtrTy, AddressSpace));
} else {
- StackGuardVar = M->getOrInsertGlobal("__stack_chk_guard", PtrTy);
+ StackGuardVar = M->getOrInsertGlobal("__guard", PtrTy);
}
BasicBlock &Entry = F->getEntryBlock();
@@ -247,9 +247,16 @@ BasicBlock *StackProtector::CreateFailBB() {
BasicBlock *FailBB = BasicBlock::Create(F->getContext(),
"CallStackCheckFailBlk", F);
Constant *StackChkFail =
- M->getOrInsertFunction("__stack_chk_fail",
+ M->getOrInsertFunction("__stack_smash_handler",
Type::getVoidTy(F->getContext()), NULL);
- CallInst::Create(StackChkFail, "", FailBB);
+ Constant *G = new GlobalVariable(*M,
+ ArrayType::get(Type::getInt1Ty(F->getContext()),
+ F->getName().size() + 1),
+ true, GlobalVariable::PrivateLinkage,
+ ConstantDataArray::getString(F->getContext(),
+ F->getName(), true),
+ "SSH", false, 0);
+ CallInst::Create(StackChkFail, G, "", FailBB);
new UnreachableInst(F->getContext(), FailBB);
return FailBB;
}