[Pkg-alsa-devel] Bug#870396: alsa-lib: fix SIGSEGV on x32
Thorsten Glaser
t.glaser at tarent.de
Wed May 9 14:28:33 BST 2018
found 870396 1.1.6-1
thanks
Hi,
this issue unfortunately still persists and makes my sound-using
applications (mplayer, musescore, …) segfault.
Please find a rebased debdiff against the latest version attached,
for forwarding to upstream and applying in Debian. I confirm that
installing this (built on x32 and i386 since I have Multi-Arch)
fixes at least mplayer.
Thanks in advance,
//mirabilos
--
tarent solutions GmbH
Rochusstraße 2-4, D-53123 Bonn • http://www.tarent.de/
Tel: +49 228 54881-393 • Fax: +49 228 54881-235
HRB 5168 (AG Bonn) • USt-ID (VAT): DE122264941
Geschäftsführer: Dr. Stefan Barth, Kai Ebenrett, Boris Esser, Alexander Steeg
-------------- next part --------------
diff -Nru alsa-lib-1.1.6/debian/changelog alsa-lib-1.1.6/debian/changelog
--- alsa-lib-1.1.6/debian/changelog 2018-05-01 02:50:42.000000000 +0200
+++ alsa-lib-1.1.6/debian/changelog 2018-05-09 15:14:19.000000000 +0200
@@ -1,3 +1,10 @@
+alsa-lib (1.1.6-1+x32.1) unreleased; urgency=high
+
+ * Non-maintainer upload.
+ * Add patches fixing sound on x32. Closes: #870396
+
+ -- Thorsten Glaser <tg at mirbsd.de> Wed, 09 May 2018 15:14:19 +0200
+
alsa-lib (1.1.6-1) unstable; urgency=medium
* New upstream release.
diff -Nru alsa-lib-1.1.6/debian/patches/0009-fix-format-strings.patch alsa-lib-1.1.6/debian/patches/0009-fix-format-strings.patch
--- alsa-lib-1.1.6/debian/patches/0009-fix-format-strings.patch 1970-01-01 01:00:00.000000000 +0100
+++ alsa-lib-1.1.6/debian/patches/0009-fix-format-strings.patch 2018-05-09 15:13:21.000000000 +0200
@@ -0,0 +1,73 @@
+# DP: fix long vs. long long confusion when there is a 64-bit time_t
+# DP: on a 32-bit long system, such as all newer 32-bit architectures
+
+--- a/src/pcm/pcm.c
++++ b/src/pcm/pcm.c
+@@ -2257,11 +2257,11 @@ int snd_pcm_status_dump(snd_pcm_status_t
+ {
+ assert(status);
+ snd_output_printf(out, " state : %s\n", snd_pcm_state_name((snd_pcm_state_t) status->state));
+- snd_output_printf(out, " trigger_time: %ld.%06ld\n",
+- status->trigger_tstamp.tv_sec,
+- status->trigger_tstamp.tv_nsec / 1000);
+- snd_output_printf(out, " tstamp : %ld.%06ld\n",
+- status->tstamp.tv_sec, status->tstamp.tv_nsec / 1000);
++ snd_output_printf(out, " trigger_time: %lld.%06ld\n",
++ (long long)status->trigger_tstamp.tv_sec,
++ (long)status->trigger_tstamp.tv_nsec / 1000L);
++ snd_output_printf(out, " tstamp : %lld.%06ld\n",
++ (long long)status->tstamp.tv_sec, (long)status->tstamp.tv_nsec / 1000L);
+ snd_output_printf(out, " delay : %ld\n", (long)status->delay);
+ snd_output_printf(out, " avail : %ld\n", (long)status->avail);
+ snd_output_printf(out, " avail_max : %ld\n", (long)status->avail_max);
+--- a/test/latency.c
++++ b/test/latency.c
+@@ -325,12 +325,12 @@ void setscheduler(void)
+ printf("!!!Scheduler set to Round Robin with priority %i FAILED!!!\n", sched_param.sched_priority);
+ }
+
+-long timediff(snd_timestamp_t t1, snd_timestamp_t t2)
++long long timediff(snd_timestamp_t t1, snd_timestamp_t t2)
+ {
+- signed long l;
++ signed long long l;
+
+ t1.tv_sec -= t2.tv_sec;
+- l = (signed long) t1.tv_usec - (signed long) t2.tv_usec;
++ l = (signed long long) t1.tv_usec - (signed long long) t2.tv_usec;
+ if (l < 0) {
+ t1.tv_sec--;
+ l = 1000000 + l;
+@@ -682,10 +682,10 @@ int main(int argc, char *argv[])
+ snd_pcm_nonblock(phandle, !block ? 1 : 0);
+ if (ok) {
+ #if 1
+- printf("Playback time = %li.%i, Record time = %li.%i, diff = %li\n",
+- p_tstamp.tv_sec,
++ printf("Playback time = %lli.%i, Record time = %lli.%i, diff = %lli\n",
++ (long long)p_tstamp.tv_sec,
+ (int)p_tstamp.tv_usec,
+- c_tstamp.tv_sec,
++ (long long)c_tstamp.tv_sec,
+ (int)c_tstamp.tv_usec,
+ timediff(p_tstamp, c_tstamp));
+ #endif
+--- a/test/queue_timer.c
++++ b/test/queue_timer.c
+@@ -99,11 +99,11 @@ main(int argc ATTRIBUTE_UNUSED, char **a
+ normalize(&diffdiff);
+ prevdiff = diff;
+
+- fprintf(stderr, " real time: %12ld sec %8ld usec\nqueue time: %12ld sec %8ld usec\n diff: %12ld sec %8ld usec\n diffdiff: %12ld sec %8ld usec\n",
+- tv.tv_sec, tv.tv_usec,
+- (long)rtime->tv_sec, (long)rtime->tv_nsec / 1000,
+- diff.tv_sec, diff.tv_usec,
+- (long)diffdiff.tv_sec, (long)diffdiff.tv_usec);
++ fprintf(stderr, " real time: %12lld sec %8ld usec\nqueue time: %12lld sec %8ld usec\n diff: %12lld sec %8ld usec\n diffdiff: %12lld sec %8ld usec\n",
++ (long long)tv.tv_sec, (long)tv.tv_usec,
++ (long long)rtime->tv_sec, (long)rtime->tv_nsec / 1000,
++ (long long)diff.tv_sec, (long)diff.tv_usec,
++ (long long)diffdiff.tv_sec, (long)diffdiff.tv_usec);
+
+ if (diffdiff.tv_usec > 5000 ||
+ diffdiff.tv_usec < -5000) {
diff -Nru alsa-lib-1.1.6/debian/patches/0010-fix-testcase-typo.patch alsa-lib-1.1.6/debian/patches/0010-fix-testcase-typo.patch
--- alsa-lib-1.1.6/debian/patches/0010-fix-testcase-typo.patch 1970-01-01 01:00:00.000000000 +0100
+++ alsa-lib-1.1.6/debian/patches/0010-fix-testcase-typo.patch 2018-05-09 15:11:25.000000000 +0200
@@ -0,0 +1,13 @@
+# DP: fix an obvious typo
+
+--- a/test/latency.c
++++ b/test/latency.c
+@@ -673,7 +673,7 @@ int main(int argc, char *argv[])
+ printf("Capture:\n");
+ showstat(chandle, frames_in);
+ showinmax(in_max);
+- if (p_tstamp.tv_sec == p_tstamp.tv_sec &&
++ if (p_tstamp.tv_sec == c_tstamp.tv_sec &&
+ p_tstamp.tv_usec == c_tstamp.tv_usec)
+ printf("Hardware sync\n");
+ snd_pcm_drop(chandle);
diff -Nru alsa-lib-1.1.6/debian/patches/0011-distinguish-x32-from-amd64.patch alsa-lib-1.1.6/debian/patches/0011-distinguish-x32-from-amd64.patch
--- alsa-lib-1.1.6/debian/patches/0011-distinguish-x32-from-amd64.patch 1970-01-01 01:00:00.000000000 +0100
+++ alsa-lib-1.1.6/debian/patches/0011-distinguish-x32-from-amd64.patch 2018-05-09 15:11:25.000000000 +0200
@@ -0,0 +1,14 @@
+# DP: fix segmentation fault coming from this using amd64 assembly code
+# DP: on x32 systems
+
+--- a/src/pcm/pcm_dmix.c
++++ b/src/pcm/pcm_dmix.c
+@@ -142,7 +142,7 @@ static void dmix_server_free(snd_pcm_dir
+ #include "pcm_dmix_generic.c"
+ #if defined(__i386__)
+ #include "pcm_dmix_i386.c"
+-#elif defined(__x86_64__)
++#elif defined(__x86_64__) && !defined(__ILP32__)
+ #include "pcm_dmix_x86_64.c"
+ #else
+ #ifndef DOC_HIDDEN
diff -Nru alsa-lib-1.1.6/debian/patches/series alsa-lib-1.1.6/debian/patches/series
--- alsa-lib-1.1.6/debian/patches/series 2018-04-23 23:54:45.000000000 +0200
+++ alsa-lib-1.1.6/debian/patches/series 2018-05-09 15:11:44.000000000 +0200
@@ -5,3 +5,6 @@
#0005-Add-UCM-config-files-for-Nexus-5.patch
0006-Enabled-extended-namehints-in-alsa.conf.patch
0007-Add-a-configuration-for-tegra-alc5632-based-cards.patch
+0009-fix-format-strings.patch
+0010-fix-testcase-typo.patch
+0011-distinguish-x32-from-amd64.patch
More information about the Pkg-alsa-devel
mailing list