[PATCH] Fix strace -p with ARM OABI compat and restart_syscall

Steve Bennett steveb at workware.net.au
Mon Jun 27 06:22:13 UTC 2011


Ping?

Is there any interest in this patch?

Cheers,
Steve

On 14/10/2010, at 2:18 PM, Steve Bennett wrote:

> When ARM OABI compat mode is enabled on Linux, a process that has
> received a signal and is sitting on a kernel trampoline.
> Detect this case so that the process can be traced.
> 
> Note: There is probably a much better test for this case.
> 
> Signed-off-by: Steve Bennett <steveb at workware.net.au>
> ---
> syscall.c |   27 +++++++++++++++++++--------
> 1 files changed, 19 insertions(+), 8 deletions(-)
> 
> diff --git a/syscall.c b/syscall.c
> index a742571..a4461fe 100644
> --- a/syscall.c
> +++ b/syscall.c
> @@ -1040,14 +1040,20 @@ get_scno(struct tcb *tcp)
> 			/*
> 			 * Get the ARM-mode system call number
> 			 */
> -			errno = 0;
> -			scno = ptrace(PTRACE_PEEKTEXT, tcp->pid, (void *)(regs.ARM_pc - 4), NULL);
> -			if (errno)
> -				return -1;
> -
> -			if (scno == 0 && (tcp->flags & TCB_WAITEXECVE)) {
> -				tcp->flags &= ~TCB_WAITEXECVE;
> -				return 0;
> +			
> +			/* We may be in syscall_restart via a kernel trampoline.
> +			 * In this case pc[-4] won't be useful.
> +			 * Use a dodgy test for this case.
> +			 */
> +			if ((regs.ARM_pc & 0xffff0000) == 0xffff0000) {
> +				/* restart syscall is 0 */
> +				scno = 0x0f900000;
> +			}
> +			else {
> +				errno = 0;
> +				scno = ptrace(PTRACE_PEEKTEXT, tcp->pid, (void *)(regs.ARM_pc - 4), NULL);
> +				if (errno)
> +					return -1;
> 			}
> 
> 			/* Handle the EABI syscall convention.  We do not
> @@ -1079,6 +1085,11 @@ get_scno(struct tcb *tcp)
> 		} else
> 			set_personality(0);
> 
> +		if (scno == 0 && (tcp->flags & TCB_WAITEXECVE)) {
> +			tcp->flags &= ~TCB_WAITEXECVE;
> +			return 0;
> +		}
> +
> 		if (tcp->flags & TCB_INSYSCALL) {
> 			fprintf(stderr, "pid %d stray syscall entry\n", tcp->pid);
> 			tcp->flags &= ~TCB_INSYSCALL;
> -- 
> 1.5.5.3
> 
> 

--
µWeb: Embedded Web Framework - http://uweb.workware.net.au/
WorkWare Systems Pty Ltd
W: www.workware.net.au      P: +61 434 921 300
E: steveb at workware.net.au   F: +61 7 3391 6002









More information about the Strace-devel mailing list