summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86TargetMachine.cpp
diff options
context:
space:
mode:
authorVlad Tsyrklevich <vlad@tsyrklevich.net>2018-04-04 01:21:16 +0000
committerVlad Tsyrklevich <vlad@tsyrklevich.net>2018-04-04 01:21:16 +0000
commite3446017ed82fe7f3158c892d65eb4ded24bafe8 (patch)
tree016ff644f00c309fca88de87a2a325ab9a41d7c1 /llvm/lib/Target/X86/X86TargetMachine.cpp
parent086b1c8118430cd19f04e903df8ebcc00f6d924f (diff)
downloadbcm5719-llvm-e3446017ed82fe7f3158c892d65eb4ded24bafe8.tar.gz
bcm5719-llvm-e3446017ed82fe7f3158c892d65eb4ded24bafe8.zip
Add the ShadowCallStack pass
Summary: The ShadowCallStack pass instruments functions marked with the shadowcallstack attribute. The instrumented prolog saves the return address to [gs:offset] where offset is stored and updated in [gs:0]. The instrumented epilog loads/updates the return address from [gs:0] and checks that it matches the return address on the stack before returning. Reviewers: pcc, vitalybuka Reviewed By: pcc Subscribers: cryptoad, eugenis, craig.topper, mgorny, llvm-commits, kcc Differential Revision: https://reviews.llvm.org/D44802 llvm-svn: 329139
Diffstat (limited to 'llvm/lib/Target/X86/X86TargetMachine.cpp')
-rw-r--r--llvm/lib/Target/X86/X86TargetMachine.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp
index c93207555c4..fe901fc2dd1 100644
--- a/llvm/lib/Target/X86/X86TargetMachine.cpp
+++ b/llvm/lib/Target/X86/X86TargetMachine.cpp
@@ -58,6 +58,7 @@ namespace llvm {
void initializeWinEHStatePassPass(PassRegistry &);
void initializeFixupLEAPassPass(PassRegistry &);
+void initializeShadowCallStackPass(PassRegistry &);
void initializeX86CallFrameOptimizationPass(PassRegistry &);
void initializeX86CmovConverterPassPass(PassRegistry &);
void initializeX86ExecutionDomainFixPass(PassRegistry &);
@@ -77,6 +78,7 @@ extern "C" void LLVMInitializeX86Target() {
initializeFixupBWInstPassPass(PR);
initializeEvexToVexInstPassPass(PR);
initializeFixupLEAPassPass(PR);
+ initializeShadowCallStackPass(PR);
initializeX86CallFrameOptimizationPass(PR);
initializeX86CmovConverterPassPass(PR);
initializeX86ExecutionDomainFixPass(PR);
@@ -473,6 +475,7 @@ void X86PassConfig::addPreEmitPass() {
addPass(createBreakFalseDeps());
}
+ addPass(createShadowCallStackPass());
addPass(createX86IndirectBranchTrackingPass());
if (UseVZeroUpper)
OpenPOWER on IntegriCloud