Remember last Feburary and March there was a big discussion about
xf86setjmp? Part of that discussion involved a SIGSEGV or SIGBUS in the
freetype2 code when a font was not found. Well, I'm seeing the same
thing (on ia64). At the time it was pointed out that one can never wrap
setjmp because setjmp has bad behavior if its called from within a
function that returns, which is exactly what a wrapper is.

The setjmp code was reworked a couple of months ago (in part to account
for libc differences). The current implementation has these code
fragments:

ftstdlib.h:
-----------

#define DONT_DEFINE_WRAPPERS
#define DEFINE_SETJMP_WRAPPERS
#include "xf86_ansic.h"
#undef DONT_DEFINE_WRAPPERS

xf86_libc.h:
------------

#if defined(XFree86LOADER) && \
    (!defined(DONT_DEFINE_WRAPPERS) || defined(DEFINE_SETJMP_WRAPPERS))
#undef setjmp
#define setjmp(a)               xf86setjmp_macro(a)
#undef longjmp
#define longjmp(a,b)            xf86longjmp(a,b) 
#undef jmp_buf
#define jmp_buf                 xf86jmp_buf
#endif


As far as I can tell when one builds the freetype module for the
loadable server you're not going to get any wrappers except for setjmp
and this is bad because you can't wrap setjmp.

As a trial I built both a static and a loadable server. The static
server ran fine, but the loadable server dies with a SIGBUS in the
freetype code when a setjmp/longjmp is executed. Pretty much what I
expected.

I'm wondering if I'm missing something, but its a fact you can't wrap
setjmp right? And why would you turn off all wrappers except setjmp? Is
this really right?

I reread the original discussion and part of had to do with how to
implement setjmp in modules that are supposed to be system neutral (i.e.
must use wrappers) when one has this exception of a clib function that
can't be wrapped. What ever came of that?

-- 
John Dennis <[EMAIL PROTECTED]>

_______________________________________________
Devel mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/devel

Reply via email to