Skip to content

Commit

Permalink
[X86] Disable speculative load hardening for operations with an expli…
Browse files Browse the repository at this point in the history
…cit RSP base.

After D58632, we can create idempotent atomic operations to the top of stack.
This confused speculative load hardening because it thinks accesses should have
virtual register base except for the cases it already excluded.

This commit adds a new exclusion for this case. I'll try to reduce a test case
for this, but this fix was verified to work by the reporter. This should avoid
needing to revert D58632.

llvm-svn: 360475
  • Loading branch information
topperc authored and MrSidims committed May 24, 2019
1 parent 413bf1f commit 2f84c30
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp
Expand Up @@ -1964,6 +1964,14 @@ void X86SpeculativeLoadHardeningPass::hardenLoadAddr(
LLVM_DEBUG(
dbgs() << " Skipping hardening base of explicit stack frame load: ";
MI.dump(); dbgs() << "\n");
} else if (BaseMO.getReg() == X86::RSP) {
// Some idempotent atomic operations are lowered directly to a locked
// OR with 0 to the top of stack(or slightly offset from top) which uses an
// explicit RSP register as the base.
assert(IndexMO.getReg() == X86::NoRegister &&
"Explicit RSP access with dynamic index!");
LLVM_DEBUG(
dbgs() << " Cannot harden base of explicit RSP offset in a load!");
} else if (BaseMO.getReg() == X86::RIP ||
BaseMO.getReg() == X86::NoRegister) {
// For both RIP-relative addressed loads or absolute loads, we cannot
Expand Down

0 comments on commit 2f84c30

Please sign in to comment.