PatchSet 4673 
Date: 2004/04/22 08:13:54
Author: hkraemer
Branch: HEAD
Tag: (none) 
Log:
fix for unix-pthreads

Members: 
        ChangeLog:1.2249->1.2250 
        kaffe/kaffevm/exception.c:1.82->1.83 
        kaffe/kaffevm/exception.h:1.26->1.27 
        kaffe/kaffevm/thread.c:1.61->1.62 
        kaffe/kaffevm/thread.h:1.18->1.19 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.2249 kaffe/ChangeLog:1.2250
--- kaffe/ChangeLog:1.2249      Wed Apr 21 15:57:53 2004
+++ kaffe/ChangeLog     Thu Apr 22 08:13:54 2004
@@ -1,3 +1,16 @@
+2004-04-22  Helmer Kraemer  <[EMAIL PROTECTED]>
+
+       * kaffe/kaffevm/thread.c, kaffe/kaffevm/thread.h
+       remove some NONRETURNING attributes as they break unix-pthreads
+
+       * kaffe/kaffevm/exception.h
+       (vmExcept_JNIContains, vmExcept_setJNIFrame, VmExceptHandler):
+       change type of fp to uintp as it holds the value of a register
+
+       * kaffe/kaffevm/exception.c
+       (findExceptionBlockInMethod): don't use pointers before checking
+       whether they're != NULL
+       
 2004-04-21  Guilhem Lavaux <[EMAIL PROTECTED]>
 
        * kaffe/kaffevm/soft.c
Index: kaffe/kaffe/kaffevm/exception.c
diff -u kaffe/kaffe/kaffevm/exception.c:1.82 kaffe/kaffe/kaffevm/exception.c:1.83
--- kaffe/kaffe/kaffevm/exception.c:1.82        Mon Apr  5 17:43:38 2004
+++ kaffe/kaffe/kaffevm/exception.c     Thu Apr 22 08:13:56 2004
@@ -335,6 +335,9 @@
             lastJniFrame && !vmExcept_isJNIFrame(lastJniFrame);
             lastJniFrame = lastJniFrame->prev);
 
+       DBG(ELOOKUP,
+               dprintf ("dispatchException(): lastJniFrame is %p, fp 0x%x\n", 
lastJniFrame, (lastJniFrame?lastJniFrame->frame.jni.fp:0)); );
+
        /*
         * now walk up the stack 
         */
@@ -346,7 +349,7 @@
                /*
                 * if we reach the last jni frame, we're done
                 */
-               if (lastJniFrame && vmExcept_JNIContains(lastJniFrame, 
(void*)frame->fp)) {
+               if (lastJniFrame && vmExcept_JNIContains(lastJniFrame, frame->fp)) {
                        thread_data->exceptPtr = lastJniFrame;
                        vmExcept_jumpToHandler(lastJniFrame); /* doesn't return */
                }
@@ -513,18 +516,18 @@
 {
        jexceptionEntry* eptr;
        Hjava_lang_Class* cptr;
-       int i;
+       unsigned int i;
 
        assert(handler);
 
-       eptr = &ptr->exception_table->entry[0];
-
        /* Right method - look for exception */
        if (ptr->exception_table == 0) {
 DBG(ELOOKUP,
                dprintf("%s.%s has no handlers.\n", ptr->class->name->data, 
ptr->name->data); )
                return (false);
        }
+
+       eptr = &ptr->exception_table->entry[0];
 
 DBG(ELOOKUP,
        dprintf("%s.%s has %d handlers (throw was pc=%#lx):\n",
Index: kaffe/kaffe/kaffevm/exception.h
diff -u kaffe/kaffe/kaffevm/exception.h:1.26 kaffe/kaffe/kaffevm/exception.h:1.27
--- kaffe/kaffe/kaffevm/exception.h:1.26        Sun Apr  4 06:11:56 2004
+++ kaffe/kaffe/kaffevm/exception.h     Thu Apr 22 08:13:56 2004
@@ -78,7 +78,7 @@
                struct
                {
                        /* Frame address for JNI entry function. */
-                       void *                          fp;
+                       uintp                           fp;
                } jni;
                /*
                 * The intrp bits are only valid if meth != 0 && meth
@@ -105,8 +105,8 @@
 extern void initExceptions(void);
 
 static inline bool vmExcept_isJNIFrame(VmExceptHandler* eh) __UNUSED__;
-static inline bool vmExcept_JNIContains(VmExceptHandler* eh, void *pc) __UNUSED__;
-static inline void vmExcept_setJNIFrame(VmExceptHandler* eh, void *fp) __UNUSED__;
+static inline bool vmExcept_JNIContains(VmExceptHandler* eh, uintp fp) __UNUSED__;
+static inline void vmExcept_setJNIFrame(VmExceptHandler* eh, uintp fp) __UNUSED__;
 static inline struct _methods* vmExcept_getMeth(VmExceptHandler* eh) __UNUSED__;
 static inline void vmExcept_setMeth(VmExceptHandler* eh, struct _methods* m) 
__UNUSED__;
 static inline void vmExcept_setSyncObj(VmExceptHandler* eh, struct Hjava_lang_Object* 
syncobj) __UNUSED__;
@@ -123,7 +123,7 @@
 }
 
 static inline bool
-vmExcept_JNIContains(VmExceptHandler* eh, void *fp)
+vmExcept_JNIContains(VmExceptHandler* eh, uintp fp)
 {
        assert(eh);
        assert(eh->meth == VMEXCEPTHANDLER_KAFFEJNI_HANDLER);
@@ -133,7 +133,7 @@
 }
 
 static inline void 
-vmExcept_setJNIFrame(VmExceptHandler* eh, void *fp)
+vmExcept_setJNIFrame(VmExceptHandler* eh, uintp fp)
 {
        assert(eh);
        assert(fp != 0);
Index: kaffe/kaffe/kaffevm/thread.c
diff -u kaffe/kaffe/kaffevm/thread.c:1.61 kaffe/kaffe/kaffevm/thread.c:1.62
--- kaffe/kaffe/kaffevm/thread.c:1.61   Wed Apr 21 15:58:00 2004
+++ kaffe/kaffe/kaffevm/thread.c        Thu Apr 22 08:13:56 2004
@@ -358,7 +358,6 @@
  */
 static
 void
-NONRETURNING
 firstStartThread(void* arg UNUSED)
 {
        Hjava_lang_Thread* tid;
Index: kaffe/kaffe/kaffevm/thread.h
diff -u kaffe/kaffe/kaffevm/thread.h:1.18 kaffe/kaffe/kaffevm/thread.h:1.19
--- kaffe/kaffe/kaffevm/thread.h:1.18   Mon Mar 29 21:13:33 2004
+++ kaffe/kaffe/kaffevm/thread.h        Thu Apr 22 08:13:56 2004
@@ -34,7 +34,7 @@
 void    initNativeThreads(int nativestacksize);
 void   yieldThread(void);
 void   sleepThread(jlong);
-void   exitThread(void) NONRETURNING;
+void   exitThread(void);
 bool   aliveThread(Hjava_lang_Thread*);
 jint   framesThread(Hjava_lang_Thread*);
 void   setPriorityThread(Hjava_lang_Thread*, jint);

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to