>
>
> I try to use ggi by setting SDL_VIDERDRIVER=ggi and try some
> SDL games to test it,which result in seg.fault for my computer
> (IBM Thinkpad 390E using neomagic ,Debian GNU/Linux sid,XFree86 4.1.0
> )
> here is the result of GGI_DEBUG=255 SDL_VIDEODRIVER=ggi
some_sdl_program
>
> LibGGI: Debugging=255
> LibGGI: ggiOpen("(null)") called
> LibGGI: ggiOpen("display-x::0.0") called
> LibGGI: Loading driver display-x::0.0
> LibGGI: _ggiAddDL(0x805c400, "display-x", ":0.0", 0x1) called
> LibGGI: _ggiLoadDL("/usr/lib/ggi/display/X.so", 0x1) called
> LibGGI: hand.handle=0x805df70
> LibGGI: &(GGIdl_X) = 0x40018614
> LibGGI: hand.open = 0x40017e78
> LibGGI: hand.exit = 0x400185e0
> LibGGI: hand.close = 0x40017d44
> LibGGI: _ggiLoadDL returned 0 (0x805e210)
> LibGGI: X-target wants display :0.0
> LibGGI: X: has display :0.0
> LibGGI: X: has screen 0
> LibGGI: X: Enabling use of XSHM extension
> LibGII: Allocating input structure
> LibGII: _giiEvQueueAllocate(0x805f738) called
> LibGII: Got queue_set: 0x805f8c0
> LibGII: giiOpen adding "xwin", "", 0xbfffdc68
> LibGII: _giiLoadDL("xwin","(NULL)") called
> LibGII: hand.handle=0x805f938
> LibGII: hand.init=0x4001ed50
> LibGII: _giiLoadDL returned 0x805fbb8
> LibGII: GIIdlinit(0x805f738) called for input-xwin
> LibGII: _giiEvQueueAdd(0x805f738, 0xbfffd654) called
> LibGII: _giiEvQueueSetup alloced 0x805fda0
> LibGII: Adding event type 1, size 116 at pos 0
> LibGII: _giiEvQueueAdd(0x805f738, 0xbfffd644) called
> LibGII: Adding event type 1, size 116 at pos 1
> LibGII: 0=dlh->init(0x805f738,"",0xbfffdc68) - xwin
> LibGII: _giiUpdateCache(0x805f738) called
> LibGII: Found fd: 3
> LibGII: giiJoinInputs((nil), 0x805f738) called
> LibGII: _giiUpdateCache(0x805f738) called
> LibGII: Found fd: 3
> LibGGI: _ggiAddDL(0x805c400, "helper-mansync", "(null)", 0x0) called
> LibGGI: _ggiLoadDL("/usr/lib/ggi/display/mansync.so", 0x0) called
> LibGGI: hand.handle=0x8061dd8
> LibGGI: &(GGIdl_mansync) = 0x40026384
> LibGGI: hand.open = 0x40026310
> LibGGI: hand.exit = (nil)
> LibGGI: hand.close = (nil)
> LibGGI: _ggiLoadDL returned 0 (0x8062060)
> LibGGI: 0 = dlh->open(0x805c400, 0x8062060, "(null)", 0x805f6a0, 0) -
> /usr/lib/ggi/display/mansync.so
> LibGGI: _GGI_mansync_init(): nrvisuals = 1
> LibGGI: X-target fully up
> LibGGI: 0 = dlh->open(0x805c400, 0x805e210, ":0.0", (nil), 1) -
> /usr/lib/ggi/display/X.so
> LibGGI: ggiOpen: returning 0x805c400
> LibGGI: Loading extra inputs/filters for display-x::0.0
> LibGGI: Checking GGI_INPUT_DISPLAY_X_1 : (nil)
> LibGGI: Checking GGI_INPUT_DISPLAY_X : (nil)
> LibGGI: Checking GGI_INPUT : (nil)
Ok, until here you opened a X-target successfully.
> LibGGI: ggiClose("0x805c400") called
> LibGGI: ggiClose: closing
> LibGII: giiClose(0x805f738) called
> LibGII: _giiEvQueueDestroy(0x805f738) called
> LibGII: Destroying 0x805f8c0, 0x805f8c4
> LibGII: _giiEvQueueDestroy done
> LibGII: GII_xwin_close(0x805f738) called
> LibGGI: _GGI_mansync_stop() (MANSYNC_CHILD) called.
> LibGGI: _ggiZapDL(0x805c400, 0x805c4b8) called
> LibGGI: Disposing "helper-mansync"
> LibGGI: Closing handle: 0x8061dd8
> LibGGI: _ggiZapDL(0x805c400, 0x805dcdc) called
> LibGGI: _ggiZapDL(0x805c400, 0x805ddcc) called
> LibGGI: _ggiZapDL(0x805c400, 0x805de2c) called
> LibGGI: _ggiZapDL(0x805c400, 0x805de54) called
> LibGGI: Disposing "display-x"
> LibGGI: X-target closed
> LibGGI: Closing handle: 0x805df70
> LibGGI: ggiClose: done!
Then you closed it immediately.
> LibGGI: ggiOpen("(null)") called
> LibGGI: ggiOpen("display-x::0.0") called
> LibGGI: Loading driver display-x::0.0
> LibGGI: _ggiAddDL(0x805c400, "display-x", ":0.0", 0x1) called
> LibGGI: _ggiLoadDL("/usr/lib/ggi/display/X.so", 0x1) called
> LibGGI: hand.handle=0x805e220
> LibGGI: &(GGIdl_X) = 0x40018614
> LibGGI: hand.open = 0x40017e78
> LibGGI: hand.exit = 0x400185e0
> LibGGI: hand.close = 0x40017d44
> LibGGI: _ggiLoadDL returned 0 (0x805e4c0)
> LibGGI: X-target wants display :0.0
> LibGGI: X: has display :0.0
> LibGGI: X: has screen 0
> LibGGI: X: Enabling use of XSHM extension
> LibGII: Allocating input structure
> LibGII: _giiEvQueueAllocate(0x805fa00) called
> LibGII: Got queue_set: 0x805fb88
> LibGII: giiOpen adding "xwin", "", 0xbfffcc38
> LibGII: _giiLoadDL("xwin","(NULL)") called
> LibGII: hand.handle=0x805fc00
> LibGII: hand.init=0x4001ed50
> LibGII: _giiLoadDL returned 0x805fe80
> LibGII: GIIdlinit(0x805fa00) called for input-xwin
> LibGII: _giiEvQueueAdd(0x805fa00, 0xbfffc624) called
> LibGII: _giiEvQueueSetup alloced 0x8060068
> LibGII: Adding event type 1, size 116 at pos 0
> LibGII: _giiEvQueueAdd(0x805fa00, 0xbfffc614) called
> LibGII: Adding event type 1, size 116 at pos 1
> LibGII: 0=dlh->init(0x805fa00,"",0xbfffcc38) - xwin
> LibGII: _giiUpdateCache(0x805fa00) called
> LibGII: Found fd: 3
> LibGII: giiJoinInputs((nil), 0x805fa00) called
> LibGII: _giiUpdateCache(0x805fa00) called
> LibGII: Found fd: 3
> LibGGI: _ggiAddDL(0x805c400, "helper-mansync", "(null)", 0x0) called
> LibGGI: _ggiLoadDL("/usr/lib/ggi/display/mansync.so", 0x0) called
> LibGGI: hand.handle=0x80620a0
> LibGGI: &(GGIdl_mansync) = 0x40026384
> LibGGI: hand.open = 0x40026310
> LibGGI: hand.exit = (nil)
> LibGGI: hand.close = (nil)
> LibGGI: _ggiLoadDL returned 0 (0x8062328)
> LibGGI: 0 = dlh->open(0x805c400, 0x8062328, "(null)", 0x805f968, 0) -
> /usr/lib/ggi/display/mansync.so
> LibGGI: _GGI_mansync_init(): nrvisuals = 1
> LibGGI: X-target fully up
> LibGGI: 0 = dlh->open(0x805c400, 0x805e4c0, ":0.0", (nil), 1) -
> /usr/lib/ggi/display/X.so
> LibGGI: ggiOpen: returning 0x805c400
> LibGGI: Loading extra inputs/filters for display-x::0.0
> LibGGI: Checking GGI_INPUT_DISPLAY_X_2 : (nil)
> LibGGI: Checking GGI_INPUT_DISPLAY_X : (nil)
> LibGGI: Checking GGI_INPUT : (nil)
Here, you reopened it. Why do close it before?
> LibGGI: ggiCheckMode(0x805c400, 0xbffff374) called
> LibGGI: _GGIbasiccheck: defgt = 0x2001010, tmgt = 0x0
> LibGGI: Default visual - ID: 0x23, depth: 16, class: 4
> LibGGI: ggiSetMode(0x805c400, 640x480.V640x480.F1.D1x1.[C16/16]) called
> LibGGI: ggiSetMode: trying (vis 640x480 virt 640x480)
> LibGGI: ggiSetMode: trying2 (vis 640x480 virt 640x480)
> LibGGI: ggiSetMode: calling 0x400193ac
> LibGGI: _GGIbasiccheck: defgt = 0x2001010, tmgt = 0x2001010
> LibGGI: Default visual - ID: 0x23, depth: 16, class: 4
> LibGGI: _GGIbasiccheck: gt = 0x2001010
> LibGGI: Visual - ID: 0x23, depth: 16, class: 4
> LibGGI: _GGIbasiccheck: defgt = 0x2001010, tmgt = 0x2001010
> LibGGI: Default visual - ID: 0x23, depth: 16, class: 4
> LibGGI: _GGIbasiccheck: gt = 0x2001010
> LibGGI: Visual - ID: 0x23, depth: 16, class: 4
> LibGGI: X: has window 0x3200006
> LibGGI: X: Prepare to resize.
> LibGGI: X: Resize
> LibGGI: X: Creating shm image #0
> LibGGI: X: shmat success at 0x405b0000.
> LibGGI: X: ShmImage #0 allocated
> LibGGI: X GC allocated.
> LibGGI: X: About to map
> LibGGI: X: Window Mapped
> LibGGI: X: Sync
> LibGGI: X: Sync done
Here you set a (default?) mode 640x480 16bit.
> LibGGI: _ggiZapDL(0x805c400, 0x805e02c) called
> LibGGI: _ggiZapDL(0x805c400, 0x805e11c) called
> LibGGI: _ggiZapDL(0x805c400, 0x805e17c) called
> LibGGI: _ggiAddDL(0x805c400, "generic-stubs", "", 0x1) called
> LibGGI: _ggiLoadDL("/usr/lib/ggi/default/stubs.so", 0x1) called
> LibGGI: hand.handle=0x80625b0
> LibGGI: &(GGIdl_stubs) = 0x40648da4
> LibGGI: hand.open = 0x40648b60
> LibGGI: hand.exit = (nil)
> LibGGI: hand.close = (nil)
> LibGGI: _ggiLoadDL returned 0 (0x8062838)
> LibGGI: 0 = dlh->open(0x805c400, 0x8062838, "", (nil), 4) -
> /usr/lib/ggi/default/stubs.so
> LibGGI: X: GGIsetmode: success in loading generic-stubs ()
> LibGGI: _ggiAddDL(0x805c400, "generic-color", "", 0x1) called
> LibGGI: _ggiLoadDL("/usr/lib/ggi/default/color.so", 0x1) called
> LibGGI: hand.handle=0x80628c0
> LibGGI: &(GGIdl_color) = 0x4064cec8
> LibGGI: hand.open = 0x4064cc78
> LibGGI: hand.exit = (nil)
> LibGGI: hand.close = 0x4064ce9c
> LibGGI: _ggiLoadDL returned 0 (0x8062b60)
> LibGGI: 0 = dlh->open(0x805c400, 0x8062b60, "", (nil), 2) -
> /usr/lib/ggi/default/color.so
> LibGGI: X: GGIsetmode: success in loading generic-color ()
> LibGGI: _ggiAddDL(0x805c400, "generic-linear-16", "", 0x1) called
> LibGGI: _ggiLoadDL("/usr/lib/ggi/default/linear_16.so", 0x1) called
> LibGGI: hand.handle=0x8062c20
> LibGGI: &(GGIdl_linear_16) = 0x40652500
> LibGGI: hand.open = 0x40652380
> LibGGI: hand.exit = (nil)
> LibGGI: hand.close = (nil)
> LibGGI: _ggiLoadDL returned 0 (0x8062eb0)
> LibGGI: 0 = dlh->open(0x805c400, 0x8062eb0, "", (nil), 4) -
> /usr/lib/ggi/default/linear_16.so
> LibGGI: X: GGIsetmode: success in loading generic-linear-16 ()
> LibGGI: ggiIndicateChange(0x805c400, 0x1) called
> LibGGI: ggiIndicateChange: 1 changed for 0x805c400.
> LibGGI: ggiSetMode: set to frame 0, origin = {0,0}
> LibGGI: ggiSetMode: set GC
> LibGGI: _default_error() called
> LibGGI: ggiSetMode: success (vis 640x480 virt 640x480)
Videomode is set successfully.
> LibGGI: _default_error() called
> LibGGI: _default_error() called
> LibGGI: ggiSetMode: SetWriteFrame 0
> LibGGI: ggiSetMode: frame address: 0x405b0000
> LibGGI: ggiSetMode: FillScreen 0
> LibGGI: GGI_X_flush(0x805c400, 1) called
>
> and then Seg.fault occur.
The segfaults happens during a flush? hmm...
Does the segfault go away, when you _don't_ reopen the X-target?
Can somebody else confirm, that a segfault happens, when calling ggiOpen()
the
2nd time like this:
1. open X-target
2. close X-target
3. open X-target
4. close X-target
If so, then something in the (un)initialization code is wrong.
Can somebody else check that behaviour on other targets, please?
This help us to figure out, if the bug is in the X-target or if it is
somewhere in the
core lib.
> However,there is no problem on my deskop computer,
> which also use Debian sid with XFree86 4.1.0 using Banshee as
> display card
I think, that has nothing to do with the X-server. It seems being a bug
libggi.
--
CU,
Christoph Egger
E-Mail: [EMAIL PROTECTED]
Sent through GMX FreeMail - http://www.gmx.net
"
Description: Binary data
