Pulseaudio segfaults immediately after launch

Hi,

I’m attempting to run Pulseaudio on my Turris Omnia, but unfortunately it segfaults as soon as it starts. This is happening with the newest pulseaudio-daemon and pulseaudio-daemon-avahi on TurrisOS 5.1.4.

I’ve tried running it with strace to see if I could glean anything useful, but unfortunately not.
Perhaps someone has some ideas?

Linux turris 4.14.206 #0 SMP Fri Nov 13 04:11:07 2020 armv7l GNU/Linux

The trace is:

root@turris:~# strace pulseaudio
execve("/usr/bin/pulseaudio", ["pulseaudio"], 0xbe9addd0 /* 13 vars */) = 0
set_tls(0xb6feb5d8)                     = 0
set_tid_address(0xb6fec1b0)             = 13586
open("/usr/lib/pulseaudio/libpulsecore-12.2.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0755, st_size=499947, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0@\376\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 569344, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6edd000
mmap2(0xb6f65000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x78000) = 0xb6f65000
close(3)                                = 0
open("/usr/lib/pulseaudio/libpulse.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/etc/ld-musl-armhf.path", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libpulse.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libpulse.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libpulse.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0755, st_size=278540, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0 \242\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 348160, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6e88000
mmap2(0xb6edb000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x43000) = 0xb6edb000
close(3)                                = 0
open("/usr/lib/pulseaudio/libpulsecommon-12.2.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0755, st_size=409747, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\08\370\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 479232, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6e13000
mmap2(0xb6e86000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x63000) = 0xb6e86000
close(3)                                = 0
open("/usr/lib/pulseaudio/libwrap.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libwrap.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libwrap.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libwrap.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0755, st_size=21543, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\244\34\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 90112, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6dfd000
mmap2(0xb6e11000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x4000) = 0xb6e11000
close(3)                                = 0
open("/usr/lib/pulseaudio/libsndfile.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libsndfile.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libsndfile.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libsndfile.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=361156, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\370&\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 438272, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6d92000
mmap2(0xb6df9000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x57000) = 0xb6df9000
mmap2(0xb6dfb000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6dfb000
close(3)                                = 0
open("/usr/lib/pulseaudio/libltdl.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libltdl.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libltdl.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libltdl.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0755, st_size=28681, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0P\32\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 98304, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6d7a000
mmap2(0xb6d90000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x6000) = 0xb6d90000
close(3)                                = 0
open("/usr/lib/pulseaudio/libcap.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libcap.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libcap.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libcap.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=12442, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\230\16\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 81920, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6d66000
mmap2(0xb6d78000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x2000) = 0xb6d78000
close(3)                                = 0
open("/usr/lib/pulseaudio/libgcc_s.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libgcc_s.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=40963, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0000E\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 110592, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6d4b000
mmap2(0xb6d64000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x9000) = 0xb6d64000
close(3)                                = 0
mprotect(0xb6f65000, 8192, PROT_READ)   = 0
mprotect(0xb6edb000, 4096, PROT_READ)   = 0
mprotect(0xb6e86000, 4096, PROT_READ)   = 0
mprotect(0xb6e11000, 4096, PROT_READ)   = 0
mprotect(0xb6df9000, 4096, PROT_READ)   = 0
mprotect(0xb6d90000, 4096, PROT_READ)   = 0
mprotect(0xb6d78000, 4096, PROT_READ)   = 0
mprotect(0xb6d64000, 4096, PROT_READ)   = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_ACCERR, si_addr=0x44e250} ---
+++ killed by SIGSEGV +++
Segmentation fault

Two possibilities:

NEON optimizations are enabled and being miscompiled because of the architecture.

Bad toolchain is used. arm_cortex-a9_vfpv3 turned to arm_cortex-a9_vfpv3-d16 to fix such a thing.

I would update TurrisOS to one of the testing branches first to see if that fixes it.