PatchSet 7134 Date: 2006/03/04 17:51:01 Author: guilhem Branch: HEAD Tag: (none) Log: Fix for 64 bits arch running intrp + moved out some INTERPRETER
* kaffe/kaffevm/jni/jnirefs.h: Decreased the default size of the JNI localref table (as per JNI specification). * kaffe/kaffevm/intrp/methodcalls.c (engine_callMethod): Adjust arguments to match interpreter's stack representation. (engine_dispatchException): New function. * kaffe/kaffevm/jit/methodcalls.h, kaffe/kaffevm/intrp/methodcalls.h, kaffe/kaffevm/jit/methodcalls.c (engine_dispatchException): New function. * kaffe/kaffevm/intrp/machine.c (virtualMachine): Really throw an error when sizeofSigMethod fails. * kaffe/kaffevm/exception.h: Exported vmExcept_jumpToHandler. * kaffe/kaffevm/exception.c (DISPATCH_EXCEPTION): Removed. (dispatchException): Use engine_dispatchException now. Members: ChangeLog:1.4652->1.4653 kaffe/kaffevm/exception.c:1.103->1.104 kaffe/kaffevm/exception.h:1.34->1.35 kaffe/kaffevm/intrp/machine.c:1.54->1.55 kaffe/kaffevm/intrp/methodcalls.c:1.10->1.11 kaffe/kaffevm/intrp/methodcalls.h:1.1->1.2 kaffe/kaffevm/jit/methodcalls.c:1.10->1.11 kaffe/kaffevm/jni/jni.c:1.39->1.40 kaffe/kaffevm/jni/jnirefs.h:1.3->1.4 Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.4652 kaffe/ChangeLog:1.4653 --- kaffe/ChangeLog:1.4652 Fri Feb 17 00:28:53 2006 +++ kaffe/ChangeLog Sat Mar 4 17:51:01 2006 @@ -1,3 +1,29 @@ +2006-03-04 Guilhem Lavaux <[EMAIL PROTECTED]> + + * kaffe/kaffevm/jni/jnirefs.h: Decreased the default size of the + JNI localref table (as per JNI specification). + + * kaffe/kaffevm/intrp/methodcalls.c + (engine_callMethod): Adjust arguments to match interpreter's stack + representation. + (engine_dispatchException): New function. + + * kaffe/kaffevm/jit/methodcalls.h, + kaffe/kaffevm/intrp/methodcalls.h, + kaffe/kaffevm/jit/methodcalls.c + (engine_dispatchException): New function. + + * kaffe/kaffevm/intrp/machine.c + (virtualMachine): Really throw an error when sizeofSigMethod + fails. + + * kaffe/kaffevm/exception.h: Exported vmExcept_jumpToHandler. + + * kaffe/kaffevm/exception.c + (DISPATCH_EXCEPTION): Removed. + (dispatchException): Use engine_dispatchException now. + + 2006-02-17 Riccardo Mottola <[EMAIL PROTECTED]> * libraries/javalib/awt-implementations/kaffe/java/awt/Choice.java, libraries/javalib/awt-implementations/kaffe/java/awt/DefKeyFilter.java, Index: kaffe/kaffe/kaffevm/exception.c diff -u kaffe/kaffe/kaffevm/exception.c:1.103 kaffe/kaffe/kaffevm/exception.c:1.104 --- kaffe/kaffe/kaffevm/exception.c:1.103 Sun Jun 12 11:15:07 2005 +++ kaffe/kaffe/kaffevm/exception.c Sat Mar 4 17:51:04 2006 @@ -67,10 +67,6 @@ } #define FRAMEOBJECT(O, F, E) (O) = vmExcept_getSyncObj((VmExceptHandler*)(F)) - - -#define DISPATCH_EXCEPTION(F, H, E) vmExcept_setPC((VmExceptHandler *)(F), (H)); \ - vmExcept_jumpToHandler((VmExceptHandler *)(F)); /* Does not return */ #else #define DISPATCH_EXCEPTION(F,H,E) thread_data->exceptObj = NULL;\ @@ -112,7 +108,7 @@ eh->frame.jni.fp = fp; } -static void +void vmExcept_jumpToHandler(VmExceptHandler* frame) { JTHREAD_LONGJMP(frame->jbuf, 1); @@ -457,7 +453,7 @@ /* If handler found, call it */ if (foundHandler) { thread_data->needOnStack = STACK_HIGH; - DISPATCH_EXCEPTION(frame->fp, handler, eobj); /* doesn't return */ + engine_dispatchException(frame->fp, handler, eobj); /* doesn't return */ } #if defined(ENABLE_JVMPI) Index: kaffe/kaffe/kaffevm/exception.h diff -u kaffe/kaffe/kaffevm/exception.h:1.34 kaffe/kaffe/kaffevm/exception.h:1.35 --- kaffe/kaffe/kaffevm/exception.h:1.34 Wed Aug 10 21:17:48 2005 +++ kaffe/kaffe/kaffevm/exception.h Sat Mar 4 17:51:04 2006 @@ -116,6 +116,7 @@ void vmExcept_setSyncObj(VmExceptHandler* eh, struct Hjava_lang_Object* syncobj); void vmExcept_setPC(volatile VmExceptHandler* eh, u4 pc); u4 vmExcept_getPC(const VmExceptHandler* eh); +void vmExcept_jumpToHandler(VmExceptHandler* frame); #endif Index: kaffe/kaffe/kaffevm/intrp/machine.c diff -u kaffe/kaffe/kaffevm/intrp/machine.c:1.54 kaffe/kaffe/kaffevm/intrp/machine.c:1.55 --- kaffe/kaffe/kaffevm/intrp/machine.c:1.54 Wed Sep 28 02:02:14 2005 +++ kaffe/kaffe/kaffevm/intrp/machine.c Sat Mar 4 17:51:04 2006 @@ -250,7 +250,8 @@ /* Calculate number of arguments */ idx = sizeofSigMethod(meth, false); if (idx == -1) { - throwError(&einfo); + postException(&einfo, JAVA_LANG(InternalError)); + throwError(&einfo); } idx += (methaccflags & ACC_STATIC ? 0 : 1); Index: kaffe/kaffe/kaffevm/intrp/methodcalls.c diff -u kaffe/kaffe/kaffevm/intrp/methodcalls.c:1.10 kaffe/kaffe/kaffevm/intrp/methodcalls.c:1.11 --- kaffe/kaffe/kaffevm/intrp/methodcalls.c:1.10 Tue Jul 5 17:20:40 2005 +++ kaffe/kaffe/kaffevm/intrp/methodcalls.c Sat Mar 4 17:51:04 2006 @@ -26,6 +26,7 @@ #include "soft.h" #include "external.h" #include "jni_i.h" +#include "exception.h" void * engine_buildTrampoline (Method *meth, void **where, errorInfo *einfo UNUSED) @@ -84,7 +85,36 @@ Method *meth = (Method *)call->function; if ((meth->accflags & ACC_NATIVE) == 0) { - virtualMachine(meth, (slots*)(call->args+2), (slots*)call->ret, THREAD_DATA()); + jint i; + jint numArgs; + errorInfo einfo; + + /* Calculate number of arguments */ + numArgs = sizeofSigMethod(meth, false); + if (numArgs == -1) { + postException(&einfo, JAVA_LANG(InternalError)); + throwError(&einfo); + } + numArgs += (meth->accflags & ACC_STATIC ? 0 : 1); + + jvalue *newargs = (jvalue *)alloca(sizeof(jvalue) * numArgs); + jvalue *curarg = newargs; + for (i = 2; i < call->nrargs; i++, curarg++) + { + switch (call->calltype[i]) + { + case 'J': + case 'D': + *curarg = call->args[i]; + curarg++; + break; + default: + *curarg = call->args[i]; + break; + } + } + virtualMachine(meth, (slots*)newargs, (slots*)call->ret, THREAD_DATA()); + } else { Hjava_lang_Object* syncobj = 0; @@ -189,3 +219,10 @@ } +void engine_dispatchException(uintp framePointer, + uintp handler, + struct Hjava_lang_Throwable *throwable) +{ + vmExcept_setPC((VmExceptHandler *)framePointer, handler); + vmExcept_jumpToHandler((VmExceptHandler *)framePointer); /* Does not return */ +} Index: kaffe/kaffe/kaffevm/intrp/methodcalls.h diff -u kaffe/kaffe/kaffevm/intrp/methodcalls.h:1.1 kaffe/kaffe/kaffevm/intrp/methodcalls.h:1.2 --- kaffe/kaffe/kaffevm/intrp/methodcalls.h:1.1 Thu Aug 19 19:29:03 2004 +++ kaffe/kaffe/kaffevm/intrp/methodcalls.h Sat Mar 4 17:51:04 2006 @@ -20,6 +20,10 @@ void engine_callMethod (callMethodInfo *call); +void engine_dispatchException(uintp framePointer, + uintp handler, + struct Hjava_lang_Throwable *throwable); + /* * extra args the engine wants to pass when using callMethodA / callMethodV */ Index: kaffe/kaffe/kaffevm/jit/methodcalls.c diff -u kaffe/kaffe/kaffevm/jit/methodcalls.c:1.10 kaffe/kaffe/kaffevm/jit/methodcalls.c:1.11 --- kaffe/kaffe/kaffevm/jit/methodcalls.c:1.10 Sat May 7 16:20:11 2005 +++ kaffe/kaffe/kaffevm/jit/methodcalls.c Sat Mar 4 17:51:07 2006 @@ -197,3 +197,14 @@ call->ret->j = 0; sysdepCallMethod (call); } + +void +engine_dispatchException (uintp framePointer, uintp handler, + struct Hjava_lang_Throwable *throwable) +{ + /* I do not like the following line. I think that the interpreter + * can be adapted so that we do not need to include that line in the JIT. + */ + THREAD_DATA()->exceptObj = NULL; + CALL_KAFFE_EXCEPTION(framePointer, handler, throwable); +} Index: kaffe/kaffe/kaffevm/jni/jni.c diff -u kaffe/kaffe/kaffevm/jni/jni.c:1.39 kaffe/kaffe/kaffevm/jni/jni.c:1.40 --- kaffe/kaffe/kaffevm/jni/jni.c:1.39 Thu Aug 18 22:31:32 2005 +++ kaffe/kaffe/kaffevm/jni/jni.c Sat Mar 4 17:51:07 2006 @@ -318,6 +318,7 @@ if (obj != NULL) ADD_REF(obj); + END_EXCEPTION_HANDLING(); return (obj); } Index: kaffe/kaffe/kaffevm/jni/jnirefs.h diff -u kaffe/kaffe/kaffevm/jni/jnirefs.h:1.3 kaffe/kaffe/kaffevm/jni/jnirefs.h:1.4 --- kaffe/kaffe/kaffevm/jni/jnirefs.h:1.3 Sat May 14 21:46:36 2005 +++ kaffe/kaffe/kaffevm/jni/jnirefs.h Sat Mar 4 17:51:07 2006 @@ -14,7 +14,7 @@ #include "gtypes.h" -#define DEFAULT_JNIREFS_NUMBER 61 +#define DEFAULT_JNIREFS_NUMBER 16 typedef struct _jnirefs { int next; _______________________________________________ kaffe mailing list kaffe@kaffe.org http://kaffe.org/cgi-bin/mailman/listinfo/kaffe