From b13c88bbb8a862feca03c95c6ec9a8d329282cb0 Mon Sep 17 00:00:00 2001 From: s1341 Date: Mon, 11 Apr 2022 11:58:56 +0300 Subject: [PATCH] Add getregs/setregs for android x86_64 --- src/sys/ptrace/linux.rs | 42 +++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/sys/ptrace/linux.rs b/src/sys/ptrace/linux.rs index 24152d7d5a..3ab608bc5b 100644 --- a/src/sys/ptrace/linux.rs +++ b/src/sys/ptrace/linux.rs @@ -10,12 +10,12 @@ use crate::sys::signal::Signal; pub type AddressType = *mut ::libc::c_void; -#[cfg(all( - target_os = "linux", - any(all(target_arch = "x86_64", - any(target_env = "gnu", target_env = "musl")), - all(target_arch = "x86", target_env = "gnu")) -))] +#[cfg(any(all(target_os = "android", target_arch = "x86_64"), + all(target_os = "linux", + any(all(target_arch = "x86_64", + any(target_env = "gnu", target_env = "musl")), + all(target_arch = "x86", target_env = "gnu")) +)))] use libc::user_regs_struct; cfg_if! { @@ -46,14 +46,16 @@ libc_enum!{ PTRACE_CONT, PTRACE_KILL, PTRACE_SINGLESTEP, - #[cfg(any(all(target_os = "android", target_pointer_width = "32"), + #[cfg(any(all(target_os = "android", any(target_arch = "x86_64", + target_pointer_width = "32")), all(target_os = "linux", any(target_env = "musl", target_arch = "mips", target_arch = "mips64", target_arch = "x86_64", target_pointer_width = "32"))))] PTRACE_GETREGS, - #[cfg(any(all(target_os = "android", target_pointer_width = "32"), + #[cfg(any(all(target_os = "android", any(target_arch = "x86_64", + target_pointer_width = "32")), all(target_os = "linux", any(target_env = "musl", target_arch = "mips", target_arch = "mips64", @@ -190,23 +192,23 @@ fn ptrace_peek(request: Request, pid: Pid, addr: AddressType, data: *mut c_void) } /// Get user registers, as with `ptrace(PTRACE_GETREGS, ...)` -#[cfg(all( - target_os = "linux", - any(all(target_arch = "x86_64", - any(target_env = "gnu", target_env = "musl")), - all(target_arch = "x86", target_env = "gnu")) -))] +#[cfg(any(all(target_os = "android", target_arch = "x86_64"), + all(target_os = "linux", + any(all(target_arch = "x86_64", + any(target_env = "gnu", target_env = "musl")), + all(target_arch = "x86", target_env = "gnu")) +)))] pub fn getregs(pid: Pid) -> Result { ptrace_get_data::(Request::PTRACE_GETREGS, pid) } /// Set user registers, as with `ptrace(PTRACE_SETREGS, ...)` -#[cfg(all( - target_os = "linux", - any(all(target_arch = "x86_64", - any(target_env = "gnu", target_env = "musl")), - all(target_arch = "x86", target_env = "gnu")) -))] +#[cfg(any(all(target_os = "android", target_arch = "x86_64"), + all(target_os = "linux", + any(all(target_arch = "x86_64", + any(target_env = "gnu", target_env = "musl")), + all(target_arch = "x86", target_env = "gnu")) +)))] pub fn setregs(pid: Pid, regs: user_regs_struct) -> Result<()> { let res = unsafe { libc::ptrace(Request::PTRACE_SETREGS as RequestType,