Recent MakeMKV releases hit SIGILL on Pentium III

Everything related to MakeMKV
Post Reply
Nii~~
Posts: 2
Joined: Mon Dec 28, 2015 5:18 pm

Recent MakeMKV releases hit SIGILL on Pentium III

Post by Nii~~ »

Exactly as the title says: MakeMKV is assuming the CPU has SSE2, and hits a SIGILL when it can't find it. Unfortunately this isn't just restricted to the Windows builds, as building MakeMKV for Linux shows the exact same problem; it's in the binary blob itself so the user can't recompile it with the CPU restrictions turned off.

My guess is that this is simply because the compiler used for the -bin package (or the project in toto) may have moved up to MSVC 2012 or higher (or the addition of -msse2 flagging on Linux), which tunes for SSE2 (/ARCH:SSE2) unless that's explicitly turned off/back down to /ARCH:SSE or /ARCH:IA32. For 64-bit builds this isn't a problem because x86-64 requires SSE2 be present in the CPU, but it's obviously not a guarantee for 32-bit.

I'm not sure of the exact version that this showed up in, but v1.9.1 works (or used to; the drive's keys have been updated since then so while MakeMKV v1.9.1 will still launch the GUI, it can't work with Blu-rays) while v1.9.7 and v1.9.8 throw the SIGILL.

This actually makes the System Requirements on the Download page misleading, because the kinds of systems at the low end (WinXP, 512MBs, etc.) are at a much higher likelihood of running processors old enough to be subject to this problem. And general practices for 32-bit Linux distributions are to provide binaries without specific CPU tuning to avoid problems like this.
electronicsguy
Posts: 47
Joined: Wed May 01, 2013 10:42 pm

Re: Recent MakeMKV releases hit SIGILL on Pentium III

Post by electronicsguy »

Nii~~ wrote: And general practices for 32-bit Linux distributions are to provide binaries without specific CPU tuning to avoid problems like this.
and general practices int he windows world, to avoid problems like these, is to use relatively modern machines :)
mike admin
Posts: 4075
Joined: Wed Nov 26, 2008 2:26 am
Contact:

Re: Recent MakeMKV releases hit SIGILL on Pentium III

Post by mike admin »

Nii~~ wrote:Exactly as the title says: MakeMKV is assuming the CPU has SSE2, and hits a SIGILL when it can't find it. Unfortunately this isn't just restricted to the Windows builds, as building MakeMKV for Linux shows the exact same problem; it's in the binary blob itself so the user can't recompile it with the CPU restrictions turned off.

My guess is that this is simply because the compiler used for the -bin package (or the project in toto) may have moved up to MSVC 2012 or higher (or the addition of -msse2 flagging on Linux), which tunes for SSE2 (/ARCH:SSE2) unless that's explicitly turned off/back down to /ARCH:SSE or /ARCH:IA32. For 64-bit builds this isn't a problem because x86-64 requires SSE2 be present in the CPU, but it's obviously not a guarantee for 32-bit.

I'm not sure of the exact version that this showed up in, but v1.9.1 works (or used to; the drive's keys have been updated since then so while MakeMKV v1.9.1 will still launch the GUI, it can't work with Blu-rays) while v1.9.7 and v1.9.8 throw the SIGILL.

This actually makes the System Requirements on the Download page misleading, because the kinds of systems at the low end (WinXP, 512MBs, etc.) are at a much higher likelihood of running processors old enough to be subject to this problem. And general practices for 32-bit Linux distributions are to provide binaries without specific CPU tuning to avoid problems like this.
I do not believe either build requires SSE2, please send the crash dumps per instructions at /onlinehelp/dump.html
Nii~~
Posts: 2
Joined: Mon Dec 28, 2015 5:18 pm

Re: Recent MakeMKV releases hit SIGILL on Pentium III

Post by Nii~~ »

Windows XP crashdump, v1.9.8:
http://www.mediafire.com/download/pe019 ... _winxp.zip


GDB stack trace, Ubuntu 15.10:

Code: Select all

[~:$] gdb makemkvcon
GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from makemkvcon...(no debugging symbols found)...done.

(gdb) r
Starting program: /usr/bin/makemkvcon 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".

Program received signal SIGILL, Illegal instruction.
0x08059f85 in ?? ()
(gdb) bt
#0  0x08059f85 in ?? ()
#1  0x0820c35e in ?? ()
#2  0x0820c554 in ?? ()
#3  0x080617b3 in ?? ()
#4  0x080618e7 in ?? ()
#5  0x0804d409 in ?? ()
#6  0xb67a472e in __libc_start_main (main=0x804d3d0, argc=1, argv=0xbffff314, 
    init=0x808f2f0, fini=0x808f360, rtld_fini=0xb7feb210 <_dl_fini>, 
    stack_end=0xbffff30c) at libc-start.c:289
#7  0x0804e033 in ?? ()

(gdb) disass $pc-32,$pc+32
Dump of assembler code from 0x8059f65 to 0x8059fa5:
   0x08059f65:	and    %al,%bh
   0x08059f67:	inc    %esp
   0x08059f68:	and    $0x8,%al
   0x08059f6a:	add    %al,(%eax)
   0x08059f6c:	add    %al,(%eax)
   0x08059f6e:	movl   $0x0,0x4(%esp)
   0x08059f76:	mov    %ebx,(%esp)
   0x08059f79:	call   0x804cb30 <sem_init@plt>
   0x08059f7e:	movl   $0x0,0x10(%ebx)
=> 0x08059f85:	mfence 
   0x08059f88:	cmp    $0x1,%eax
   0x08059f8b:	sbb    %eax,%eax
   0x08059f8d:	not    %eax
   0x08059f8f:	add    $0x18,%esp
   0x08059f92:	pop    %ebx
   0x08059f93:	ret    
   0x08059f94:	sub    $0x1c,%esp
   0x08059f97:	mov    0x20(%esp),%eax
   0x08059f9b:	mov    %eax,(%esp)
   0x08059f9e:	call   0x804c570 <sem_destroy@plt>
   0x08059fa3:	xor    %eax,%eax
End of assembler dump.

(gdb) info all-registers
eax            0x0	0
ecx            0xb6961000	-1231679488
edx            0x854afa4	139767716
ebx            0x854afa4	139767716
esp            0xbffff120	0xbffff120
ebp            0xbffff278	0xbffff278
esi            0x1	1
edi            0xbffff314	-1073745132
eip            0x8059f85	0x8059f85
eflags         0x210256	[ PF AF ZF IF RF ID ]
cs             0x73	115
ss             0x7b	123
ds             0x7b	123
es             0x7b	123
fs             0x0	0
gs             0x33	51
st0            0	(raw 0x00000000000000000000)
st1            0	(raw 0x00000000000000000000)
st2            0	(raw 0x00000000000000000000)
st3            0	(raw 0x00000000000000000000)
st4            0	(raw 0x00000000000000000000)
st5            0	(raw 0x00000000000000000000)
st6            0	(raw 0x00000000000000000000)
st7            0	(raw 0x00000000000000000000)
fctrl          0x37f	895
fstat          0x0	0
ftag           0xffff	65535
fiseg          0x73	115
fioff          0xb667b9e8	-1234716184
foseg          0x7b	123
fooff          0xb6784c08	-1233630200
fop            0x598	1432
xmm0           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, 
  v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, 
  uint128 = 0x00000000000000000000000000000000}
xmm1           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, 
  v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, 
  uint128 = 0x00000000000000000000000000000000}
xmm2           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, 
  v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, 
  uint128 = 0x00000000000000000000000000000000}
xmm3           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, 
  v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, 
  uint128 = 0x00000000000000000000000000000000}
xmm4           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, 
  v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, 
  uint128 = 0x00000000000000000000000000000000}
xmm5           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, 
  v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, 
  uint128 = 0x00000000000000000000000000000000}
xmm6           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, 
  v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, 
  uint128 = 0x00000000000000000000000000000000}
xmm7           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, 
  v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, 
  uint128 = 0x00000000000000000000000000000000}
mxcsr          0x1f80	[ IM DM ZM OM UM PM ]
mm0            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0, 
    0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm1            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0, 
    0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm2            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0, 
    0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm3            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0, 
    0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm4            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0, 
    0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm5            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0, 
    0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm6            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0, 
    0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm7            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0, 
    0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}

(gdb) 
The output of 'cat /proc/cpuinfo':

Code: Select all

processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 8
model name	: Celeron (Coppermine)
stepping	: 10
microcode	: 0x1
cpu MHz		: 1000.046
cache size	: 128 KB
physical id	: 0
siblings	: 1
core id		: 0
cpu cores	: 1
apicid		: 0
initial apicid	: 0
fdiv_bug	: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 2
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 mmx fxsr sse
bugs		:
bogomips	: 2000.09
clflush size	: 32
cache_alignment	: 32
address sizes	: 36 bits physical, 32 bits virtual
power management:
mfence is shown to be used in the gdb dump, and according to this patch sent to qemu in 2011, that instruction is only available with SSE2 and higher:
https://lists.gnu.org/archive/html/qemu ... 00018.html

Also a similar thread on the Debian mailing list for libdispatch:
https://bugs.debian.org/cgi-bin/bugrepo ... bug=660806
mike admin
Posts: 4075
Joined: Wed Nov 26, 2008 2:26 am
Contact:

Re: Recent MakeMKV releases hit SIGILL on Pentium III

Post by mike admin »

It IS a bug. Will be fixed in 1.9.10
Post Reply