[Ffmpeg-devel] [BUG] Crash in has_altivec()

Luca Abeni lucabe72
Sat Mar 25 12:42:29 CET 2006


Hi all,

I noticed that current CVS crashes on my iBook when trying to understand
if the processor has altivec (I do not think it has).
This happens on Debian 3.1, with gcc 3.3.5.

How to reproduce:
output_example test.y4m
ffmpeg -i test.y4m test.mpg

More info:
luca at utopia:~$ gcc -v
Reading specs from /usr/lib/gcc-lib/powerpc-linux/3.3.5/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --enable-__cxa_atexit --with-system-zlib --enable-nls --without-included-gettext --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc --disable-multilib powerpc-linux
Thread model: posix
gcc version 3.3.5 (Debian 1:3.3.5-13)
luca at utopia:~$ cat /proc/cpuinfo 
cpu             : 750CX
temperature     : 11-13 C (uncalibrated)
clock           : 499MHz
revision        : 34.21 (pvr 0008 2215)
bogomips        : 996.14
machine         : PowerBook4,1
motherboard     : PowerBook4,1 MacRISC2 MacRISC Power Macintosh
L2 cache        : 256K unified
memory          : 128MB
pmac-generation : NewWorld

gdb ./ffmpeg_g 
GNU gdb 6.3-debian
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "powerpc-linux"...Using host libthread_db library "/lib/libthread_db.so.1".

(gdb) run -i test.y4m test.mpg
Starting program: /tmp/ffmpeg/ffmpeg_g -i test.y4m test.mpg
FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard
  configuration:  
  libavutil version: 49.0.0
  libavcodec version: 51.8.0
  libavformat version: 50.4.0
  built on Mar 25 2006 12:24:48, gcc: 3.3.5 (Debian 1:3.3.5-13)
Input #0, yuv4mpegpipe, from 'test.y4m':
  Duration: N/A, bitrate: N/A
  Stream #0.0, 25.00 fps(r): Video: rawvideo, yuv420p, 352x288
File 'test.mpg' already exists. Overwrite ? [y/N] y
Output #0, mpeg, to 'test.mpg':
  Stream #0.0, 25.00 fps(c): Video: mpeg1video, yuv420p, 352x288, q=2-31, 200 kb/s
Stream mapping:
  Stream #0.0 -> #0.0

Program received signal SIGILL, Illegal instruction.
0x10261fcc in has_altivec () at ppc/dsputil_altivec.c:1624
1624    {
(gdb) bt
#0  0x10261fcc in has_altivec () at ppc/dsputil_altivec.c:1624
#1  0x10264d4c in dsputil_h264_init_ppc (c=0x1037c920, avctx=0x10260fec) at ppc/dsputil_h264_altivec.c:233
#2  0x10260fec in dsputil_init_ppc (c=0x1037c920, avctx=0x10373ac0) at ppc/dsputil_ppc.c:259
#3  0x100a62c8 in dsputil_init (c=0x1037c920, avctx=0x10373ac0) at dsputil.c:4077
#4  0x10079934 in MPV_common_init (s=0x1037c0d0) at mpegvideo.c:656
#5  0x1007ad3c in MPV_encode_init (avctx=0x10373ac0) at mpegvideo.c:1286
#6  0x10178eb0 in encode_init (avctx=0x10373ac0) at mpeg12.c:224
#7  0x10076ac0 in avcodec_open (avctx=0x10373ac0, codec=0x102fe538) at utils.c:869
#8  0x1000f798 in av_encode (output_files=0x10304fe8, nb_output_files=1, input_files=0x10304ef8, nb_input_files=1, stream_maps=0x1037bf90, 
    nb_stream_maps=0) at ffmpeg.c:1864
#9  0x1000df24 in main (argc=4, argv=0x10300000) at ffmpeg.c:4271
(gdb) disass $pc-32 $pc+32
Dump of assembler code from 0x10261fac to 0x10261fec:
0x10261fac <put_no_rnd_pixels16_xy2_altivec+248>:       lwz     r0,28(r1)
0x10261fb0 <put_no_rnd_pixels16_xy2_altivec+252>:       mtvrsave r0
0x10261fb4 <put_no_rnd_pixels16_xy2_altivec+256>:       addi    r1,r1,32
0x10261fb8 <put_no_rnd_pixels16_xy2_altivec+260>:       blr
0x10261fbc <has_altivec+0>:     stwu    r1,-448(r1)
0x10261fc0 <has_altivec+4>:     li      r10,16
0x10261fc4 <has_altivec+8>:     li      r9,32
0x10261fc8 <has_altivec+12>:    li      r8,48
0x10261fcc <has_altivec+16>:    stvx    v20,r1,r10
0x10261fd0 <has_altivec+20>:    li      r7,64
0x10261fd4 <has_altivec+24>:    stvx    v21,r1,r9
0x10261fd8 <has_altivec+28>:    li      r6,80
0x10261fdc <has_altivec+32>:    stvx    v22,r1,r8
0x10261fe0 <has_altivec+36>:    li      r4,96
0x10261fe4 <has_altivec+40>:    mfvrsave r8
0x10261fe8 <has_altivec+44>:    stvx    v23,r1,r7
End of assembler dump.
(gdb) info all-registers
r0             0x10222c5c       270675036
r1             0x7ffff030       2147479600
r2             0x30012ed8       805383896
r3             0x1037c920       272091424
r4             0x10260fec       270929900
r5             0x100a62c8       269116104
r6             0x100f0000       269418496
r7             0x10220000       270663680
r8             0x30     48
r9             0x20     32
r10            0x10     16
r11            0x10220000       270663680
r12            0x1022349c       270677148
r13            0x1030c2b0       271631024
r14            0x0      0
r15            0x0      0
r16            0x10304ef8       271601400
r17            0x10304fe8       271601640
r18            0x10372650       272049744
r19            0x1      1
r20            0x1      1
r21            0x0      0
r22            0x1037bf90       272088976
r23            0x1037bec0       272088768
r24            0x10373ac0       272054976
r25            0x1      1
r26            0x1037c0d0       272089296
r27            0x1      1
r28            0x4      4
r29            0x0      0
r30            0x10373ac0       272054976
r31            0x1037c920       272091424
f0             -nan(0x8000082064000)    (raw 0xfff8000082064000)
f1             0        (raw 0x0000000000000000)
f2             0        (raw 0x0000000000000000)
f3             0        (raw 0x0000000000000000)
f4             0        (raw 0x0000000000000000)
f5             0        (raw 0x0000000000000000)
f6             0        (raw 0x0000000000000000)
f7             25       (raw 0x4039000000000000)
f8             4503601774854169 (raw 0x4330000080000019)
f9             4503601774854145 (raw 0x4330000080000001)
f10            0.5      (raw 0x3fe0000000000000)
f11            0        (raw 0x0000000000000000)
f12            -0.80000001192092896     (raw 0xbfe99999a0000000)
f13            0        (raw 0x0000000000000000)
f14            0        (raw 0x0000000000000000)
f15            0        (raw 0x0000000000000000)
f16            0        (raw 0x0000000000000000)
f17            0        (raw 0x0000000000000000)
f18            0        (raw 0x0000000000000000)
f19            0        (raw 0x0000000000000000)
f20            0        (raw 0x0000000000000000)
f21            0        (raw 0x0000000000000000)
f22            0        (raw 0x0000000000000000)
f23            0        (raw 0x0000000000000000)
f24            0        (raw 0x0000000000000000)
f25            0        (raw 0x0000000000000000)
f26            0        (raw 0x0000000000000000)
f27            0        (raw 0x0000000000000000)
f28            0        (raw 0x0000000000000000)
f29            0        (raw 0x0000000000000000)
f30            0        (raw 0x0000000000000000)
f31            0        (raw 0x0000000000000000)
pc             0x10261fcc       270933964
ps             0x8d032  577586
cr             0x840444e2       2214872290
lr             0x10264d4c       270945612
ctr            0x1007ad04       268938500
xer            0x20000000       536870912
fpscr          0x82062000       2181439488
vr0            {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0,0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr1            {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr2            {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr3            {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr4            {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr5            {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr6            {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr7            {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr8            {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr9            {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr10           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr11           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr12           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr13           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr14           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr15           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr16           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr17           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr18           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0,0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr19           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr20           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr21           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr22           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr23           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr24           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr25           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr26           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr27           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr28           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr29           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr30           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vr31           {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
vscr           0x0      0
vrsave         0x0      0

More info on request.

				Luca





More information about the ffmpeg-devel mailing list