32 lines
1.4 KiB
Plaintext
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;
|
|
}
|