first call from libxmi/xmi/init.c:changed():

[...]

(gdb) p ((struct xxmi_priv*) ((((xmipriv *)(vis->extlist[2].priv)))->priv))->getapi
$27 = (ggifunc_getapi *) 0x4001c968 <GGI_X_getapi>
(gdb) s
GGI_X_getapi (vis=0x81b1fa8, num=1, apiname=0xbfffe2b0 "display-x-xmi", 
arguments=0xbfffdeb0 "") at ../../../libggi/display/X/mode.inc:314
314             *arguments = '\0';
(gdb) s
315             switch (num) {
(gdb) cont
Continuing.

second call from libxmi/xmi/init.c:changed():

[...]

Breakpoint 5, ggiGetAPI (vis=0x81b1fa8, num=2, apiname=0xbfffe2b0 "generic-stubs-xmi", 
arguments=0xbfffdeb0 "") at ../../libggi/ggi/stubs.c:60
60              return vis->opdisplay->getapi(vis, num, apiname, arguments);
(gdb) s
XMI_X_getapi (vis=0x81b1fa8, num=2, apiname=0xbfffe2b0 "generic-stubs-xmi", 
arguments=0xbfffdeb0 "") at ../../../libxmi/display/X/mode.inc:39
39              xmipriv *priv = LIBGGI_XMIEXT(vis);
(gdb) 
42              XMIDPRINT_CORE("XMI_X_getapi(%p, %i, %s, %s) is called\n",
(gdb) 
55              if (XXMI_PRIV(vis)->getapi != NULL) {
(gdb) 
56                      rc = XXMI_PRIV(vis)->getapi(vis, num, apiname, arguments);
(gdb) p ((struct xxmi_priv*) ((((xmipriv *)(vis->extlist[2].priv)))->priv))->getapi
$28 = (ggifunc_getapi *) 0x40236008 <__morecore+40>
(gdb) s
0x40236008 in __morecore () from /lib/libc.so.6
(gdb) s
Single stepping until exit from function __morecore, 
which has no line number information.

Program received signal SIGSEGV, Segmentation fault.
0x40236010 in __morecore () from /lib/libc.so.6
(gdb) 


apparently the first time:

    ((struct xxmi_priv*) ((((xmipriv *)(vis->extlist[2].priv)))->priv))->getapi = 
GGI_X_getapi()

and the second time

    ((struct xxmi_priv*) ((((xmipriv *)(vis->extlist[2].priv)))->priv))->getapi = 
__morecore()

so 'extlist' gets overwritten somewhere.


btw.: I guess in libggi/ggi/init.c:ggiExtensionUnregister()
there should be something like numextensions-- ?? (but that
doesn't solve the above problem). It just prevents the
extension list (== extension id) from growing.

-- 
   Johannes

Reply via email to