| // Test LVI load hardening on SGX inline assembly code |
| |
| //@ assembly-output: emit-asm |
| //@ compile-flags: --crate-type staticlib |
| //@ only-x86_64-fortanix-unknown-sgx |
| |
| use std::arch::asm; |
| |
| #[no_mangle] |
| pub extern "C" fn get(ptr: *const u64) -> u64 { |
| let value: u64; |
| unsafe { |
| asm!("mov {}, [{}]", |
| out(reg) value, |
| in(reg) ptr); |
| } |
| value |
| } |
| |
| // CHECK: get |
| // CHECK: movq |
| // CHECK-NEXT: lfence |
| |
| #[no_mangle] |
| pub extern "C" fn myret() { |
| unsafe { |
| asm!("ret"); |
| } |
| } |
| |
| // CHECK: myret |
| // CHECK: shlq $0, (%rsp) |
| // CHECK-NEXT: lfence |
| // CHECK-NEXT: retq |