On Tue, Jul 19, 2011 at 8:12 PM, test name <tuks...@gmail.com> wrote: > Hi, > > I'm trying to get directfb and gtk going on an Atmel AT91SAM9263 > buildroot and directfb-1.4.11/13. Some dfb examples work fine (df_neo, > df_palette), although the colours are off. Other examples (like > df_fire and df_particle) SIGSEG or SIGILL. > > The demos start up fine with: > > ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.4.13 |~~~~~~~~~~~~~~~~~~~~~~~~~~ > (c) 2001-2010 The world wide DirectFB Open Source Community > (c) 2000-2004 Convergence (integrated media) GmbH > ---------------------------------------------------------------- > > (*) DirectFB/Core: Single Application Core. (2011-07-19 17:38) > (*) Direct/Memcpy: Using armasm_memcpy() > (*) Direct/Thread: Started 'VT Switcher' (-1) [CRITICAL OTHER/OTHER > 0/0] <8388608>... > (*) Direct/Thread: Started 'VT Flusher' (-1) [DEFAULT OTHER/OTHER 0/0] > <8388608>... > (*) DirectFB/FBDev: Found '' (ID 0) with frame buffer at 0x23940000, > 150k (MMIO 0x00700000, 4k) > (*) Direct/Thread: Started 'Keyboard Input' (-1) [INPUT OTHER/OTHER > 0/0] <8388608>... > (*) DirectFB/Input: Keyboard 0.9 (directfb.org) > (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] > <8388608>... > (*) DirectFB/Input: gpio-keys (1) 0.1 (directfb.org) > (*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] > <8388608>... > (*) DirectFB/Input: Microsoft Microsoft 5-Button Mo (2) 0.1 (directfb.org) > (*) Direct/Thread: Started 'Hotplug with Linux Input' (-1) [INPUT > OTHER/OTHER 0/0] <8388608>... > (*) DirectFB/Input: Hot-plug detection enabled with Linux Input Driver > (*) DirectFB/Graphics: Generic Software Rasterizer 0.6 (directfb.org) > (*) DirectFB/Core/WM: Default 0.3 (directfb.org) > (*) FBDev/Mode: Setting 320x240 RGB16 > (*) FBDev/Mode: Switched to 320x240 (virtual 320x240) at 16 bit > (RGB16), pitch 640 > (*) FBDev/Mode: Setting 320x240 RGB16 > (*) FBDev/Mode: Switched to 320x240 (virtual 320x240) at 16 bit > (RGB16), pitch 640 > > then they fail for some reason. > > For df_fire gdb reports: > > Program received signal SIGSEGV, Segmentation fault. > memset () at libc/string/arm/memset.S:89 > 89 stmia a4!, {a2, ip} > (gdb) bt > #0 memset () at libc/string/arm/memset.S:89 > #1 0x40247f9c in Cop_to_Aop_8 (gfxs=0x31a28) at generic.c:391 > #2 0x40272dd8 in gFillRectangle (state=0x1c0dc, rect=0xbe8b0a18) at > generic_fill_rectangle.c:96 > #3 0x401be7e4 in dfb_gfxcard_fillrectangles (rects=0x1c074, num=1, > state=0x1c0dc) at gfxcard.c:1053 > #4 0x401f1d8c in IDirectFBSurface_Clear (thiz=0x1bf30, r=0 '\000', > g=0 '\000', b=0 '\000', a=255 '\377') at idirectfbsurface.c:729 > #5 0x00009608 in init_application (argc=0xbe8b0b54, argv=0xbe8b0b50) > at df_fire.c:405 > #6 0x000087f8 in main (argc=1, argv=0xbe8b0db4) at df_fire.c:88 > (gdb) up > #1 0x40247f9c in Cop_to_Aop_8 (gfxs=0x31a28) at generic.c:391 > 391 memset( gfxs->Aop[0], gfxs->Cop, gfxs->length ); > (gdb) print *gfxs > $1 = {funcs = {0x40247f64 <Cop_to_Aop_8>, 0 <repeats 31 times>}, > length = 320, Slen = 0, Dlen = 0, dst_org = {0x4005e800, 0x0, 0x0}, > src_org = {0x0, 0x0, 0x0}, dst_pitch = 640, src_pitch = 0, > dst_bpp = 1, src_bpp = 0, dst_caps = 20, src_caps = DSCAPS_NONE, > src_format = DSPF_UNKNOWN, dst_format = DSPF_LUT8, dst_height = 240, > src_height = 0, dst_field_offset = 76800, > src_field_offset = 0, color = {a = 255 '\377', r = 0 '\000', g = 0 > '\000', b = 0 '\000'}, Aop = {0x4005ef80, 0x0, 0x0}, Bop = {0x0, 0x0, > 0x0}, Cop = 0, Astep = 1, Bstep = 1, YCop = 0 '\000', > CbCop = 0 '\000', CrCop = 0 '\000', Aop_field = 0, Bop_field = 0, > AopY = 3, BopY = 0, s = 0, t = 0, Dkey = 0, Skey = 0, Alut = 0x1a170, > Blut = 0x0, ABstart = 0x0, ABsize = 0, Aacc = 0x0, > Bacc = 0x0, Tacc = 0x0, Cacc = {RGB = {b = 0, g = 0, r = 0, a = 0}, > YUV = {u = 0, v = 0, y = 0, a = 0}}, SCacc = {RGB = {b = 0, g = 0, r = > 0, a = 0}, YUV = {u = 0, v = 0, y = 0, a = 0}}, > Xacc = 0x0, Yacc = 0x0, Dacc = 0x0, Sacc = 0x0, Sop = 0x0, Slut = > 0x0, Ostep = 1, SperD = 0, TperD = 0, Xphase = 0, need_accumulator = > false, trans = 0x0, num_trans = 0} > > For df_particle: > > Program received signal SIGILL, Illegal instruction. > 0x402aa04c in Cop_to_Aop_16 (gfxs=0x429d8) at generic.c:413 > 413 --w; > (gdb) bt > #0 0x402aa04c in Cop_to_Aop_16 (gfxs=0x429d8) at generic.c:413 > #1 0x402d4dd8 in gFillRectangle (state=0x42794, rect=0xbeb08940) at > generic_fill_rectangle.c:96 > #2 0x402207e4 in dfb_gfxcard_fillrectangles (rects=0x4272c, num=1, > state=0x42794) at gfxcard.c:1053 > #3 0x40253d8c in IDirectFBSurface_Clear (thiz=0x425e8, r=255 '\377', > g=255 '\377', b=255 '\377', a=255 '\377') at idirectfbsurface.c:729 > #4 0x00009108 in main (argc=1, argv=0xbeb08da4) at df_particle.c:185 > (gdb) print *gfxs > $1 = {funcs = {0x402a9fa4 <Cop_to_Aop_16>, 0 <repeats 31 times>}, > length = 320, Slen = 0, Dlen = 0, dst_org = {0x1cde0, 0x0, 0x0}, > src_org = {0x0, 0x0, 0x0}, dst_pitch = 640, src_pitch = 0, > dst_bpp = 2, src_bpp = 0, dst_caps = 20, src_caps = DSCAPS_NONE, > src_format = DSPF_UNKNOWN, dst_format = DSPF_RGB16, dst_height = 240, > src_height = 0, dst_field_offset = 76800, > src_field_offset = 0, color = {a = 255 '\377', r = 255 '\377', g = > 255 '\377', b = 255 '\377'}, Aop = {0x263e0, 0x0, 0x0}, Bop = {0x0, > 0x0, 0x0}, Cop = 65535, Astep = 1, Bstep = 1, > YCop = 0 '\000', CbCop = 0 '\000', CrCop = 0 '\000', Aop_field = 0, > Bop_field = 0, AopY = 60, BopY = 0, s = 0, t = 0, Dkey = 0, Skey = 0, > Alut = 0x0, Blut = 0x0, ABstart = 0x0, ABsize = 0, > Aacc = 0x0, Bacc = 0x0, Tacc = 0x0, Cacc = {RGB = {b = 0, g = 0, r = > 0, a = 0}, YUV = {u = 0, v = 0, y = 0, a = 0}}, SCacc = {RGB = {b = 0, > g = 0, r = 0, a = 0}, YUV = {u = 0, v = 0, y = 0, > a = 0}}, Xacc = 0x0, Yacc = 0x0, Dacc = 0x0, Sacc = 0x0, Sop = > 0x0, Slut = 0x0, Ostep = 1, SperD = 0, TperD = 0, Xphase = 0, > need_accumulator = false, trans = 0x0, num_trans = 0} > > For gtk-demo: > Program received signal SIGSEGV, Segmentation fault. > 0x406a5058 in Cop_to_Aop_16 (gfxs=0xf9310) at generic.c:414 > 414 ++D; > (gdb) bt > #0 0x406a5058 in Cop_to_Aop_16 (gfxs=0xf9310) at generic.c:414 > #1 0x406cfdd8 in gFillRectangle (state=0xf2fa4, rect=0xbe825578) at > generic_fill_rectangle.c:96 > #2 0x4061b7e4 in dfb_gfxcard_fillrectangles (rects=0xbe82563c, num=1, > state=0xf2fa4) at gfxcard.c:1053 > #3 0x4065032c in IDirectFBSurface_FillRectangle (thiz=0xf2df8, x=256, > y=30, w=340, h=366) at idirectfbsurface.c:1314 > #4 0x4017cd84 in gdk_window_impl_directfb_begin_paint_region > (paintable=0x79910, window=0x1458b0, region=0x171b80) at > gdkwindow-directfb.c:2814 > #5 0x401543d0 in IA__gdk_window_begin_paint_region (window=0x1458b0, > region=0x171b80) at gdkwindow.c:2959 > #6 0x4032e364 in IA__gtk_main_do_event (event=0xbe825758) at gtkmain.c:1608 > #7 0x40159420 in _gdk_window_process_updates_recurse > (window=0x1458b0, expose_region=0x171b80) at gdkwindow.c:5429 > #8 0x401592fc in _gdk_window_process_updates_recurse > (window=0x145800, expose_region=0xf1260) at gdkwindow.c:5402 > #9 0x401592fc in _gdk_window_process_updates_recurse (window=0x766e0, > expose_region=0x171a80) at gdkwindow.c:5402 > #10 0x401592fc in _gdk_window_process_updates_recurse (window=0x76160, > expose_region=0xf12e0) at gdkwindow.c:5402 > #11 0x4017cf5c in _gdk_windowing_window_process_updates_recurse > (window=0x76160, region=0xf12e0) at gdkwindow-directfb.c:2939 > #12 0x40159718 in gdk_window_process_updates_internal (window=0x76160) > at gdkwindow.c:5588 > #13 0x401599c0 in IA__gdk_window_process_all_updates () at gdkwindow.c:5696 > #14 0x40281fcc in gtk_container_idle_sizer (data=0x0) at gtkcontainer.c:1360 > #15 0x4012abc4 in gdk_threads_dispatch (data=0xee4b0) at gdk.c:512 > #16 0x40a67928 in g_idle_dispatch (source=0xee8e0, callback=0x4012ab44 > <gdk_threads_dispatch>, user_data=0xee4b0) at gmain.c:4545 > #17 0x40a62c64 in g_main_dispatch (context=0x7f3d8) at gmain.c:2440 > #18 0x40a64580 in g_main_context_dispatch (context=0x7f3d8) at gmain.c:3013 > #19 0x40a64a90 in g_main_context_iterate (context=0x7f3d8, block=1, > dispatch=1, self=0x3f3d0) at gmain.c:3091 > #20 0x40a653c0 in g_main_loop_run (loop=0x1504c8) at gmain.c:3299 > #21 0x4032d81c in IA__gtk_main () at gtkmain.c:1256 > #22 0x0002d8d0 in main (argc=1, argv=0xbe825da4) at main.c:1010 > (gdb) print *gfxs > $1 = {funcs = {0x406a4fa4 <Cop_to_Aop_16>, 0 <repeats 31 times>}, > length = 340, Slen = 0, Dlen = 0, dst_org = {0x42087008, 0x0, 0x0}, > src_org = {0x0, 0x0, 0x0}, dst_pitch = 1200, src_pitch = 0, > dst_bpp = 2, src_bpp = 0, dst_caps = DSCAPS_SYSTEMONLY, src_caps = > DSCAPS_NONE, src_format = DSPF_UNKNOWN, dst_format = DSPF_RGB16, > dst_height = 400, src_height = 0, dst_field_offset = 240000, > src_field_offset = 0, color = {a = 255 '\377', r = 255 '\377', g = > 255 '\377', b = 255 '\377'}, Aop = {0x420a25f8, 0x0, 0x0}, Bop = {0x0, > 0x0, 0x0}, Cop = 65535, Astep = 1, Bstep = 1, > YCop = 0 '\000', CbCop = 0 '\000', CrCop = 0 '\000', Aop_field = 0, > Bop_field = 0, AopY = 93, BopY = 0, s = 0, t = 0, Dkey = 0, Skey = 0, > Alut = 0x0, Blut = 0x0, ABstart = 0x0, ABsize = 0, > Aacc = 0x0, Bacc = 0x0, Tacc = 0x0, Cacc = {RGB = {b = 0, g = 0, r = > 0, a = 0}, YUV = {u = 0, v = 0, y = 0, a = 0}}, SCacc = {RGB = {b = 0, > g = 0, r = 0, a = 0}, YUV = {u = 0, v = 0, y = 0, > a = 0}}, Xacc = 0x0, Yacc = 0x0, Dacc = 0x0, Sacc = 0x0, Sop = > 0x0, Slut = 0x0, Ostep = 1, SperD = 0, TperD = 0, Xphase = 0, > need_accumulator = false, trans = 0x0, num_trans = 0} > > The common denominator here seems to me to be the Cop_to_Aop_* > functions. Can anyone point me in a direction in order to debug this > further? > > Thanks >
Well, this is interesting. After some more digging in df_fire I found what appears to be some stack corruption happening when calling dfb_gfxcard_fillrectangles from IDirectFBSurface_Clear. The stack looks as follows: (gdb) bt #0 dfb_gfxcard_fillrectangles (rects=0x2eed8, num=2, state=0x12888) at gfxcard.c:995 #1 0x401f0d8c in IDirectFBSurface_Clear (thiz=0x1bb28, r=0 '\000', g=0 '\000', b=0 '\000', a=255 '\377') at idirectfbsurface.c:729 #2 0x00009608 in init_application (argc=0xbec75b24, argv=0xbec75b20) at df_fire.c:405 #3 0x000087f8 in main (argc=1, argv=0xbec75d84) at df_fire.c:88 but dfb_gfxcard_fillrectangles's parameters somehow magically gets transformed from this: (gdb) up #1 0x401f0d8c in IDirectFBSurface_Clear (thiz=0x1bb28, r=0 '\000', g=0 '\000', b=0 '\000', a=255 '\377') at idirectfbsurface.c:729 729 dfb_gfxcard_fillrectangles( &data->area.current, 1, &data->state ); (gdb) print &data->area.current $16 = (DFBRectangle *) 0x1bc6c (gdb) print data->area.current $17 = {x = 0, y = 0, w = 320, h = 240} into this: (gdb) down #0 dfb_gfxcard_fillrectangles (rects=0x2eed8, num=2, state=0x12888) at gfxcard.c:995 995 dfb_state_start_drawing( state, card ); (gdb) print *rects $18 = {x = 0, y = 9881, w = 0, h = 0} WTF? gcc version 4.5.3 (Buildroot 2011.05). Compiler bug? Maybe I should move this discussion to the devel list. _______________________________________________ directfb-users mailing list directfb-users@directfb.org http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users