From 09cfb248e7b1765865bcc0c174c019acfec6681c Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Fri, 30 Apr 2021 18:27:12 +0100 Subject: [PATCH] Avoid using rbx in SGX inline assembly since it is reserved --- library/std/src/sys/sgx/ext/arch.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/library/std/src/sys/sgx/ext/arch.rs b/library/std/src/sys/sgx/ext/arch.rs index 730db34e733..a6718006fe4 100644 --- a/library/std/src/sys/sgx/ext/arch.rs +++ b/library/std/src/sys/sgx/ext/arch.rs @@ -32,9 +32,12 @@ pub fn egetkey(request: &Align512<[u8; 512]>) -> Result, u32> let error; asm!( + // rbx is reserved by LLVM + "xchg {}, rbx", "enclu", + "mov rbx, {}", + inout(reg) request => _, inlateout("eax") ENCLU_EGETKEY => error, - in("rbx") request, in("rcx") out.as_mut_ptr(), options(nostack), ); @@ -60,9 +63,12 @@ pub fn ereport( let mut report = MaybeUninit::uninit(); asm!( + // rbx is reserved by LLVM + "xchg {}, rbx", "enclu", + "mov rbx, {}", + inout(reg) targetinfo => _, in("eax") ENCLU_EREPORT, - in("rbx") targetinfo, in("rcx") reportdata, in("rdx") report.as_mut_ptr(), options(preserves_flags, nostack),