From: "Tanu Kaskinen" <tanuk@iki.fi>
To: openembedded-core@lists.openembedded.org
Subject: [PATCH] pulseaudio: improve the Thumb frame pointer fix
Date: Sat, 18 Jul 2020 07:40:10 +0300 [thread overview]
Message-ID: <20200718044010.13546-1-tanuk@iki.fi> (raw)
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 <tanuk@iki.fi>
---
.../pulseaudio/pulseaudio.inc | 8 ---
..._neon-use-register-r12-instead-of-r7.patch | 49 +++++++++++++++++++
.../pulseaudio/pulseaudio_13.0.bb | 1 +
3 files changed, 50 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..53a765a4c8
--- /dev/null
+++ b/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-remap_neon-use-register-r12-instead-of-r7.patch
@@ -0,0 +1,49 @@
+From 4a1668f341f0228904105f77fe5871b9d59b2663 Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <tanuk@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 <tanuk@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
next reply other threads:[~2020-07-18 4:40 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-18 4:40 Tanu Kaskinen [this message]
2020-07-18 5:02 ` ✗ patchtest: failure for pulseaudio: improve the Thumb frame pointer fix Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200718044010.13546-1-tanuk@iki.fi \
--to=tanuk@iki.fi \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.