PatchSet 4123 Date: 2003/10/25 12:52:41 Author: hkraemer Branch: HEAD Tag: (none) Log: miscellaneous small fixes
Members: ChangeLog:1.1715->1.1716 config/arm/common.h:1.7->1.8 config/arm/trampolines.c:1.5->1.6 config/arm/linux/jit-md.h:1.6->1.7 config/arm/linux/md.h:1.5->1.6 config/sparc/jit.h:1.7->1.8 include/jni.h:1.22->1.23 include/jni_cpp.h:1.6->1.7 kaffe/kaffevm/access.c:1.3->1.4 libraries/clib/net/Makefile.am:1.13->1.14 libraries/clib/net/Makefile.in:1.86->1.87 libraries/javalib/java/awt/MouseEvt.java:1.7->1.8 libraries/javalib/java/net/URLClassLoader.java:1.12->1.13 Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.1715 kaffe/ChangeLog:1.1716 --- kaffe/ChangeLog:1.1715 Fri Oct 24 16:42:09 2003 +++ kaffe/ChangeLog Sat Oct 25 12:52:41 2003 @@ -1,3 +1,44 @@ +2003-10-25 Helmer Kraemer <[EMAIL PROTECTED]> + + * config/arm/linux/jit-md.h: + removed now unnecessary signal stuff, corrected the definition of + the FIRSTFRAME macro + + * config/arm/linux/md.h: + include necessary signal related headers, corrected the definition + of the SIGNAL_ARGS macro + + * config/arm/trampolines.c: + (arm_do_fixup_trampoline) create a stack frame for the trampoline + + * config/arm/common.h: + (sysdepCallMethod) fixed passing of 64bit parameters, made asm + statements volatile so gcc doesn't optimize them away + + * config/sparc/jit.h: + (CALL_KAFFE_EXCEPTION) removed wrong quote + + * kaffe/kaffevm/access.c: + (checkAccess) properly grant access to inherited inner classes + that are protected + + * include/jni.h, include/jni_cpp.h: + added missing c++ functions for the VM Invocation Interface + + * libraries/javalib/java/awt/MouseEvt.java: + (computeMouseTarget) properly translate the mouse position + when the mouse is inside of a container + + Reported by: Ross Martin <[EMAIL PROTECTED]> + + * libraries/javalib/java/net/URLClassLoader.java: + (getJar) immediately return if the url denotes a local file + that doesn't exist + + * libraries/clib/net/Makefile.am, libraries/clib/net/Makefile.in: + (libnet_la_LDADD) make sure that symbols starting with gnu are + exported + 2003-10-24 Dalibor Topic <[EMAIL PROTECTED]> * libraries/javalib/java/util/zip/ZipInputStream.java: Index: kaffe/config/arm/common.h diff -u kaffe/config/arm/common.h:1.7 kaffe/config/arm/common.h:1.8 --- kaffe/config/arm/common.h:1.7 Tue Sep 30 19:50:54 2003 +++ kaffe/config/arm/common.h Sat Oct 25 12:52:42 2003 @@ -36,76 +36,53 @@ register int r2 asm("r2"); register int r3 asm("r3"); register double f0 asm("f0"); + default: { int *args = extraargs; int argidx = 4; - if (call->callsize[3] == 2) { - *args++ = (call->args[argidx].j) >> 32; - } for(; argidx < call->nrargs; ++argidx) { - if (call->callsize[argidx]) { - *args++ = call->args[argidx].i; - if (call->callsize[argidx] == 2) - *args++ = (call->args[argidx].j) >> 32; - } + *args++ = call->args[argidx].i; } } case 4: - if (call->callsize[3]) { - r3 = call->args[3].i; - if (call->callsize[3] == 2) - *extraargs = (call->args[3].j) >> 32; - } + r3 = call->args[3].i; case 3: - if (call->callsize[2]) { - r2 = call->args[2].i; - if (call->callsize[2] == 2) - r3 = (call->args[2].j) >> 32; - } + r2 = call->args[2].i; case 2: - if (call->callsize[1]) { - r1 = call->args[1].i; - if (call->callsize[1] == 2) - r2 = (call->args[1].j) >> 32; - } + r1 = call->args[1].i; case 1: - if (call->callsize[0]) { - r0 = call->args[0].i; - if (call->callsize[0] == 2) - r1 = (call->args[0].j) >> 32; - } + r0 = call->args[0].i; case 0: - asm ("mov lr, pc\n" -" mov pc, %3\n" - : "=r" (r0), "=r" (r1), "=f" (f0) - : "r" (call->function), - "0" (r0), "1" (r1), "r" (r2), "r" (r3) - : "ip", "rfp", "sl", "fp", "lr" - ); - switch(call->rettype) + asm volatile ("mov lr, pc\n" +" mov pc, %3\n" + : "=r" (r0), "=r" (r1), "=f" (f0) + : "r" (call->function), + "0" (r0), "1" (r1), "r" (r2), "r" (r3) + : "ip", "rfp", "sl", "fp", "lr"); + switch (call->rettype) { + case 'V': + break; + case 'D': - asm("stfd %1,%0" : "=m" (call->ret->d) : "f" (f0)); - break; + asm volatile ("stfd %1,%0" : "=m" (call->ret->d) : "f" (f0)); + break; + case 'F': - asm("stfs %1,%0" : "=m" (call->ret->f) : "f" (f0)); - break; - /* - * XXX doesn't seem to be necessary to special case 'L', - * since its just another 32bit int, right !??!?? - case 'L': - call->ret->l = r0; - break; - */ + asm volatile ("stfs %1,%0" : "=m" (call->ret->f) : "f" (f0)); + break; + case 'J': - (&call->ret->i)[1] = r1; - /* follow through */ + (&call->ret->i)[1] = r1; + (&call->ret->i)[0] = r0; + break; + default: - call->ret->i = r0; + call->ret->i = r0; + break; } - break; - } + } } #endif Index: kaffe/config/arm/trampolines.c diff -u kaffe/config/arm/trampolines.c:1.5 kaffe/config/arm/trampolines.c:1.6 --- kaffe/config/arm/trampolines.c:1.5 Thu Sep 18 16:46:25 2003 +++ kaffe/config/arm/trampolines.c Sat Oct 25 12:52:42 2003 @@ -46,18 +46,33 @@ #else C_FUNC_NAME(arm_do_fixup_trampoline) ": \n" #endif -" stmdb sp!,{r0,r1,r2,r3,lr}\n" +" stmdb sp!,{r0,r1,r2,r3,fp,ip,lr}\n" +" add fp, sp, #28\n" " mov r0,ip\n" " bl " C_FUNC_NAME(soft_fixup_trampoline) " \n" -" mov ip, r0\n" -" ldmia sp!,{r0,r1,r2,r3,lr}\n" -" mov pc, ip\n" +" str r0, [sp, #-4]\n" +" ldmia sp!,{r0,r1,r2,r3,fp,ip,lr}\n" +" ldr pc, [sp, #-32]\n" END_ASM_FUNC() ); #else - +/* + * We need to create a seperate stack frame for the trampoline + * so that we consider it as a seperate function when creating + * a backtrace. Therefore, we have to push the fp and adjust it + * according to the sp afterwards (we can't use the ip for this, + * since that holds the method that is to be translated). Since + * kaffe expects the stackframe to also contain the ip (since it's + * normally used to save the sp), we have to push that one too, + * although this trampoline doesn't use it itself. Removing the + * stackframe is a little bit tricky, since we have to restore + * all registers, but need to get the tranlated code into pc. + * Therefore, the address of the translated code is pushed on + * the stack, then the registers are restored and the saved + * address is loaded into the pc afterwards. + */ asm( START_ASM_FUNC() C_FUNC_NAME(arm_do_fixup_trampoline) "\n" #ifdef __riscos__ @@ -65,12 +80,13 @@ #else C_FUNC_NAME(arm_do_fixup_trampoline) ": \n" #endif -" stmdb sp!,{r0,r1,r2,r3,lr}\n" +" stmdb sp!,{r0,r1,r2,r3,fp,ip,lr}\n" +" add fp, sp, #28\n" " mov r0,ip\n" " bl " C_FUNC_NAME(soft_fixup_trampoline) " (PLT) \n" -" mov ip, r0\n" -" ldmia sp!,{r0,r1,r2,r3,lr}\n" -" mov pc, ip\n" +" str r0, [sp, #-4]\n" +" ldmia sp!,{r0,r1,r2,r3,fp,ip,lr}\n" +" ldr pc, [sp, #-32]\n" END_ASM_FUNC() ); Index: kaffe/config/arm/linux/jit-md.h diff -u kaffe/config/arm/linux/jit-md.h:1.6 kaffe/config/arm/linux/jit-md.h:1.7 --- kaffe/config/arm/linux/jit-md.h:1.6 Tue Sep 30 19:50:54 2003 +++ kaffe/config/arm/linux/jit-md.h Sat Oct 25 12:52:42 2003 @@ -18,34 +18,7 @@ #include "arm/jit.h" #undef FIRSTFRAME -#define FIRSTFRAME(f, o) (f) = *(exceptionFrame *)__builtin_frame_address(0) - -/**/ -/* Extra exception handling information. */ -/**/ -#if defined(HAVE_FEATURES_H) -#include <features.h> -#endif -#if defined(HAVE_ASM_SIGNAL_H) && !defined(__GLIBC__) -#include <asm/signal.h> -#endif -#if defined(HAVE_SIGNAL_H) -#include <signal.h> -#endif -#if defined(HAVE_ASM_SIGCONTEXT_H) && !defined(__GLIBC__) -#include <asm/sigcontext.h> -#endif -#if defined(HAVE_SIGCONTEXT_H) -#include <sigcontext.h> -#endif - -/* - * newer Linux kernel actually implement SA_SIGINFO. - * But we don't need it, so let's turn it off - */ -#if defined(SA_SIGINFO) -#undef SA_SIGINFO -#endif +#define FIRSTFRAME(f, o) (f) = *(exceptionFrame *)((uintp)__builtin_frame_address(0) - sizeof(exceptionFrame)) #define EXCEPTIONPROTO SIGNAL_ARGS(sig, ctx) Index: kaffe/config/arm/linux/md.h diff -u kaffe/config/arm/linux/md.h:1.5 kaffe/config/arm/linux/md.h:1.6 --- kaffe/config/arm/linux/md.h:1.5 Tue Sep 30 19:50:54 2003 +++ kaffe/config/arm/linux/md.h Sat Oct 25 12:52:42 2003 @@ -15,16 +15,31 @@ #include "arm/common.h" #include "arm/threads.h" +#ifdef HAVE_SIGNAL_H +#include <signal.h> +#endif + +#ifdef HAVE_SIGCONTEXT_H +#include <sigcontext.h> +#endif + +/* + * newer Linux kernel actually implement SA_SIGINFO. + * But we don't need it, so let's turn it off + */ +#if defined(SA_SIGINFO) +#undef SA_SIGINFO +#endif /* Function prototype for signal handlers */ #if defined(HAVE_STRUCT_SIGCONTEXT_STRUCT) && !defined(__GLIBC__) /* Linux < 2.1.1 */ #define SIGNAL_ARGS(sig, ctx) \ - int sig, struct sigcontext_struct ctx + int sig, int arm_r1, int arm_r2, int arm_r3, struct sigcontext_struct ctx #elif defined(HAVE_STRUCT_SIGCONTEXT) || defined(__GLIBC__) /* Linux >= 2.1.1 or Linux 2.0.x with glibc2 */ #define SIGNAL_ARGS(sig, ctx) \ - int sig, struct sigcontext ctx + int sig, int arm_r1, int arm_r2, int arm_r3, struct sigcontext ctx #else #error Do not know how to define SIGNAL_ARGS #endif Index: kaffe/config/sparc/jit.h diff -u kaffe/config/sparc/jit.h:1.7 kaffe/config/sparc/jit.h:1.8 --- kaffe/config/sparc/jit.h:1.7 Sun Oct 5 00:21:51 2003 +++ kaffe/config/sparc/jit.h Sat Oct 25 12:52:43 2003 @@ -66,7 +66,7 @@ " mov %2,%%fp \n" \ " jmpl %1,%%g0 \n" \ " restore %0,0,%%o0 \n" \ - " : : "r" (o1=(int)(O)), "r" (o2=(int)(H)), "r" (o3=(int)(F))); \ + : : "r" (o1=(int)(O)), "r" (o2=(int)(H)), "r" (o3=(int)(F))); \ asm volatile("" : : "r"(o1), "r"(o2), "r"(o3)); \ } while (0) Index: kaffe/include/jni.h diff -u kaffe/include/jni.h:1.22 kaffe/include/jni.h:1.23 --- kaffe/include/jni.h:1.22 Sat Aug 30 23:57:09 2003 +++ kaffe/include/jni.h Sat Oct 25 12:52:39 2003 @@ -324,7 +324,7 @@ void* reserved1; void* reserved2; jint (*DestroyJavaVM) (JavaVM*); - jint (*AttachCurrentThread) (JavaVM*, JNIEnv**, ThreadAttachArgs*); + jint (*AttachCurrentThread) (JavaVM*, void**, ThreadAttachArgs*); jint (*DetachCurrentThread) (JavaVM*); jint (*GetEnv) (JavaVM*, void**, jint); void* reserved3; // AttachCurrentThreadAsDaemon @@ -547,6 +547,12 @@ struct JavaVM_ { const struct JNIInvokeInterface* functions; +#ifdef __cplusplus + jint DestroyJavaVM(void); + jint AttachCurrentThread(void**, ThreadAttachArgs*); + jint DetachCurrentThread(void); + jint GetEnv(void**, jint); +#endif }; struct JavaVMInitArgs { Index: kaffe/include/jni_cpp.h diff -u kaffe/include/jni_cpp.h:1.6 kaffe/include/jni_cpp.h:1.7 --- kaffe/include/jni_cpp.h:1.6 Mon Aug 25 19:14:34 2003 +++ kaffe/include/jni_cpp.h Sat Oct 25 12:52:39 2003 @@ -1206,4 +1206,23 @@ return (functions->ExceptionCheck(this)); } +inline jint JavaVM::DestroyJavaVM(void) +{ + return (functions->DestroyJavaVM(this)); +} + +inline jint JavaVM::AttachCurrentThread(void** env, ThreadAttachArgs* args) +{ + return (functions->AttachCurrentThread(this, env, args)); +} + +inline jint JavaVM::DetachCurrentThread(void) +{ + return (functions->DetachCurrentThread(this)); +} + +inline jint JavaVM::GetEnv(void** envPtr, jint version) +{ + return (functions->GetEnv(this, envPtr, version)); +} #endif Index: kaffe/kaffe/kaffevm/access.c diff -u kaffe/kaffe/kaffevm/access.c:1.3 kaffe/kaffe/kaffevm/access.c:1.4 --- kaffe/kaffe/kaffevm/access.c:1.3 Mon Sep 22 15:31:24 2003 +++ kaffe/kaffe/kaffevm/access.c Sat Oct 25 12:52:38 2003 @@ -106,6 +106,8 @@ /* Same class. */ class_acc = 1; slot_acc = 1; + + return 1; } else if( target->accflags & ACC_PUBLIC ) { @@ -116,7 +118,29 @@ { class_acc = 1; } + else if( (target->this_inner_index >= 0) && + (target->accflags & ACC_PROTECTED) ) + { + /* check whether target is non private innerclass of superclass */ + innerClass *ic = &target->inner_classes[target->this_inner_index]; + + if( ic->outer_class ) + { + Hjava_lang_Class *outer; + errorInfo einfo; + outer = getClass(ic->outer_class, target, &einfo); + if( outer != NULL ) + { + class_acc = instanceof(outer, context); + } + else + { + discardErrorInfo(&einfo); + } + } + } + if((context->packageLength == target->packageLength) && !strncmp(context->name->data, target->name->data, @@ -147,7 +171,7 @@ same_package && (target->this_inner_index >= 0) ) { - slot_acc = 1; + slot_acc = 1; } else if( context->this_inner_index >= 0 ) { Index: kaffe/libraries/clib/net/Makefile.am diff -u kaffe/libraries/clib/net/Makefile.am:1.13 kaffe/libraries/clib/net/Makefile.am:1.14 --- kaffe/libraries/clib/net/Makefile.am:1.13 Sat Aug 30 14:18:25 2003 +++ kaffe/libraries/clib/net/Makefile.am Sat Oct 25 12:52:40 2003 @@ -10,7 +10,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/kaffe -I$(top_builddir)/include -libnet_la_LDFLAGS = $(KLIBFLAGS) -module -release $(KVER) -export-symbols-regex "^([Jj]ava|kaffe)_" +libnet_la_LDFLAGS = $(KLIBFLAGS) -module -release $(KVER) -export-symbols-regex "^([Jj]ava|kaffe|gnu)_" libnet_la_LIBADD = $(NET_LIBS) $(top_builddir)/replace/libreplace.la libnet_la_SOURCES = \ InetAddressImpl.c \ Index: kaffe/libraries/clib/net/Makefile.in diff -u kaffe/libraries/clib/net/Makefile.in:1.86 kaffe/libraries/clib/net/Makefile.in:1.87 --- kaffe/libraries/clib/net/Makefile.in:1.86 Sun Aug 31 22:09:15 2003 +++ kaffe/libraries/clib/net/Makefile.in Sat Oct 25 12:52:40 2003 @@ -251,7 +251,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/kaffe -I$(top_builddir)/include -libnet_la_LDFLAGS = $(KLIBFLAGS) -module -release $(KVER) -export-symbols-regex "^([Jj]ava|kaffe)_" +libnet_la_LDFLAGS = $(KLIBFLAGS) -module -release $(KVER) -export-symbols-regex "^([Jj]ava|kaffe|gnu)_" libnet_la_LIBADD = $(NET_LIBS) $(top_builddir)/replace/libreplace.la libnet_la_SOURCES = \ InetAddressImpl.c \ Index: kaffe/libraries/javalib/java/awt/MouseEvt.java diff -u kaffe/libraries/javalib/java/awt/MouseEvt.java:1.7 kaffe/libraries/javalib/java/awt/MouseEvt.java:1.8 --- kaffe/libraries/javalib/java/awt/MouseEvt.java:1.7 Wed Feb 19 15:27:23 2003 +++ kaffe/libraries/javalib/java/awt/MouseEvt.java Sat Oct 25 12:52:39 2003 @@ -58,10 +58,9 @@ static Component computeMouseTarget ( Container toplevel, int x, int y ) { Container cntr; Component c, tgt; - int i, xm = 0, ym = 0, u, v; + int i, xm = 0, ym = 0; tgt = cntr = toplevel; - xMouseTgt = yMouseTgt = 0; // This is a workaround for no-native-wm Frames with childs extending the Frame size // (the Frame deco border is no separate Component, just "protected" by the Frame insets) @@ -77,8 +76,8 @@ if ( ((c.flags & Component.IS_SHOWING) == Component.IS_SHOWING) && (x >= c.x) && (y >= c.y) && (x <= (c.x+c.width)) && (y <= (c.y+c.height)) ) { - u = x - c.x; - v = y - c.y; + int u = x - c.x; + int v = y - c.y; if ( c.contains( u, v) ){ // contains() might be reimplemented @@ -104,8 +103,6 @@ // so it gets the event, whether it cn handle // it, or not. tgt = c; - xMouseTgt = xm; - yMouseTgt = ym; break; } @@ -113,7 +110,10 @@ } i++; } - + + xMouseTgt = xm; + yMouseTgt = ym; + return tgt; } Index: kaffe/libraries/javalib/java/net/URLClassLoader.java diff -u kaffe/libraries/javalib/java/net/URLClassLoader.java:1.12 kaffe/libraries/javalib/java/net/URLClassLoader.java:1.13 --- kaffe/libraries/javalib/java/net/URLClassLoader.java:1.12 Sat Sep 13 21:30:14 2003 +++ kaffe/libraries/javalib/java/net/URLClassLoader.java Sat Oct 25 12:52:40 2003 @@ -227,6 +227,8 @@ jarFiles.put(url, file); return file; } + + return null; } // Download JAR file _______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe