[kaffe] -O4 jit3 problem
Timothy Stack
stack@cs.utah.edu
Mon, 3 Jun 2002 13:30:21 -0600 (MDT)
> One idea I had was to have each JNI function in the
> BEGIN_EXCEPTION_HANDLING macro store its start and size in the
> 'vmException' buffer. The problem is there is no
> __builtin_function_size() GCC macro or anything that can tell you
> that.
>
> However, I know that there are tools that can generate such info from
> a .o file.
>
> So, we'd have to compile jni.c to jni.o, run a script over jni.o to
> extract the length of each function, create a .c file that defines
> 'size_<function_name>' for each JNI entrypoint, compile that and link
> it in.
>
> The hardest part will probably be getting the Makefiles to do that. :)
>
> I'll play around with this and see if it can be made to work (the
> stack unwinding code will have to be updated, too).
What about using local labels in END_EXCEPTION_HANDLING?
#define BEGIN_EXCEPTION_HANDLING(X) \
vmException ebuf; \
ebuf.prev = (vmException*)unhand(getCurrentThread())->exceptPtr;\
ebuf.meth = (Method*)1; \
ebuf.start = &&jni_exception_start; \
ebuf.end = &&jni_exception_end; \
if (JTHREAD_SETJMP(ebuf.jbuf) != 0) { \
unhand(getCurrentThread())->exceptPtr = \
(struct Hkaffe_util_Ptr*)ebuf.prev; \
return X; \
} \
unhand(getCurrentThread())->exceptPtr = (structHkaffe_util_Ptr*)&ebuf \
__label__ jni_exception_start;
#define END_EXCEPTION_HANDLING() \
__label__ jni_exception_end; \
unhand(getCurrentThread())->exceptPtr = (struct Hkaffe_util_Ptr*)ebuf.prev
This is based on:
http://gcc.gnu.org/onlinedocs/gcc/Local-Labels.html#Local%20Labels
http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels%20as%20Values
> -Pat
tim stack