relibc: use /scheme/proc/{pid}/ctx for ptrace GETREGS/SETREGS
This commit is contained in:
@@ -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!(),
|
||||
|
||||
Reference in New Issue
Block a user