SIGILL on i386

Bug #1793202 reported by errors.ubuntu.com bug bridge on 2018-09-18
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Mixxx
Undecided
Unassigned
mixxx (Ubuntu)
Undecided
Unassigned

Bug Description

The Ubuntu Error Tracker has been receiving reports about a problem regarding mixxx. This problem was most recently seen with package version 2.0.0~dfsg-7.1, the problem page at https://errors.ubuntu.com/problem/93e4b76250e8d6118161e71aedb269dc95ef67e4 contains more details, including versions of packages affected, stacktrace or traceback, and individual crash reports.
If you do not have access to the Ubuntu Error Tracker and are a software developer, you can request it at http://forms.canonical.com/reports/.

RJ Skerry-Ryan (rryan) wrote :

This has been reported 75 times in the last year according to errors.ubuntu.com.

Notably, almost all the CPUs do not have SSE2, and we build with SSE2. So that's (SSE2 instructions) probably where the SIGILL is coming from. The stack trace is in the static initialization phase right when mixxx starts up.

I don't know if we care, but it's worth noting that happens.

summary: - /usr/bin/mixxx:4:mixxx::track::io::Bpm::SharedCtor:mixxx::track::io::protobuf_AddDesc_proto_2fbeats_2eproto:__libc_csu_init:__libc_start_main:_start
+ SIGILL on i386
Changed in mixxx:
status: New → Confirmed
Daniel Schürmann (daschuer) wrote :

Instead of crashing, we can warn the user and suggest to build Mixxx build on their own.

RJ Skerry-Ryan (rryan) wrote :

What would be the best way to do that? Since this crash is in static initialization, we don't have the chance to add a check in main(). If we had a wrapper script that runs mixxx we could do it there, but I'm not sure that's the best way?

It looks like since Artful, there is an i386 universe package called "sse2-support"
https://packages.ubuntu.com/bionic/sse2-support
that prevents installation if the user's CPU doesn't have SSE2. That seems like a good solution?

Daniel Schürmann (daschuer) wrote :

Sounds like a good solution.
How does this work on none x86 architectures?

Daniel Schürmann (daschuer) wrote :

The same issue may effect our other 32 bit targets. Do we reach main() with sse2 enabled and msvc?

Is there a way to not use sse2 during the initialisation before main? This would allow us to check for sse2 at runtime without any pain.

Or we may just ignore this issue and wait until all non sse2 CPUs have died. ...

If we enforce SSE2 in our own init code, people without SSE2 couldn't build Mixxx without hacking it. So I second having our Ubuntu package depend on the sse2-support package. Or if there are many non-SSE2 users, should we be building our x86 package without it?

Daniel Schürmann (daschuer) wrote :

With sse2 support I am able to use Mixxx on my old Netbook. If we remove it, we have a regression for these devices in favour of older devices which may not be usable anyway.

If we decide to add SEE enforcement code into Mixxx, it will be conditional for sse2 builds.
So there is no hacking required to build non sse2 version. We have already the optimize=native flag, which should do the trick for all targets.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers