Opened 10 years ago

Closed 10 years ago

#3370 closed defect (invalid)

SIGILL (Illegal instruction) when transcoding with libvpx-vp9

Reported by: Bernardo Owned by:
Priority: important Component: undetermined
Version: git-master Keywords: libvpx crash
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:
I updated to latest version of libvpx and to test VP9 transcoding.
With any video I try, the process receive a SIGILL (Illegal instruction) and aborts immediately.

How to reproduce:

$ gdb --args ~/ffmpeg/ffmpeg/ffmpeg_g -i CCD.mp4 -c:v vp9 CCD.webm
GNU gdb (GDB) 7.6.1-ubuntu
Copyright (C) 2013 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 "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/jb/ffmpeg/ffmpeg/ffmpeg_g...done.
(gdb) r
Starting program: /home/jb/ffmpeg/ffmpeg/ffmpeg_g -i CCD.mp4 -c:v vp9 CCD.webm
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
ffmpeg version N-49452-ge9314f1 Copyright (c) 2000-2014 the FFmpeg developers
  built on Feb  3 2014 15:01:17 with gcc 4.8 (Ubuntu/Linaro 4.8.1-10ubuntu9)
  configuration: --enable-gpl --enable-libass --enable-libfaac --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libspeex --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-x11grab --enable-libx264 --enable-nonfree --enable-version3 --enable-libfreetype --enable-shared
  libavutil      52. 63.100 / 52. 63.100
  libavcodec     55. 49.101 / 55. 49.101
  libavformat    55. 29.101 / 55. 29.101
  libavdevice    55.  7.100 / 55.  7.100
  libavfilter     4.  1.102 /  4.  1.102
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'CCD.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2012-05-12 20:34:23
  Duration: 00:04:26.00, start: 0.000000, bitrate: 1299 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1145 kb/s, 29.97 fps, 29.97 tbr, 60k tbn, 59.94 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 151 kb/s (default)
    Metadata:
      creation_time   : 2012-05-12 20:34:23
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
[New Thread 0x7fffec9c3700 (LWP 11550)]
[New Thread 0x7fffec1c2700 (LWP 11551)]
[New Thread 0x7fffeb9c1700 (LWP 11552)]
[New Thread 0x7fffeb1c0700 (LWP 11553)]
[New Thread 0x7fffea9bf700 (LWP 11554)]
[New Thread 0x7fffea1be700 (LWP 11555)]
[New Thread 0x7fffe99bd700 (LWP 11556)]
[New Thread 0x7fffe91bc700 (LWP 11557)]
[New Thread 0x7fffe89bb700 (LWP 11558)]
[New Thread 0x7fffe81ba700 (LWP 11559)]
[libvpx-vp9 @ 0x6f54c0] v1.3.0-907-gc0856b9
[New Thread 0x7fffdf759700 (LWP 11560)]
[New Thread 0x7fffdef58700 (LWP 11561)]
[New Thread 0x7fffde757700 (LWP 11562)]
[New Thread 0x7fffddf56700 (LWP 11563)]
[New Thread 0x7fffdd755700 (LWP 11564)]
Output #0, webm, to 'CCD.webm':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    encoder         : Lavf55.29.101
    Stream #0:0(und): Video: vp9 (libvpx-vp9), yuv420p, 1280x720, q=-1--1, 200 kb/s, 1k tbn, 29.97 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: vorbis (libvorbis), 44100 Hz, stereo, fltp (default)
    Metadata:
      creation_time   : 2012-05-12 20:34:23
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libvpx-vp9)
  Stream #0:1 -> #0:1 (aac -> libvorbis)
Press [q] to stop, [?] for help

Program received signal SIGILL, Illegal instruction.
0x00007ffff2e63c77 in ?? () from /usr/local/lib/libvpx.so.1
(gdb) bt
#0  0x00007ffff2e63c77 in ?? () from /usr/local/lib/libvpx.so.1
#1  0x00007ffff2da8d44 in ?? () from /usr/local/lib/libvpx.so.1
#2  0x00007ffff2dc9a8b in ?? () from /usr/local/lib/libvpx.so.1
#3  0x00007ffff2dcca15 in ?? () from /usr/local/lib/libvpx.so.1
#4  0x00007ffff2dccf8b in ?? () from /usr/local/lib/libvpx.so.1
#5  0x00007ffff2dd32ce in ?? () from /usr/local/lib/libvpx.so.1
#6  0x00007ffff2d9ba32 in ?? () from /usr/local/lib/libvpx.so.1
#7  0x00007ffff2da3a55 in ?? () from /usr/local/lib/libvpx.so.1
#8  0x00007ffff2da5658 in ?? () from /usr/local/lib/libvpx.so.1
#9  0x00007ffff2dc2e06 in ?? () from /usr/local/lib/libvpx.so.1
#10 0x00007ffff2dc4dee in ?? () from /usr/local/lib/libvpx.so.1
#11 0x00007ffff2d8474c in ?? () from /usr/local/lib/libvpx.so.1
#12 0x00007ffff2cf3848 in vpx_codec_encode () from /usr/local/lib/libvpx.so.1
#13 0x00007ffff67c892c in ?? () from /usr/local/lib/libavcodec.so.55
#14 0x00007ffff692a9d2 in avcodec_encode_video2 () from /usr/local/lib/libavcodec.so.55
#15 0x000000000041de34 in do_video_out (in_picture=0x10c81a0, ost=0x6f7140, s=0x64a8a0) at ffmpeg.c:997
#16 reap_filters () at ffmpeg.c:1157
#17 0x0000000000407f27 in transcode_step () at ffmpeg.c:3373
#18 transcode () at ffmpeg.c:3416
#19 main (argc=<optimized out>, argv=<optimized out>) at ffmpeg.c:3596
(gdb) disass $pc-32,$pc+32
Dump of assembler code from 0x7ffff2e63c57 to 0x7ffff2e63c97:
   0x00007ffff2e63c57:	rex.B pshufw $0xe,%mm0,%mm7
   0x00007ffff2e63c5c:	pmaxsw %xmm7,%xmm8
   0x00007ffff2e63c61:	pshuflw $0xe,%xmm8,%xmm7
   0x00007ffff2e63c67:	pmaxsw %xmm7,%xmm8
   0x00007ffff2e63c6c:	pshuflw $0x1,%xmm8,%xmm7
   0x00007ffff2e63c72:	pmaxsw %xmm7,%xmm8
=> 0x00007ffff2e63c77:	pextrw $0x0,%xmm8,(%rdx)
   0x00007ffff2e63c7e:	retq   
   0x00007ffff2e63c7f:	mov    %r8,%rdi
   0x00007ffff2e63c82:	mov    %rcx,%rdx
   0x00007ffff2e63c85:	mov    0x30(%rsp),%rcx
   0x00007ffff2e63c8a:	lea    (%rdi,%rsi,2),%rdi
   0x00007ffff2e63c8e:	lea    (%rdx,%rsi,2),%rdx
   0x00007ffff2e63c92:	neg    %rsi
   0x00007ffff2e63c95:	pxor   %xmm7,%xmm7
End of assembler dump.
(gdb) info all-registers
rax            0x7ffff30e3298	140737271181976
rbx            0x7fffe6d1e020	140737065902112
rcx            0xa65440	10900544
rdx            0xa69460	10916960
rsi            0x0	0
rdi            0xa63420	10892320
rbp            0x7fffe6d1e020	0x7fffe6d1e020
rsp            0x7fffffffc338	0x7fffffffc338
r8             0xa67460	10908768
r9             0x7ffff309e5a0	140737270900128
r10            0x7fffe6d24110	140737065926928
r11            0x7ffff4e0f8ba	140737301772474
r12            0x7fffe6d24110	140737065926928
r13            0x7fffe42798c0	140737021188288
r14            0x7fffdcd318c0	140736898209984
r15            0x40	64
rip            0x7ffff2e63c77	0x7ffff2e63c77
eflags         0x10247	[ CF PF ZF IF RF ]
cs             0x33	51
ss             0x2b	43
ds             0x0	0
es             0x0	0
fs             0x0	0
gs             0x0	0
st0            -nan(0xff81ff81ff81ff81)	(raw 0xffffff81ff81ff81ff81)
st1            -nan(0x180018001800180)	(raw 0xffff0180018001800180)
st2            -nan(0xff81ff81ff81ff81)	(raw 0xffffff81ff81ff81ff81)
st3            -nan(0x180018001800180)	(raw 0xffff0180018001800180)
st4            -inf	(raw 0xffff0000000000000000)
st5            -nan(0x606060606060606)	(raw 0xffff0606060606060606)
st6            -nan(0x303030303030303)	(raw 0xffff0303030303030303)
st7            -nan(0x101010101010101)	(raw 0xffff0101010101010101)
fctrl          0x27f	639
fstat          0x0	0
ftag           0xaaaa	43690
fiseg          0x0	0
fioff          0x0	0
foseg          0x0	0
fooff          0x0	0
fop            0x0	0
xmm0           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x76, 0x4, 0x76, 0x4, 0x76, 0x4, 0x76, 0x4, 0x76, 0x4, 0x76, 0x4, 0x76, 0x4, 0x76, 0x4}, v8_int16 = {0x476, 0x476, 
    0x476, 0x476, 0x476, 0x476, 0x476, 0x476}, v4_int32 = {0x4760476, 0x4760476, 0x4760476, 0x4760476}, v2_int64 = {0x476047604760476, 0x476047604760476}, uint128 = 0x04760476047604760476047604760476}
xmm1           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0xad, 0x2, 0xad, 0x2, 0xad, 0x2, 0xad, 0x2, 0xad, 0x2, 0xad, 0x2, 0xad, 0x2, 0xad, 0x2}, v8_int16 = {0x2ad, 0x2ad, 
    0x2ad, 0x2ad, 0x2ad, 0x2ad, 0x2ad, 0x2ad}, v4_int32 = {0x2ad02ad, 0x2ad02ad, 0x2ad02ad, 0x2ad02ad}, v2_int64 = {0x2ad02ad02ad02ad, 0x2ad02ad02ad02ad}, uint128 = 0x02ad02ad02ad02ad02ad02ad02ad02ad}
xmm2           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x68, 0x8f, 0x68, 0x8f, 0x68, 0x8f, 0x68, 0x8f, 0x68, 0x8f, 0x68, 0x8f, 0x68, 0x8f, 0x68, 0x8f}, v8_int16 = {0x8f68, 
    0x8f68, 0x8f68, 0x8f68, 0x8f68, 0x8f68, 0x8f68, 0x8f68}, v4_int32 = {0x8f688f68, 0x8f688f68, 0x8f688f68, 0x8f688f68}, v2_int64 = {0x8f688f688f688f68, 0x8f688f688f688f68}, 
  uint128 = 0x8f688f688f688f688f688f688f688f68}
---Type <return> to continue, or q <return> to quit---
xmm3           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x24, 0x7, 0x24, 0x7, 0x24, 0x7, 0x24, 0x7, 0x24, 0x7, 0x24, 0x7, 0x24, 0x7, 0x24, 0x7}, v8_int16 = {0x724, 0x724, 
    0x724, 0x724, 0x724, 0x724, 0x724, 0x724}, v4_int32 = {0x7240724, 0x7240724, 0x7240724, 0x7240724}, v2_int64 = {0x724072407240724, 0x724072407240724}, uint128 = 0x07240724072407240724072407240724}
xmm4           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x40, 0x0, 0x40, 0x0, 0x40, 0x0, 0x40, 0x0, 0x40, 0x0, 0x40, 0x0, 0x40, 0x0, 0x40, 0x0}, v8_int16 = {0x40, 0x40, 
    0x40, 0x40, 0x40, 0x40, 0x40, 0x40}, v4_int32 = {0x400040, 0x400040, 0x400040, 0x400040}, v2_int64 = {0x40004000400040, 0x40004000400040}, uint128 = 0x00400040004000400040004000400040}
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 = {0x1, 0x0, 0x2, 0x0, 0x5, 0x0, 0x8, 0x0, 0x1, 0x0, 0x3, 0x0, 0x9, 0x0, 0xc, 0x0}, v8_int16 = {0x1, 0x2, 0x5, 0x8, 
    0x1, 0x3, 0x9, 0xc}, v4_int32 = {0x20001, 0x80005, 0x30001, 0xc0009}, v2_int64 = {0x8000500020001, 0xc000900030001}, uint128 = 0x000c0009000300010008000500020001}
xmm7           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x1, 0x1, 0x1, 
    0x1, 0x0, 0x1, 0x0}, v4_int32 = {0x10000, 0x10001, 0x1, 0x1}, v2_int64 = {0x1000100010000, 0x100000001}, uint128 = 0x00000001000000010001000100010000}
xmm8           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0}, v8_int16 = {0x1, 0x1, 0x1, 0x1, 
    0x1, 0x0, 0x1, 0x0}, v4_int32 = {0x10001, 0x10001, 0x1, 0x1}, v2_int64 = {0x1000100010001, 0x100000001}, uint128 = 0x00000001000000010001000100010001}
xmm9           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x20, 0xf0, 0x0 <repeats 14 times>}, v8_int16 = {0xf020, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0xf020, 
    0x0, 0x0, 0x0}, v2_int64 = {0xf020, 0x0}, uint128 = 0x0000000000000000000000000000f020}
xmm10          {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}
xmm11          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x4, 0x0, 0x7, 0x0, 0xb, 0x0, 0xe, 0x0, 0x6, 0x0, 0xa, 0x0, 0xd, 0x0, 0xf, 0x0}, v8_int16 = {0x4, 0x7, 0xb, 0xe, 
    0x6, 0xa, 0xd, 0xf}, v4_int32 = {0x70004, 0xe000b, 0xa0006, 0xf000d}, v2_int64 = {0xe000b00070004, 0xf000d000a0006}, uint128 = 0x000f000d000a0006000e000b00070004}
xmm12          {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}
xmm13          {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}
xmm14          {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}
xmm15          {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          0x1fa0	[ PE IM DM ZM OM UM PM ]

Change History (4)

comment:1 by Bernardo, 10 years ago

Somehow, using valgrind, the error does not occur (does it disable x86 specific code? because it runs at 0.2 fps)

comment:2 by Hendrik, 10 years ago

Did you report this to the developers of libvpx? The crash seems deeply in their code.

comment:3 by Bernardo, 10 years ago

I posted a bug report in the Webm project (http://code.google.com/p/webm/issues/detail?id=702)

comment:4 by Carl Eugen Hoyos, 10 years ago

Keywords: libvpx crash added; vp9 removed
Priority: normalimportant
Resolution: invalid
Status: newclosed

Please reopen if it turns out that this is a bug in FFmpeg.

Note: See TracTickets for help on using tickets.