From 28ab590af355aa1d464577f85a32536ac702271a Mon Sep 17 00:00:00 2001 From: Fathi Boudra Date: Tue, 11 Nov 2014 14:12:00 +0200 Subject: strace: fix strace-arm-be8 patch for 4.9 release Change-Id: Ief1aa78fe443cf6fdef9716656df4badb21000a5 Signed-off-by: Fathi Boudra --- .../strace/strace/strace-4.8-arm-be8.patch | 52 +++++++++++++++------- .../recipes-devtools/strace/strace_%.bbappend | 3 ++ .../recipes-devtools/strace/strace_4.8.bbappend | 3 -- 3 files changed, 38 insertions(+), 20 deletions(-) create mode 100644 meta-bigendian/recipes-devtools/strace/strace_%.bbappend delete mode 100644 meta-bigendian/recipes-devtools/strace/strace_4.8.bbappend diff --git a/meta-bigendian/recipes-devtools/strace/strace/strace-4.8-arm-be8.patch b/meta-bigendian/recipes-devtools/strace/strace/strace-4.8-arm-be8.patch index d9cce72b..bda48074 100644 --- a/meta-bigendian/recipes-devtools/strace/strace/strace-4.8-arm-be8.patch +++ b/meta-bigendian/recipes-devtools/strace/strace/strace-4.8-arm-be8.patch @@ -1,19 +1,37 @@ -Index: strace-4.8/syscall.c -=================================================================== ---- strace-4.8.orig/syscall.c -+++ strace-4.8/syscall.c -@@ -1355,6 +1355,14 @@ get_scno(struct tcb *tcp) - if (errno) - return -1; - +strace: fix system call matching code in get_scno for be8 arm + +on ARM V7 operating in big endian mode strace does not work: + +root@genericarmv7ab:~# strace ls +pid 1356 unknown syscall trap 0x000000ef + +it happens because ARM V7 when runs as big endian operates in be8 mode, +where instruction are still in little endian form. Strace get_scno reads +instructions and matches it to certain pattern, but in armeb case it needs +to byteswap it before that. + +Signed-off-by: Victor Kamensky +Signed-off-by: Riku Voipio +--- + syscall.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +--- a/syscall.c ++++ b/syscall.c +@@ -1374,6 +1374,16 @@ get_scno(struct tcb *tcp) + scno = ptrace(PTRACE_PEEKTEXT, tcp->pid, (void *)(arm_regs.ARM_pc - 4), NULL); + if (errno) + return -1; ++ +#if defined(__ARMEB__) && defined(__ARM_ARCH_7A__) -+ /* We running big endian arm on ARMv7: instructions are -+ * in little endian form so we need to byteswap it. Note -+ * on older ARM like V5 Xscale code is in big endian form -+ * byte swap is not needed in this case. I.e be8 vs be32. -+ */ -+ scno = __builtin_bswap32(scno); ++ /* We running big endian arm on ARMv7: instructions are ++ * in little endian form so we need to byteswap it. Note ++ * on older ARM like V5 Xscale code is in big endian form ++ * byte swap is not needed in this case. I.e be8 vs be32. ++ */ ++ scno = __builtin_bswap32(scno); +#endif /* __ARMEB__ && __ARM_ARCH_7A__ */ - /* EABI syscall convention? */ - if (scno == 0xef000000) { - scno = arm_regs.ARM_r7; /* yes */ ++ + /* EABI syscall convention? */ + if (scno != 0xef000000) { + /* No, it's OABI */ diff --git a/meta-bigendian/recipes-devtools/strace/strace_%.bbappend b/meta-bigendian/recipes-devtools/strace/strace_%.bbappend new file mode 100644 index 00000000..3f3d73e0 --- /dev/null +++ b/meta-bigendian/recipes-devtools/strace/strace_%.bbappend @@ -0,0 +1,3 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI += "file://strace-4.8-arm-be8.patch" diff --git a/meta-bigendian/recipes-devtools/strace/strace_4.8.bbappend b/meta-bigendian/recipes-devtools/strace/strace_4.8.bbappend deleted file mode 100644 index 3f3d73e0..00000000 --- a/meta-bigendian/recipes-devtools/strace/strace_4.8.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI += "file://strace-4.8-arm-be8.patch" -- cgit v1.2.3