diff options
| author | Folkert de Vries <folkert@folkertdev.nl> | 2025-06-24 20:40:08 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-24 14:40:08 -0400 |
| commit | 962ff16101b66ea9937163de9bd9ae948aea9332 (patch) | |
| tree | fd40b2004d377f2b4b0e042e965df66141daf0c0 | |
| parent | 9f4670fd2b3c204567f57e5580a3cd41e9ea4b58 (diff) | |
| download | rust-962ff16101b66ea9937163de9bd9ae948aea9332.tar.gz rust-962ff16101b66ea9937163de9bd9ae948aea9332.zip | |
Use `asm_cfg` in `probestack`
cc https://www.github.com/rust-lang/rust/issues/140364
| -rw-r--r-- | library/compiler-builtins/compiler-builtins/src/lib.rs | 1 | ||||
| -rw-r--r-- | library/compiler-builtins/compiler-builtins/src/probestack.rs | 35 |
2 files changed, 13 insertions, 23 deletions
diff --git a/library/compiler-builtins/compiler-builtins/src/lib.rs b/library/compiler-builtins/compiler-builtins/src/lib.rs index dd9920cae01..fe0ad81dd3a 100644 --- a/library/compiler-builtins/compiler-builtins/src/lib.rs +++ b/library/compiler-builtins/compiler-builtins/src/lib.rs @@ -7,6 +7,7 @@ #![feature(compiler_builtins)] #![feature(core_intrinsics)] #![feature(linkage)] +#![feature(asm_cfg)] #![feature(naked_functions)] #![feature(repr_simd)] #![feature(macro_metavar_expr_concat)] diff --git a/library/compiler-builtins/compiler-builtins/src/probestack.rs b/library/compiler-builtins/compiler-builtins/src/probestack.rs index 1d0010842cb..f4105dde57e 100644 --- a/library/compiler-builtins/compiler-builtins/src/probestack.rs +++ b/library/compiler-builtins/compiler-builtins/src/probestack.rs @@ -58,27 +58,6 @@ #[unsafe(naked)] #[rustc_std_internal_symbol] pub unsafe extern "custom" fn __rust_probestack() { - #[cfg(not(all(target_env = "sgx", target_vendor = "fortanix")))] - macro_rules! ret { - () => { - "ret" - }; - } - - #[cfg(all(target_env = "sgx", target_vendor = "fortanix"))] - macro_rules! ret { - // for this target, [manually patch for LVI]. - // - // [manually patch for LVI]: https://software.intel.com/security-software-guidance/insights/deep-dive-load-value-injection#specialinstructions - () => { - " - pop %r11 - lfence - jmp *%r11 - " - }; - } - core::arch::naked_asm!( " .cfi_startproc @@ -128,8 +107,18 @@ pub unsafe extern "custom" fn __rust_probestack() { .cfi_def_cfa_register %rsp .cfi_adjust_cfa_offset -8 ", - ret!(), - " + #[cfg(not(all(target_env = "sgx", target_vendor = "fortanix")))] + " ret", + #[cfg(all(target_env = "sgx", target_vendor = "fortanix"))] + " + // for this target, [manually patch for LVI]. + // + // [manually patch for LVI]: https://software.intel.com/security-software-guidance/insights/deep-dive-load-value-injection#specialinstructions + pop %r11 + lfence + jmp *%r11 + ", + " .cfi_endproc ", options(att_syntax) |
