// Test LVI load hardening on SGX inline assembly code //@ add-core-stubs //@ assembly-output: emit-asm //@ compile-flags: --target x86_64-fortanix-unknown-sgx //@ needs-llvm-components: x86 #![feature(no_core, lang_items, f16)] #![crate_type = "lib"] #![no_core] extern crate minicore; use minicore::*; #[no_mangle] pub extern "C" fn get(ptr: *const u64) -> u64 { // CHECK-LABEL: get // CHECK: movq // CHECK-NEXT: lfence let value: u64; unsafe { asm!("mov {}, [{}]", out(reg) value, in(reg) ptr); } value } #[no_mangle] pub extern "C" fn myret() { // CHECK-LABEL: myret // CHECK: shlq $0, (%rsp) // CHECK-NEXT: lfence // CHECK-NEXT: retq unsafe { asm!("ret"); } }