[x264-devel] Re: [BUG] bus error on Solaris
Christian Bienia
cbienia at CS.Princeton.EDU
Thu Oct 5 06:26:46 CEST 2006
Hello Loren,
> > I'm getting bus errors on Solaris/Sparc:
> >
> > x264 -o eledream.264 eledream_640x360.yuv 640x360
> > x264 [warning]: width or height not divisible by 16 (640x360),
> > compression will suffer.
> > x264 [info]: using cpu capabilities
> > Bus Error (core dumped)
> >
> > Is this a known error?
>
> No. Bus Error usually signifies an unaligned memory access. But PPC has
> the same restrictions on alignment of memory, and as far as I know x264 is
> working on PPC.
> So please provide a backtrace as http://ffmpeg.mplayerhq.hu/bugreports.html.
Here's a more detailed description:
(gdb) r -o eledream.264 eledream_640x360_32.yuv
Starting program:
/home/cbienia/labhome/splash3/bench/media/x264/inst/sparc-sola
ris.gcc-debug/bin/x264 -o eledream.264 eledream_640x360_32.yuv
warning: Lowest section in /lib/libpthread.so.1 is .dynamic at 00000074
x264 [info]: file name gives 640x360
x264 [warning]: width or height not divisible by 16 (640x360),
compression will
suffer.
x264 [info]: using cpu capabilities
Program received signal SIGSEGV, Segmentation fault.
0x000477f0 in x264_mb_analyse_inter_p8x8 (h=0x389940, a=0x1)
at encoder/analyse.c:1027
1027 *(uint64_t*)mvc[0] = *(uint64_t*)a->l0.me16x16.mv;
(gdb) bt
#0 0x000477f0 in x264_mb_analyse_inter_p8x8 (h=0x389940, a=0x1)
at encoder/analyse.c:1027
#1 0x0004bb64 in x264_macroblock_analyse (h=0x389940)
at encoder/analyse.c:2041
#2 0x0001d640 in x264_slice_write (h=0x389940) at
encoder/encoder.c:1050
#3 0x0001e818 in x264_encoder_encode (h=0x389940, pp_nal=0xffbff7ec,
pi_nal=0xffbff7e8, pic_in=0xffbff8e0, pic_out=0xffbff7f0)
at encoder/encoder.c:1183
#4 0x000143a8 in Encode_frame (h=0x389940, hout=0x388f50,
pic=0xffbff8e0)
at x264.c:702
#5 0x00014654 in Encode (param=0xffbff9a0, opt=0xffbff98c) at
x264.c:788
#6 0x00013214 in main (argc=Variable "argc" is not available.
) at x264.c:110
(gdb) disass $pc-32 $pc+32
Dump of assembler code from 0x477d0 to 0x47810:
0x000477d0 <x264_mb_analyse_inter_p8x8+220>: st %g2, [ %fp + -20 ]
0x000477d4 <x264_mb_analyse_inter_p8x8+224>: mov 0xd, %g2
0x000477d8 <x264_mb_analyse_inter_p8x8+228>: sethi %hi(0x1c00), %g1
0x000477dc <x264_mb_analyse_inter_p8x8+232>: or %g1, 0x26c, %g1
! 0x1e6c
0x000477e0 <x264_mb_analyse_inter_p8x8+236>: st %g2, [ %i0 + %g1 ]
0x000477e4 <x264_mb_analyse_inter_p8x8+240>: ld [ %fp + -20 ], %g3
0x000477e8 <x264_mb_analyse_inter_p8x8+244>: st %g3, [ %fp + -28 ]
0x000477ec <x264_mb_analyse_inter_p8x8+248>: ld [ %fp + 0x48 ], %g1
0x000477f0 <x264_mb_analyse_inter_p8x8+252>: ldd [ %g1 + 0x1b8 ],
%g2
0x000477f4 <x264_mb_analyse_inter_p8x8+256>: std %g2, [ %o4 + %g4 ]
0x000477f8 <x264_mb_analyse_inter_p8x8+260>: clr %l7
0x000477fc <x264_mb_analyse_inter_p8x8+264>: clr %i2
0x00047800 <x264_mb_analyse_inter_p8x8+268>: add %g1, 0x444, %g2
0x00047804 <x264_mb_analyse_inter_p8x8+272>: st %g2, [ %fp + -32 ]
0x00047808 <x264_mb_analyse_inter_p8x8+276>: sll %i3, 2, %g1
0x0004780c <x264_mb_analyse_inter_p8x8+280>: add %g1, %i0, %g1
End of assembler dump.
(gdb) info all-registers
g0 0x0 0
g1 0xffbfd244 -4206012
g2 0xd 13
g3 0xffbfd408 -4205560
g4 0x0 0
g5 0xffbfd404 -4205564
g6 0x0 0
g7 0xff3a2000 -12967936
o0 0x0 0
o1 0x0 0
o2 0x2800 10240
o3 0x2c12 11282
o4 0xffbfd408 -4205560
o5 0x0 0
sp 0xffbfd138 0xffbfd138
o7 0x47790 292752
l0 0xffbfd244 -4206012
l1 0x111 273
l2 0x1 1
l3 0x0 0
l4 0x1e68 7784
l5 0x0 0
l6 0x27 39
l7 0x8 8
i0 0x389940 3709248
i1 0x1 1
i2 0x8d9c0 580032
i3 0x0 0
i4 0x38bcc0 3718336
i5 0x38bce0 3718368
fp 0xffbfd1c0 0xffbfd1c0
i7 0x4bb5c 310108
f0 1.87499988 (raw 0x3fefffff)
f1 -2.65845599e+36 (raw 0xfc000000)
f2 7.74658966 (raw 0x40f7e410)
f3 0 (raw 0x00000000)
f4 1.73621655 (raw 0x3fde3c58)
f5 0 (raw 0x00000000)
f6 176 (raw 0x43300000)
f7 0 (raw 0x00000000)
f8 -nan(0x3fc800) (raw 0xffbfc800)
f9 -nan(0x3ff5b0) (raw 0xffbff5b0)
f10 1.2779842e-41 (raw 0x000023a0)
f11 1.0235084e-41 (raw 0x00001c88)
f12 0 (raw 0x00000000)
f13 26 (raw 0x41d00000)
f14 379.604614 (raw 0x43bdcd64)
f15 -nan(0x7fffff) (raw 0xffffffff)
f16 -2.6875 (raw 0xc02c0000)
f17 0 (raw 0x00000000)
f18 27.9999981 (raw 0x41dfffff)
f19 -nan(0x400000) (raw 0xffc00000)
f20 7.74658585 (raw 0x40f7e408)
f21 5.79355938e+29 (raw 0x70ea0000)
f22 1.8696413 (raw 0x3fef5068)
f23 1.08420217e-19 (raw 0x20000000)
f24 0 (raw 0x00000000)
f25 0 (raw 0x00000000)
f26 1.34701633 (raw 0x3fac6b08)
f27 -1.45662792e+14 (raw 0xd7047ac3)
f28 1.79828668 (raw 0x3fe62e42)
f29 -1.66303904e+38 (raw 0xfefa39ef)
f30 1.75 (raw 0x3fe00000)
f31 0 (raw 0x00000000)
y 0x0 0
psr 0xfe401005 -29356027
wim 0x0 0
tbr 0x0 0
pc 0x477f0 0x477f0 <x264_mb_analyse_inter_p8x8+252>
npc 0x477f4 0x477f4 <x264_mb_analyse_inter_p8x8+256>
fsr 0x821 2081
csr 0x0 0
d0 0.9999999925494194 (raw 0x3feffffffc000000)
d2 97857 (raw 0x40f7e41000000000)
d4 0.47243309020996094 (raw 0x3fde3c5800000000)
d6 4503599627370496 (raw 0x4330000000000000)
d8 -2.231756341646826e+307 (raw 0xffbfc800ffbff5b0)
d10 1.9352601617211939e-310 (raw 0x000023a000001c88)
d12 5.4552284372227338e-315 (raw 0x0000000041d00000)
d14 2.1474836479999997e+18 (raw 0x43bdcd64ffffffff)
d16 -14 (raw 0xc02c000000000000)
d18 2147483647 (raw 0x41dfffffffc00000)
d20 97856.52756690979 (raw 0x40f7e40870ea0000)
d22 0.9785652756690979 (raw 0x3fef506820000000)
d24 0 (raw 0x0000000000000000)
d26 0.055504108664754102 (raw 0x3fac6b08d7047ac3)
d28 0.69314718055994529 (raw 0x3fe62e42fefa39ef)
d30 0.5 (raw 0x3fe0000000000000)
I also checked the value of a, and it looks very odd:
(gdb) print a
$1 = (x264_mb_analysis_t *) 0x1
mvc seems to be fine:
(gdb) print mvc
$2 = (int (*)[2]) 0xffbfd408
So I made another run and had an eye on x264_mb_analyse_inter_p8x8 and
the variable a:
(gdb) break x264_mb_analyse_inter_p8x8
Breakpoint 1 at 0x476fc: file encoder/analyse.c, line 1015.
(gdb) r -o eledream.264 eledream_640x360_32.yuv
[SNIP]
Breakpoint 1, x264_mb_analyse_inter_p8x8 (h=0x389940, a=0xffbfd244)
at encoder/analyse.c:1015
1015 const int i_ref = a->l0.me16x16.i_ref;
(gdb) watch a
Watchpoint 2: a
(gdb) print a
$1 = (x264_mb_analysis_t *) 0xffbfd244
(gdb) c
Continuing.
Watchpoint 2: a
Old value = (x264_mb_analysis_t *) 0xffbfd244
New value = (x264_mb_analysis_t *) 0x1
0x000a7fec in _PROCEDURE_LINKAGE_TABLE_ ()
(gdb)
Some googling revealed that the PLT is used to indirectly invoke
functions from shared libs. The x264 binary on my system uses the
following libs:
ldd x264
libm.so.2 => /lib/libm.so.2
libpthread.so.1 => /lib/libpthread.so.1
libc.so.1 => /lib/libc.so.1
/platform/SUNW,Sun-Fire-T200/lib/libc_psr.so.1
The whole thing is very odd - the error occurs between line 1015 (first
reference of a, works fine) and line 1027 (the segfault). Unfortunately
I couldn't find out anything else. :-(
I furthermore get the following warnings when I compile x264, which
might or might not be related:
common/pixel.c: In function 'x264_pixel_ssim_wxh':
common/pixel.c:382: warning: implicit declaration of function 'alloca'
common/pixel.c:382: warning: incompatible implicit declaration of
built-in function 'alloca'
and the same warning again for encoder/me.c in function
"x264_me_search_ref".
I'd be happy to dig further, but I'd need some help here.
- Chris
P.S. I had to #define isfinite to get x264 to compile, see my earlier
emails for a description.
--
This is the x264-devel mailing-list
To unsubscribe, go to: http://developers.videolan.org/lists.html
More information about the x264-devel
mailing list