diff options
| author | Vlad Tsyrklevich <vlad@tsyrklevich.net> | 2018-04-04 01:21:16 +0000 |
|---|---|---|
| committer | Vlad Tsyrklevich <vlad@tsyrklevich.net> | 2018-04-04 01:21:16 +0000 |
| commit | e3446017ed82fe7f3158c892d65eb4ded24bafe8 (patch) | |
| tree | 016ff644f00c309fca88de87a2a325ab9a41d7c1 /llvm/lib/Target/X86/X86TargetMachine.cpp | |
| parent | 086b1c8118430cd19f04e903df8ebcc00f6d924f (diff) | |
| download | bcm5719-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.cpp | 3 |
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) |

