summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/strace
diff options
context:
space:
mode:
authorAndre McCurdy <armccurdy@gmail.com>2018-05-16 18:03:53 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-05-29 21:07:12 +0100
commit568a1f74913d7524650015297648f51f85bc2809 (patch)
treea4638fbeac600b4615ee51e35cb1818864fccbc5 /meta/recipes-devtools/strace
parent0781c9fe7b2c31a208b63d344b5acf28a442f408 (diff)
downloadpoky-568a1f74913d7524650015297648f51f85bc2809.tar.gz
strace: fix ARM Thumb build with frame pointers enabled
Replace the previous (incomplete) workaround with better solution backported from upstream. (From OE-Core rev: b038a6e418d723a0a413219e9882cdd7f3804625) Signed-off-by: Andre McCurdy <armccurdy@gmail.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/strace')
-rw-r--r--meta/recipes-devtools/strace/strace/0001-linux-arm-raw_syscall.h-avoid-r7-specified-register-.patch74
-rw-r--r--meta/recipes-devtools/strace/strace_4.22.bb16
2 files changed, 81 insertions, 9 deletions
diff --git a/meta/recipes-devtools/strace/strace/0001-linux-arm-raw_syscall.h-avoid-r7-specified-register-.patch b/meta/recipes-devtools/strace/strace/0001-linux-arm-raw_syscall.h-avoid-r7-specified-register-.patch
new file mode 100644
index 0000000000..8584291ba8
--- /dev/null
+++ b/meta/recipes-devtools/strace/strace/0001-linux-arm-raw_syscall.h-avoid-r7-specified-register-.patch
@@ -0,0 +1,74 @@
1From 0c75ebaad09d6d3f2395dfe6160904af883dd0d9 Mon Sep 17 00:00:00 2001
2From: Andre McCurdy <armccurdy@gmail.com>
3Date: Tue, 15 May 2018 15:34:39 -0700
4Subject: [PATCH] linux/arm/raw_syscall.h: avoid r7 specified register
5 variables with Thumb
6
7If Thumb code is being generated and frame pointers are enabled, the
8Thumb frame pointer in r7 clashes with any local variable which may
9need to be assigned to r7 (e.g. the syscall NR when making a raw
10syscall).
11
12With gcc, the double use of r7 results in a build error, e.g.
13
14 strace-4.22/tests/inject-nf.c:86:1: error: r7 cannot be used in asm here
15
16With clang, the double use of r7 can result in the compiler silently
17generating broken code which crashes at run time due to frame pointer
18corruption:
19
20 https://bugs.llvm.org/show_bug.cgi?id=34165
21
22In most cases the problem isn't visible as frame pointers will be
23disabled automatically due to optimisation level. However to handle
24cases where frame pointers are enabled (e.g. when CFLAGS etc are set
25to support a debug build, etc) provide a version of raw_syscall_0
26which manually saves and restores the frame pointer value in r7
27to a temporary register before setting up the syscall NR in r7
28and invoking the syscall.
29
30* linux/arm/raw_syscall.h (raw_syscall_0) [__thumb__]: Provide
31an alternative version.
32
33Upstream-Status: Backport
34
35Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
36---
37 linux/arm/raw_syscall.h | 15 +++++++++++++++
38 1 file changed, 15 insertions(+)
39
40diff --git a/linux/arm/raw_syscall.h b/linux/arm/raw_syscall.h
41index 69c7e23..ec534ec 100644
42--- a/linux/arm/raw_syscall.h
43+++ b/linux/arm/raw_syscall.h
44@@ -36,12 +36,27 @@ static inline kernel_ulong_t
45 raw_syscall_0(const kernel_ulong_t nr, kernel_ulong_t *err)
46 {
47 *err = 0;
48+
49+#ifdef __thumb__ /* && FRAME_POINTERS_ENABLED */
50+
51+ register kernel_ulong_t rt;
52+ register kernel_ulong_t r0 __asm__("r0");
53+ __asm__ __volatile__("mov %1,r7; mov r7,%2; swi 0x0; mov r7,%1"
54+ : "=r"(r0), "=&r"(rt)
55+ : "r"(nr)
56+ : "memory");
57+
58+#else
59+
60 register kernel_ulong_t r7 __asm__("r7") = nr;
61 register kernel_ulong_t r0 __asm__("r0");
62 __asm__ __volatile__("swi 0x0"
63 : "=r"(r0)
64 : "r"(r7)
65 : "memory");
66+
67+#endif
68+
69 return r0;
70 }
71 # define raw_syscall_0 raw_syscall_0
72--
731.9.1
74
diff --git a/meta/recipes-devtools/strace/strace_4.22.bb b/meta/recipes-devtools/strace/strace_4.22.bb
index 947b3f7bf6..99691f87c3 100644
--- a/meta/recipes-devtools/strace/strace_4.22.bb
+++ b/meta/recipes-devtools/strace/strace_4.22.bb
@@ -14,21 +14,13 @@ SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
14 file://mips-SIGEMT.patch \ 14 file://mips-SIGEMT.patch \
15 file://0001-caps-abbrev.awk-fix-gawk-s-path.patch \ 15 file://0001-caps-abbrev.awk-fix-gawk-s-path.patch \
16 file://0001-tests-sigaction-Check-for-mips-and-alpha-before-usin.patch \ 16 file://0001-tests-sigaction-Check-for-mips-and-alpha-before-usin.patch \
17 file://0001-linux-arm-raw_syscall.h-avoid-r7-specified-register-.patch \
17 " 18 "
18SRC_URI[md5sum] = "7a2a7d7715da6e6834bc65bd09bace1c" 19SRC_URI[md5sum] = "7a2a7d7715da6e6834bc65bd09bace1c"
19SRC_URI[sha256sum] = "068cd09264c95e4d591bbcd3ea08f99a693ed8663cd5169b0fdad72eb5bdb39d" 20SRC_URI[sha256sum] = "068cd09264c95e4d591bbcd3ea08f99a693ed8663cd5169b0fdad72eb5bdb39d"
20 21
21inherit autotools ptest bluetooth 22inherit autotools ptest bluetooth
22 23
23EXTRA_OECONF += "--enable-mpers=no"
24
25CFLAGS_append_libc-musl = " -Dsigcontext_struct=sigcontext"
26# otherwise strace-4.22/tests/inject-nf.c fails to build as discussed here:
27# http://lists.openembedded.org/pipermail/openembedded-core/2018-May/150647.html
28DEBUG_OPTIMIZATION_remove = "${@bb.utils.contains('PTEST_ENABLED', '1', '-fno-omit-frame-pointer', '', d)}"
29
30RDEPENDS_${PN}-ptest += "make coreutils grep gawk sed"
31
32PACKAGECONFIG_class-target ??= "\ 24PACKAGECONFIG_class-target ??= "\
33 ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \ 25 ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
34" 26"
@@ -36,6 +28,10 @@ PACKAGECONFIG_class-target ??= "\
36PACKAGECONFIG[bluez] = "ac_cv_header_bluetooth_bluetooth_h=yes,ac_cv_header_bluetooth_bluetooth_h=no,${BLUEZ}" 28PACKAGECONFIG[bluez] = "ac_cv_header_bluetooth_bluetooth_h=yes,ac_cv_header_bluetooth_bluetooth_h=no,${BLUEZ}"
37PACKAGECONFIG[libunwind] = "--with-libunwind,--without-libunwind,libunwind" 29PACKAGECONFIG[libunwind] = "--with-libunwind,--without-libunwind,libunwind"
38 30
31EXTRA_OECONF += "--enable-mpers=no"
32
33CFLAGS_append_libc-musl = " -Dsigcontext_struct=sigcontext"
34
39TESTDIR = "tests" 35TESTDIR = "tests"
40 36
41do_install_append() { 37do_install_append() {
@@ -61,5 +57,7 @@ do_install_ptest() {
61 ${D}/${PTEST_PATH}/${TESTDIR}/Makefile 57 ${D}/${PTEST_PATH}/${TESTDIR}/Makefile
62} 58}
63 59
60RDEPENDS_${PN}-ptest += "make coreutils grep gawk sed"
61
64BBCLASSEXTEND = "native" 62BBCLASSEXTEND = "native"
65TOOLCHAIN = "gcc" 63TOOLCHAIN = "gcc"