diff options
author | Andreas Müller <schnitzeltony@googlemail.com> | 2016-12-26 00:07:39 +0100 |
---|---|---|
committer | Martin Jansa <Martin.Jansa@gmail.com> | 2017-01-10 13:12:54 +0100 |
commit | cae9cafb9c536fd5ea40d1457c0ee1fcd6a6aa43 (patch) | |
tree | 056d14e33cc95b1644b5082620c024f1ba63e573 | |
parent | f90df2e2f21cf159751e5ba7d6d300b292bc822b (diff) | |
download | meta-openembedded-cae9cafb9c536fd5ea40d1457c0ee1fcd6a6aa43.tar.gz |
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>
-rw-r--r-- | meta-oe/recipes-support/fftw/fftw/0001-NEON-autodetection-segfaults-assume-neon-present.patch | 80 | ||||
-rw-r--r-- | meta-oe/recipes-support/fftw/fftw_3.3.5.bb | 5 |
2 files changed, 84 insertions, 1 deletions
diff --git a/meta-oe/recipes-support/fftw/fftw/0001-NEON-autodetection-segfaults-assume-neon-present.patch b/meta-oe/recipes-support/fftw/fftw/0001-NEON-autodetection-segfaults-assume-neon-present.patch new file mode 100644 index 000000000..6340f42f4 --- /dev/null +++ b/meta-oe/recipes-support/fftw/fftw/0001-NEON-autodetection-segfaults-assume-neon-present.patch | |||
@@ -0,0 +1,80 @@ | |||
1 | From 97af5a2efbe30726ce4d7c921efed6afc32a314f Mon Sep 17 00:00:00 2001 | ||
2 | From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com> | ||
3 | Date: Sun, 25 Dec 2016 13:41:19 +0100 | ||
4 | Subject: [PATCH] NEON autodetection segfaults: assume neon present | ||
5 | MIME-Version: 1.0 | ||
6 | Content-Type: text/plain; charset=UTF-8 | ||
7 | Content-Transfer-Encoding: 8bit | ||
8 | |||
9 | If TUNE_FEATURES contain 'neon' we can assume our machine supports it | ||
10 | |||
11 | Upstream-Status: Inappropriate [embedded specific] | ||
12 | |||
13 | Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com> | ||
14 | --- | ||
15 | simd-support/neon.c | 46 +--------------------------------------------- | ||
16 | 1 file changed, 1 insertion(+), 45 deletions(-) | ||
17 | |||
18 | diff --git a/simd-support/neon.c b/simd-support/neon.c | ||
19 | index 86b2cb6..8d6537e 100644 | ||
20 | --- a/simd-support/neon.c | ||
21 | +++ b/simd-support/neon.c | ||
22 | @@ -23,54 +23,10 @@ | ||
23 | |||
24 | #if HAVE_NEON | ||
25 | |||
26 | -/* check for an environment where signals are known to work */ | ||
27 | -#if defined(unix) || defined(linux) | ||
28 | - # include <signal.h> | ||
29 | - # include <setjmp.h> | ||
30 | - | ||
31 | - static jmp_buf jb; | ||
32 | - | ||
33 | - static void sighandler(int x) | ||
34 | - { | ||
35 | - UNUSED(x); | ||
36 | - longjmp(jb, 1); | ||
37 | - } | ||
38 | - | ||
39 | - static int really_have_neon(void) | ||
40 | - { | ||
41 | - void (*oldsig)(int); | ||
42 | - oldsig = signal(SIGILL, sighandler); | ||
43 | - if (setjmp(jb)) { | ||
44 | - signal(SIGILL, oldsig); | ||
45 | - return 0; | ||
46 | - } else { | ||
47 | - /* paranoia: encode the instruction in binary because the | ||
48 | - assembler may not recognize it without -mfpu=neon */ | ||
49 | - /*asm volatile ("vand q0, q0, q0");*/ | ||
50 | - asm volatile (".long 0xf2000150"); | ||
51 | - signal(SIGILL, oldsig); | ||
52 | - return 1; | ||
53 | - } | ||
54 | - } | ||
55 | - | ||
56 | - int X(have_simd_neon)(void) | ||
57 | - { | ||
58 | - static int init = 0, res; | ||
59 | - | ||
60 | - if (!init) { | ||
61 | - res = really_have_neon(); | ||
62 | - init = 1; | ||
63 | - } | ||
64 | - return res; | ||
65 | - } | ||
66 | - | ||
67 | - | ||
68 | -#else | ||
69 | -/* don't know how to autodetect NEON; assume it is present */ | ||
70 | +/* autodetect NEON broken; assume it is present */ | ||
71 | int X(have_simd_neon)(void) | ||
72 | { | ||
73 | return 1; | ||
74 | } | ||
75 | -#endif | ||
76 | |||
77 | #endif | ||
78 | -- | ||
79 | 2.5.5 | ||
80 | |||
diff --git a/meta-oe/recipes-support/fftw/fftw_3.3.5.bb b/meta-oe/recipes-support/fftw/fftw_3.3.5.bb index 7bce6f4e5..71adb8905 100644 --- a/meta-oe/recipes-support/fftw/fftw_3.3.5.bb +++ b/meta-oe/recipes-support/fftw/fftw_3.3.5.bb | |||
@@ -3,7 +3,10 @@ SECTION = "libs" | |||
3 | LICENSE = "GPLv2" | 3 | LICENSE = "GPLv2" |
4 | LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552" | 4 | LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552" |
5 | 5 | ||
6 | SRC_URI = "http://www.fftw.org/fftw-${PV}.tar.gz" | 6 | SRC_URI = " \ |
7 | http://www.fftw.org/fftw-${PV}.tar.gz \ | ||
8 | file://0001-NEON-autodetection-segfaults-assume-neon-present.patch \ | ||
9 | " | ||
7 | SRC_URI[md5sum] = "6cc08a3b9c7ee06fdd5b9eb02e06f569" | 10 | SRC_URI[md5sum] = "6cc08a3b9c7ee06fdd5b9eb02e06f569" |
8 | SRC_URI[sha256sum] = "8ecfe1b04732ec3f5b7d279fdb8efcad536d555f9d1e8fabd027037d45ea8bcf" | 11 | SRC_URI[sha256sum] = "8ecfe1b04732ec3f5b7d279fdb8efcad536d555f9d1e8fabd027037d45ea8bcf" |
9 | 12 | ||