diff options
author | Tanu Kaskinen <tanuk@iki.fi> | 2020-07-18 08:15:55 +0300 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-07-19 16:20:53 +0100 |
commit | f5731d48a595aba8704b5f5e8602024b49bb71ee (patch) | |
tree | 6d424391ce979e8a1c5de0a48afb80027dd57e5b /meta/recipes-multimedia/pulseaudio | |
parent | ea5b2d21fa9901198609cab08177c8518f42d4eb (diff) | |
download | poky-f5731d48a595aba8704b5f5e8602024b49bb71ee.tar.gz |
pulseaudio: improve the Thumb frame pointer fix
By changing the register that PulseAudio uses in its asm code makes it
unnecessary to care whether frame pointers are enabled or not.
This fix was suggested by Andre McCurdy.
(From OE-Core rev: f0a9be4c196c99661cdd18f80bf25281beb04216)
Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-multimedia/pulseaudio')
3 files changed, 49 insertions, 8 deletions
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio.inc b/meta/recipes-multimedia/pulseaudio/pulseaudio.inc index c7f3e67022..4e32b27087 100644 --- a/meta/recipes-multimedia/pulseaudio/pulseaudio.inc +++ b/meta/recipes-multimedia/pulseaudio/pulseaudio.inc | |||
@@ -63,14 +63,6 @@ DEPENDS += "speexdsp libxml-parser-perl-native libcap" | |||
63 | 63 | ||
64 | inherit autotools bash-completion pkgconfig useradd gettext perlnative systemd manpages gsettings | 64 | inherit autotools bash-completion pkgconfig useradd gettext perlnative systemd manpages gsettings |
65 | 65 | ||
66 | # When compiling for Thumb or Thumb2, frame pointers _must_ be disabled since the | ||
67 | # Thumb frame pointer in r7 clashes with pulseaudio's use of inline asm to make syscalls | ||
68 | # (where r7 is used for the syscall NR). In most cases, frame pointers will be | ||
69 | # disabled automatically due to the optimisation level, but append an explicit | ||
70 | # -fomit-frame-pointer to handle cases where optimisation is set to -O0 or frame | ||
71 | # pointers have been enabled by -fno-omit-frame-pointer earlier in CFLAGS, etc. | ||
72 | CFLAGS_append_arm = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}" | ||
73 | |||
74 | # *.desktop rules wont be generated during configure and build will fail | 66 | # *.desktop rules wont be generated during configure and build will fail |
75 | # if using --disable-nls | 67 | # if using --disable-nls |
76 | USE_NLS = "yes" | 68 | USE_NLS = "yes" |
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap_neon-use-register-r12-instead-of-r7.patch b/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap_neon-use-register-r12-instead-of-r7.patch new file mode 100644 index 0000000000..aaa162f9b0 --- /dev/null +++ b/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap_neon-use-register-r12-instead-of-r7.patch | |||
@@ -0,0 +1,48 @@ | |||
1 | From 4a1668f341f0228904105f77fe5871b9d59b2663 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tanu Kaskinen <tanuk@iki.fi> | ||
3 | Date: Mon, 13 Jul 2020 12:42:14 +0300 | ||
4 | Subject: [PATCH] remap_neon: use register r12 instead of r7 | ||
5 | |||
6 | When the Thumb instructions set is used and frame pointers are enabled | ||
7 | (-fno-omit-frame-pointer), r7 can't be used, because it's used for the | ||
8 | frame pointer. Trying to use r7 caused the compilation to fail. | ||
9 | |||
10 | Thanks to Andre McCurdy for suggesting[1] this fix, all I had to do was to | ||
11 | test that it works. The code builds now, and cpu-remap-test also | ||
12 | succeeds. | ||
13 | |||
14 | [1] https://lists.openembedded.org/g/openembedded-core/message/136786 | ||
15 | |||
16 | Upstream-Status: Submitted [https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/324] | ||
17 | |||
18 | Signed-off-by: Tanu Kaskinen <tanuk@iki.fi> | ||
19 | --- | ||
20 | src/pulsecore/remap_neon.c | 10 +++++++--- | ||
21 | 1 file changed, 7 insertions(+), 3 deletions(-) | ||
22 | |||
23 | diff --git a/src/pulsecore/remap_neon.c b/src/pulsecore/remap_neon.c | ||
24 | index ca3b95b48..6f71345f8 100644 | ||
25 | --- a/src/pulsecore/remap_neon.c | ||
26 | +++ b/src/pulsecore/remap_neon.c | ||
27 | @@ -52,11 +52,15 @@ static void remap_mono_to_stereo_float32ne_generic_arm(pa_remap_t *m, float *dst | ||
28 | __asm__ __volatile__ ( | ||
29 | "ldm %[src]!, {r4,r6} \n\t" | ||
30 | "mov r5, r4 \n\t" | ||
31 | - "mov r7, r6 \n\t" | ||
32 | - "stm %[dst]!, {r4-r7} \n\t" | ||
33 | + | ||
34 | + /* We use r12 instead of r7 here, because r7 is reserved for the | ||
35 | + * frame pointer when using Thumb. */ | ||
36 | + "mov r12, r6 \n\t" | ||
37 | + | ||
38 | + "stm %[dst]!, {r4-r6,r12} \n\t" | ||
39 | : [dst] "+r" (dst), [src] "+r" (src) /* output operands */ | ||
40 | : /* input operands */ | ||
41 | - : "memory", "r4", "r5", "r6", "r7" /* clobber list */ | ||
42 | + : "memory", "r4", "r5", "r6", "r12" /* clobber list */ | ||
43 | ); | ||
44 | } | ||
45 | |||
46 | -- | ||
47 | 2.20.1 | ||
48 | |||
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb b/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb index d2f201d06e..53e9a2357d 100644 --- a/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb +++ b/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb | |||
@@ -4,6 +4,7 @@ SRC_URI = "http://freedesktop.org/software/pulseaudio/releases/${BP}.tar.xz \ | |||
4 | file://0001-client-conf-Add-allow-autospawn-for-root.patch \ | 4 | file://0001-client-conf-Add-allow-autospawn-for-root.patch \ |
5 | file://0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch \ | 5 | file://0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch \ |
6 | file://0001-remap-arm-Adjust-inline-asm-constraints.patch \ | 6 | file://0001-remap-arm-Adjust-inline-asm-constraints.patch \ |
7 | file://0001-remap_neon-use-register-r12-instead-of-r7.patch \ | ||
7 | file://volatiles.04_pulse \ | 8 | file://volatiles.04_pulse \ |
8 | " | 9 | " |
9 | SRC_URI[md5sum] = "e41d606f90254ed45c90520faf83d95c" | 10 | SRC_URI[md5sum] = "e41d606f90254ed45c90520faf83d95c" |