diff options
author | Graeme Gregory <dp@xora.org.uk> | 2008-02-01 15:32:54 +0000 |
---|---|---|
committer | Graeme Gregory <dp@xora.org.uk> | 2008-02-01 15:32:54 +0000 |
commit | 0bacf80851c83bce91087a0b0da4299c3f3094c4 (patch) | |
tree | d5c9834bc0a943580a93193d64bb1c1dc56cbdc6 /packages/strace/strace-4.5.14/arm-eabi.patch | |
parent | eef028138383abf4efee1fcd53149a341445717b (diff) | |
parent | 750bedd21a734b8032998aff4574c79abf547182 (diff) |
merge of '3df50a7108e4f25287e1ae4e52bfb7bc1aa7e2df'
and 'cb775f550e7bb6db676bbeebfc81eee971afcf27'
Diffstat (limited to 'packages/strace/strace-4.5.14/arm-eabi.patch')
-rw-r--r-- | packages/strace/strace-4.5.14/arm-eabi.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/packages/strace/strace-4.5.14/arm-eabi.patch b/packages/strace/strace-4.5.14/arm-eabi.patch new file mode 100644 index 0000000000..53e27f8ce8 --- /dev/null +++ b/packages/strace/strace-4.5.14/arm-eabi.patch @@ -0,0 +1,65 @@ +2006-03-30 Daniel Jacobowitz <dan@codesourcery.com> + + * process.c (change_syscall): Add ARM support. + * syscall.c (get_scno): Handle ARM EABI. + +Index: strace/process.c +=================================================================== +--- strace.orig/process.c 2006-03-30 17:36:14.000000000 -0500 ++++ strace/process.c 2006-03-30 17:44:16.000000000 -0500 +@@ -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 */ +Index: strace/syscall.c +=================================================================== +--- strace.orig/syscall.c 2006-03-30 17:36:14.000000000 -0500 ++++ strace/syscall.c 2006-03-30 17:44:16.000000000 -0500 +@@ -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) { |