diff options
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" |
