From be49c1936a2dfed51050ac4ece1e4ae05b297208 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Tue, 13 May 2025 10:05:32 -0600 Subject: [PATCH] Make x86_64 mcontext not opaque --- src/header/signal/redox.rs | 45 +++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/src/header/signal/redox.rs b/src/header/signal/redox.rs index 940fae0163..612dd61e52 100644 --- a/src/header/signal/redox.rs +++ b/src/header/signal/redox.rs @@ -75,6 +75,7 @@ pub const SI_USER: i32 = 0; pub(crate) type ucontext_t = ucontext; pub(crate) type mcontext_t = mcontext; +//TODO: share definition with SigStack? #[repr(C)] pub struct ucontext { #[cfg(any( @@ -96,17 +97,51 @@ pub struct ucontext { pub uc_mcontext: mcontext_t, } +#[cfg(target_arch = "x86")] #[repr(C)] pub struct mcontext { - #[cfg(target_arch = "x86")] _opaque: [u8; 512], - #[cfg(target_arch = "x86_64")] - _opaque: [u8; 864], - #[cfg(target_arch = "aarch64")] +} + +//TODO: share definition with ArchIntRegs? +//TODO: repr(align(16))? +#[cfg(target_arch = "x86_64")] +#[repr(C)] +pub struct mcontext { + pub ymm_upper: [[u64; 2]; 16], + pub fxsave: [[u64; 2]; 29], + pub r15: usize, // fxsave "available" +0 + pub r14: usize, // available +8 + pub r13: usize, // available +16 + pub r12: usize, // available +24 + pub rbp: usize, // available +32 + pub rbx: usize, // available +40 + pub r11: usize, // outside fxsave, and so on + pub r10: usize, + pub r9: usize, + pub r8: usize, + pub rax: usize, + pub rcx: usize, + pub rdx: usize, + pub rsi: usize, + pub rdi: usize, + pub rflags: usize, + pub rip: usize, + pub rsp: usize, +} + +#[cfg(target_arch = "aarch64")] +#[repr(C)] +pub struct mcontext { _opaque: [u8; 272], - #[cfg(target_arch = "riscv64")] +} + +#[cfg(target_arch = "riscv64")] +#[repr(C)] +pub struct mcontext { _opaque: [u8; 520], } + #[no_mangle] pub extern "C" fn __completely_unused_cbindgen_workaround_fn_ucontext_mcontext( a: *const ucontext_t,