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.

Signed-off-by: Tanu Kaskinen <ta...@iki.fi>
---

v2: Fixed the Upstream-Status line.

 .../pulseaudio/pulseaudio.inc                 |  8 ----
 ..._neon-use-register-r12-instead-of-r7.patch | 48 +++++++++++++++++++
 .../pulseaudio/pulseaudio_13.0.bb             |  1 +
 3 files changed, 49 insertions(+), 8 deletions(-)
 create mode 100644 
meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap_neon-use-register-r12-instead-of-r7.patch

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"
 
 inherit autotools bash-completion pkgconfig useradd gettext perlnative systemd 
manpages gsettings
 
-# When compiling for Thumb or Thumb2, frame pointers _must_ be disabled since 
the
-# Thumb frame pointer in r7 clashes with pulseaudio's use of inline asm to 
make syscalls
-# (where r7 is used for the syscall NR). In most cases, frame pointers will be
-# disabled automatically due to the optimisation level, but append an explicit
-# -fomit-frame-pointer to handle cases where optimisation is set to -O0 or 
frame
-# pointers have been enabled by -fno-omit-frame-pointer earlier in CFLAGS, etc.
-CFLAGS_append_arm = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', 
'-fomit-frame-pointer', '', d)}"
-
 # *.desktop rules wont be generated during configure and build will fail
 # if using --disable-nls
 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 @@
+From 4a1668f341f0228904105f77fe5871b9d59b2663 Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <ta...@iki.fi>
+Date: Mon, 13 Jul 2020 12:42:14 +0300
+Subject: [PATCH] remap_neon: use register r12 instead of r7
+
+When the Thumb instructions set is used and frame pointers are enabled
+(-fno-omit-frame-pointer), r7 can't be used, because it's used for the
+frame pointer. Trying to use r7 caused the compilation to fail.
+
+Thanks to Andre McCurdy for suggesting[1] this fix, all I had to do was to
+test that it works. The code builds now, and cpu-remap-test also
+succeeds.
+
+[1] https://lists.openembedded.org/g/openembedded-core/message/136786
+
+Upstream-Status: Submitted 
[https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/324]
+
+Signed-off-by: Tanu Kaskinen <ta...@iki.fi>
+---
+ src/pulsecore/remap_neon.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/src/pulsecore/remap_neon.c b/src/pulsecore/remap_neon.c
+index ca3b95b48..6f71345f8 100644
+--- a/src/pulsecore/remap_neon.c
++++ b/src/pulsecore/remap_neon.c
+@@ -52,11 +52,15 @@ static void 
remap_mono_to_stereo_float32ne_generic_arm(pa_remap_t *m, float *dst
+         __asm__ __volatile__ (
+             "ldm        %[src]!, {r4,r6}        \n\t"
+             "mov        r5, r4                  \n\t"
+-            "mov        r7, r6                  \n\t"
+-            "stm        %[dst]!, {r4-r7}        \n\t"
++
++            /* We use r12 instead of r7 here, because r7 is reserved for the
++             * frame pointer when using Thumb. */
++            "mov        r12, r6                 \n\t"
++
++            "stm        %[dst]!, {r4-r6,r12}    \n\t"
+             : [dst] "+r" (dst), [src] "+r" (src) /* output operands */
+             : /* input operands */
+-            : "memory", "r4", "r5", "r6", "r7" /* clobber list */
++            : "memory", "r4", "r5", "r6", "r12" /* clobber list */
+         );
+     }
+ 
+-- 
+2.20.1
+
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 \
            file://0001-client-conf-Add-allow-autospawn-for-root.patch \
            
file://0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch \
            file://0001-remap-arm-Adjust-inline-asm-constraints.patch \
+           file://0001-remap_neon-use-register-r12-instead-of-r7.patch \
            file://volatiles.04_pulse \
            "
 SRC_URI[md5sum] = "e41d606f90254ed45c90520faf83d95c"
-- 
2.20.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#140790): 
https://lists.openembedded.org/g/openembedded-core/message/140790
Mute This Topic: https://lists.openembedded.org/mt/75627039/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to