mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-06-04 14:39:54 +00:00
fftw: work around segfault when checking for presence of ARM NEON
* Mixxx segfaulted during start. Remote debugging lead to function 'really_have_neon()'. * qtractor segfaulted when adding instruments as whysynth or hexter * seems autodetection fails in some other environments too [1]. * if TUNE_FEATURES contain 'neon' we can assume our machine supports NEON so we don't need runtime detection [1] https://github.com/FFTW/fftw3/issues/30 Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
This commit is contained in:
committed by
Martin Jansa
parent
f90df2e2f2
commit
cae9cafb9c
+80
@@ -0,0 +1,80 @@
|
||||
From 97af5a2efbe30726ce4d7c921efed6afc32a314f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
|
||||
Date: Sun, 25 Dec 2016 13:41:19 +0100
|
||||
Subject: [PATCH] NEON autodetection segfaults: assume neon present
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
If TUNE_FEATURES contain 'neon' we can assume our machine supports it
|
||||
|
||||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
|
||||
---
|
||||
simd-support/neon.c | 46 +---------------------------------------------
|
||||
1 file changed, 1 insertion(+), 45 deletions(-)
|
||||
|
||||
diff --git a/simd-support/neon.c b/simd-support/neon.c
|
||||
index 86b2cb6..8d6537e 100644
|
||||
--- a/simd-support/neon.c
|
||||
+++ b/simd-support/neon.c
|
||||
@@ -23,54 +23,10 @@
|
||||
|
||||
#if HAVE_NEON
|
||||
|
||||
-/* check for an environment where signals are known to work */
|
||||
-#if defined(unix) || defined(linux)
|
||||
- # include <signal.h>
|
||||
- # include <setjmp.h>
|
||||
-
|
||||
- static jmp_buf jb;
|
||||
-
|
||||
- static void sighandler(int x)
|
||||
- {
|
||||
- UNUSED(x);
|
||||
- longjmp(jb, 1);
|
||||
- }
|
||||
-
|
||||
- static int really_have_neon(void)
|
||||
- {
|
||||
- void (*oldsig)(int);
|
||||
- oldsig = signal(SIGILL, sighandler);
|
||||
- if (setjmp(jb)) {
|
||||
- signal(SIGILL, oldsig);
|
||||
- return 0;
|
||||
- } else {
|
||||
- /* paranoia: encode the instruction in binary because the
|
||||
- assembler may not recognize it without -mfpu=neon */
|
||||
- /*asm volatile ("vand q0, q0, q0");*/
|
||||
- asm volatile (".long 0xf2000150");
|
||||
- signal(SIGILL, oldsig);
|
||||
- return 1;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- int X(have_simd_neon)(void)
|
||||
- {
|
||||
- static int init = 0, res;
|
||||
-
|
||||
- if (!init) {
|
||||
- res = really_have_neon();
|
||||
- init = 1;
|
||||
- }
|
||||
- return res;
|
||||
- }
|
||||
-
|
||||
-
|
||||
-#else
|
||||
-/* don't know how to autodetect NEON; assume it is present */
|
||||
+/* autodetect NEON broken; assume it is present */
|
||||
int X(have_simd_neon)(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
-#endif
|
||||
|
||||
#endif
|
||||
--
|
||||
2.5.5
|
||||
|
||||
@@ -3,7 +3,10 @@ SECTION = "libs"
|
||||
LICENSE = "GPLv2"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
|
||||
|
||||
SRC_URI = "http://www.fftw.org/fftw-${PV}.tar.gz"
|
||||
SRC_URI = " \
|
||||
http://www.fftw.org/fftw-${PV}.tar.gz \
|
||||
file://0001-NEON-autodetection-segfaults-assume-neon-present.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "6cc08a3b9c7ee06fdd5b9eb02e06f569"
|
||||
SRC_URI[sha256sum] = "8ecfe1b04732ec3f5b7d279fdb8efcad536d555f9d1e8fabd027037d45ea8bcf"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user