summaryrefslogtreecommitdiffstats
path: root/meta/packages/strace/strace-4.5.14/arm-eabi.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/packages/strace/strace-4.5.14/arm-eabi.patch')
-rw-r--r--meta/packages/strace/strace-4.5.14/arm-eabi.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/meta/packages/strace/strace-4.5.14/arm-eabi.patch b/meta/packages/strace/strace-4.5.14/arm-eabi.patch
new file mode 100644
index 0000000000..53e27f8ce8
--- /dev/null
+++ b/meta/packages/strace/strace-4.5.14/arm-eabi.patch
@@ -0,0 +1,65 @@
12006-03-30 Daniel Jacobowitz <dan@codesourcery.com>
2
3 * process.c (change_syscall): Add ARM support.
4 * syscall.c (get_scno): Handle ARM EABI.
5
6Index: strace/process.c
7===================================================================
8--- strace.orig/process.c 2006-03-30 17:36:14.000000000 -0500
9+++ strace/process.c 2006-03-30 17:44:16.000000000 -0500
10@@ -694,6 +694,16 @@ int new;
11 0x100000 | new) < 0)
12 return -1;
13 return 0;
14+#elif defined(ARM)
15+ /* Some kernels support this, some (pre-2.6.16 or so) don't. */
16+# ifndef PTRACE_SET_SYSCALL
17+# define PTRACE_SET_SYSCALL 23
18+# endif
19+
20+ if (ptrace (PTRACE_SET_SYSCALL, tcp->pid, 0, new) != 0)
21+ return -1;
22+
23+ return 0;
24 #else
25 #warning Do not know how to handle change_syscall for this architecture
26 #endif /* architecture */
27Index: strace/syscall.c
28===================================================================
29--- strace.orig/syscall.c 2006-03-30 17:36:14.000000000 -0500
30+++ strace/syscall.c 2006-03-30 17:44:16.000000000 -0500
31@@ -1108,16 +1108,25 @@ struct tcb *tcp;
32 return 0;
33 }
34
35- if ((scno & 0x0ff00000) != 0x0f900000) {
36- fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n",
37- scno);
38- return -1;
39- }
40+ /* Handle the EABI syscall convention. We do not
41+ bother converting structures between the two
42+ ABIs, but basic functionality should work even
43+ if strace and the traced program have different
44+ ABIs. */
45+ if (scno == 0xef000000) {
46+ scno = regs.ARM_r7;
47+ } else {
48+ if ((scno & 0x0ff00000) != 0x0f900000) {
49+ fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n",
50+ scno);
51+ return -1;
52+ }
53
54- /*
55- * Fixup the syscall number
56- */
57- scno &= 0x000fffff;
58+ /*
59+ * Fixup the syscall number
60+ */
61+ scno &= 0x000fffff;
62+ }
63 }
64
65 if (tcp->flags & TCB_INSYSCALL) {