aboutsummaryrefslogtreecommitdiff
path: root/meta-bigendian/recipes-devtools/strace/strace/strace-4.8-arm-be8.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-bigendian/recipes-devtools/strace/strace/strace-4.8-arm-be8.patch')
-rw-r--r--meta-bigendian/recipes-devtools/strace/strace/strace-4.8-arm-be8.patch19
1 files changed, 19 insertions, 0 deletions
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
new file mode 100644
index 00000000..c0d4043d
--- /dev/null
+++ b/meta-bigendian/recipes-devtools/strace/strace/strace-4.8-arm-be8.patch
@@ -0,0 +1,19 @@
+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;
+
++#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);
++#endif /* __ARMEB__ && __ARM_ARCH_7A__ */
+ /* EABI syscall convention? */
+ if (scno == 0xef000000) {
+ scno = arm_regs.ARM_r7; /* yes */