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

Reply via email to