From c1e4c1d53d2a4ac3899bfb812f583d9b72717694 Mon Sep 17 00:00:00 2001 From: Red Bear OS Date: Wed, 8 Jul 2026 17:58:11 +0300 Subject: [PATCH] relibc: use /scheme/proc/{pid}/ctx for ptrace GETREGS/SETREGS --- src/platform/redox/ptrace.rs | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/platform/redox/ptrace.rs b/src/platform/redox/ptrace.rs index eef280d46b..b419ab7272 100644 --- a/src/platform/redox/ptrace.rs +++ b/src/platform/redox/ptrace.rs @@ -35,9 +35,8 @@ use syscall; pub struct Session { pub first: bool, - pub fpregs: File, pub mem: File, - pub regs: File, + pub ctx: File, pub tracer: File, } pub struct State { @@ -94,16 +93,8 @@ pub fn get_session( CStr::borrow(&CString::new(format!("/scheme/proc/{}/mem", pid)).unwrap()), NEW_FLAGS, )?, - regs: File::open( - CStr::borrow( - &CString::new(format!("/scheme/proc/{}/regs/int", pid)).unwrap(), - ), - NEW_FLAGS, - )?, - fpregs: File::open( - CStr::borrow( - &CString::new(format!("/scheme/proc/{}/regs/float", pid)).unwrap(), - ), + ctx: File::open( + CStr::borrow(&CString::new(format!("/scheme/proc/{}/ctx", pid)).unwrap()), NEW_FLAGS, )?, })) @@ -194,8 +185,9 @@ unsafe fn inner_ptrace( } sys_ptrace::PTRACE_GETREGS => { let c_regs = unsafe { &mut *(data as *mut user_regs_struct) }; - let mut redox_regs = syscall::IntRegisters::default(); - (&mut &session.regs).read(&mut redox_regs)?; + let mut full = syscall::FullContextRegs::default(); + (&mut &session.ctx).read(&mut full)?; + let redox_regs = full.int; *c_regs = user_regs_struct { r15: redox_regs.r15 as _, r14: redox_regs.r14 as _, @@ -229,7 +221,9 @@ unsafe fn inner_ptrace( } sys_ptrace::PTRACE_SETREGS => { let c_regs = unsafe { &*(data as *mut user_regs_struct) }; - let redox_regs = syscall::IntRegisters { + let mut full = syscall::FullContextRegs::default(); + (&mut &session.ctx).read(&mut full)?; + full.int = syscall::IntRegisters { r15: c_regs.r15 as _, r14: c_regs.r14 as _, r13: c_regs.r13 as _, @@ -258,7 +252,7 @@ unsafe fn inner_ptrace( // fs: c_regs.fs as _, // gs: c_regs.gs as _, }; - (&mut &session.regs).write(&redox_regs)?; + (&mut &session.ctx).write(&full)?; Ok(0) } _ => unimplemented!(),