]> git.lizzy.rs Git - rust.git/blob - tests/assembly/x86_64-fortanix-unknown-sgx-lvi-inline-assembly.rs
Rollup merge of #107048 - DebugSteven:newer-x-check-cargo, r=albertlarsan68
[rust.git] / tests / assembly / x86_64-fortanix-unknown-sgx-lvi-inline-assembly.rs
1 // Test LVI load hardening on SGX inline assembly code
2
3 // assembly-output: emit-asm
4 // compile-flags: --crate-type staticlib
5 // only-x86_64-fortanix-unknown-sgx
6
7 use std::arch::asm;
8
9 #[no_mangle]
10 pub extern "C" fn get(ptr: *const u64) -> u64 {
11     let value: u64;
12     unsafe {
13         asm!(".start_inline_asm:",
14             "mov {}, [{}]",
15             ".end_inline_asm:",
16             out(reg) value,
17             in(reg) ptr);
18     }
19     value
20 }
21
22 // CHECK: get
23 // CHECK: .start_inline_asm
24 // CHECK-NEXT: movq
25 // CHECK-NEXT: lfence
26 // CHECK-NEXT: .end_inline_asm
27
28 #[no_mangle]
29 pub extern "C" fn myret() {
30     unsafe {
31         asm!(
32             ".start_myret_inline_asm:",
33             "ret",
34             ".end_myret_inline_asm:",
35         );
36     }
37 }
38
39 // CHECK: myret
40 // CHECK: .start_myret_inline_asm
41 // CHECK-NEXT: shlq $0, (%rsp)
42 // CHECK-NEXT: lfence
43 // CHECK-NEXT: retq