2006-03-30 Daniel Jacobowitz <dan@codesourcery.com>
* process.c (change_syscall): Add ARM support. * syscall.c (get_scno): Handle ARM EABI. Fixes Debian#360152.
This commit is contained in:
parent
9d19e163f0
commit
f691bd2a4f
10
process.c
10
process.c
@ -694,6 +694,16 @@ int new;
|
||||
0x100000 | new) < 0)
|
||||
return -1;
|
||||
return 0;
|
||||
#elif defined(ARM)
|
||||
/* Some kernels support this, some (pre-2.6.16 or so) don't. */
|
||||
# ifndef PTRACE_SET_SYSCALL
|
||||
# define PTRACE_SET_SYSCALL 23
|
||||
# endif
|
||||
|
||||
if (ptrace (PTRACE_SET_SYSCALL, tcp->pid, 0, new) != 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
#else
|
||||
#warning Do not know how to handle change_syscall for this architecture
|
||||
#endif /* architecture */
|
||||
|
27
syscall.c
27
syscall.c
@ -1108,16 +1108,25 @@ struct tcb *tcp;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((scno & 0x0ff00000) != 0x0f900000) {
|
||||
fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n",
|
||||
scno);
|
||||
return -1;
|
||||
}
|
||||
/* Handle the EABI syscall convention. We do not
|
||||
bother converting structures between the two
|
||||
ABIs, but basic functionality should work even
|
||||
if strace and the traced program have different
|
||||
ABIs. */
|
||||
if (scno == 0xef000000) {
|
||||
scno = regs.ARM_r7;
|
||||
} else {
|
||||
if ((scno & 0x0ff00000) != 0x0f900000) {
|
||||
fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n",
|
||||
scno);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Fixup the syscall number
|
||||
*/
|
||||
scno &= 0x000fffff;
|
||||
/*
|
||||
* Fixup the syscall number
|
||||
*/
|
||||
scno &= 0x000fffff;
|
||||
}
|
||||
}
|
||||
|
||||
if (tcp->flags & TCB_INSYSCALL) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user