[cfi] Take over existing __cfi_check in CrossDSOCFI.
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Fri, 7 Apr 2017 23:00:20 +0000 (23:00 +0000)
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Fri, 7 Apr 2017 23:00:20 +0000 (23:00 +0000)
https://reviews.llvm.org/D31796 will emit a dummy __cfi_check in the
frontend.

llvm-svn: 299805

llvm/lib/Transforms/IPO/CrossDSOCFI.cpp

index ba2e60dee3bcbe5b39e7b205b6e0f9680abf0859..e8738e70257b7ce52d9a06d7764a76298f61cad7 100644 (file)
@@ -100,6 +100,9 @@ void CrossDSOCFI::buildCFICheck(Module &M) {
       "__cfi_check", Type::getVoidTy(Ctx), Type::getInt64Ty(Ctx),
       Type::getInt8PtrTy(Ctx), Type::getInt8PtrTy(Ctx), nullptr);
   Function *F = dyn_cast<Function>(C);
+  // Take over the existing function. The frontend emits a weak stub so that the
+  // linker knows about the symbol; this pass replaces the function body.
+  F->deleteBody();
   F->setAlignment(4096);
   auto args = F->arg_begin();
   Value &CallSiteTypeId = *(args++);