a few finalizer testcases, old thread implementation uses now VMThread, no mor contex...
authorjowenn <none@none>
Wed, 16 Jun 2004 14:56:18 +0000 (14:56 +0000)
committerjowenn <none@none>
Wed, 16 Jun 2004 14:56:18 +0000 (14:56 +0000)
73 files changed:
Makefile.am
asmpart.h
builtin.c
global.h
headers.c
jit/codegen.inc
jit/i386/asmpart.S
jit/i386/codegen.c
jni.c
loader.c
main.c
nat/Makefile.am
nat/Runtime.c
nat/Thread.c
nat/VMClass.c
nat/gnu_java_net_PlainDatagramSocketImpl.h [new file with mode: 0644]
nat/gnu_java_net_PlainSocketImpl.h [new file with mode: 0644]
nat/gnu_java_nio_FileLockImpl.h
nat/gnu_java_nio_SelectorImpl.h
nat/gnu_java_nio_channels_FileChannelImpl.h [new file with mode: 0644]
nat/java_io_File.h
nat/java_io_FileDescriptor.h
nat/java_io_FileInputStream.h
nat/java_io_ObjectInputStream.h
nat/java_io_RandomAccessFile.h
nat/java_io_VMFile.h [new file with mode: 0644]
nat/java_io_VMObjectStreamClass.h
nat/java_lang_Class.h
nat/java_lang_Runtime.h
nat/java_lang_Thread.h
nat/java_lang_VMClass.h
nat/java_lang_VMRuntime.h [new file with mode: 0644]
nat/java_lang_VMString.h
nat/java_lang_VMThread.h [new file with mode: 0644]
nat/java_net_InetAddress.h
nat/java_nio_DirectByteBufferImpl.h
native.c
src/cacao/cacao.c
src/cacaoh/headers.c
src/native/include/java_lang_Thread.h
src/native/include/java_lang_VMThread.h [new file with mode: 0644]
src/native/jni.c
src/native/native.c
src/native/vm/Makefile.am
src/native/vm/VMClass.c
src/native/vm/VMRuntime.c
src/native/vm/VMThread.c
src/threads/green/locks.c
src/threads/green/threadio.c
src/threads/green/threads.c
src/threads/green/threads.h
src/toolbox/avl.c
src/vm/builtin.c
src/vm/global.h
src/vm/jit/asmpart.h
src/vm/jit/codegen.inc
src/vm/jit/i386/asmpart.S
src/vm/jit/i386/codegen.c
src/vm/loader.c
tests/fintest2.java [new file with mode: 0644]
tests/fintest2a.java [new file with mode: 0644]
tests/fintest3.java [new file with mode: 0644]
tests/fintest3a.java [new file with mode: 0644]
tests/fintest4.java [new file with mode: 0644]
tests/fintest4a.java [new file with mode: 0644]
tests/network/httpd/httpd.java
tests/stack/java/Makefile
tests/stack/nestedstaticinitializers2.java [new file with mode: 0644]
threads/locks.c
threads/thread.c
threads/thread.h
threads/threadio.c
toolbox/avl.c

index 6cd58dc9edc7e038b11d6bff93c23950c2fbfbee..e4d86bf1948a6b6e0e32975b0704dab1bf3b470e 100644 (file)
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 
-# $Id: Makefile.am 1145 2004-06-05 23:57:56Z twisti $
+# $Id: Makefile.am 1173 2004-06-16 14:56:18Z jowenn $
 
 @SET_MAKE@
 
@@ -113,6 +113,7 @@ nativetypes.hh jit/@ARCH_DIR@/offsets.h nativetable.hh: cacaoh Makefile.am Makef
        java.lang.String \
        java.lang.Class \
        java.io.FileDescriptor \
+       java.io.VMFile \
        gnu.java.nio.SelectorImpl \
        gnu.java.nio.FileLockImpl \
        gnu.java.lang.reflect.TypeSignature \
@@ -135,13 +136,12 @@ nativetypes.hh jit/@ARCH_DIR@/offsets.h nativetable.hh: cacaoh Makefile.am Makef
        java.io.FileWriter \
        java.net.NetworkInterface \
        java.net.SocketImpl \
-       java.net.PlainSocketImpl \
+       gnu.java.net.PlainSocketImpl \
        java.net.DatagramSocketImpl \
        java.net.InetAddress \
        java.net.DatagramPacket \
-       java.net.PlainDatagramSocketImpl \
+       gnu.java.net.PlainDatagramSocketImpl \
        java.nio.CharBufferImpl \
-       java.nio.channels.FileChannelImpl \
        java.nio.DoubleBufferImpl \
        java.nio.LongBufferImpl \
        java.nio.ByteOrder \
@@ -149,6 +149,7 @@ nativetypes.hh jit/@ARCH_DIR@/offsets.h nativetable.hh: cacaoh Makefile.am Makef
        java.nio.IntBufferImpl \
        java.nio.DirectByteBufferImpl \
        java.nio.FloatBufferImpl \
+       gnu.java.nio.channels.FileChannelImpl \
        java.sql.Connection \
        java.lang.Math \
        java.lang.StringBuffer \
@@ -190,7 +191,7 @@ nativetypes.hh jit/@ARCH_DIR@/offsets.h nativetable.hh: cacaoh Makefile.am Makef
        java.lang.reflect.Constructor \
        java.lang.reflect.Method \
        java.lang.ThreadGroup \
-       java.lang.Thread \
+       java.lang.VMThread \
        java.lang.VMDouble \
        java.lang.VMFloat \
        java.lang.Cloneable \
@@ -201,6 +202,7 @@ nativetypes.hh jit/@ARCH_DIR@/offsets.h nativetable.hh: cacaoh Makefile.am Makef
        java.lang.VMString \
        java.util.Properties \
        java.lang.Runtime \
+       java.lang.VMRuntime \
        java.lang.Throwable \
        java.lang.VMThrowable \
        gnu.java.security.x509.X509Certificate  \
index a7ca17e2019b3fe89b7966c2b1749031f535623e..ca98704c94db47a80a98f7a0695b51922685cf95 100644 (file)
--- a/asmpart.h
+++ b/asmpart.h
@@ -29,7 +29,7 @@
 
    Changes: Christian Thalinger
 
-   $Id: asmpart.h 1164 2004-06-12 13:32:49Z stefan $
+   $Id: asmpart.h 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -106,8 +106,10 @@ void asm_builtin_exittrace();
 #if defined(USE_THREADS) && defined(NATIVE_THREADS)
 extern threadcritnode asm_criticalsections;
 #endif
+
 void asm_getclassvalues_atomic(vftbl *super, vftbl *sub, castinfo *out);
 
+
 #endif /* _ASMPART_H */
 
 
index 6f99656c38b292b4c066fa086a096c729383bf79..ee0e36f2e1568204ab7fc71011e8cd8fa5eac809 100644 (file)
--- a/builtin.c
+++ b/builtin.c
@@ -34,7 +34,7 @@
    calls instead of machine instructions, using the C calling
    convention.
 
-   $Id: builtin.c 1113 2004-06-02 10:31:09Z twisti $
+   $Id: builtin.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -1814,7 +1814,10 @@ stacktraceelement *builtin_stacktrace_copy(stacktraceelement **el,stacktraceelem
        size_t s;
        s=(end-begin);
        /*printf ("begin: %p, end: %p, diff: %ld, size :%ld\n",begin,end,s,s*sizeof(stacktraceelement));*/
+       *el=heap_allocate(sizeof(stacktraceelement)*(s+1), true, 0);
+#if 0
        *el=MNEW(stacktraceelement,s+1); /*GC*/
+#endif
        memcpy(*el,begin,(end-begin)*sizeof(stacktraceelement));
        (*el)[s].method=0;
 #if defined(__GNUC__)
index 0998df46549f74c68d856b8fec50f5dc87c537ea..7247302ba894d1391611be941e6bee284d65909c 100644 (file)
--- a/global.h
+++ b/global.h
@@ -31,7 +31,7 @@
             Philipp Tomsich
                        Edwin Steiner
 
-   $Id: global.h 1155 2004-06-09 16:28:52Z twisti $
+   $Id: global.h 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -611,6 +611,7 @@ struct methodinfo {                 /* method structure                       */
         /* should # method def'd and used be kept after static parse (will it be used?) */
        s4        subRedefs;
        s4        subRedefsUsed;
+       s4        nativelyoverloaded;           /*used in header.c and only valid there*/
 };
 
 
@@ -792,6 +793,7 @@ struct arraydescriptor {
 
 /* flag variables *************************************************************/
 
+extern bool cacao_initializing;
 extern bool compileall;
 extern bool runverbose;         
 extern bool verboseexception;         
index c3ef6f9384643b913334a5f461cb77e6cb8041fd..1726d5243101fcf1a07ca1a453b56de58993b7d3 100644 (file)
--- a/headers.c
+++ b/headers.c
@@ -29,7 +29,7 @@
    Changes: Mark Probst
             Philipp Tomsich
 
-   $Id: headers.c 1171 2004-06-12 15:04:31Z stefan $
+   $Id: headers.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -267,6 +267,39 @@ static void addoutputsize (int len)
        outputsize = newsize;
 }
 
+static void printOverloadPart(utf *desc)
+{
+       char *utf_ptr=desc->text;
+       u2 c;
+
+       fprintf(file,"__");
+       while ((c=utf_nextu2(&utf_ptr))!=')') {
+               switch (c) {
+                       case 'I':
+                       case 'S':
+                       case 'B':
+                       case 'C':
+                       case 'Z':
+                       case 'J':
+                       case 'F':
+                       case 'D': 
+                               fprintf (file, "%c",(char)c);
+                               break;
+                       case '[':
+                               fprintf(file,"_3");
+                               break;
+                       case 'L':
+                               putc('L',file);
+                               while ( (c=utf_nextu2(&utf_ptr)) != ';')
+                                       printIDpart (c);
+                               fprintf(file,"_2");
+                               break;
+                       case '(':
+                               break;
+                       default: panic ("invalid method descriptor");
+               }
+       }
+}
 
 static char *printtype(char *utf_ptr)
 {
@@ -409,13 +442,11 @@ static void printmethod(methodinfo *m)
        fprintf(file, " JNICALL Java_");
        printID(m->class->name);           
 
-       /* rename overloaded method */
-       if ((ident_count = searchidentchain_utf(m->name)))
-               fprintf(file, "%d", ident_count - 1);           
        chain_addlast(ident_chain, m->name);    
 
        fprintf(file, "_");
        printID(m->name);
+       if (m->nativelyoverloaded) printOverloadPart(m->descriptor);
        fprintf(file, "(JNIEnv *env");
        
        utf_ptr = m->descriptor->text + 1;
@@ -464,6 +495,9 @@ static void headerfile_generate(classinfo *c)
        char uclassname[1024];
        u2 i;
        methodinfo *m;                  
+       u2 i2;
+       methodinfo *m2;
+       u2 nativelyoverloaded;                  
                      
        /* store class in chain */                    
        chain_addlast(nativeclass_chain, c);
@@ -510,6 +544,27 @@ static void headerfile_generate(classinfo *c)
 
        /* create method-prototypes */
                                
+       /* find overloaded methods */
+       for (i = 0; i < c->methodscount; i++) {
+
+               m = &(c->methods[i]);
+
+               if (!(m->flags & ACC_NATIVE)) continue;
+               if (!m->nativelyoverloaded) {
+                       nativelyoverloaded=false;
+                       for (i2=i+1;i2<c->methodscount; i2++) {
+                               m2 = &(c->methods[i2]);
+                               if (!(m2->flags & ACC_NATIVE)) continue;
+                               if (m->name==m2->name) {
+                                       m2->nativelyoverloaded=true;
+                                       nativelyoverloaded=true;
+                               }
+                       }
+                       m->nativelyoverloaded=nativelyoverloaded;
+               }
+
+       }
+
        for (i = 0; i < c->methodscount; i++) {
 
                m = &(c->methods[i]);
@@ -570,6 +625,7 @@ static void printnativetableentry(methodinfo *m)
        printID(m->class->name);
        fprintf(file,"_");
        printID(m->name);
+       if (m->nativelyoverloaded) printOverloadPart(m->descriptor);
        fprintf(file,"\n   },\n");
 }
 
index b1fa389a8e8f2485a75221e307c848e04d22e270..2d5feff2224f97ee7b674796c8a59f505b0caa98 100644 (file)
@@ -48,7 +48,7 @@
    memory. All functions writing values into the data area return the offset
    relative the begin of the code area (start of procedure).   
 
-   $Id: codegen.inc 1165 2004-06-12 13:33:38Z stefan $
+   $Id: codegen.inc 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -139,7 +139,7 @@ struct _methodtree_element {
        void *endpc;
 };
 
-static struct avl_table *methodtree;
+static struct avl_table *methodtree=0;
 static int methodtree_comparator(const void *pc, const void *element,
                                                                 void *param);
 #endif
@@ -185,13 +185,17 @@ void codegen_init()
                methodtree = avl_create(methodtree_comparator, NULL, NULL);
 
                mte = NEW(methodtree_element);
-               mte->startpc = (void *) asm_calljavafunction;
-               mte->endpc = (void *) calljava_xhandler;
+
+               mte->startpc = asm_calljavafunction;
+               mte->endpc = asm_calljavafunction2-1;
+
                avl_insert(methodtree, mte);
 
                mte = NEW(methodtree_element);
-               mte->startpc = (void *) asm_calljavafunction2;
-               mte->endpc = (void *) calljava_xhandler2;
+
+               mte->startpc = asm_calljavafunction2;
+               mte->endpc = asm_call_jit_compiler-1;
+
                avl_insert(methodtree, mte);
        }
 #endif
@@ -659,6 +663,33 @@ static void codegen_finish(int mcodelen)
 }
 
 
+void codegen_insertNative(void *startpc,void *endpc) {
+               methodtree_element *mte;
+
+       if (!methodtree) {
+               methodtree_element *mte;
+
+               methodtree = avl_create(methodtree_comparator, NULL, NULL);
+
+               mte = NEW(methodtree_element);
+               mte->startpc = asm_calljavafunction;
+               mte->endpc = asm_calljavafunction2-1;
+               avl_insert(methodtree, mte);
+
+               mte = NEW(methodtree_element);
+               mte->startpc = asm_calljavafunction2;
+               mte->endpc = asm_call_jit_compiler-1;
+               avl_insert(methodtree, mte);
+       }
+
+
+               mte = NEW(methodtree_element);
+               mte->startpc = startpc;
+               mte->endpc = endpc;
+
+               if (avl_insert(methodtree, mte))
+                       panic("duplicate entry");
+}
 
 void dseg_display(s4 *s4ptr)
 {
index 6b0754f2611c74149e160a9b983b0165d8d4b208..7fb4844b87c4b41035e08f51281792aa7c0514e4 100644 (file)
@@ -29,7 +29,7 @@
             Reinhard Grafl
             Christian Thalinger
 
-   $Id: asmpart.S 1140 2004-06-05 20:58:14Z twisti $
+   $Id: asmpart.S 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -1179,6 +1179,13 @@ asm_switchstackandcall:
 
                
 Java_java_lang_VMSecurityManager_currentClassLoader:
+       mov  cacao_initializing,%eax
+       test %eax,%eax
+       jz   Java_java_lang_VMSecurityManager_cont
+
+       mov $0,%eax
+       ret
+Java_java_lang_VMSecurityManager_cont:
        lea  builtin_asm_getclassloader,%eax 
        push %eax       /*store collector function pointer*/
        jmp getClassContext_begin
@@ -1203,7 +1210,7 @@ getClassContext_begin:    /*start the real work*/
        addl $116, %edx
        push %edx /*esp+8*/ /*position of return address of native stub*/
        call builtin_asm_get_stackframeinfo
-       movl (%eax),%eax /*comment ??*/
+/*     movl (%eax),%eax*/ /*TEST*/
        push 0(%eax) /*esp+4*/ /*address of frame info block*/
        movl 124(%esp),%edx
 
@@ -1287,6 +1294,8 @@ getClassContext_checkLeave:
 getClassContext_nativeCall:
        movl $1,32(%esp)
        movl 4(%esp),%eax       /*get top most element on stackframe help information stack*/
+       test %eax,%eax
+       jz getClassContext_leave
        movl 0(%eax),%ecx 
        movl %ecx,4(%esp)
        addl $8,%eax
index 81ec9c28bc1e567d201d53c28abd8e385093966b..387fe306f1577f254bab645a4b5c279644d6e85a 100644 (file)
@@ -28,7 +28,7 @@
    Authors: Andreas Krall
             Christian Thalinger
 
-   $Id: codegen.c 1168 2004-06-12 14:58:25Z stefan $
+   $Id: codegen.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -4841,7 +4841,7 @@ void traverseStackInfo() {
 u1 *createnativestub(functionptr f, methodinfo *m)
 {
     u1 *s = CNEW(u1, NATIVESTUBSIZE);   /* memory to hold the stub            */
-
+    int addmethod=0;
     u1 *tptr;
     int i;
     int stackframesize = 4+12;           /* initial 4 bytes is space for jni env,
@@ -4849,7 +4849,7 @@ u1 *createnativestub(functionptr f, methodinfo *m)
     int stackframeoffset = 4;
 
     int p, t;
-
        mcodeptr = s;                       /* make macros work                   */
 
        if (m->flags & ACC_STATIC) {
@@ -4872,6 +4872,27 @@ u1 *createnativestub(functionptr f, methodinfo *m)
        if (m->flags & ACC_STATIC) {
        /* if class isn't yet initialized, do it */
                if (!m->class->initialized) {
+                       s4 *header=(s4*)s;
+                       *header = 0;/*extablesize*/
+                       header;
+                       *header = 0;/*line number table start*/
+                       header++;
+                       *header = 0;/*line number table size*/
+                       header++;
+                       *header = 0;/*fltsave*/
+                       header++;
+                       *header = 0;/*intsave*/
+                       header++;
+                       *header = 0;/*isleaf*/
+                       header++;
+                       *header = 0;/*issync*/
+                       header++;
+                       *header = 0;/*framesize*/
+                       header++;
+                       *header = m;/*methodpointer*/
+                       *header++;
+                       mcodeptr=s=header;
+                       addmethod=1;
                        /* call helper function which patches this code */
                        i386_mov_imm_reg((s4) m->class, REG_ITMP1);
                        i386_mov_imm_reg((s4) asm_check_clinit, REG_ITMP2);
@@ -5087,8 +5108,14 @@ u1 *createnativestub(functionptr f, methodinfo *m)
        i386_mov_imm_reg((s4) asm_handle_nat_exception, REG_ITMP3);
        i386_jmp_reg(REG_ITMP3);
 
+       if (addmethod) {
+               codegen_insertNative(s,mcodeptr);
+       }
+
 #if 0
-       dolog_plain("stubsize: %d (for %d params)\n", (s4) (mcodeptr - s), m->paramcount);
+       dolog_plain("native stubentry: %p, stubsize: %x (for %d params) --", (s4)s,(s4) (mcodeptr - s), m->paramcount);
+       utf_display(m->name);
+       dolog_plain("\n");
 #endif
 
 #if defined(STATISTICS)
diff --git a/jni.c b/jni.c
index 360ac4d9b304c6301de7271de012b3c835a0ffeb..15d1cd22d19a33cef7dba31718212b516e1859de 100644 (file)
--- a/jni.c
+++ b/jni.c
@@ -28,7 +28,7 @@
 
    Changes: Joseph Wenninger
 
-   $Id: jni.c 1112 2004-05-31 15:47:20Z jowenn $
+   $Id: jni.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -1927,17 +1927,24 @@ jmethodID GetStaticMethodID(JNIEnv *env, jclass clazz, const char *name, const c
 
 jobject CallStaticObjectMethod(JNIEnv *env, jclass clazz, jmethodID methodID, ...)
 {
-       log_text("JNI-Call: CallStaticObjectMethod");
+       jobject ret;
+       va_list vaargs;
 
-       return NULL;
+       /* log_text("JNI-Call: CallStaticObjectMethod");*/
+
+       va_start(vaargs, methodID);
+       ret = callObjectMethod(0, methodID, vaargs);
+       va_end(vaargs);
+
+       return ret;
 }
 
 
 jobject CallStaticObjectMethodV(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
 {
-       log_text("JNI-Call: CallStaticObjectMethodV");
-
-       return NULL;
+       /* log_text("JNI-Call: CallStaticObjectMethodV"); */
+       
+       return callObjectMethod(0,methodID,args);
 }
 
 
index 02494de6f3bdb557ad317bb14b11d92f47686335..1f4a0e805f2b887e11a8ac8c0981582fd7385ad0 100644 (file)
--- a/loader.c
+++ b/loader.c
@@ -30,7 +30,7 @@
             Mark Probst
                        Edwin Steiner
 
-   $Id: loader.c 1154 2004-06-09 16:28:00Z twisti $
+   $Id: loader.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -1091,7 +1091,7 @@ static methodinfo *method_load(classbuffer *cb, classinfo *c, methodinfo *m)
        m->linenumbercount = 0;
        m->linenumbers = 0;
        m->class = c;
-       
+       m->nativelyoverloaded=false;
        m->flags = suck_u2(cb);
        m->name = class_getconstant(c, suck_u2(cb), CONSTANT_Utf8);
 
diff --git a/main.c b/main.c
index c7455a16bd7b8f8ac82f3a0cb21fb8ce7b66ebe2..44082de38a69be1265f95eacd8f787e9be7ee88f 100644 (file)
--- a/main.c
+++ b/main.c
@@ -37,7 +37,7 @@
      - Calling the class loader
      - Running the main method
 
-   $Id: main.c 1150 2004-06-06 13:29:25Z twisti $
+   $Id: main.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
 #include "typeinfo.h"
 #endif
 
-/* command line option */
 
+bool cacao_initializing;
+
+/* command line option */
 bool verbose = false;
 bool compileall = false;
 bool runverbose = false;       /* trace all method invocation                */
@@ -869,6 +871,8 @@ int main(int argc, char **argv)
        tables_init();
        suck_init(classpath);
 
+       cacao_initializing=true;
+
 #if defined(USE_THREADS) && defined(NATIVE_THREADS)
        initThreadsEarly();
 #endif
@@ -883,7 +887,13 @@ int main(int argc, char **argv)
        initThreads((u1*) &dummy);
 #endif
 
+       *threadrootmethod=0;
+       class_init(class_new(utf_new_char("java/lang/System"))); /*That's important, otherwise we get into trouble, if
+                       the Runtime static initializer is called before (circular dependency. This is with classpath 
+                       0.09. Another important thing is, that this has to happen after initThreads!!!
+               */
 
+       cacao_initializing=false;
        /************************* Start worker routines ********************/
 
        if (startit) {
@@ -931,6 +941,7 @@ int main(int argc, char **argv)
 
                *threadrootmethod = mainmethod;
 
+
                /* here we go... */
                asm_calljavafunction(mainmethod, a, NULL, NULL, NULL);
 
index ace2a5ed1ccd2f7b665eb759e26e1c29bee8c1a0..ad08458ecc598558674eeee7ea67f6e2feb19bf6 100644 (file)
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 
-# $Id: Makefile.am 1148 2004-06-06 13:20:49Z twisti $
+# $Id: Makefile.am 1173 2004-06-16 14:56:18Z jowenn $
 
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/jit/@ARCH_DIR@
@@ -12,7 +12,6 @@ noinst_LIBRARIES = libnat.a
 libnat_a_SOURCES = \
        Constructor.c \
        Field.c \
-       FileChannelImpl.c \
        Method.c \
        Proxy.c \
        Runtime.c \
@@ -20,7 +19,6 @@ libnat_a_SOURCES = \
        VMClass.c \
        VMClassLoader.c \
        VMObject.c \
-       VMObjectStreamClass.c \
        VMSecurityManager.c \
        VMString.c \
        VMSystem.c \
index 3e326e9b3ed57c21d721ed3c2049ca7caeebbf70..0ae2504cc709196ef261913e3d6f7f12bbf07edd 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Joseph Wenninger
             Christian Thalinger
 
-   $Id: Runtime.c 1147 2004-06-06 13:20:11Z twisti $
+   $Id: Runtime.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -51,8 +51,8 @@
 #include "java_io_File.h"
 #include "java_lang_String.h"
 #include "java_lang_Process.h"
-#include "java_util_Properties.h"    /* required by java_lang_Runtime.h */
-#include "java_lang_Runtime.h"
+#include "java_util_Properties.h"    /* needed for java_lang_Runtime.h */
+#include "java_lang_VMRuntime.h"
 
 
 #define JOWENN_DEBUG
@@ -61,6 +61,7 @@
 static s4 finalizeOnExit = false;
 
 #define MAXPROPS 100
+static bool shouldFinalizersBeRunOnExit=false;
 static int activeprops = 19;  
    
 static char *proplist[MAXPROPS][2] = {
@@ -96,11 +97,11 @@ void attach_property(char *name, char *value)
         activeprops++;
 }
 /*
- * Class:     java_lang_Runtime
+ * Class:     java_lang_VMRuntime
  * Method:    execInternal
  * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
  */
-JNIEXPORT java_lang_Process* JNICALL Java_java_lang_Runtime_execInternal(JNIEnv *env, java_lang_Runtime *this, java_objectarray *cmd, java_objectarray *shellenv, java_io_File *workingdir)
+JNIEXPORT java_lang_Process* JNICALL Java_java_lang_VMRuntime_execInternal(JNIEnv *env, jclass clazz, java_objectarray *cmd, java_objectarray *shellenv, java_io_File *workingdir)
 {
        log_text("Java_java_lang_Runtime_execInternal called");
 
@@ -109,11 +110,11 @@ JNIEXPORT java_lang_Process* JNICALL Java_java_lang_Runtime_execInternal(JNIEnv
 
 
 /*
- * Class:     java/lang/Runtime
+ * Class:     java/lang/VMRuntime
  * Method:    exitInternal
  * Signature: (I)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_exitInternal(JNIEnv *env, java_lang_Runtime *this, s4 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_exit(JNIEnv *env, jclass clazz, s4 par1)
 {
        if (finalizeOnExit)
                gc_finalize_all();
@@ -127,7 +128,7 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_exitInternal(JNIEnv *env, java_lan
  * Method:    freeMemory
  * Signature: ()J
  */
-JNIEXPORT s8 JNICALL Java_java_lang_Runtime_freeMemory(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT s8 JNICALL Java_java_lang_VMRuntime_freeMemory(JNIEnv *env, jclass clazz)
 {
        return gc_get_free_bytes();
 }
@@ -138,7 +139,7 @@ JNIEXPORT s8 JNICALL Java_java_lang_Runtime_freeMemory(JNIEnv *env, java_lang_Ru
  * Method:    gc
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_gc(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_gc(JNIEnv *env, jclass clazz)
 {
        gc_call();
 }
@@ -149,7 +150,7 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_gc(JNIEnv *env, java_lang_Runtime
  * Method:    runFinalization
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalization(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalization(JNIEnv *env, jclass clazz)
 {
        gc_invoke_finalizers();
 }
@@ -160,9 +161,25 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalization(JNIEnv *env, java_
  * Method:    runFinalizersOnExit
  * Signature: (Z)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalizersOnExitInternal(JNIEnv *env, jclass clazz, s4 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalizersOnExit(JNIEnv *env, jclass clazz, s4 par1)
 {
-       finalizeOnExit = par1;
+#warning threading
+       shouldFinalizersBeRunOnExit=par1;
+}
+
+/*
+ * Class:     java/lang/Runtime
+ * Method:    runFinalizationsForExit
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalizationForExit(JNIEnv *env, jclass clazz)
+{
+       if (shouldFinalizersBeRunOnExit) {
+               gc_call();
+       //      gc_finalize_all();
+       }
+       log_text("Java_java_lang_VMRuntime_runFinalizationForExit called");
+
 }
 
 
@@ -171,7 +188,7 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalizersOnExitInternal(JNIEnv
  * Method:    totalMemory
  * Signature: ()J
  */
-JNIEXPORT s8 JNICALL Java_java_lang_Runtime_totalMemory(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT s8 JNICALL Java_java_lang_VMRuntime_totalMemory(JNIEnv *env, jclass clazz)
 {
        return gc_get_heap_size();
 }
@@ -182,7 +199,7 @@ JNIEXPORT s8 JNICALL Java_java_lang_Runtime_totalMemory(JNIEnv *env, java_lang_R
  * Method:    traceInstructions
  * Signature: (Z)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_traceInstructions(JNIEnv *env, java_lang_Runtime *this, s4 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_traceInstructions(JNIEnv *env, jclass clazz, s4 par1)
 {
        /* not supported */
 }
@@ -193,7 +210,7 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_traceInstructions(JNIEnv *env, jav
  * Method:    traceMethodCalls
  * Signature: (Z)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_traceMethodCalls(JNIEnv *env, java_lang_Runtime *this, s4 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_traceMethodCalls(JNIEnv *env, jclass clazz, s4 par1)
 {
        /* not supported */
 }
@@ -204,7 +221,7 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_traceMethodCalls(JNIEnv *env, java
  * Method:    availableProcessors
  * Signature: ()I
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Runtime_availableProcessors(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMRuntime_availableProcessors(JNIEnv *env, jclass clazz)
 {
 #if defined(_SC_NPROC_ONLN)
        return (s4) sysconf(_SC_NPROC_ONLN);
@@ -223,7 +240,7 @@ JNIEXPORT s4 JNICALL Java_java_lang_Runtime_availableProcessors(JNIEnv *env, jav
  * Method:    nativeLoad
  * Signature: (Ljava/lang/String;)I
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Runtime_nativeLoad(JNIEnv *env, java_lang_Runtime *this, java_lang_String *par1)
+JNIEXPORT s4 JNICALL Java_java_lang_VMRuntime_nativeLoad(JNIEnv *env, jclass clazz, java_lang_String *par1)
 {
 #ifdef JOWENN_DEBUG    
        char *buffer;
@@ -242,30 +259,29 @@ JNIEXPORT s4 JNICALL Java_java_lang_Runtime_nativeLoad(JNIEnv *env, java_lang_Ru
                
        buffer = MNEW(char, buffer_len);
 
-       strcpy(buffer, "Java_java_lang_Runtime_nativeLoad:");
+       strcpy(buffer, "Java_java_lang_VMRuntime_nativeLoad:");
        utf_sprint(buffer + strlen((char *) data), data);
        log_text(buffer);       
 
        MFREE(buffer, char, buffer_len);
 #endif
-       log_text("Java_java_lang_Runtime_nativeLoad");
+       log_text("Java_java_lang_VMRuntime_nativeLoad");
 
        return 1;
 }
 
 
 /*
- * Class:     java_lang_Runtime
+ * Class:     java_lang_VMRuntime
  * Method:    nativeGetLibname
  * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
  */
-JNIEXPORT java_lang_String* JNICALL Java_java_lang_Runtime_nativeGetLibname(JNIEnv *env, jclass clazz, java_lang_String *par1, java_lang_String *par2)
+JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMRuntime_nativeGetLibname(JNIEnv *env, jclass clazz, java_lang_String *par1, java_lang_String *par2)
 {
-#ifdef JOWENN_DEBUG    
        char *buffer;
        int buffer_len;
        utf *data;
-       
+       java_lang_String *resultString; 
        data = javastring_toutf(par2, 0);
        
        if (!data) {
@@ -273,28 +289,28 @@ JNIEXPORT java_lang_String* JNICALL Java_java_lang_Runtime_nativeGetLibname(JNIE
                return 0;;
        }
        
-       buffer_len = utf_strlen(data) + 40;
-       
+       buffer_len = utf_strlen(data) + 6/*lib .so*/ +1 /*0*/;
        buffer = MNEW(char, buffer_len);
+       sprintf(buffer,"lib");
+       utf_sprint(buffer+3,data);
+       strcat(buffer,".so");
 
-       strcpy(buffer, "Java_java_lang_Runtime_nativeGetLibname:");
-       utf_sprint(buffer + strlen((char *) data), data);
-       log_text(buffer);       
+       log_text(buffer);
+       
+       resultString=javastring_new_char(buffer);       
 
        MFREE(buffer, char, buffer_len);
-#endif
-       log_text("Java_java_lang_Runtime_nativeGetLibname");
 
-       return 0;
+       return resultString;
 }
 
 
 /*
- * Class:     java_lang_Runtime
+ * Class:     java_lang_VMRuntime
  * Method:    insertSystemProperties
  * Signature: (Ljava/util/Properties;)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_insertSystemProperties(JNIEnv *env, jclass clazz, java_util_Properties *p)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_insertSystemProperties(JNIEnv *env, jclass clazz, java_util_Properties *p)
 {
 
 #define BUFFERSIZE 200
@@ -350,11 +366,11 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_insertSystemProperties(JNIEnv *env
 
 
 /*
- * Class:     java_lang_Runtime
+ * Class:     java_lang_VMRuntime
  * Method:    maxMemory
  * Signature: ()J
  */
-JNIEXPORT s8 JNICALL Java_java_lang_Runtime_maxMemory(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT s8 JNICALL Java_java_lang_VMRuntime_maxMemory(JNIEnv *env, jclass clazz)
 {
        return gc_get_max_heap_size();
 }
index 702bfe30421982efa208aefa7a708314ec3f820c..ad646efa54787abeeea287d0565df63206938028 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Joseph Wenninger
 
-   $Id: Thread.c 1067 2004-05-18 10:25:51Z stefan $
+   $Id: Thread.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -44,6 +44,7 @@
 #include "java_lang_ThreadGroup.h"
 #include "java_lang_Object.h"         /* needed for java_lang_Thread.h */
 #include "java_lang_Throwable.h"      /* needed for java_lang_Thread.h */
+#include "java_lang_VMThread.h"
 #include "java_lang_Thread.h"
 
 
@@ -52,9 +53,9 @@
  * Method:    countStackFrames
  * Signature: ()I
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_countStackFrames(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_countStackFrames(JNIEnv *env, java_lang_VMThread *this)
 {
-    log_text("java_lang_Thread_countStackFrames called");
+    log_text("java_lang_VMThread_countStackFrames called");
 
     return 0;
 }
@@ -64,12 +65,12 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_countStackFrames(JNIEnv *env, java_la
  * Method:    currentThread
  * Signature: ()Ljava/lang/Thread;
  */
-JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *env, jclass clazz)
+JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_VMThread_currentThread(JNIEnv *env, jclass clazz)
 {
        java_lang_Thread *t;
 
        if (runverbose)
-               log_text("java_lang_Thread_currentThread called");
+               log_text("java_lang_VMThread_currentThread called");
 
 #if defined(USE_THREADS)
 #if !defined(NATIVE_THREADS)
@@ -79,7 +80,7 @@ JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *
 #endif
   
        if (!t->group) {
-               log_text("java_lang_Thread_currentThread: t->group=NULL");
+               log_text("java_lang_VMThread_currentThread: t->group=NULL");
                /* ThreadGroup of currentThread is not initialized */
 
                t->group = (java_lang_ThreadGroup *) 
@@ -101,9 +102,9 @@ JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *
  * Method:    nativeInterrupt
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInterrupt(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_interrupt(JNIEnv *env, java_lang_VMThread *this)
 {
-       log_text("Java_java_lang_Thread_interrupt0 called");
+       log_text("Java_java_lang_VMThread_interrupt0 called");
 }
 
 
@@ -112,13 +113,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInterrupt(JNIEnv *env, java_l
  * Method:    isAlive
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_isAlive(JNIEnv *env, java_lang_VMThread *this)
 {
        if (runverbose)
-               log_text("java_lang_Thread_isAlive called");
+               log_text("java_lang_VMThread_isAlive called");
 
 #if defined(USE_THREADS)
-       return aliveThread((thread *) this);
+       return aliveThread((thread *) this->thread);
 #endif
 }
 
@@ -129,9 +130,9 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, java_lang_Thread
  * Method:    isInterrupted
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_isInterrupted(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_isInterrupted(JNIEnv *env, java_lang_VMThread *this)
 {
-       log_text("Java_java_lang_Thread_isInterrupted  called");
+       log_text("Java_java_lang_VMThread_isInterrupted  called");
        return 0;
 }
 
@@ -141,7 +142,7 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_isInterrupted(JNIEnv *env, java_lang_
  * Method:    registerNatives
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_registerNatives(JNIEnv *env, jclass clazz)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_registerNatives(JNIEnv *env, jclass clazz)
 {
        /* empty */
 }
@@ -152,13 +153,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_registerNatives(JNIEnv *env, jclass
  * Method:    resume0
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeResume(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_resume(JNIEnv *env, java_lang_VMThread *this)
 {
        if (runverbose)
-               log_text("java_lang_Thread_resume0 called");
+               log_text("java_lang_VMThread_resume0 called");
 
 #if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       resumeThread((thread *) this);
+       resumeThread((thread *) this->thread);
 #endif
 }
 
@@ -168,13 +169,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeResume(JNIEnv *env, java_lang
  * Method:    setPriority0
  * Signature: (I)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSetPriority(JNIEnv *env, java_lang_Thread *this, s4 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeSetPriority(JNIEnv *env, java_lang_VMThread *this, s4 par1)
 {
     if (runverbose) 
-               log_text("java_lang_Thread_setPriority0 called");
+               log_text("java_lang_VMThread_setPriority0 called");
 
 #if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       setPriorityThread((thread *) this, par1);
+       setPriorityThread((thread *) this->thread, par1);
 #endif
 }
 
@@ -184,10 +185,10 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSetPriority(JNIEnv *env, java
  * Method:    sleep
  * Signature: (JI)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, s8 millis, s4 par2)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_sleep(JNIEnv *env, jclass clazz, s8 millis, s4 par2)
 {
        if (runverbose)
-               log_text("java_lang_Thread_sleep called");
+               log_text("java_lang_VMThread_sleep called");
 
 #if defined(USE_THREADS)
        sleepThread(millis);
@@ -200,13 +201,16 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, s8
  * Method:    start
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_start(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_start(JNIEnv *env, java_lang_VMThread *this, s8 par1)
 {
        if (runverbose) 
-               log_text("java_lang_Thread_start called");
+               log_text("java_lang_VMThread_start called");
 
 #if defined(USE_THREADS)
-       startThread((thread*)this);
+#warning perhaps it would be better to always work with the vmthread structure in the thread code (jowenn)
+       if (this->thread->vmThread==0)
+               this->thread->vmThread=this;
+       startThread((thread*)(this->thread));
 #endif
 }
 
@@ -216,14 +220,14 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_start(JNIEnv *env, java_lang_Thread
  * Method:    stop0
  * Signature: (Ljava/lang/Object;)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, java_lang_Thread *this, java_lang_Throwable *par1)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeStop(JNIEnv *env, java_lang_VMThread *this, java_lang_Throwable *par1)
 {
        if (runverbose)
-               log_text ("java_lang_Thread_stop0 called");
+               log_text ("java_lang_VMThread_stop0 called");
 
 
 #if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       if (currentThread == (thread*)this) {
+       if (currentThread == (thread*)this->thread) {
                log_text("killing");
                killThread(0);
                /*
@@ -232,8 +236,8 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, java_lang_T
                */
 
        } else {
-               CONTEXT((thread*)this).flags |= THREAD_FLAGS_KILLED;
-               resumeThread((thread*)this);
+               /*CONTEXT((thread*)this)*/ this->flags |= THREAD_FLAGS_KILLED;
+               resumeThread((thread*)this->thread);
        }
 #endif
 }
@@ -244,13 +248,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, java_lang_T
  * Method:    suspend0
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSuspend(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_suspend(JNIEnv *env, java_lang_VMThread *this)
 {
        if (runverbose)
-               log_text("java_lang_Thread_suspend0 called");
+               log_text("java_lang_VMThread_suspend0 called");
 
 #if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       suspendThread((thread*)this);
+       suspendThread((thread*)this->thread);
 #endif
 }
 
@@ -260,10 +264,10 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSuspend(JNIEnv *env, java_lan
  * Method:    yield
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_yield(JNIEnv *env, jclass clazz)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_yield(JNIEnv *env, jclass clazz)
 {
        if (runverbose)
-               log_text("java_lang_Thread_yield called");
+               log_text("java_lang_VMThread_yield called");
 
 #if defined(USE_THREADS)
        yieldThread();
@@ -276,9 +280,9 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_yield(JNIEnv *env, jclass clazz)
  * Method:    interrupted
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_interrupted(JNIEnv *env, jclass clazz)
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_interrupted(JNIEnv *env, jclass clazz)
 {
-       log_text("Java_java_lang_Thread_interrupted");
+       log_text("Java_java_lang_VMThread_interrupted");
 
        return 0;
 }
@@ -289,16 +293,16 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_interrupted(JNIEnv *env, jclass clazz
  * Method:    nativeInit
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInit(JNIEnv *env, java_lang_Thread *this, s8 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeInit(JNIEnv *env, java_lang_VMThread *this, s8 par1)
 {
 /*
        if (*exceptionptr)
                log_text("There has been an exception, strange...");*/
 
 #if defined(USE_THREADS) && defined(NATIVE_THREADS)
-       initThread(this);
+       initThread(this->thread);
 #endif
-       this->priority = 5;
+       this->thread->priority = 5;
 }
 
 
@@ -307,7 +311,7 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInit(JNIEnv *env, java_lang_T
  * Method:    holdsLock
  * Signature: (Ljava/lang/Object;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_holdsLock(JNIEnv *env, jclass clazz, java_lang_Object *par1)
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_holdsLock(JNIEnv *env, jclass clazz, java_lang_Object *par1)
 {
        return 0;
 }
index 23cd43ce0831bde7758262e5728c10c7d7a1aa0e..d862c5edf82028a4ba31c21836f187b0bc94e6b4 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Joseph Wenninger
 
-   $Id: VMClass.c 1075 2004-05-20 16:58:49Z twisti $
+   $Id: VMClass.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -113,9 +113,9 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, j
  * Method:    getClassLoader
  * Signature: ()Ljava/lang/ClassLoader;
  */
-JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {  
-       return ((classinfo*)(this->vmData))->classloader;
+       return ((classinfo*)that)->classloader;
 /*     init_systemclassloader();
 
        return SystemClassLoader;*/
@@ -127,9 +127,9 @@ JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(J
  * Method:    getComponentType
  * Signature: ()Ljava/lang/Class;
  */
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, jclass clazz,java_lang_Class *that)
 {
-    classinfo *thisclass = (classinfo *) this->vmData;
+    classinfo *thisclass = (classinfo *) that;
     classinfo *c = NULL;
     arraydescriptor *desc;
     
@@ -152,10 +152,11 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEn
  * Method:    getDeclaredConstructors
  * Signature: (Z)[Ljava/lang/reflect/Constructor;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, java_lang_VMClass *this, s4 public_only)
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz,
+       struct java_lang_Class *that, s4 public_only)
 {
   
-    classinfo *c = (classinfo *) this->vmData;
+    classinfo *c = (classinfo *) that;
     java_objectheader *o;
     classinfo *class_constructor;
     java_objectarray *array_constructor;     /* result: array of Method-objects */
@@ -217,26 +218,23 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredConstructo
  * Method:    getDeclaredClasses
  * Signature: (Z)[Ljava/lang/Class;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, java_lang_VMClass *this, s4 publicOnly)
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, java_lang_Class *that, s4 publicOnly)
 {
 #if defined(__GNUC__)
 #warning fix the public only case
 #endif
-       classinfo *c = (classinfo *) this->vmData;
+       classinfo *c = (classinfo *) that;
        int pos = 0;                /* current declared class */
        int declaredclasscount = 0; /* number of declared classes */
        java_objectarray *result;   /* array of declared classes */
        int notPublicOnly = !publicOnly;
        int i;
 
-       if (!this)
-               return NULL;
-
-       if (!this->vmData)
+       if (!that)
                return NULL;
 
        /*printf("PublicOnly: %d\n",publicOnly);*/
-       if (!Java_java_lang_VMClass_isPrimitive(env, (java_lang_VMClass *) c) && (c->name->text[0] != '[')) {
+       if (!Java_java_lang_VMClass_isPrimitive(env, clazz, (java_lang_Class *) c) && (c->name->text[0] != '[')) {
                /* determine number of declared classes */
                for (i = 0; i < c->innerclasscount; i++) {
                        if ( (c->innerclass[i].outer_class == c) && (notPublicOnly || (c->innerclass[i].flags & ACC_PUBLIC)))
@@ -269,14 +267,14 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JN
  * Method:    getDeclaringClass
  * Signature: ()Ljava/lang/Class;
  */
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, jclass clazz, struct java_lang_Class *that)
 {
 #if defined(__GNUC__)
 #warning fixme
 #endif
-       classinfo *c = (classinfo *) this->vmData;
+       classinfo *c = (classinfo *) that;
 
-       if (this && this->vmData && !Java_java_lang_VMClass_isPrimitive(env, this) && (c->name->text[0] != '[')) {
+       if (that && !Java_java_lang_VMClass_isPrimitive(env, clazz,that) && (c->name->text[0] != '[')) {
                int i;
 
                if (c->innerclasscount == 0)  /* no innerclasses exist */
@@ -299,12 +297,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIE
 }
 
 
-/*
- * Class:     java/lang/Class
- * Method:    getField0
- * Signature: (Ljava/lang/String;I)Ljava/lang/reflect/Field;
- */
-JNIEXPORT java_lang_reflect_Field* JNICALL Java_java_lang_VMClass_getField0(JNIEnv *env, java_lang_VMClass *this, java_lang_String *name, s4 public_only)
+java_lang_reflect_Field* cacao_getField0(JNIEnv *env, java_lang_Class *that, java_lang_String *name, s4 public_only)
 {
     classinfo *c;
        classinfo *fieldtype;
@@ -319,14 +312,14 @@ JNIEXPORT java_lang_reflect_Field* JNICALL Java_java_lang_VMClass_getField0(JNIE
     o = (java_lang_reflect_Field *) native_new_and_init(c);
 
     /* get fieldinfo entry */
-    idx = class_findfield_index_approx((classinfo *) this->vmData, javastring_toutf(name, false));
+    idx = class_findfield_index_approx((classinfo *) that, javastring_toutf(name, false));
 
     if (idx < 0) {
            *exceptionptr = new_exception(string_java_lang_NoSuchFieldException);
            return NULL;
        }
 
-    f = &(((classinfo *) this->vmData)->fields[idx]);
+    f = &(((classinfo *) that)->fields[idx]);
     if (f) {
                if (public_only && !(f->flags & ACC_PUBLIC)) {
                        /* field is not public  and public only had been requested*/
@@ -340,7 +333,7 @@ JNIEXPORT java_lang_reflect_Field* JNICALL Java_java_lang_VMClass_getField0(JNIE
                        return NULL;
         
                /* initialize instance fields */
-               setfield_critical(c,o,"declaringClass",          "Ljava/lang/Class;",  jobject, (jobject) (this->vmData) /*this*/);
+               setfield_critical(c,o,"declaringClass",          "Ljava/lang/Class;",  jobject, (jobject) that /*this*/);
                /*      ((java_lang_reflect_Field*)(o))->flag=f->flags;*/
                /* save type in slot-field for faster processing */
                /*      setfield_critical(c,o,"flag",           "I",                jint,    (jint) f->flags);  */
@@ -360,9 +353,9 @@ JNIEXPORT java_lang_reflect_Field* JNICALL Java_java_lang_VMClass_getField0(JNIE
  * Method:    getDeclaredFields
  * Signature: (Z)[Ljava/lang/reflect/Field;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, java_lang_VMClass *this, s4 public_only)
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, java_lang_Class *that, s4 public_only)
 {
-    classinfo *c = (classinfo *) this->vmData;
+    classinfo *c = (classinfo *) that;
     classinfo *class_field;
     java_objectarray *array_field; /* result: array of field-objects */
     int public_fields = 0;         /* number of elements in field-array */
@@ -391,10 +384,8 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNI
     for (i = 0; i < c->fieldscount; i++) 
                if ( (c->fields[i].flags & ACC_PUBLIC) || (!public_only))
                        array_field->data[pos++] = 
-                               (java_objectheader *) Java_java_lang_VMClass_getField0(env,
-                                                                                                                                          this,
-                                                                                                                                          (java_lang_String *) javastring_new(c->fields[i].name),
-                                                                                                                                          public_only);
+                               (java_objectheader *) cacao_getField0(env,
+                                          that, (java_lang_String *) javastring_new(c->fields[i].name),public_only);
     return array_field;
 }
 
@@ -404,9 +395,9 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNI
  * Method:    getInterfaces
  * Signature: ()[Ljava/lang/Class;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
-       classinfo *c = (classinfo *) this->vmData;
+       classinfo *c = (classinfo *) that;
        u4 i;
        java_objectarray *a;
 
@@ -425,15 +416,10 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv
 }
 
 
-/*
- * Class:     java/lang/Class
- * Method:    getMethod0
- * Signature: (Ljava/lang/String;[Ljava/lang/Class;I)Ljava/lang/reflect/Method;
- */
-JNIEXPORT java_lang_reflect_Method* JNICALL Java_java_lang_VMClass_getMethod0(JNIEnv *env, java_lang_Class *this, java_lang_String *name, java_objectarray *types, s4 which)
+java_lang_reflect_Method* cacao_getMethod0(JNIEnv *env, java_lang_Class *that, java_lang_String *name, java_objectarray *types, s4 which)
 {
     classinfo *c; 
-    classinfo *clazz = (classinfo *) this;
+    classinfo *clazz = (classinfo *) that;
     java_lang_reflect_Method* o;         /* result: Method-object */ 
     java_objectarray *exceptiontypes;    /* the exceptions thrown by the method */
     methodinfo *m;                      /* the method to be represented */
@@ -475,9 +461,9 @@ JNIEXPORT java_lang_reflect_Method* JNICALL Java_java_lang_VMClass_getMethod0(JN
  * Method:    getDeclaredMethods
  * Signature: (Z)[Ljava/lang/reflect/Method;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, java_lang_VMClass *this, s4 public_only)
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, java_lang_Class *that, s4 public_only)
 {
-    classinfo *c = (classinfo *) this->vmData;    
+    classinfo *c = (classinfo *) that;    
     java_objectheader *o;
     classinfo *class_method;
     java_objectarray *array_method;     /* result: array of Method-objects */
@@ -497,7 +483,7 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JN
 
        /* JOWENN: array classes do not declare methods according to mauve test. It should be considered, if 
           we should return to my old clone method overriding instead of declaring it as a member function */
-       if (Java_java_lang_VMClass_isArray(env, this)) {
+       if (Java_java_lang_VMClass_isArray(env, clazz,that)) {
                return builtin_anewarray(0, class_method);
        }
 
@@ -561,9 +547,9 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JN
  * Method:    getModifiers
  * Signature: ()I
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
-       classinfo *c = (classinfo *) (this->vmData);
+       classinfo *c = (classinfo *) that;
        return c->flags;
 }
 
@@ -573,10 +559,10 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, java_lang_
  * Method:    getName
  * Signature: ()Ljava/lang/String;
  */
-JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, java_lang_VMClass* this)
+JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, jclass clazz, java_lang_Class* that)
 {
        u4 i;
-       classinfo *c = (classinfo *) (this->vmData);
+       classinfo *c = (classinfo *) that;
        java_lang_String *s = (java_lang_String *) javastring_new(c->name);
 
        if (!s)
@@ -676,38 +662,15 @@ JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getBeautifiedName(JNI
 }
 
 
-/*
- * Class:     java/lang/Class
- * Method:    getProtectionDomain0
- * Signature: ()Ljava/security/ProtectionDomain;
- */
-JNIEXPORT java_security_ProtectionDomain* JNICALL Java_java_lang_VMClass_getProtectionDomain0(JNIEnv *env, java_lang_Class *this)
-{
-       log_text("Java_java_lang_VMClass_getProtectionDomain0");
-       return NULL;
-}
-
-
-/*
- * Class:     java/lang/Class
- * Method:    getSigners
- * Signature: ()[Ljava/lang/Object;
- */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getSigners(JNIEnv *env, java_lang_Class *this)
-{
-       log_text("Java_java_lang_VMClass_getSigners");
-       return NULL;
-}
-
 
 /*
  * Class:     java/lang/Class
  * Method:    getSuperclass
  * Signature: ()Ljava/lang/Class;
  */
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
-       classinfo *cl = (classinfo *) this->vmData;
+       classinfo *cl = (classinfo *) that;
        classinfo *c = cl->super;
 
        if (!c)
@@ -724,9 +687,9 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *
  * Method:    isArray
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
-    classinfo *c = (classinfo *) this->vmData;
+    classinfo *c = (classinfo *) that;
 
     return c->vftbl->arraydesc != NULL;
 }
@@ -737,16 +700,16 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, java_lang_VMCla
  * Method:    isAssignableFrom
  * Signature: (Ljava/lang/Class;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, java_lang_VMClass *this, java_lang_Class *sup)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, jclass clazz, java_lang_Class *that, java_lang_Class *sup)
 {
        /*      log_text("Java_java_lang_VMClass_isAssignableFrom");*/
-       if (!this) return 0;
+       
        if (!sup) return 0;
-       if (!this->vmData) {
+       if (!that) {
                panic("sup->vmClass is NULL in VMClass.isAssignableFrom");
                return 0;
        }
-       return (*env)->IsAssignableForm(env, (jclass) sup, (jclass) (this->vmData));
+       return (*env)->IsAssignableForm(env, (jclass) sup, (jclass) that);
 }
 
 
@@ -755,11 +718,11 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, java_l
  * Method:    isInstance
  * Signature: (Ljava/lang/Object;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, java_lang_VMClass *this, java_lang_Object *obj)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, jclass clazz, java_lang_Class *that, java_lang_Object *obj)
 {
-       classinfo *clazz = (classinfo *) this->vmData;
+       classinfo *clazz = (classinfo *) that;
 
-       return (*env)->IsInstanceOf(env, (jobject) obj, clazz);
+       return (*env)->IsInstanceOf(env, (jobject) obj, that);
 }
 
 
@@ -768,9 +731,9 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, java_lang_VM
  * Method:    isInterface
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
-       classinfo *c = (classinfo *) this->vmData;
+       classinfo *c = (classinfo *) that;
 
        if (c->flags & ACC_INTERFACE)
                return true;
@@ -784,10 +747,10 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, java_lang_V
  * Method:    isPrimitive
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
        int i;
-       classinfo *c = (classinfo *) this->vmData;
+       classinfo *c = (classinfo *) that;
 
        /* search table of primitive classes */
        for (i = 0; i < PRIMITIVETYPE_COUNT; i++)
@@ -798,39 +761,6 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, java_lang_V
 }
 
 
-/*
- * Class:     java/lang/Class
- * Method:    registerNatives
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_registerNatives(JNIEnv *env)
-{
-    /* empty */
-}
-
-
-/*
- * Class:     java/lang/Class
- * Method:    setProtectionDomain0
- * Signature: (Ljava/security/ProtectionDomain;)V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_setProtectionDomain0(JNIEnv *env, java_lang_Class *this, java_security_ProtectionDomain *par1)
-{
-       if (verbose)
-               log_text("Java_java_lang_VMClass_setProtectionDomain0");
-}
-
-
-/*
- * Class:     java/lang/Class
- * Method:    setSigners
- * Signature: ([Ljava/lang/Object;)V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_setSigners(JNIEnv *env, java_lang_Class *this, java_objectarray *par1)
-{
-       if (verbose)
-               log_text("Java_java_lang_VMClass_setSigners");
-}
 
 
 /*
@@ -838,7 +768,7 @@ JNIEXPORT void JNICALL Java_java_lang_VMClass_setSigners(JNIEnv *env, java_lang_
  * Method:    initialize
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_initialize(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT void JNICALL Java_java_lang_VMClass_initialize(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
        log_text("Java_java_lang_VMClass_initialize");
 }
@@ -868,51 +798,8 @@ JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass
 }
 
 
-/*
- * Class:     java_lang_VMClass
- * Method:    step7
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_step7(JNIEnv *env, java_lang_VMClass *this)
-{
-       log_text("Java_java_lang_VMClass_step7");
-}
 
 
-/*
- * Class:     java_lang_VMClass
- * Method:    step8
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_step8(JNIEnv *env, java_lang_VMClass *this)
-{
-       log_text("Java_java_lang_VMClass_step8");
-}
-
-
-/*
- * Class:     java_lang_VMClass
- * Method:    isInitialized
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInitialized(JNIEnv *env, java_lang_VMClass *this)
-{
-       log_text("Java_java_lang_VMClass_isInitialized");
-
-       return 1;
-}
-
-
-/*
- * Class:     java_lang_VMClass
- * Method:    setInitialized
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_setInitialized(JNIEnv *env, java_lang_VMClass *this)
-{
-       log_text("Java_java_lang_VMClass_setInitialized");
-}
-
 
 /*
  * These are local overrides for various environment variables in Emacs.
diff --git a/nat/gnu_java_net_PlainDatagramSocketImpl.h b/nat/gnu_java_net_PlainDatagramSocketImpl.h
new file mode 100644 (file)
index 0000000..530c02c
--- /dev/null
@@ -0,0 +1,90 @@
+/* This file is machine generated, don't edit it !*/
+
+#ifndef _GNU_JAVA_NET_PLAINDATAGRAMSOCKETIMPL_H
+#define _GNU_JAVA_NET_PLAINDATAGRAMSOCKETIMPL_H
+
+/* Structure information for class: gnu/java/net/PlainDatagramSocketImpl */
+
+typedef struct gnu_java_net_PlainDatagramSocketImpl {
+   java_objectheader header;
+   s4 localPort;
+   struct java_io_FileDescriptor* fd;
+   s4 native_fd;
+   struct java_lang_Object* RECEIVE_LOCK;
+   struct java_lang_Object* SEND_LOCK;
+} gnu_java_net_PlainDatagramSocketImpl;
+
+
+/*
+ * Class:     gnu/java/net/PlainDatagramSocketImpl
+ * Method:    bind
+ * Signature: (ILjava/net/InetAddress;)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_bind(JNIEnv *env, struct gnu_java_net_PlainDatagramSocketImpl* this, s4 par1, struct java_net_InetAddress* par2);
+
+
+/*
+ * Class:     gnu/java/net/PlainDatagramSocketImpl
+ * Method:    create
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_create(JNIEnv *env, struct gnu_java_net_PlainDatagramSocketImpl* this);
+
+
+/*
+ * Class:     gnu/java/net/PlainDatagramSocketImpl
+ * Method:    sendto
+ * Signature: (Ljava/net/InetAddress;I[BII)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_sendto(JNIEnv *env, struct gnu_java_net_PlainDatagramSocketImpl* this, struct java_net_InetAddress* par1, s4 par2, java_bytearray* par3, s4 par4, s4 par5);
+
+
+/*
+ * Class:     gnu/java/net/PlainDatagramSocketImpl
+ * Method:    receive0
+ * Signature: (Ljava/net/DatagramPacket;)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, struct gnu_java_net_PlainDatagramSocketImpl* this, struct java_net_DatagramPacket* par1);
+
+
+/*
+ * Class:     gnu/java/net/PlainDatagramSocketImpl
+ * Method:    setOption
+ * Signature: (ILjava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_setOption(JNIEnv *env, struct gnu_java_net_PlainDatagramSocketImpl* this, s4 par1, struct java_lang_Object* par2);
+
+
+/*
+ * Class:     gnu/java/net/PlainDatagramSocketImpl
+ * Method:    getOption
+ * Signature: (I)Ljava/lang/Object;
+ */
+JNIEXPORT struct java_lang_Object* JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_getOption(JNIEnv *env, struct gnu_java_net_PlainDatagramSocketImpl* this, s4 par1);
+
+
+/*
+ * Class:     gnu/java/net/PlainDatagramSocketImpl
+ * Method:    close
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_close(JNIEnv *env, struct gnu_java_net_PlainDatagramSocketImpl* this);
+
+
+/*
+ * Class:     gnu/java/net/PlainDatagramSocketImpl
+ * Method:    join
+ * Signature: (Ljava/net/InetAddress;)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_join(JNIEnv *env, struct gnu_java_net_PlainDatagramSocketImpl* this, struct java_net_InetAddress* par1);
+
+
+/*
+ * Class:     gnu/java/net/PlainDatagramSocketImpl
+ * Method:    leave
+ * Signature: (Ljava/net/InetAddress;)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_leave(JNIEnv *env, struct gnu_java_net_PlainDatagramSocketImpl* this, struct java_net_InetAddress* par1);
+
+#endif
+
diff --git a/nat/gnu_java_net_PlainSocketImpl.h b/nat/gnu_java_net_PlainSocketImpl.h
new file mode 100644 (file)
index 0000000..114b48b
--- /dev/null
@@ -0,0 +1,109 @@
+/* This file is machine generated, don't edit it !*/
+
+#ifndef _GNU_JAVA_NET_PLAINSOCKETIMPL_H
+#define _GNU_JAVA_NET_PLAINSOCKETIMPL_H
+
+/* Structure information for class: gnu/java/net/PlainSocketImpl */
+
+typedef struct gnu_java_net_PlainSocketImpl {
+   java_objectheader header;
+   struct java_net_InetAddress* address;
+   struct java_io_FileDescriptor* fd;
+   s4 localport;
+   s4 port;
+   s4 native_fd;
+   struct java_io_InputStream* in;
+   struct java_io_OutputStream* out;
+   s4 inChannelOperation;
+} gnu_java_net_PlainSocketImpl;
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    setOption
+ * Signature: (ILjava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_setOption(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this, s4 par1, struct java_lang_Object* par2);
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    getOption
+ * Signature: (I)Ljava/lang/Object;
+ */
+JNIEXPORT struct java_lang_Object* JNICALL Java_gnu_java_net_PlainSocketImpl_getOption(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this, s4 par1);
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    create
+ * Signature: (Z)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_create(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this, s4 par1);
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    connect
+ * Signature: (Ljava/net/InetAddress;I)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_connect(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this, struct java_net_InetAddress* par1, s4 par2);
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    bind
+ * Signature: (Ljava/net/InetAddress;I)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_bind(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this, struct java_net_InetAddress* par1, s4 par2);
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    listen
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_listen(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this, s4 par1);
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    accept
+ * Signature: (Ljava/net/SocketImpl;)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_accept(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this, struct java_net_SocketImpl* par1);
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    available
+ * Signature: ()I
+ */
+JNIEXPORT s4 JNICALL Java_gnu_java_net_PlainSocketImpl_available(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this);
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    close
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_close(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this);
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    read
+ * Signature: ([BII)I
+ */
+JNIEXPORT s4 JNICALL Java_gnu_java_net_PlainSocketImpl_read(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this, java_bytearray* par1, s4 par2, s4 par3);
+
+
+/*
+ * Class:     gnu/java/net/PlainSocketImpl
+ * Method:    write
+ * Signature: ([BII)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_net_PlainSocketImpl_write(JNIEnv *env, struct gnu_java_net_PlainSocketImpl* this, java_bytearray* par1, s4 par2, s4 par3);
+
+#endif
+
index a013b4299a31086157518e5f3a6cf968d235d43b..a4cb96a7616a6714470aa11f5761ebe1a1f4aa60 100644 (file)
@@ -11,17 +11,8 @@ typedef struct gnu_java_nio_FileLockImpl {
    s8 position;
    s8 size;
    s4 shared;
-   struct java_io_FileDescriptor* fd;
-   s4 released;
+   struct gnu_java_nio_channels_FileChannelImpl* ch;
 } gnu_java_nio_FileLockImpl;
 
-
-/*
- * Class:     gnu/java/nio/FileLockImpl
- * Method:    releaseImpl
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_gnu_java_nio_FileLockImpl_releaseImpl(JNIEnv *env, struct gnu_java_nio_FileLockImpl* this);
-
 #endif
 
index 6c3bbebb3e6bda365a30bf0e9fe185032707aa92..0a338a24cdf4c94603f3e5459d256c3bfe68ffe1 100644 (file)
@@ -9,11 +9,20 @@ typedef struct gnu_java_nio_SelectorImpl {
    java_objectheader header;
    s4 closed;
    struct java_nio_channels_spi_SelectorProvider* provider;
-   s4 closed0;
    struct java_util_Set* keys;
    struct java_util_Set* selected;
-   struct java_util_Set* canceled;
+   struct java_lang_Object* selectThreadMutex;
+   struct java_lang_Thread* selectThread;
+   s4 unhandledWakeup;
 } gnu_java_nio_SelectorImpl;
 
+
+/*
+ * Class:     gnu/java/nio/SelectorImpl
+ * Method:    implSelect
+ * Signature: ([I[I[IJ)I
+ */
+JNIEXPORT s4 JNICALL Java_gnu_java_nio_SelectorImpl_implSelect(JNIEnv *env, jclass clazz, java_intarray* par1, java_intarray* par2, java_intarray* par3, s8 par4);
+
 #endif
 
diff --git a/nat/gnu_java_nio_channels_FileChannelImpl.h b/nat/gnu_java_nio_channels_FileChannelImpl.h
new file mode 100644 (file)
index 0000000..8a4d357
--- /dev/null
@@ -0,0 +1,136 @@
+/* This file is machine generated, don't edit it !*/
+
+#ifndef _GNU_JAVA_NIO_CHANNELS_FILECHANNELIMPL_H
+#define _GNU_JAVA_NIO_CHANNELS_FILECHANNELIMPL_H
+
+/* Structure information for class: gnu/java/nio/channels/FileChannelImpl */
+
+typedef struct gnu_java_nio_channels_FileChannelImpl {
+   java_objectheader header;
+   s4 opened;
+   s4 fd;
+   s4 mode;
+} gnu_java_nio_channels_FileChannelImpl;
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_init(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    open
+ * Signature: (Ljava/lang/String;I)I
+ */
+JNIEXPORT s4 JNICALL Java_gnu_java_nio_channels_FileChannelImpl_open(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this, struct java_lang_String* par1, s4 par2);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    available
+ * Signature: ()I
+ */
+JNIEXPORT s4 JNICALL Java_gnu_java_nio_channels_FileChannelImpl_available(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    implPosition
+ * Signature: ()J
+ */
+JNIEXPORT s8 JNICALL Java_gnu_java_nio_channels_FileChannelImpl_implPosition(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    seek
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_seek(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this, s8 par1);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    implTruncate
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_implTruncate(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this, s8 par1);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    unlock
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_unlock(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this, s8 par1, s8 par2);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    size
+ * Signature: ()J
+ */
+JNIEXPORT s8 JNICALL Java_gnu_java_nio_channels_FileChannelImpl_size(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    implCloseChannel
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_implCloseChannel(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    read
+ * Signature: ()I
+ */
+JNIEXPORT s4 JNICALL Java_gnu_java_nio_channels_FileChannelImpl_read__(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    read
+ * Signature: ([BII)I
+ */
+JNIEXPORT s4 JNICALL Java_gnu_java_nio_channels_FileChannelImpl_read___3BII(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this, java_bytearray* par1, s4 par2, s4 par3);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    write
+ * Signature: ([BII)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_write___3BII(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this, java_bytearray* par1, s4 par2, s4 par3);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    write
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_gnu_java_nio_channels_FileChannelImpl_write__I(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this, s4 par1);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    mapImpl
+ * Signature: (CJI)Ljava/nio/MappedByteBuffer;
+ */
+JNIEXPORT struct java_nio_MappedByteBuffer* JNICALL Java_gnu_java_nio_channels_FileChannelImpl_mapImpl(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this, s4 par1, s8 par2, s4 par3);
+
+
+/*
+ * Class:     gnu/java/nio/channels/FileChannelImpl
+ * Method:    lock
+ * Signature: (JJZZ)Z
+ */
+JNIEXPORT s4 JNICALL Java_gnu_java_nio_channels_FileChannelImpl_lock(JNIEnv *env, struct gnu_java_nio_channels_FileChannelImpl* this, s8 par1, s8 par2, s4 par3, s4 par4);
+
+#endif
+
index 2deb0f34711172b681db1d87e6d6f541d842de6a..f00f3a1faafd92707b04107a3afcde2d43366d65 100644 (file)
@@ -10,117 +10,5 @@ typedef struct java_io_File {
    struct java_lang_String* path;
 } java_io_File;
 
-
-/*
- * Class:     java/io/File
- * Method:    isFileInternal
- * Signature: (Ljava/lang/String;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_isFileInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    isDirectoryInternal
- * Signature: (Ljava/lang/String;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_isDirectoryInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    canReadInternal
- * Signature: (Ljava/lang/String;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_canReadInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    canWriteInternal
- * Signature: (Ljava/lang/String;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_canWriteInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    deleteInternal
- * Signature: (Ljava/lang/String;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_deleteInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    existsInternal
- * Signature: (Ljava/lang/String;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_existsInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    lastModifiedInternal
- * Signature: (Ljava/lang/String;)J
- */
-JNIEXPORT s8 JNICALL Java_java_io_File_lastModifiedInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    lengthInternal
- * Signature: (Ljava/lang/String;)J
- */
-JNIEXPORT s8 JNICALL Java_java_io_File_lengthInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    listInternal
- * Signature: (Ljava/lang/String;)[Ljava/lang/String;
- */
-JNIEXPORT java_objectarray* JNICALL Java_java_io_File_listInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    mkdirInternal
- * Signature: (Ljava/lang/String;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_mkdirInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    createInternal
- * Signature: (Ljava/lang/String;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_createInternal(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    setReadOnlyInternal
- * Signature: (Ljava/lang/String;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_setReadOnlyInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/io/File
- * Method:    renameToInternal
- * Signature: (Ljava/lang/String;Ljava/lang/String;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_renameToInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1, struct java_lang_String* par2);
-
-
-/*
- * Class:     java/io/File
- * Method:    setLastModifiedInternal
- * Signature: (Ljava/lang/String;J)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_File_setLastModifiedInternal(JNIEnv *env, struct java_io_File* this, struct java_lang_String* par1, s8 par2);
-
 #endif
 
index 3900c7242c6f016eaf26d5e1d16e6b82b672be7e..a21b2ed2bfe423219364a0da92e9e3669db9677b 100644 (file)
@@ -7,120 +7,8 @@
 
 typedef struct java_io_FileDescriptor {
    java_objectheader header;
-   s8 nativeFd;
+   struct java_nio_channels_ByteChannel* channel;
 } java_io_FileDescriptor;
 
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeInit
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_io_FileDescriptor_nativeInit(JNIEnv *env, jclass clazz);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeOpen
- * Signature: (Ljava/lang/String;I)J
- */
-JNIEXPORT s8 JNICALL Java_java_io_FileDescriptor_nativeOpen(JNIEnv *env, struct java_io_FileDescriptor* this, struct java_lang_String* par1, s4 par2);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeClose
- * Signature: (J)J
- */
-JNIEXPORT s8 JNICALL Java_java_io_FileDescriptor_nativeClose(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeWriteByte
- * Signature: (JI)J
- */
-JNIEXPORT s8 JNICALL Java_java_io_FileDescriptor_nativeWriteByte(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1, s4 par2);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeWriteBuf
- * Signature: (J[BII)J
- */
-JNIEXPORT s8 JNICALL Java_java_io_FileDescriptor_nativeWriteBuf(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1, java_bytearray* par2, s4 par3, s4 par4);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeReadByte
- * Signature: (J)I
- */
-JNIEXPORT s4 JNICALL Java_java_io_FileDescriptor_nativeReadByte(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeReadBuf
- * Signature: (J[BII)I
- */
-JNIEXPORT s4 JNICALL Java_java_io_FileDescriptor_nativeReadBuf(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1, java_bytearray* par2, s4 par3, s4 par4);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeAvailable
- * Signature: (J)I
- */
-JNIEXPORT s4 JNICALL Java_java_io_FileDescriptor_nativeAvailable(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeSeek
- * Signature: (JJIZ)J
- */
-JNIEXPORT s8 JNICALL Java_java_io_FileDescriptor_nativeSeek(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1, s8 par2, s4 par3, s4 par4);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeGetFilePointer
- * Signature: (J)J
- */
-JNIEXPORT s8 JNICALL Java_java_io_FileDescriptor_nativeGetFilePointer(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeGetLength
- * Signature: (J)J
- */
-JNIEXPORT s8 JNICALL Java_java_io_FileDescriptor_nativeGetLength(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeSetLength
- * Signature: (JJ)V
- */
-JNIEXPORT void JNICALL Java_java_io_FileDescriptor_nativeSetLength(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1, s8 par2);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeValid
- * Signature: (J)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_FileDescriptor_nativeValid(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1);
-
-
-/*
- * Class:     java/io/FileDescriptor
- * Method:    nativeSync
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_java_io_FileDescriptor_nativeSync(JNIEnv *env, struct java_io_FileDescriptor* this, s8 par1);
-
 #endif
 
index 98b75d1b6a1ff5c97418eebeb99b705f7cc83ed6..712d3fd176be5b602aee54e51ba974896f54240d 100644 (file)
@@ -8,7 +8,7 @@
 typedef struct java_io_FileInputStream {
    java_objectheader header;
    struct java_io_FileDescriptor* fd;
-   struct java_nio_channels_FileChannel* ch;
+   struct gnu_java_nio_channels_FileChannelImpl* ch;
 } java_io_FileInputStream;
 
 #endif
index e7add3dfc8aaebe5340cdec3e3397700c12ea12f..ea6155a8d87396b7107e0ecdc53345da6fd27f9a 100644 (file)
@@ -23,6 +23,8 @@ typedef struct java_io_ObjectInputStream {
    s4 isDeserializing;
    s4 fieldsAlreadyRead;
    struct java_util_Vector* validators;
+   struct java_util_Hashtable* classLookupTable;
+   struct java_io_ObjectInputStream_GetField* prereadFields;
 } java_io_ObjectInputStream;
 
 
index 2fb0f01c2a7ffbe285d242b00eda17b5633874f2..4a1f3313bf26497798df5c4694c8fa816b5a816e 100644 (file)
@@ -7,10 +7,10 @@
 
 typedef struct java_io_RandomAccessFile {
    java_objectheader header;
+   struct gnu_java_nio_channels_FileChannelImpl* ch;
    struct java_io_FileDescriptor* fd;
    struct java_io_DataOutputStream* out;
    struct java_io_DataInputStream* in;
-   struct java_nio_channels_FileChannel* ch;
 } java_io_RandomAccessFile;
 
 #endif
diff --git a/nat/java_io_VMFile.h b/nat/java_io_VMFile.h
new file mode 100644 (file)
index 0000000..eac922a
--- /dev/null
@@ -0,0 +1,125 @@
+/* This file is machine generated, don't edit it !*/
+
+#ifndef _JAVA_IO_VMFILE_H
+#define _JAVA_IO_VMFILE_H
+
+/* Structure information for class: java/io/VMFile */
+
+typedef struct java_io_VMFile {
+   java_objectheader header;
+} java_io_VMFile;
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    lastModified
+ * Signature: (Ljava/lang/String;)J
+ */
+JNIEXPORT s8 JNICALL Java_java_io_VMFile_lastModified(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    setReadOnly
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_setReadOnly(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    create
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_create(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    list
+ * Signature: (Ljava/lang/String;)[Ljava/lang/String;
+ */
+JNIEXPORT java_objectarray* JNICALL Java_java_io_VMFile_list(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    renameTo
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_renameTo(JNIEnv *env, jclass clazz, struct java_lang_String* par1, struct java_lang_String* par2);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    length
+ * Signature: (Ljava/lang/String;)J
+ */
+JNIEXPORT s8 JNICALL Java_java_io_VMFile_length(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    exists
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_exists(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    delete
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_delete(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    setLastModified
+ * Signature: (Ljava/lang/String;J)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_setLastModified(JNIEnv *env, jclass clazz, struct java_lang_String* par1, s8 par2);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    mkdir
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_mkdir(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    isFile
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_isFile(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    canWrite
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_canWrite(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    canRead
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_canRead(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/io/VMFile
+ * Method:    isDirectory
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_io_VMFile_isDirectory(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+#endif
+
index f5d819c795d6bb776e7eccde7e3048bfe1cab17f..2844023e643a5711e9a8b980c56802e23cae488c 100644 (file)
@@ -17,5 +17,77 @@ typedef struct java_io_VMObjectStreamClass {
  */
 JNIEXPORT s4 JNICALL Java_java_io_VMObjectStreamClass_hasClassInitializer(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
+
+/*
+ * Class:     java/io/VMObjectStreamClass
+ * Method:    setDoubleNative
+ * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;D)V
+ */
+JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setDoubleNative(JNIEnv *env, jclass clazz, struct java_lang_reflect_Field* par1, struct java_lang_Object* par2, double par3);
+
+
+/*
+ * Class:     java/io/VMObjectStreamClass
+ * Method:    setFloatNative
+ * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;F)V
+ */
+JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setFloatNative(JNIEnv *env, jclass clazz, struct java_lang_reflect_Field* par1, struct java_lang_Object* par2, float par3);
+
+
+/*
+ * Class:     java/io/VMObjectStreamClass
+ * Method:    setLongNative
+ * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;J)V
+ */
+JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setLongNative(JNIEnv *env, jclass clazz, struct java_lang_reflect_Field* par1, struct java_lang_Object* par2, s8 par3);
+
+
+/*
+ * Class:     java/io/VMObjectStreamClass
+ * Method:    setIntNative
+ * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setIntNative(JNIEnv *env, jclass clazz, struct java_lang_reflect_Field* par1, struct java_lang_Object* par2, s4 par3);
+
+
+/*
+ * Class:     java/io/VMObjectStreamClass
+ * Method:    setShortNative
+ * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;S)V
+ */
+JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setShortNative(JNIEnv *env, jclass clazz, struct java_lang_reflect_Field* par1, struct java_lang_Object* par2, s4 par3);
+
+
+/*
+ * Class:     java/io/VMObjectStreamClass
+ * Method:    setCharNative
+ * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;C)V
+ */
+JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setCharNative(JNIEnv *env, jclass clazz, struct java_lang_reflect_Field* par1, struct java_lang_Object* par2, s4 par3);
+
+
+/*
+ * Class:     java/io/VMObjectStreamClass
+ * Method:    setByteNative
+ * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;B)V
+ */
+JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setByteNative(JNIEnv *env, jclass clazz, struct java_lang_reflect_Field* par1, struct java_lang_Object* par2, s4 par3);
+
+
+/*
+ * Class:     java/io/VMObjectStreamClass
+ * Method:    setBooleanNative
+ * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;Z)V
+ */
+JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setBooleanNative(JNIEnv *env, jclass clazz, struct java_lang_reflect_Field* par1, struct java_lang_Object* par2, s4 par3);
+
+
+/*
+ * Class:     java/io/VMObjectStreamClass
+ * Method:    setObjectNative
+ * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_java_io_VMObjectStreamClass_setObjectNative(JNIEnv *env, jclass clazz, struct java_lang_reflect_Field* par1, struct java_lang_Object* par2, struct java_lang_Object* par3);
+
 #endif
 
index 0eec37d6d7c2dbc2323d6a36b47d088d4cb9b5fd..d551d8854d06501909f9eb7a680e809b35a32abb 100644 (file)
@@ -9,7 +9,7 @@ typedef struct java_lang_Class {
    java_objectheader header;
    java_objectarray* signers;
    struct java_security_ProtectionDomain* pd;
-   struct java_lang_VMClass* vmClass;
+   struct java_lang_Object* vmdata;
    struct java_lang_reflect_Constructor* constructor;
 } java_lang_Class;
 
index 5227147141e3aeed5b5271ae8937661e7d4c304e..9c27e039a36a6a12f64cf58d7c83585da85ed60d 100644 (file)
@@ -12,117 +12,5 @@ typedef struct java_lang_Runtime {
    struct java_util_Set* shutdownHooks;
 } java_lang_Runtime;
 
-
-/*
- * Class:     java/lang/Runtime
- * Method:    availableProcessors
- * Signature: ()I
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Runtime_availableProcessors(JNIEnv *env, struct java_lang_Runtime* this);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    freeMemory
- * Signature: ()J
- */
-JNIEXPORT s8 JNICALL Java_java_lang_Runtime_freeMemory(JNIEnv *env, struct java_lang_Runtime* this);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    totalMemory
- * Signature: ()J
- */
-JNIEXPORT s8 JNICALL Java_java_lang_Runtime_totalMemory(JNIEnv *env, struct java_lang_Runtime* this);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    maxMemory
- * Signature: ()J
- */
-JNIEXPORT s8 JNICALL Java_java_lang_Runtime_maxMemory(JNIEnv *env, struct java_lang_Runtime* this);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    gc
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_gc(JNIEnv *env, struct java_lang_Runtime* this);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    runFinalization
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalization(JNIEnv *env, struct java_lang_Runtime* this);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    traceInstructions
- * Signature: (Z)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_traceInstructions(JNIEnv *env, struct java_lang_Runtime* this, s4 par1);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    traceMethodCalls
- * Signature: (Z)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_traceMethodCalls(JNIEnv *env, struct java_lang_Runtime* this, s4 par1);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    runFinalizersOnExitInternal
- * Signature: (Z)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalizersOnExitInternal(JNIEnv *env, jclass clazz, s4 par1);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    exitInternal
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_exitInternal(JNIEnv *env, struct java_lang_Runtime* this, s4 par1);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    nativeLoad
- * Signature: (Ljava/lang/String;)I
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Runtime_nativeLoad(JNIEnv *env, struct java_lang_Runtime* this, struct java_lang_String* par1);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    nativeGetLibname
- * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
- */
-JNIEXPORT struct java_lang_String* JNICALL Java_java_lang_Runtime_nativeGetLibname(JNIEnv *env, jclass clazz, struct java_lang_String* par1, struct java_lang_String* par2);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    execInternal
- * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
- */
-JNIEXPORT struct java_lang_Process* JNICALL Java_java_lang_Runtime_execInternal(JNIEnv *env, struct java_lang_Runtime* this, java_objectarray* par1, java_objectarray* par2, struct java_io_File* par3);
-
-
-/*
- * Class:     java/lang/Runtime
- * Method:    insertSystemProperties
- * Signature: (Ljava/util/Properties;)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_insertSystemProperties(JNIEnv *env, jclass clazz, struct java_util_Properties* par1);
-
 #endif
 
index 4920769f4c253185a32d26e69de693fa427be961..8dfed016b1f1cc4476b6e1cb6304b714ddbde032 100644 (file)
 
 typedef struct java_lang_Thread {
    java_objectheader header;
+   struct java_lang_VMThread* vmThread;
    struct java_lang_ThreadGroup* group;
-   struct java_lang_Runnable* toRun;
+   struct java_lang_Runnable* runnable;
    struct java_lang_String* name;
-   s8 PrivateInfo;
-   struct java_lang_Thread* next;
    s4 daemon;
    s4 priority;
+   s8 stacksize;
+   struct java_lang_Throwable* stillborn;
    struct java_lang_ClassLoader* contextClassLoader;
 } java_lang_Thread;
 
-
-/*
- * Class:     java/lang/Thread
- * Method:    currentThread
- * Signature: ()Ljava/lang/Thread;
- */
-JNIEXPORT struct java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *env, jclass clazz);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    yield
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_yield(JNIEnv *env, jclass clazz);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    sleep
- * Signature: (JI)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, s8 par1, s4 par2);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    start
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_start(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    interrupted
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_interrupted(JNIEnv *env, jclass clazz);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    isInterrupted
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_isInterrupted(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    isAlive
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    countStackFrames
- * Signature: ()I
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_countStackFrames(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    holdsLock
- * Signature: (Ljava/lang/Object;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_holdsLock(JNIEnv *env, jclass clazz, struct java_lang_Object* par1);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeInit
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInit(JNIEnv *env, struct java_lang_Thread* this, s8 par1);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeStop
- * Signature: (Ljava/lang/Throwable;)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, struct java_lang_Thread* this, struct java_lang_Throwable* par1);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeInterrupt
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInterrupt(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeSuspend
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSuspend(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeResume
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeResume(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeSetPriority
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSetPriority(JNIEnv *env, struct java_lang_Thread* this, s4 par1);
-
 #endif
 
index 66b561097443eafeafa6e0c3ce2b586661f35ce3..69bfff4c234c98c866f0acd19167b459d3875c7f 100644 (file)
 
 typedef struct java_lang_VMClass {
    java_objectheader header;
-   s4 initializing_thread;
-   s4 erroneous_state;
-   struct gnu_classpath_RawData* vmData;
 } java_lang_VMClass;
 
 
-/*
- * Class:     java/lang/VMClass
- * Method:    isInitialized
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInitialized(JNIEnv *env, struct java_lang_VMClass* this);
-
-
-/*
- * Class:     java/lang/VMClass
- * Method:    setInitialized
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_setInitialized(JNIEnv *env, struct java_lang_VMClass* this);
-
-
-/*
- * Class:     java/lang/VMClass
- * Method:    step7
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_step7(JNIEnv *env, struct java_lang_VMClass* this);
-
-
-/*
- * Class:     java/lang/VMClass
- * Method:    step8
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_step8(JNIEnv *env, struct java_lang_VMClass* this);
-
-
 /*
  * Class:     java/lang/VMClass
  * Method:    isInstance
- * Signature: (Ljava/lang/Object;)Z
+ * Signature: (Ljava/lang/Class;Ljava/lang/Object;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, struct java_lang_VMClass* this, struct java_lang_Object* par1);
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, jclass clazz, struct java_lang_Class* par1, struct java_lang_Object* par2);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    isAssignableFrom
- * Signature: (Ljava/lang/Class;)Z
+ * Signature: (Ljava/lang/Class;Ljava/lang/Class;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, struct java_lang_VMClass* this, struct java_lang_Class* par1);
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, jclass clazz, struct java_lang_Class* par1, struct java_lang_Class* par2);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    isInterface
- * Signature: ()Z
+ * Signature: (Ljava/lang/Class;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, struct java_lang_VMClass* this);
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    isPrimitive
- * Signature: ()Z
+ * Signature: (Ljava/lang/Class;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, struct java_lang_VMClass* this);
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getName
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT struct java_lang_String* JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, struct java_lang_VMClass* this);
-
-
-/*
- * Class:     java/lang/VMClass
- * Method:    getBeautifiedName
  * Signature: (Ljava/lang/Class;)Ljava/lang/String;
  */
-JNIEXPORT struct java_lang_String* JNICALL Java_java_lang_VMClass_getBeautifiedName(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
+JNIEXPORT struct java_lang_String* JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getSuperclass
- * Signature: ()Ljava/lang/Class;
+ * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
  */
-JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, struct java_lang_VMClass* this);
+JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getInterfaces
- * Signature: ()[Ljava/lang/Class;
+ * Signature: (Ljava/lang/Class;)[Ljava/lang/Class;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, struct java_lang_VMClass* this);
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getComponentType
- * Signature: ()Ljava/lang/Class;
+ * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
  */
-JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, struct java_lang_VMClass* this);
+JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getModifiers
- * Signature: ()I
+ * Signature: (Ljava/lang/Class;)I
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, struct java_lang_VMClass* this);
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getDeclaringClass
- * Signature: ()Ljava/lang/Class;
+ * Signature: (Ljava/lang/Class;)Ljava/lang/Class;
  */
-JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, struct java_lang_VMClass* this);
+JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getDeclaredClasses
- * Signature: (Z)[Ljava/lang/Class;
+ * Signature: (Ljava/lang/Class;Z)[Ljava/lang/Class;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, struct java_lang_VMClass* this, s4 par1);
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, struct java_lang_Class* par1, s4 par2);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getDeclaredFields
- * Signature: (Z)[Ljava/lang/reflect/Field;
+ * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Field;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, struct java_lang_VMClass* this, s4 par1);
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, struct java_lang_Class* par1, s4 par2);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getDeclaredMethods
- * Signature: (Z)[Ljava/lang/reflect/Method;
+ * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Method;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, struct java_lang_VMClass* this, s4 par1);
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, struct java_lang_Class* par1, s4 par2);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getDeclaredConstructors
- * Signature: (Z)[Ljava/lang/reflect/Constructor;
+ * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Constructor;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, struct java_lang_VMClass* this, s4 par1);
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz, struct java_lang_Class* par1, s4 par2);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    getClassLoader
- * Signature: ()Ljava/lang/ClassLoader;
+ * Signature: (Ljava/lang/Class;)Ljava/lang/ClassLoader;
  */
-JNIEXPORT struct java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, struct java_lang_VMClass* this);
+JNIEXPORT struct java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
@@ -184,17 +141,17 @@ JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv
 /*
  * Class:     java/lang/VMClass
  * Method:    isArray
- * Signature: ()I
+ * Signature: (Ljava/lang/Class;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, struct java_lang_VMClass* this);
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
  * Class:     java/lang/VMClass
  * Method:    initialize
- * Signature: ()V
+ * Signature: (Ljava/lang/Class;)V
  */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_initialize(JNIEnv *env, struct java_lang_VMClass* this);
+JNIEXPORT void JNICALL Java_java_lang_VMClass_initialize(JNIEnv *env, jclass clazz, struct java_lang_Class* par1);
 
 
 /*
diff --git a/nat/java_lang_VMRuntime.h b/nat/java_lang_VMRuntime.h
new file mode 100644 (file)
index 0000000..5431392
--- /dev/null
@@ -0,0 +1,125 @@
+/* This file is machine generated, don't edit it !*/
+
+#ifndef _JAVA_LANG_VMRUNTIME_H
+#define _JAVA_LANG_VMRUNTIME_H
+
+/* Structure information for class: java/lang/VMRuntime */
+
+typedef struct java_lang_VMRuntime {
+   java_objectheader header;
+} java_lang_VMRuntime;
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    availableProcessors
+ * Signature: ()I
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMRuntime_availableProcessors(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    freeMemory
+ * Signature: ()J
+ */
+JNIEXPORT s8 JNICALL Java_java_lang_VMRuntime_freeMemory(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    totalMemory
+ * Signature: ()J
+ */
+JNIEXPORT s8 JNICALL Java_java_lang_VMRuntime_totalMemory(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    maxMemory
+ * Signature: ()J
+ */
+JNIEXPORT s8 JNICALL Java_java_lang_VMRuntime_maxMemory(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    gc
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_gc(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    runFinalization
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalization(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    runFinalizationForExit
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalizationForExit(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    traceInstructions
+ * Signature: (Z)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_traceInstructions(JNIEnv *env, jclass clazz, s4 par1);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    traceMethodCalls
+ * Signature: (Z)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_traceMethodCalls(JNIEnv *env, jclass clazz, s4 par1);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    runFinalizersOnExit
+ * Signature: (Z)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalizersOnExit(JNIEnv *env, jclass clazz, s4 par1);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    exit
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_exit(JNIEnv *env, jclass clazz, s4 par1);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    nativeLoad
+ * Signature: (Ljava/lang/String;)I
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMRuntime_nativeLoad(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    nativeGetLibname
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ */
+JNIEXPORT struct java_lang_String* JNICALL Java_java_lang_VMRuntime_nativeGetLibname(JNIEnv *env, jclass clazz, struct java_lang_String* par1, struct java_lang_String* par2);
+
+
+/*
+ * Class:     java/lang/VMRuntime
+ * Method:    insertSystemProperties
+ * Signature: (Ljava/util/Properties;)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_insertSystemProperties(JNIEnv *env, jclass clazz, struct java_util_Properties* par1);
+
+#endif
+
index af1a2393a57ad4e047403f55c4b1f9c92646bcc2..3e84d4849a8d8f2156cd1af2900f3f1ed67c360e 100644 (file)
@@ -9,13 +9,5 @@ typedef struct java_lang_VMString {
    java_objectheader header;
 } java_lang_VMString;
 
-
-/*
- * Class:     java/lang/VMString
- * Method:    intern
- * Signature: (Ljava/lang/String;)Ljava/lang/String;
- */
-JNIEXPORT struct java_lang_String* JNICALL Java_java_lang_VMString_intern(JNIEnv *env, jclass clazz, struct java_lang_String* par1);
-
 #endif
 
diff --git a/nat/java_lang_VMThread.h b/nat/java_lang_VMThread.h
new file mode 100644 (file)
index 0000000..95aec91
--- /dev/null
@@ -0,0 +1,123 @@
+/* This file is machine generated, don't edit it !*/
+
+#ifndef _JAVA_LANG_VMTHREAD_H
+#define _JAVA_LANG_VMTHREAD_H
+
+/* Structure information for class: java/lang/VMThread */
+
+typedef struct java_lang_VMThread {
+   java_objectheader header;
+   struct java_lang_Thread* thread;
+   s4 running;
+   s4 status;
+   s4 priority;
+   s4 restorePoint;
+   struct gnu_classpath_RawData* stackMem;
+   struct gnu_classpath_RawData* stackBase;
+   struct gnu_classpath_RawData* stackEnd;
+   struct gnu_classpath_RawData* usedStackTop;
+   s8 time;
+   struct java_lang_Throwable* texceptionptr;
+   struct java_lang_Thread* nextlive;
+   struct java_lang_Thread* next;
+   s4 flags;
+} java_lang_VMThread;
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    start
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_start(JNIEnv *env, struct java_lang_VMThread* this, s8 par1);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    interrupt
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_interrupt(JNIEnv *env, struct java_lang_VMThread* this);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    isInterrupted
+ * Signature: ()Z
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_isInterrupted(JNIEnv *env, struct java_lang_VMThread* this);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    suspend
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_suspend(JNIEnv *env, struct java_lang_VMThread* this);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    resume
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_resume(JNIEnv *env, struct java_lang_VMThread* this);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    nativeSetPriority
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeSetPriority(JNIEnv *env, struct java_lang_VMThread* this, s4 par1);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    nativeStop
+ * Signature: (Ljava/lang/Throwable;)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeStop(JNIEnv *env, struct java_lang_VMThread* this, struct java_lang_Throwable* par1);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    currentThread
+ * Signature: ()Ljava/lang/Thread;
+ */
+JNIEXPORT struct java_lang_Thread* JNICALL Java_java_lang_VMThread_currentThread(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    yield
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_yield(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    sleep
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_sleep(JNIEnv *env, jclass clazz, s8 par1, s4 par2);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    interrupted
+ * Signature: ()Z
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_interrupted(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    holdsLock
+ * Signature: (Ljava/lang/Object;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_holdsLock(JNIEnv *env, jclass clazz, struct java_lang_Object* par1);
+
+#endif
+
index 3671a7189cdbc5cc9ccdcea1199cd50195f014c1..68cd6de92ee134b2cc91cb30333e9049c481bbe4 100644 (file)
@@ -7,21 +7,21 @@
 
 typedef struct java_net_InetAddress {
    java_objectheader header;
+   s4 address;
    java_bytearray* addr;
    struct java_lang_String* hostName;
    struct java_lang_String* hostname_alias;
    s8 lookup_time;
-   s4 address;
    s4 family;
 } java_net_InetAddress;
 
 
 /*
  * Class:     java/net/InetAddress
- * Method:    getLocalHostName
+ * Method:    getLocalHostname
  * Signature: ()Ljava/lang/String;
  */
-JNIEXPORT struct java_lang_String* JNICALL Java_java_net_InetAddress_getLocalHostName(JNIEnv *env, jclass clazz);
+JNIEXPORT struct java_lang_String* JNICALL Java_java_net_InetAddress_getLocalHostname(JNIEnv *env, jclass clazz);
 
 
 /*
index ffdd76fdc0ceaa0cfa8eb0263a188f11c0e3ff79..193c70bced2dd788d3920f4547c5c1fd1a97f5a6 100644 (file)
@@ -14,8 +14,8 @@ typedef struct java_nio_DirectByteBufferImpl {
    struct java_nio_ByteOrder* endian;
    s4 array_offset;
    java_bytearray* backing_buffer;
+   struct java_lang_Object* owner;
    struct gnu_classpath_RawData* address;
-   s4 offset;
    s4 readOnly;
 } java_nio_DirectByteBufferImpl;
 
@@ -39,17 +39,41 @@ JNIEXPORT void JNICALL Java_java_nio_DirectByteBufferImpl_freeImpl(JNIEnv *env,
 /*
  * Class:     java/nio/DirectByteBufferImpl
  * Method:    getImpl
- * Signature: (I)B
+ * Signature: (Lgnu/classpath/RawData;I)B
  */
-JNIEXPORT s4 JNICALL Java_java_nio_DirectByteBufferImpl_getImpl(JNIEnv *env, struct java_nio_DirectByteBufferImpl* this, s4 par1);
+JNIEXPORT s4 JNICALL Java_java_nio_DirectByteBufferImpl_getImpl__Lgnu_classpath_RawData_2I(JNIEnv *env, jclass clazz, struct gnu_classpath_RawData* par1, s4 par2);
 
 
 /*
  * Class:     java/nio/DirectByteBufferImpl
  * Method:    putImpl
- * Signature: (IB)V
+ * Signature: (Lgnu/classpath/RawData;IB)V
  */
-JNIEXPORT void JNICALL Java_java_nio_DirectByteBufferImpl_putImpl(JNIEnv *env, struct java_nio_DirectByteBufferImpl* this, s4 par1, s4 par2);
+JNIEXPORT void JNICALL Java_java_nio_DirectByteBufferImpl_putImpl(JNIEnv *env, jclass clazz, struct gnu_classpath_RawData* par1, s4 par2, s4 par3);
+
+
+/*
+ * Class:     java/nio/DirectByteBufferImpl
+ * Method:    getImpl
+ * Signature: (Lgnu/classpath/RawData;I[BII)V
+ */
+JNIEXPORT void JNICALL Java_java_nio_DirectByteBufferImpl_getImpl__Lgnu_classpath_RawData_2I_3BII(JNIEnv *env, jclass clazz, struct gnu_classpath_RawData* par1, s4 par2, java_bytearray* par3, s4 par4, s4 par5);
+
+
+/*
+ * Class:     java/nio/DirectByteBufferImpl
+ * Method:    shiftDown
+ * Signature: (Lgnu/classpath/RawData;III)V
+ */
+JNIEXPORT void JNICALL Java_java_nio_DirectByteBufferImpl_shiftDown(JNIEnv *env, jclass clazz, struct gnu_classpath_RawData* par1, s4 par2, s4 par3, s4 par4);
+
+
+/*
+ * Class:     java/nio/DirectByteBufferImpl
+ * Method:    adjustAddress
+ * Signature: (Lgnu/classpath/RawData;I)Lgnu/classpath/RawData;
+ */
+JNIEXPORT struct gnu_classpath_RawData* JNICALL Java_java_nio_DirectByteBufferImpl_adjustAddress(JNIEnv *env, jclass clazz, struct gnu_classpath_RawData* par1, s4 par2);
 
 #endif
 
index baa9dfe6a3a90cc804d4e5e4018a111ca9dbb109..5878b59865eef759ae01f51fd48f05b80b27d384 100644 (file)
--- a/native.c
+++ b/native.c
@@ -31,7 +31,7 @@
    The .hh files created with the header file generator are all
    included here as are the C functions implementing these methods.
 
-   $Id: native.c 1113 2004-06-02 10:31:09Z twisti $
+   $Id: native.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -221,46 +221,11 @@ java_objectheader* _exceptionptr = NULL;
 
 void use_class_as_object(classinfo *c) 
 {
-/*     vftbl *vt; */
-/*     vftbl *newtbl; */
-       java_objectheader *vmo;
-
-/*     vt = class_java_lang_Class->vftbl; */
-
        if (!c->classvftbl) {
                c->classvftbl = true;
 
-               /*                copy_vftbl(&newtbl, vt);
-                                                 newtbl->class = c->header.vftbl->class;
-                                                 newtbl->baseval = c->header.vftbl->baseval;
-                                                 newtbl->diffval = c->header.vftbl->diffval;
-                                                 c->header.vftbl = newtbl;*/
-               
                c->header.vftbl = class_java_lang_Class->vftbl;
-        
-               method_vmclass_init =
-                       class_findmethod(class_java_lang_VMClass,
-                                                        utf_new_char("<init>"),
-                                                        utf_new_char("(Lgnu/classpath/RawData;)V"));
-
-               if (method_vmclass_init == 0) {
-                       class_showmethods(class_java_lang_VMClass);
-                       panic("Needed class initializer for VMClass could not be found");
-               }
-
-               vmo = builtin_new(class_java_lang_VMClass);
-
-               if (!vmo)
-                       panic("Error while creating instance of java/lang/VMClass");
-
-               asm_calljavafunction(method_vmclass_init, vmo, c, NULL, NULL);
-
-               c->vmClass = (java_lang_VMClass *) vmo;
-#if 0
-               setfield_critical(class_java_lang_Class,vmo,"vmClass",          "Ljava/lang/VMClass;",  jobject, (jobject) class_java_lang_Class /*this*/);
-#endif
-
-       }
+       }
             
 }
 
@@ -652,6 +617,7 @@ void native_loadclasses()
        class_java_lang_Void = class_new(utf_new_char("java/lang/Void"));
        class_load(class_java_lang_Void);
        class_link(class_java_lang_Void);
+
 }
 
 
@@ -1815,7 +1781,7 @@ java_objectarray *builtin_asm_createclasscontextarray(classinfo **end,classinfo
         classinfo **current;
        classinfo *c;
         size_t size=(((size_t)start)-((size_t)end)) / sizeof (classinfo*);
-/*      printf("end %p, start %p, size %ld\n",end,start,size);*/
+        /*printf("end %p, start %p, size %ld\n",end,start,size);*/
         if (!class_java_lang_Class)
                 class_java_lang_Class = class_new(utf_new_char ("java/lang/Class"));
         if (!class_java_lang_SecurityManager)
index 659c4a85b8217a6e32e271120147a44f2126c54d..befa4b3872ac92f050d3402f0cb6d775d606d24f 100644 (file)
@@ -37,7 +37,7 @@
      - Calling the class loader
      - Running the main method
 
-   $Id: cacao.c 1150 2004-06-06 13:29:25Z twisti $
+   $Id: cacao.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
 #include "typeinfo.h"
 #endif
 
-/* command line option */
 
+bool cacao_initializing;
+
+/* command line option */
 bool verbose = false;
 bool compileall = false;
 bool runverbose = false;       /* trace all method invocation                */
@@ -869,6 +871,8 @@ int main(int argc, char **argv)
        tables_init();
        suck_init(classpath);
 
+       cacao_initializing=true;
+
 #if defined(USE_THREADS) && defined(NATIVE_THREADS)
        initThreadsEarly();
 #endif
@@ -883,7 +887,13 @@ int main(int argc, char **argv)
        initThreads((u1*) &dummy);
 #endif
 
+       *threadrootmethod=0;
+       class_init(class_new(utf_new_char("java/lang/System"))); /*That's important, otherwise we get into trouble, if
+                       the Runtime static initializer is called before (circular dependency. This is with classpath 
+                       0.09. Another important thing is, that this has to happen after initThreads!!!
+               */
 
+       cacao_initializing=false;
        /************************* Start worker routines ********************/
 
        if (startit) {
@@ -931,6 +941,7 @@ int main(int argc, char **argv)
 
                *threadrootmethod = mainmethod;
 
+
                /* here we go... */
                asm_calljavafunction(mainmethod, a, NULL, NULL, NULL);
 
index c3ef6f9384643b913334a5f461cb77e6cb8041fd..1726d5243101fcf1a07ca1a453b56de58993b7d3 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Mark Probst
             Philipp Tomsich
 
-   $Id: headers.c 1171 2004-06-12 15:04:31Z stefan $
+   $Id: headers.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -267,6 +267,39 @@ static void addoutputsize (int len)
        outputsize = newsize;
 }
 
+static void printOverloadPart(utf *desc)
+{
+       char *utf_ptr=desc->text;
+       u2 c;
+
+       fprintf(file,"__");
+       while ((c=utf_nextu2(&utf_ptr))!=')') {
+               switch (c) {
+                       case 'I':
+                       case 'S':
+                       case 'B':
+                       case 'C':
+                       case 'Z':
+                       case 'J':
+                       case 'F':
+                       case 'D': 
+                               fprintf (file, "%c",(char)c);
+                               break;
+                       case '[':
+                               fprintf(file,"_3");
+                               break;
+                       case 'L':
+                               putc('L',file);
+                               while ( (c=utf_nextu2(&utf_ptr)) != ';')
+                                       printIDpart (c);
+                               fprintf(file,"_2");
+                               break;
+                       case '(':
+                               break;
+                       default: panic ("invalid method descriptor");
+               }
+       }
+}
 
 static char *printtype(char *utf_ptr)
 {
@@ -409,13 +442,11 @@ static void printmethod(methodinfo *m)
        fprintf(file, " JNICALL Java_");
        printID(m->class->name);           
 
-       /* rename overloaded method */
-       if ((ident_count = searchidentchain_utf(m->name)))
-               fprintf(file, "%d", ident_count - 1);           
        chain_addlast(ident_chain, m->name);    
 
        fprintf(file, "_");
        printID(m->name);
+       if (m->nativelyoverloaded) printOverloadPart(m->descriptor);
        fprintf(file, "(JNIEnv *env");
        
        utf_ptr = m->descriptor->text + 1;
@@ -464,6 +495,9 @@ static void headerfile_generate(classinfo *c)
        char uclassname[1024];
        u2 i;
        methodinfo *m;                  
+       u2 i2;
+       methodinfo *m2;
+       u2 nativelyoverloaded;                  
                      
        /* store class in chain */                    
        chain_addlast(nativeclass_chain, c);
@@ -510,6 +544,27 @@ static void headerfile_generate(classinfo *c)
 
        /* create method-prototypes */
                                
+       /* find overloaded methods */
+       for (i = 0; i < c->methodscount; i++) {
+
+               m = &(c->methods[i]);
+
+               if (!(m->flags & ACC_NATIVE)) continue;
+               if (!m->nativelyoverloaded) {
+                       nativelyoverloaded=false;
+                       for (i2=i+1;i2<c->methodscount; i2++) {
+                               m2 = &(c->methods[i2]);
+                               if (!(m2->flags & ACC_NATIVE)) continue;
+                               if (m->name==m2->name) {
+                                       m2->nativelyoverloaded=true;
+                                       nativelyoverloaded=true;
+                               }
+                       }
+                       m->nativelyoverloaded=nativelyoverloaded;
+               }
+
+       }
+
        for (i = 0; i < c->methodscount; i++) {
 
                m = &(c->methods[i]);
@@ -570,6 +625,7 @@ static void printnativetableentry(methodinfo *m)
        printID(m->class->name);
        fprintf(file,"_");
        printID(m->name);
+       if (m->nativelyoverloaded) printOverloadPart(m->descriptor);
        fprintf(file,"\n   },\n");
 }
 
index 4920769f4c253185a32d26e69de693fa427be961..8dfed016b1f1cc4476b6e1cb6304b714ddbde032 100644 (file)
 
 typedef struct java_lang_Thread {
    java_objectheader header;
+   struct java_lang_VMThread* vmThread;
    struct java_lang_ThreadGroup* group;
-   struct java_lang_Runnable* toRun;
+   struct java_lang_Runnable* runnable;
    struct java_lang_String* name;
-   s8 PrivateInfo;
-   struct java_lang_Thread* next;
    s4 daemon;
    s4 priority;
+   s8 stacksize;
+   struct java_lang_Throwable* stillborn;
    struct java_lang_ClassLoader* contextClassLoader;
 } java_lang_Thread;
 
-
-/*
- * Class:     java/lang/Thread
- * Method:    currentThread
- * Signature: ()Ljava/lang/Thread;
- */
-JNIEXPORT struct java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *env, jclass clazz);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    yield
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_yield(JNIEnv *env, jclass clazz);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    sleep
- * Signature: (JI)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, s8 par1, s4 par2);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    start
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_start(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    interrupted
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_interrupted(JNIEnv *env, jclass clazz);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    isInterrupted
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_isInterrupted(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    isAlive
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    countStackFrames
- * Signature: ()I
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_countStackFrames(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    holdsLock
- * Signature: (Ljava/lang/Object;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_holdsLock(JNIEnv *env, jclass clazz, struct java_lang_Object* par1);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeInit
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInit(JNIEnv *env, struct java_lang_Thread* this, s8 par1);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeStop
- * Signature: (Ljava/lang/Throwable;)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, struct java_lang_Thread* this, struct java_lang_Throwable* par1);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeInterrupt
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInterrupt(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeSuspend
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSuspend(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeResume
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeResume(JNIEnv *env, struct java_lang_Thread* this);
-
-
-/*
- * Class:     java/lang/Thread
- * Method:    nativeSetPriority
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSetPriority(JNIEnv *env, struct java_lang_Thread* this, s4 par1);
-
 #endif
 
diff --git a/src/native/include/java_lang_VMThread.h b/src/native/include/java_lang_VMThread.h
new file mode 100644 (file)
index 0000000..95aec91
--- /dev/null
@@ -0,0 +1,123 @@
+/* This file is machine generated, don't edit it !*/
+
+#ifndef _JAVA_LANG_VMTHREAD_H
+#define _JAVA_LANG_VMTHREAD_H
+
+/* Structure information for class: java/lang/VMThread */
+
+typedef struct java_lang_VMThread {
+   java_objectheader header;
+   struct java_lang_Thread* thread;
+   s4 running;
+   s4 status;
+   s4 priority;
+   s4 restorePoint;
+   struct gnu_classpath_RawData* stackMem;
+   struct gnu_classpath_RawData* stackBase;
+   struct gnu_classpath_RawData* stackEnd;
+   struct gnu_classpath_RawData* usedStackTop;
+   s8 time;
+   struct java_lang_Throwable* texceptionptr;
+   struct java_lang_Thread* nextlive;
+   struct java_lang_Thread* next;
+   s4 flags;
+} java_lang_VMThread;
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    start
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_start(JNIEnv *env, struct java_lang_VMThread* this, s8 par1);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    interrupt
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_interrupt(JNIEnv *env, struct java_lang_VMThread* this);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    isInterrupted
+ * Signature: ()Z
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_isInterrupted(JNIEnv *env, struct java_lang_VMThread* this);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    suspend
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_suspend(JNIEnv *env, struct java_lang_VMThread* this);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    resume
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_resume(JNIEnv *env, struct java_lang_VMThread* this);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    nativeSetPriority
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeSetPriority(JNIEnv *env, struct java_lang_VMThread* this, s4 par1);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    nativeStop
+ * Signature: (Ljava/lang/Throwable;)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeStop(JNIEnv *env, struct java_lang_VMThread* this, struct java_lang_Throwable* par1);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    currentThread
+ * Signature: ()Ljava/lang/Thread;
+ */
+JNIEXPORT struct java_lang_Thread* JNICALL Java_java_lang_VMThread_currentThread(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    yield
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_yield(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    sleep
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMThread_sleep(JNIEnv *env, jclass clazz, s8 par1, s4 par2);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    interrupted
+ * Signature: ()Z
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_interrupted(JNIEnv *env, jclass clazz);
+
+
+/*
+ * Class:     java/lang/VMThread
+ * Method:    holdsLock
+ * Signature: (Ljava/lang/Object;)Z
+ */
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_holdsLock(JNIEnv *env, jclass clazz, struct java_lang_Object* par1);
+
+#endif
+
index 360ac4d9b304c6301de7271de012b3c835a0ffeb..15d1cd22d19a33cef7dba31718212b516e1859de 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Joseph Wenninger
 
-   $Id: jni.c 1112 2004-05-31 15:47:20Z jowenn $
+   $Id: jni.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -1927,17 +1927,24 @@ jmethodID GetStaticMethodID(JNIEnv *env, jclass clazz, const char *name, const c
 
 jobject CallStaticObjectMethod(JNIEnv *env, jclass clazz, jmethodID methodID, ...)
 {
-       log_text("JNI-Call: CallStaticObjectMethod");
+       jobject ret;
+       va_list vaargs;
 
-       return NULL;
+       /* log_text("JNI-Call: CallStaticObjectMethod");*/
+
+       va_start(vaargs, methodID);
+       ret = callObjectMethod(0, methodID, vaargs);
+       va_end(vaargs);
+
+       return ret;
 }
 
 
 jobject CallStaticObjectMethodV(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
 {
-       log_text("JNI-Call: CallStaticObjectMethodV");
-
-       return NULL;
+       /* log_text("JNI-Call: CallStaticObjectMethodV"); */
+       
+       return callObjectMethod(0,methodID,args);
 }
 
 
index baa9dfe6a3a90cc804d4e5e4018a111ca9dbb109..5878b59865eef759ae01f51fd48f05b80b27d384 100644 (file)
@@ -31,7 +31,7 @@
    The .hh files created with the header file generator are all
    included here as are the C functions implementing these methods.
 
-   $Id: native.c 1113 2004-06-02 10:31:09Z twisti $
+   $Id: native.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -221,46 +221,11 @@ java_objectheader* _exceptionptr = NULL;
 
 void use_class_as_object(classinfo *c) 
 {
-/*     vftbl *vt; */
-/*     vftbl *newtbl; */
-       java_objectheader *vmo;
-
-/*     vt = class_java_lang_Class->vftbl; */
-
        if (!c->classvftbl) {
                c->classvftbl = true;
 
-               /*                copy_vftbl(&newtbl, vt);
-                                                 newtbl->class = c->header.vftbl->class;
-                                                 newtbl->baseval = c->header.vftbl->baseval;
-                                                 newtbl->diffval = c->header.vftbl->diffval;
-                                                 c->header.vftbl = newtbl;*/
-               
                c->header.vftbl = class_java_lang_Class->vftbl;
-        
-               method_vmclass_init =
-                       class_findmethod(class_java_lang_VMClass,
-                                                        utf_new_char("<init>"),
-                                                        utf_new_char("(Lgnu/classpath/RawData;)V"));
-
-               if (method_vmclass_init == 0) {
-                       class_showmethods(class_java_lang_VMClass);
-                       panic("Needed class initializer for VMClass could not be found");
-               }
-
-               vmo = builtin_new(class_java_lang_VMClass);
-
-               if (!vmo)
-                       panic("Error while creating instance of java/lang/VMClass");
-
-               asm_calljavafunction(method_vmclass_init, vmo, c, NULL, NULL);
-
-               c->vmClass = (java_lang_VMClass *) vmo;
-#if 0
-               setfield_critical(class_java_lang_Class,vmo,"vmClass",          "Ljava/lang/VMClass;",  jobject, (jobject) class_java_lang_Class /*this*/);
-#endif
-
-       }
+       }
             
 }
 
@@ -652,6 +617,7 @@ void native_loadclasses()
        class_java_lang_Void = class_new(utf_new_char("java/lang/Void"));
        class_load(class_java_lang_Void);
        class_link(class_java_lang_Void);
+
 }
 
 
@@ -1815,7 +1781,7 @@ java_objectarray *builtin_asm_createclasscontextarray(classinfo **end,classinfo
         classinfo **current;
        classinfo *c;
         size_t size=(((size_t)start)-((size_t)end)) / sizeof (classinfo*);
-/*      printf("end %p, start %p, size %ld\n",end,start,size);*/
+        /*printf("end %p, start %p, size %ld\n",end,start,size);*/
         if (!class_java_lang_Class)
                 class_java_lang_Class = class_new(utf_new_char ("java/lang/Class"));
         if (!class_java_lang_SecurityManager)
index ace2a5ed1ccd2f7b665eb759e26e1c29bee8c1a0..ad08458ecc598558674eeee7ea67f6e2feb19bf6 100644 (file)
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 
-# $Id: Makefile.am 1148 2004-06-06 13:20:49Z twisti $
+# $Id: Makefile.am 1173 2004-06-16 14:56:18Z jowenn $
 
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/jit/@ARCH_DIR@
@@ -12,7 +12,6 @@ noinst_LIBRARIES = libnat.a
 libnat_a_SOURCES = \
        Constructor.c \
        Field.c \
-       FileChannelImpl.c \
        Method.c \
        Proxy.c \
        Runtime.c \
@@ -20,7 +19,6 @@ libnat_a_SOURCES = \
        VMClass.c \
        VMClassLoader.c \
        VMObject.c \
-       VMObjectStreamClass.c \
        VMSecurityManager.c \
        VMString.c \
        VMSystem.c \
index 23cd43ce0831bde7758262e5728c10c7d7a1aa0e..d862c5edf82028a4ba31c21836f187b0bc94e6b4 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Joseph Wenninger
 
-   $Id: VMClass.c 1075 2004-05-20 16:58:49Z twisti $
+   $Id: VMClass.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -113,9 +113,9 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, j
  * Method:    getClassLoader
  * Signature: ()Ljava/lang/ClassLoader;
  */
-JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {  
-       return ((classinfo*)(this->vmData))->classloader;
+       return ((classinfo*)that)->classloader;
 /*     init_systemclassloader();
 
        return SystemClassLoader;*/
@@ -127,9 +127,9 @@ JNIEXPORT java_lang_ClassLoader* JNICALL Java_java_lang_VMClass_getClassLoader(J
  * Method:    getComponentType
  * Signature: ()Ljava/lang/Class;
  */
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEnv *env, jclass clazz,java_lang_Class *that)
 {
-    classinfo *thisclass = (classinfo *) this->vmData;
+    classinfo *thisclass = (classinfo *) that;
     classinfo *c = NULL;
     arraydescriptor *desc;
     
@@ -152,10 +152,11 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEn
  * Method:    getDeclaredConstructors
  * Signature: (Z)[Ljava/lang/reflect/Constructor;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, java_lang_VMClass *this, s4 public_only)
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz,
+       struct java_lang_Class *that, s4 public_only)
 {
   
-    classinfo *c = (classinfo *) this->vmData;
+    classinfo *c = (classinfo *) that;
     java_objectheader *o;
     classinfo *class_constructor;
     java_objectarray *array_constructor;     /* result: array of Method-objects */
@@ -217,26 +218,23 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredConstructo
  * Method:    getDeclaredClasses
  * Signature: (Z)[Ljava/lang/Class;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, java_lang_VMClass *this, s4 publicOnly)
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, java_lang_Class *that, s4 publicOnly)
 {
 #if defined(__GNUC__)
 #warning fix the public only case
 #endif
-       classinfo *c = (classinfo *) this->vmData;
+       classinfo *c = (classinfo *) that;
        int pos = 0;                /* current declared class */
        int declaredclasscount = 0; /* number of declared classes */
        java_objectarray *result;   /* array of declared classes */
        int notPublicOnly = !publicOnly;
        int i;
 
-       if (!this)
-               return NULL;
-
-       if (!this->vmData)
+       if (!that)
                return NULL;
 
        /*printf("PublicOnly: %d\n",publicOnly);*/
-       if (!Java_java_lang_VMClass_isPrimitive(env, (java_lang_VMClass *) c) && (c->name->text[0] != '[')) {
+       if (!Java_java_lang_VMClass_isPrimitive(env, clazz, (java_lang_Class *) c) && (c->name->text[0] != '[')) {
                /* determine number of declared classes */
                for (i = 0; i < c->innerclasscount; i++) {
                        if ( (c->innerclass[i].outer_class == c) && (notPublicOnly || (c->innerclass[i].flags & ACC_PUBLIC)))
@@ -269,14 +267,14 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JN
  * Method:    getDeclaringClass
  * Signature: ()Ljava/lang/Class;
  */
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIEnv *env, jclass clazz, struct java_lang_Class *that)
 {
 #if defined(__GNUC__)
 #warning fixme
 #endif
-       classinfo *c = (classinfo *) this->vmData;
+       classinfo *c = (classinfo *) that;
 
-       if (this && this->vmData && !Java_java_lang_VMClass_isPrimitive(env, this) && (c->name->text[0] != '[')) {
+       if (that && !Java_java_lang_VMClass_isPrimitive(env, clazz,that) && (c->name->text[0] != '[')) {
                int i;
 
                if (c->innerclasscount == 0)  /* no innerclasses exist */
@@ -299,12 +297,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIE
 }
 
 
-/*
- * Class:     java/lang/Class
- * Method:    getField0
- * Signature: (Ljava/lang/String;I)Ljava/lang/reflect/Field;
- */
-JNIEXPORT java_lang_reflect_Field* JNICALL Java_java_lang_VMClass_getField0(JNIEnv *env, java_lang_VMClass *this, java_lang_String *name, s4 public_only)
+java_lang_reflect_Field* cacao_getField0(JNIEnv *env, java_lang_Class *that, java_lang_String *name, s4 public_only)
 {
     classinfo *c;
        classinfo *fieldtype;
@@ -319,14 +312,14 @@ JNIEXPORT java_lang_reflect_Field* JNICALL Java_java_lang_VMClass_getField0(JNIE
     o = (java_lang_reflect_Field *) native_new_and_init(c);
 
     /* get fieldinfo entry */
-    idx = class_findfield_index_approx((classinfo *) this->vmData, javastring_toutf(name, false));
+    idx = class_findfield_index_approx((classinfo *) that, javastring_toutf(name, false));
 
     if (idx < 0) {
            *exceptionptr = new_exception(string_java_lang_NoSuchFieldException);
            return NULL;
        }
 
-    f = &(((classinfo *) this->vmData)->fields[idx]);
+    f = &(((classinfo *) that)->fields[idx]);
     if (f) {
                if (public_only && !(f->flags & ACC_PUBLIC)) {
                        /* field is not public  and public only had been requested*/
@@ -340,7 +333,7 @@ JNIEXPORT java_lang_reflect_Field* JNICALL Java_java_lang_VMClass_getField0(JNIE
                        return NULL;
         
                /* initialize instance fields */
-               setfield_critical(c,o,"declaringClass",          "Ljava/lang/Class;",  jobject, (jobject) (this->vmData) /*this*/);
+               setfield_critical(c,o,"declaringClass",          "Ljava/lang/Class;",  jobject, (jobject) that /*this*/);
                /*      ((java_lang_reflect_Field*)(o))->flag=f->flags;*/
                /* save type in slot-field for faster processing */
                /*      setfield_critical(c,o,"flag",           "I",                jint,    (jint) f->flags);  */
@@ -360,9 +353,9 @@ JNIEXPORT java_lang_reflect_Field* JNICALL Java_java_lang_VMClass_getField0(JNIE
  * Method:    getDeclaredFields
  * Signature: (Z)[Ljava/lang/reflect/Field;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, java_lang_VMClass *this, s4 public_only)
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, java_lang_Class *that, s4 public_only)
 {
-    classinfo *c = (classinfo *) this->vmData;
+    classinfo *c = (classinfo *) that;
     classinfo *class_field;
     java_objectarray *array_field; /* result: array of field-objects */
     int public_fields = 0;         /* number of elements in field-array */
@@ -391,10 +384,8 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNI
     for (i = 0; i < c->fieldscount; i++) 
                if ( (c->fields[i].flags & ACC_PUBLIC) || (!public_only))
                        array_field->data[pos++] = 
-                               (java_objectheader *) Java_java_lang_VMClass_getField0(env,
-                                                                                                                                          this,
-                                                                                                                                          (java_lang_String *) javastring_new(c->fields[i].name),
-                                                                                                                                          public_only);
+                               (java_objectheader *) cacao_getField0(env,
+                                          that, (java_lang_String *) javastring_new(c->fields[i].name),public_only);
     return array_field;
 }
 
@@ -404,9 +395,9 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNI
  * Method:    getInterfaces
  * Signature: ()[Ljava/lang/Class;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
-       classinfo *c = (classinfo *) this->vmData;
+       classinfo *c = (classinfo *) that;
        u4 i;
        java_objectarray *a;
 
@@ -425,15 +416,10 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv
 }
 
 
-/*
- * Class:     java/lang/Class
- * Method:    getMethod0
- * Signature: (Ljava/lang/String;[Ljava/lang/Class;I)Ljava/lang/reflect/Method;
- */
-JNIEXPORT java_lang_reflect_Method* JNICALL Java_java_lang_VMClass_getMethod0(JNIEnv *env, java_lang_Class *this, java_lang_String *name, java_objectarray *types, s4 which)
+java_lang_reflect_Method* cacao_getMethod0(JNIEnv *env, java_lang_Class *that, java_lang_String *name, java_objectarray *types, s4 which)
 {
     classinfo *c; 
-    classinfo *clazz = (classinfo *) this;
+    classinfo *clazz = (classinfo *) that;
     java_lang_reflect_Method* o;         /* result: Method-object */ 
     java_objectarray *exceptiontypes;    /* the exceptions thrown by the method */
     methodinfo *m;                      /* the method to be represented */
@@ -475,9 +461,9 @@ JNIEXPORT java_lang_reflect_Method* JNICALL Java_java_lang_VMClass_getMethod0(JN
  * Method:    getDeclaredMethods
  * Signature: (Z)[Ljava/lang/reflect/Method;
  */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, java_lang_VMClass *this, s4 public_only)
+JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, java_lang_Class *that, s4 public_only)
 {
-    classinfo *c = (classinfo *) this->vmData;    
+    classinfo *c = (classinfo *) that;    
     java_objectheader *o;
     classinfo *class_method;
     java_objectarray *array_method;     /* result: array of Method-objects */
@@ -497,7 +483,7 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JN
 
        /* JOWENN: array classes do not declare methods according to mauve test. It should be considered, if 
           we should return to my old clone method overriding instead of declaring it as a member function */
-       if (Java_java_lang_VMClass_isArray(env, this)) {
+       if (Java_java_lang_VMClass_isArray(env, clazz,that)) {
                return builtin_anewarray(0, class_method);
        }
 
@@ -561,9 +547,9 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JN
  * Method:    getModifiers
  * Signature: ()I
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
-       classinfo *c = (classinfo *) (this->vmData);
+       classinfo *c = (classinfo *) that;
        return c->flags;
 }
 
@@ -573,10 +559,10 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, java_lang_
  * Method:    getName
  * Signature: ()Ljava/lang/String;
  */
-JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, java_lang_VMClass* this)
+JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getName(JNIEnv *env, jclass clazz, java_lang_Class* that)
 {
        u4 i;
-       classinfo *c = (classinfo *) (this->vmData);
+       classinfo *c = (classinfo *) that;
        java_lang_String *s = (java_lang_String *) javastring_new(c->name);
 
        if (!s)
@@ -676,38 +662,15 @@ JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMClass_getBeautifiedName(JNI
 }
 
 
-/*
- * Class:     java/lang/Class
- * Method:    getProtectionDomain0
- * Signature: ()Ljava/security/ProtectionDomain;
- */
-JNIEXPORT java_security_ProtectionDomain* JNICALL Java_java_lang_VMClass_getProtectionDomain0(JNIEnv *env, java_lang_Class *this)
-{
-       log_text("Java_java_lang_VMClass_getProtectionDomain0");
-       return NULL;
-}
-
-
-/*
- * Class:     java/lang/Class
- * Method:    getSigners
- * Signature: ()[Ljava/lang/Object;
- */
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getSigners(JNIEnv *env, java_lang_Class *this)
-{
-       log_text("Java_java_lang_VMClass_getSigners");
-       return NULL;
-}
-
 
 /*
  * Class:     java/lang/Class
  * Method:    getSuperclass
  * Signature: ()Ljava/lang/Class;
  */
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
-       classinfo *cl = (classinfo *) this->vmData;
+       classinfo *cl = (classinfo *) that;
        classinfo *c = cl->super;
 
        if (!c)
@@ -724,9 +687,9 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *
  * Method:    isArray
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
-    classinfo *c = (classinfo *) this->vmData;
+    classinfo *c = (classinfo *) that;
 
     return c->vftbl->arraydesc != NULL;
 }
@@ -737,16 +700,16 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, java_lang_VMCla
  * Method:    isAssignableFrom
  * Signature: (Ljava/lang/Class;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, java_lang_VMClass *this, java_lang_Class *sup)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, jclass clazz, java_lang_Class *that, java_lang_Class *sup)
 {
        /*      log_text("Java_java_lang_VMClass_isAssignableFrom");*/
-       if (!this) return 0;
+       
        if (!sup) return 0;
-       if (!this->vmData) {
+       if (!that) {
                panic("sup->vmClass is NULL in VMClass.isAssignableFrom");
                return 0;
        }
-       return (*env)->IsAssignableForm(env, (jclass) sup, (jclass) (this->vmData));
+       return (*env)->IsAssignableForm(env, (jclass) sup, (jclass) that);
 }
 
 
@@ -755,11 +718,11 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, java_l
  * Method:    isInstance
  * Signature: (Ljava/lang/Object;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, java_lang_VMClass *this, java_lang_Object *obj)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, jclass clazz, java_lang_Class *that, java_lang_Object *obj)
 {
-       classinfo *clazz = (classinfo *) this->vmData;
+       classinfo *clazz = (classinfo *) that;
 
-       return (*env)->IsInstanceOf(env, (jobject) obj, clazz);
+       return (*env)->IsInstanceOf(env, (jobject) obj, that);
 }
 
 
@@ -768,9 +731,9 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, java_lang_VM
  * Method:    isInterface
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
-       classinfo *c = (classinfo *) this->vmData;
+       classinfo *c = (classinfo *) that;
 
        if (c->flags & ACC_INTERFACE)
                return true;
@@ -784,10 +747,10 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, java_lang_V
  * Method:    isPrimitive
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
        int i;
-       classinfo *c = (classinfo *) this->vmData;
+       classinfo *c = (classinfo *) that;
 
        /* search table of primitive classes */
        for (i = 0; i < PRIMITIVETYPE_COUNT; i++)
@@ -798,39 +761,6 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isPrimitive(JNIEnv *env, java_lang_V
 }
 
 
-/*
- * Class:     java/lang/Class
- * Method:    registerNatives
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_registerNatives(JNIEnv *env)
-{
-    /* empty */
-}
-
-
-/*
- * Class:     java/lang/Class
- * Method:    setProtectionDomain0
- * Signature: (Ljava/security/ProtectionDomain;)V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_setProtectionDomain0(JNIEnv *env, java_lang_Class *this, java_security_ProtectionDomain *par1)
-{
-       if (verbose)
-               log_text("Java_java_lang_VMClass_setProtectionDomain0");
-}
-
-
-/*
- * Class:     java/lang/Class
- * Method:    setSigners
- * Signature: ([Ljava/lang/Object;)V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_setSigners(JNIEnv *env, java_lang_Class *this, java_objectarray *par1)
-{
-       if (verbose)
-               log_text("Java_java_lang_VMClass_setSigners");
-}
 
 
 /*
@@ -838,7 +768,7 @@ JNIEXPORT void JNICALL Java_java_lang_VMClass_setSigners(JNIEnv *env, java_lang_
  * Method:    initialize
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_initialize(JNIEnv *env, java_lang_VMClass *this)
+JNIEXPORT void JNICALL Java_java_lang_VMClass_initialize(JNIEnv *env, jclass clazz, java_lang_Class *that)
 {
        log_text("Java_java_lang_VMClass_initialize");
 }
@@ -868,51 +798,8 @@ JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass
 }
 
 
-/*
- * Class:     java_lang_VMClass
- * Method:    step7
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_step7(JNIEnv *env, java_lang_VMClass *this)
-{
-       log_text("Java_java_lang_VMClass_step7");
-}
 
 
-/*
- * Class:     java_lang_VMClass
- * Method:    step8
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_step8(JNIEnv *env, java_lang_VMClass *this)
-{
-       log_text("Java_java_lang_VMClass_step8");
-}
-
-
-/*
- * Class:     java_lang_VMClass
- * Method:    isInitialized
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInitialized(JNIEnv *env, java_lang_VMClass *this)
-{
-       log_text("Java_java_lang_VMClass_isInitialized");
-
-       return 1;
-}
-
-
-/*
- * Class:     java_lang_VMClass
- * Method:    setInitialized
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_lang_VMClass_setInitialized(JNIEnv *env, java_lang_VMClass *this)
-{
-       log_text("Java_java_lang_VMClass_setInitialized");
-}
-
 
 /*
  * These are local overrides for various environment variables in Emacs.
index 9287d7c2498f4b59752df63bbcf732d566586414..58cf42db41402122da139d616485fb32ffa667a0 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Joseph Wenninger
             Christian Thalinger
 
-   $Id: VMRuntime.c 1147 2004-06-06 13:20:11Z twisti $
+   $Id: VMRuntime.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -51,8 +51,8 @@
 #include "java_io_File.h"
 #include "java_lang_String.h"
 #include "java_lang_Process.h"
-#include "java_util_Properties.h"    /* required by java_lang_Runtime.h */
-#include "java_lang_Runtime.h"
+#include "java_util_Properties.h"    /* needed for java_lang_Runtime.h */
+#include "java_lang_VMRuntime.h"
 
 
 #define JOWENN_DEBUG
@@ -61,6 +61,7 @@
 static s4 finalizeOnExit = false;
 
 #define MAXPROPS 100
+static bool shouldFinalizersBeRunOnExit=false;
 static int activeprops = 19;  
    
 static char *proplist[MAXPROPS][2] = {
@@ -96,11 +97,11 @@ void attach_property(char *name, char *value)
         activeprops++;
 }
 /*
- * Class:     java_lang_Runtime
+ * Class:     java_lang_VMRuntime
  * Method:    execInternal
  * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
  */
-JNIEXPORT java_lang_Process* JNICALL Java_java_lang_Runtime_execInternal(JNIEnv *env, java_lang_Runtime *this, java_objectarray *cmd, java_objectarray *shellenv, java_io_File *workingdir)
+JNIEXPORT java_lang_Process* JNICALL Java_java_lang_VMRuntime_execInternal(JNIEnv *env, jclass clazz, java_objectarray *cmd, java_objectarray *shellenv, java_io_File *workingdir)
 {
        log_text("Java_java_lang_Runtime_execInternal called");
 
@@ -109,11 +110,11 @@ JNIEXPORT java_lang_Process* JNICALL Java_java_lang_Runtime_execInternal(JNIEnv
 
 
 /*
- * Class:     java/lang/Runtime
+ * Class:     java/lang/VMRuntime
  * Method:    exitInternal
  * Signature: (I)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_exitInternal(JNIEnv *env, java_lang_Runtime *this, s4 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_exit(JNIEnv *env, jclass clazz, s4 par1)
 {
        if (finalizeOnExit)
                gc_finalize_all();
@@ -127,7 +128,7 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_exitInternal(JNIEnv *env, java_lan
  * Method:    freeMemory
  * Signature: ()J
  */
-JNIEXPORT s8 JNICALL Java_java_lang_Runtime_freeMemory(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT s8 JNICALL Java_java_lang_VMRuntime_freeMemory(JNIEnv *env, jclass clazz)
 {
        return gc_get_free_bytes();
 }
@@ -138,7 +139,7 @@ JNIEXPORT s8 JNICALL Java_java_lang_Runtime_freeMemory(JNIEnv *env, java_lang_Ru
  * Method:    gc
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_gc(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_gc(JNIEnv *env, jclass clazz)
 {
        gc_call();
 }
@@ -149,7 +150,7 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_gc(JNIEnv *env, java_lang_Runtime
  * Method:    runFinalization
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalization(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalization(JNIEnv *env, jclass clazz)
 {
        gc_invoke_finalizers();
 }
@@ -160,9 +161,25 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalization(JNIEnv *env, java_
  * Method:    runFinalizersOnExit
  * Signature: (Z)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalizersOnExitInternal(JNIEnv *env, jclass clazz, s4 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalizersOnExit(JNIEnv *env, jclass clazz, s4 par1)
 {
-       finalizeOnExit = par1;
+#warning threading
+       shouldFinalizersBeRunOnExit=par1;
+}
+
+/*
+ * Class:     java/lang/Runtime
+ * Method:    runFinalizationsForExit
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_runFinalizationForExit(JNIEnv *env, jclass clazz)
+{
+       if (shouldFinalizersBeRunOnExit) {
+               gc_call();
+       //      gc_finalize_all();
+       }
+       log_text("Java_java_lang_VMRuntime_runFinalizationForExit called");
+
 }
 
 
@@ -171,7 +188,7 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalizersOnExitInternal(JNIEnv
  * Method:    totalMemory
  * Signature: ()J
  */
-JNIEXPORT s8 JNICALL Java_java_lang_Runtime_totalMemory(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT s8 JNICALL Java_java_lang_VMRuntime_totalMemory(JNIEnv *env, jclass clazz)
 {
        return gc_get_heap_size();
 }
@@ -182,7 +199,7 @@ JNIEXPORT s8 JNICALL Java_java_lang_Runtime_totalMemory(JNIEnv *env, java_lang_R
  * Method:    traceInstructions
  * Signature: (Z)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_traceInstructions(JNIEnv *env, java_lang_Runtime *this, s4 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_traceInstructions(JNIEnv *env, jclass clazz, s4 par1)
 {
        /* not supported */
 }
@@ -193,7 +210,7 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_traceInstructions(JNIEnv *env, jav
  * Method:    traceMethodCalls
  * Signature: (Z)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_traceMethodCalls(JNIEnv *env, java_lang_Runtime *this, s4 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_traceMethodCalls(JNIEnv *env, jclass clazz, s4 par1)
 {
        /* not supported */
 }
@@ -204,7 +221,7 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_traceMethodCalls(JNIEnv *env, java
  * Method:    availableProcessors
  * Signature: ()I
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Runtime_availableProcessors(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMRuntime_availableProcessors(JNIEnv *env, jclass clazz)
 {
 #if defined(_SC_NPROC_ONLN)
        return (s4) sysconf(_SC_NPROC_ONLN);
@@ -223,7 +240,7 @@ JNIEXPORT s4 JNICALL Java_java_lang_Runtime_availableProcessors(JNIEnv *env, jav
  * Method:    nativeLoad
  * Signature: (Ljava/lang/String;)I
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Runtime_nativeLoad(JNIEnv *env, java_lang_Runtime *this, java_lang_String *par1)
+JNIEXPORT s4 JNICALL Java_java_lang_VMRuntime_nativeLoad(JNIEnv *env, jclass clazz, java_lang_String *par1)
 {
 #ifdef JOWENN_DEBUG    
        char *buffer;
@@ -242,30 +259,29 @@ JNIEXPORT s4 JNICALL Java_java_lang_Runtime_nativeLoad(JNIEnv *env, java_lang_Ru
                
        buffer = MNEW(char, buffer_len);
 
-       strcpy(buffer, "Java_java_lang_Runtime_nativeLoad:");
+       strcpy(buffer, "Java_java_lang_VMRuntime_nativeLoad:");
        utf_sprint(buffer + strlen((char *) data), data);
        log_text(buffer);       
 
        MFREE(buffer, char, buffer_len);
 #endif
-       log_text("Java_java_lang_Runtime_nativeLoad");
+       log_text("Java_java_lang_VMRuntime_nativeLoad");
 
        return 1;
 }
 
 
 /*
- * Class:     java_lang_Runtime
+ * Class:     java_lang_VMRuntime
  * Method:    nativeGetLibname
  * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
  */
-JNIEXPORT java_lang_String* JNICALL Java_java_lang_Runtime_nativeGetLibname(JNIEnv *env, jclass clazz, java_lang_String *par1, java_lang_String *par2)
+JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMRuntime_nativeGetLibname(JNIEnv *env, jclass clazz, java_lang_String *par1, java_lang_String *par2)
 {
-#ifdef JOWENN_DEBUG    
        char *buffer;
        int buffer_len;
        utf *data;
-       
+       java_lang_String *resultString; 
        data = javastring_toutf(par2, 0);
        
        if (!data) {
@@ -273,28 +289,28 @@ JNIEXPORT java_lang_String* JNICALL Java_java_lang_Runtime_nativeGetLibname(JNIE
                return 0;;
        }
        
-       buffer_len = utf_strlen(data) + 40;
-       
+       buffer_len = utf_strlen(data) + 6/*lib .so*/ +1 /*0*/;
        buffer = MNEW(char, buffer_len);
+       sprintf(buffer,"lib");
+       utf_sprint(buffer+3,data);
+       strcat(buffer,".so");
 
-       strcpy(buffer, "Java_java_lang_Runtime_nativeGetLibname:");
-       utf_sprint(buffer + strlen((char *) data), data);
-       log_text(buffer);       
+       log_text(buffer);
+       
+       resultString=javastring_new_char(buffer);       
 
        MFREE(buffer, char, buffer_len);
-#endif
-       log_text("Java_java_lang_Runtime_nativeGetLibname");
 
-       return 0;
+       return resultString;
 }
 
 
 /*
- * Class:     java_lang_Runtime
+ * Class:     java_lang_VMRuntime
  * Method:    insertSystemProperties
  * Signature: (Ljava/util/Properties;)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Runtime_insertSystemProperties(JNIEnv *env, jclass clazz, java_util_Properties *p)
+JNIEXPORT void JNICALL Java_java_lang_VMRuntime_insertSystemProperties(JNIEnv *env, jclass clazz, java_util_Properties *p)
 {
 
 #define BUFFERSIZE 200
@@ -350,11 +366,11 @@ JNIEXPORT void JNICALL Java_java_lang_Runtime_insertSystemProperties(JNIEnv *env
 
 
 /*
- * Class:     java_lang_Runtime
+ * Class:     java_lang_VMRuntime
  * Method:    maxMemory
  * Signature: ()J
  */
-JNIEXPORT s8 JNICALL Java_java_lang_Runtime_maxMemory(JNIEnv *env, java_lang_Runtime *this)
+JNIEXPORT s8 JNICALL Java_java_lang_VMRuntime_maxMemory(JNIEnv *env, jclass clazz)
 {
        return gc_get_max_heap_size();
 }
index a6f266f0f66dea12c41c9ade276fb8a4beae53ba..593b5ad88e36442a7dcf86cbbf83796a7257ff14 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Joseph Wenninger
 
-   $Id: VMThread.c 1067 2004-05-18 10:25:51Z stefan $
+   $Id: VMThread.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -44,6 +44,7 @@
 #include "java_lang_ThreadGroup.h"
 #include "java_lang_Object.h"         /* needed for java_lang_Thread.h */
 #include "java_lang_Throwable.h"      /* needed for java_lang_Thread.h */
+#include "java_lang_VMThread.h"
 #include "java_lang_Thread.h"
 
 
@@ -52,9 +53,9 @@
  * Method:    countStackFrames
  * Signature: ()I
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_countStackFrames(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_countStackFrames(JNIEnv *env, java_lang_VMThread *this)
 {
-    log_text("java_lang_Thread_countStackFrames called");
+    log_text("java_lang_VMThread_countStackFrames called");
 
     return 0;
 }
@@ -64,12 +65,12 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_countStackFrames(JNIEnv *env, java_la
  * Method:    currentThread
  * Signature: ()Ljava/lang/Thread;
  */
-JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *env, jclass clazz)
+JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_VMThread_currentThread(JNIEnv *env, jclass clazz)
 {
        java_lang_Thread *t;
 
        if (runverbose)
-               log_text("java_lang_Thread_currentThread called");
+               log_text("java_lang_VMThread_currentThread called");
 
 #if defined(USE_THREADS)
 #if !defined(NATIVE_THREADS)
@@ -79,7 +80,7 @@ JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *
 #endif
   
        if (!t->group) {
-               log_text("java_lang_Thread_currentThread: t->group=NULL");
+               log_text("java_lang_VMThread_currentThread: t->group=NULL");
                /* ThreadGroup of currentThread is not initialized */
 
                t->group = (java_lang_ThreadGroup *) 
@@ -101,9 +102,9 @@ JNIEXPORT java_lang_Thread* JNICALL Java_java_lang_Thread_currentThread(JNIEnv *
  * Method:    nativeInterrupt
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInterrupt(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_interrupt(JNIEnv *env, java_lang_VMThread *this)
 {
-       log_text("Java_java_lang_Thread_interrupt0 called");
+       log_text("Java_java_lang_VMThread_interrupt0 called");
 }
 
 
@@ -112,13 +113,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInterrupt(JNIEnv *env, java_l
  * Method:    isAlive
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_isAlive(JNIEnv *env, java_lang_VMThread *this)
 {
        if (runverbose)
-               log_text("java_lang_Thread_isAlive called");
+               log_text("java_lang_VMThread_isAlive called");
 
 #if defined(USE_THREADS)
-       return aliveThread((thread *) this);
+       return aliveThread((thread *) this->thread);
 #endif
 }
 
@@ -129,9 +130,9 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_isAlive(JNIEnv *env, java_lang_Thread
  * Method:    isInterrupted
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_isInterrupted(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_isInterrupted(JNIEnv *env, java_lang_VMThread *this)
 {
-       log_text("Java_java_lang_Thread_isInterrupted  called");
+       log_text("Java_java_lang_VMThread_isInterrupted  called");
        return 0;
 }
 
@@ -141,7 +142,7 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_isInterrupted(JNIEnv *env, java_lang_
  * Method:    registerNatives
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_registerNatives(JNIEnv *env, jclass clazz)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_registerNatives(JNIEnv *env, jclass clazz)
 {
        /* empty */
 }
@@ -152,13 +153,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_registerNatives(JNIEnv *env, jclass
  * Method:    resume0
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeResume(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_resume(JNIEnv *env, java_lang_VMThread *this)
 {
        if (runverbose)
-               log_text("java_lang_Thread_resume0 called");
+               log_text("java_lang_VMThread_resume0 called");
 
 #if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       resumeThread((thread *) this);
+       resumeThread((thread *) this->thread);
 #endif
 }
 
@@ -168,13 +169,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeResume(JNIEnv *env, java_lang
  * Method:    setPriority0
  * Signature: (I)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSetPriority(JNIEnv *env, java_lang_Thread *this, s4 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeSetPriority(JNIEnv *env, java_lang_VMThread *this, s4 par1)
 {
     if (runverbose) 
-               log_text("java_lang_Thread_setPriority0 called");
+               log_text("java_lang_VMThread_setPriority0 called");
 
 #if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       setPriorityThread((thread *) this, par1);
+       setPriorityThread((thread *) this->thread, par1);
 #endif
 }
 
@@ -184,10 +185,10 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSetPriority(JNIEnv *env, java
  * Method:    sleep
  * Signature: (JI)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, s8 millis, s4 par2)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_sleep(JNIEnv *env, jclass clazz, s8 millis, s4 par2)
 {
        if (runverbose)
-               log_text("java_lang_Thread_sleep called");
+               log_text("java_lang_VMThread_sleep called");
 
 #if defined(USE_THREADS)
        sleepThread(millis);
@@ -200,13 +201,16 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_sleep(JNIEnv *env, jclass clazz, s8
  * Method:    start
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_start(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_start(JNIEnv *env, java_lang_VMThread *this, s8 par1)
 {
        if (runverbose) 
-               log_text("java_lang_Thread_start called");
+               log_text("java_lang_VMThread_start called");
 
 #if defined(USE_THREADS)
-       startThread((thread*)this);
+#warning perhaps it would be better to always work with the vmthread structure in the thread code (jowenn)
+       if (this->thread->vmThread==0)
+               this->thread->vmThread=this;
+       startThread((thread*)(this->thread));
 #endif
 }
 
@@ -216,14 +220,14 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_start(JNIEnv *env, java_lang_Thread
  * Method:    stop0
  * Signature: (Ljava/lang/Object;)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, java_lang_Thread *this, java_lang_Throwable *par1)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeStop(JNIEnv *env, java_lang_VMThread *this, java_lang_Throwable *par1)
 {
        if (runverbose)
-               log_text ("java_lang_Thread_stop0 called");
+               log_text ("java_lang_VMThread_stop0 called");
 
 
 #if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       if (currentThread == (thread*)this) {
+       if (currentThread == (thread*)this->thread) {
                log_text("killing");
                killThread(0);
                /*
@@ -232,8 +236,8 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, java_lang_T
                */
 
        } else {
-               CONTEXT((thread*)this).flags |= THREAD_FLAGS_KILLED;
-               resumeThread((thread*)this);
+               /*CONTEXT((thread*)this)*/ this->flags |= THREAD_FLAGS_KILLED;
+               resumeThread((thread*)this->thread);
        }
 #endif
 }
@@ -244,13 +248,13 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeStop(JNIEnv *env, java_lang_T
  * Method:    suspend0
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSuspend(JNIEnv *env, java_lang_Thread *this)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_suspend(JNIEnv *env, java_lang_VMThread *this)
 {
        if (runverbose)
-               log_text("java_lang_Thread_suspend0 called");
+               log_text("java_lang_VMThread_suspend0 called");
 
 #if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-       suspendThread((thread*)this);
+       suspendThread((thread*)this->thread);
 #endif
 }
 
@@ -260,10 +264,10 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeSuspend(JNIEnv *env, java_lan
  * Method:    yield
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_yield(JNIEnv *env, jclass clazz)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_yield(JNIEnv *env, jclass clazz)
 {
        if (runverbose)
-               log_text("java_lang_Thread_yield called");
+               log_text("java_lang_VMThread_yield called");
 
 #if defined(USE_THREADS)
        yieldThread();
@@ -276,9 +280,9 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_yield(JNIEnv *env, jclass clazz)
  * Method:    interrupted
  * Signature: ()Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_interrupted(JNIEnv *env, jclass clazz)
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_interrupted(JNIEnv *env, jclass clazz)
 {
-       log_text("Java_java_lang_Thread_interrupted");
+       log_text("Java_java_lang_VMThread_interrupted");
 
        return 0;
 }
@@ -289,16 +293,16 @@ JNIEXPORT s4 JNICALL Java_java_lang_Thread_interrupted(JNIEnv *env, jclass clazz
  * Method:    nativeInit
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInit(JNIEnv *env, java_lang_Thread *this, s8 par1)
+JNIEXPORT void JNICALL Java_java_lang_VMThread_nativeInit(JNIEnv *env, java_lang_VMThread *this, s8 par1)
 {
 /*
        if (*exceptionptr)
                log_text("There has been an exception, strange...");*/
 
 #if defined(USE_THREADS) && defined(NATIVE_THREADS)
-       initThread(this);
+       initThread(this->thread);
 #endif
-       this->priority = 5;
+       this->thread->priority = 5;
 }
 
 
@@ -307,7 +311,7 @@ JNIEXPORT void JNICALL Java_java_lang_Thread_nativeInit(JNIEnv *env, java_lang_T
  * Method:    holdsLock
  * Signature: (Ljava/lang/Object;)Z
  */
-JNIEXPORT s4 JNICALL Java_java_lang_Thread_holdsLock(JNIEnv *env, jclass clazz, java_lang_Object *par1)
+JNIEXPORT s4 JNICALL Java_java_lang_VMThread_holdsLock(JNIEnv *env, jclass clazz, java_lang_Object *par1)
 {
        return 0;
 }
index 0f602fac000acc4156a3262c7d435504830564a8..b550f3208cdd73da201e81b78531103e4e34294d 100644 (file)
@@ -453,7 +453,7 @@ internal_unlock_mutex(iMux* mux)
                if (mux->muxWaiters != 0)
                {
                        tid = mux->muxWaiters;
-                       mux->muxWaiters = tid->next;
+                       mux->muxWaiters = tid->vmThread->next;
                        iresumeThread(tid);
                }
     }
@@ -485,7 +485,7 @@ internal_wait_cond(iMux* mux, iCv* cv, s8 timeout)
     /* If there's anyone waiting here, wake them up */
     if (mux->muxWaiters != 0) {
                tid = mux->muxWaiters;
-               mux->muxWaiters = tid->next;
+               mux->muxWaiters = tid->vmThread->next;
                iresumeThread(tid);
     }
 
@@ -526,10 +526,10 @@ internal_signal_cond (iCv* cv)
                DBG( fprintf(stderr, "releasing a waiter\n"); );
 
                tid = cv->cvWaiters;
-               cv->cvWaiters = tid->next;
+               cv->cvWaiters = tid->vmThread->next;
 
                /* Place it on mux list */
-               tid->next = cv->mux->muxWaiters;
+               tid->vmThread->next = cv->mux->muxWaiters;
                cv->mux->muxWaiters = tid;
     }
 }
@@ -555,7 +555,7 @@ internal_broadcast_cond (iCv* cv)
 
     /* Find the end of the cv list */
     if (cv->cvWaiters) {
-               for (tidp = &cv->cvWaiters; *tidp != 0; tidp = &(*tidp)->next)
+               for (tidp = &cv->cvWaiters; *tidp != 0; tidp = &(*tidp)->vmThread->next)
                        ;
 
                /* Place entire cv list on mux list */
index 1f9036cec65808a5d08bbafc321df216c127bc0c..7f8da88d42a5fda8e05e22780b8c7b56493b9b5d 100644 (file)
@@ -392,8 +392,8 @@ checkEvents(bool block)
        while (sleepThreads != 0 && time >= CONTEXT(sleepThreads).time)
        {
            tid = sleepThreads;
-           sleepThreads = sleepThreads->next;
-           tid->next = 0;
+           sleepThreads = sleepThreads->vmThread->next;
+           tid->vmThread->next = 0;
 
            iresumeThread(tid);
        }
@@ -445,8 +445,8 @@ checkEvents(bool block)
        while (sleepThreads != 0 && time >= CONTEXT(sleepThreads).time)
        {
            tid = sleepThreads;
-           sleepThreads = sleepThreads->next;
-           tid->next = 0;
+           sleepThreads = sleepThreads->vmThread->next;
+           tid->vmThread->next = 0;
 
            iresumeThread(tid);
        }
@@ -458,7 +458,7 @@ checkEvents(bool block)
        {
            for (tid = readQ[i]; tid != 0; tid = ntid)
            {
-               ntid = tid->next;
+               ntid = tid->vmThread->next;
                iresumeThread(tid);
            }
            readQ[i] = 0;
@@ -468,7 +468,7 @@ checkEvents(bool block)
        {
            for (tid = writeQ[i]; tid != 0; tid = ntid)
            {
-               ntid = tid->next;
+               ntid = tid->vmThread->next;
                iresumeThread(tid);
            }
            writeQ[i] = 0;
index 3fd3ab1c2fb2d774833f3b5cd870586f18e51625..09536e19cddfa1667be1670e800e7a3ad2964ead 100644 (file)
@@ -51,7 +51,7 @@ thread* sleepThreads = NULL;
 int blockInts;
 bool needReschedule;
 
-ctx contexts[MAXTHREADS];
+vmthread *contexts[MAXTHREADS];
 
 /* Number of threads alive, also counting daemons */
 static int talive;
@@ -71,6 +71,47 @@ void *stack_to_be_freed = 0;
 
 static thread* startDaemon(void* func, char* nm, int stackSize);
 
+
+
+java_objectheader *init_vmthread(void *thr)
+{
+        methodinfo *m;
+        java_objectheader *o;
+       classinfo *c=class_new(utf_new_char("java/lang/VMThread"));
+
+        if (!c)
+                return *exceptionptr;
+
+        o = builtin_new(c);          /* create object          */
+
+        if (!o)
+                return NULL;
+
+        /* find initializer */
+
+        m = class_findmethod(c,
+                                                 utf_new_char("<init>"),
+                                                 utf_new_char("(Ljava/lang/Thread;)V"));
+
+        if (!m) {                                       /* initializer not found  */
+                if (verbose) {
+                        char logtext[MAXLOGTEXT];
+                        sprintf(logtext, "Warning: class has no instance-initializer: ");
+                        utf_sprint_classname(logtext + strlen(logtext), c->name);
+                        log_text(logtext);
+                }
+                return o;
+        }
+
+        /* call initializer */
+
+        asm_calljavafunction(m, o, thr, NULL, NULL);
+       return o;
+}
+
+
+
+
 /*
  * Allocate the stack for a thread
  */
@@ -97,23 +138,23 @@ allocThreadStack (thread *tid, int size)
  * immediately because it is still in use!
  */
 void
-freeThreadStack (thread *tid)
+freeThreadStack (vmthread *vmtid)
 {
-    if (!(CONTEXT(tid).flags & THREAD_FLAGS_NOSTACKALLOC))
+    if (!(vmtid->flags & THREAD_FLAGS_NOSTACKALLOC))
     {
                int pageSize = getpagesize();
                unsigned long pageBegin;
 
-               pageBegin = (unsigned long)(CONTEXT(tid).stackMem) + pageSize - 1;
+               pageBegin = (unsigned long)(vmtid->stackMem) + pageSize - 1;
                pageBegin = pageBegin - pageBegin % pageSize;
 
                assert(stack_to_be_freed == 0);
 
-               stack_to_be_freed = CONTEXT(tid).stackMem;
+               stack_to_be_freed = vmtid->stackMem;
     }
-    CONTEXT(tid).stackMem = 0;
-    CONTEXT(tid).stackBase = 0;
-    CONTEXT(tid).stackEnd = 0;
+    vmtid->stackMem = 0;
+    vmtid->stackBase = 0;
+    vmtid->stackEnd = 0;
 }
 
 /*
@@ -132,17 +173,17 @@ initThreads(u1 *stackbottom)
     initLocks();
 
     for (i = 0; i < MAXTHREADS; ++i) {
-               contexts[i].free = true;
-               contexts[i].thread = NULL;
+               contexts[i]=0;
        }
 
     /* Allocate a thread to be the main thread */
     liveThreads = the_main_thread = 
         (thread *) builtin_new(class_new(utf_new_char("java/lang/Thread")));
+    the_main_thread->vmThread=init_vmthread(the_main_thread);
     assert(the_main_thread != 0);
     
-    the_main_thread->PrivateInfo = 1;
-    CONTEXT(the_main_thread).free = false;
+/*    the_main_thread->PrivateInfo = 1;
+    CONTEXT(the_main_thread).free = false;*/
 
 #if 0
     {
@@ -163,10 +204,11 @@ printf("DEADCODE LIVES ?????????\n");fflush(stdout);
                for (i=0; i<len; i++)
                        d[i] = mainname[i];
        }*/
+
     the_main_thread->priority = NORM_THREAD_PRIO;
     CONTEXT(the_main_thread).priority = (u1)the_main_thread->priority;
     CONTEXT(the_main_thread).texceptionptr = 0;
-    the_main_thread->next = 0;
+    the_main_thread->vmThread->next = 0;
     CONTEXT(the_main_thread).status = THREAD_SUSPENDED;
     CONTEXT(the_main_thread).stackBase = CONTEXT(the_main_thread).stackEnd = stackbottom;
     THREADINFO(&CONTEXT(the_main_thread));
@@ -178,7 +220,7 @@ printf("DEADCODE LIVES ?????????\n");fflush(stdout);
 
        CONTEXT(the_main_thread).flags = THREAD_FLAGS_NOSTACKALLOC;
        CONTEXT(the_main_thread).nextlive = 0;
-       CONTEXT(the_main_thread).thread = the_main_thread;
+       /*CONTEXT(the_main_thread).thread = the_main_thread;*/
        /*the_main_thread->single_step = 0;*/
        the_main_thread->daemon = 0;
        /*the_main_thread->stillborn = 0;*/
@@ -204,7 +246,7 @@ printf("DEADCODE LIVES ?????????\n");fflush(stdout);
        DBG( fprintf(stderr, "finishing initThreads\n"); );
 
     mainThread = currentThread = the_main_thread;
-
+       contexts[0]=mainThread->vmThread;
        /* Add thread into runQ */
        iresumeThread(mainThread);
 
@@ -221,17 +263,22 @@ startThread (thread* tid)
 
     /* Allocate a stack context */
     for (i = 0; i < MAXTHREADS; ++i)
-               if (contexts[i].free)
+               if (contexts[i]==0)
                        break;
 
-    if (i == MAXTHREADS)
+   if (i == MAXTHREADS)
                panic("Too many threads");
 
        assert(tid->priority >= MIN_THREAD_PRIO && tid->priority <= MAX_THREAD_PRIO);
+       contexts[i]=tid->vmThread;
+/*    tid->PrivateInfo = i + 1;
+    CONTEXT(tid).free = false;*/
+    if (tid->vmThread==0) {
+       panic("vmThread field not set");
+/*     tid->vmThread=init_vmthread(tid);*/
+    }
 
-    tid->PrivateInfo = i + 1;
-    CONTEXT(tid).free = false;
-       CONTEXT(tid).thread = tid;
+/*     CONTEXT(tid).thread = tid;*/
     CONTEXT(tid).nextlive = liveThreads;
     liveThreads = tid;
     allocThreadStack(tid, threadStackSize);
@@ -270,18 +317,18 @@ static thread *startDaemon(void* func, char* nm, int stackSize)
        tid = (thread *) builtin_new(class_new(utf_new_char("java/lang/Thread")));
        assert(tid != 0);
 
-       for (i = 0; i < MAXTHREADS; ++i)
-               if (contexts[i].free)
+/*     for (i = 0; i < MAXTHREADS; ++i)
+               if (contexts[i]==0)
                        break;
        if (i == MAXTHREADS)
-               panic("Too many threads");
+               panic("Too many threads");*/
 
-       tid->PrivateInfo = i + 1;
-       CONTEXT(tid).free = false;
+/*     tid->PrivateInfo = i + 1;
+       CONTEXT(tid).free = false;*/
        tid->name = 0;          /* for the moment */
        tid->priority = MAX_THREAD_PRIO;
        CONTEXT(tid).priority = (u1)tid->priority;
-       tid->next = 0;
+       tid->vmThread->next = 0;
        CONTEXT(tid).status = THREAD_SUSPENDED;
 
        allocThreadStack(tid, stackSize);
@@ -319,12 +366,12 @@ firstStartThread(void)
        assert(blockInts == 0);
 
        /* Find the run()V method and call it */
-       method = class_findmethod(currentThread->header.vftbl->class,
+       method = class_findmethod(currentThread->vmThread->header.vftbl->class,
                                                          utf_new_char("run"), utf_new_char("()V"));
        if (method == 0)
                panic("Cannot find method \'void run ()\'");
 
-       asm_calljavafunction(method, currentThread, NULL, NULL, NULL);
+       asm_calljavafunction(method, currentThread->vmThread, NULL, NULL, NULL);
 
     if (*exceptionptr) {
         utf_display((*exceptionptr)->vftbl->class->name);
@@ -345,9 +392,29 @@ firstStartThread(void)
 void
 iresumeThread(thread* tid)
 {
+       vmthread *vmctid;
     DBG( printf("resumeThread %p\n", tid); );
 
        intsDisable();
+       if (tid->vmThread==0) {
+               intsRestore();
+               return;
+       }
+       
+       if (currentThread->vmThread==0) {
+               long i1;
+               for (i1=0;i1<MAXTHREADS;i1++) {
+                       if (!contexts[i1]) continue;
+                       if (contexts[i1]->thread==currentThread) {
+                               vmctid=contexts[i1];
+                               break;
+                       }
+               }
+               if (i1==MAXTHREADS) vmctid=0; /*panic("Thread not found in iresumeThread");*/
+
+       } else {
+               vmctid=currentThread->vmThread;
+       }
 
        if (CONTEXT(tid).status != THREAD_RUNNING)
        {
@@ -359,16 +426,17 @@ iresumeThread(thread* tid)
                if (threadQhead[CONTEXT(tid).priority] == 0) {
                        threadQhead[CONTEXT(tid).priority] = tid;
                        threadQtail[CONTEXT(tid).priority] = tid;
-                       if (CONTEXT(tid).priority
-                               > CONTEXT(currentThread).priority)
+                       
+                       if ((vmctid==0) ||  (CONTEXT(tid).priority
+                               > vmctid->priority) )
                                needReschedule = true;
                }
                else
                {
-                       threadQtail[CONTEXT(tid).priority]->next = tid;
+                       threadQtail[CONTEXT(tid).priority]->vmThread->next = tid;
                        threadQtail[CONTEXT(tid).priority] = tid;
                }
-               tid->next = 0;
+               tid->vmThread->next = 0;
        }
        SDBG( else { printf("Re-resuming %p\n", tid); } );
 
@@ -387,10 +455,10 @@ yieldThread()
                != threadQtail[CONTEXT(currentThread).priority])
     {
                /* Get the next thread and move me to the end */
-               threadQhead[CONTEXT(currentThread).priority] = currentThread->next;
-               threadQtail[CONTEXT(currentThread).priority]->next = currentThread;
+               threadQhead[CONTEXT(currentThread).priority] = currentThread->vmThread->next;
+               threadQtail[CONTEXT(currentThread).priority]->vmThread->next = currentThread;
                threadQtail[CONTEXT(currentThread).priority] = currentThread;
-               currentThread->next = 0;
+               currentThread->vmThread->next = 0;
                needReschedule = true;
     }
 
@@ -447,12 +515,12 @@ suspendThread(thread* tid)
 
                for (ntid = &threadQhead[CONTEXT(tid).priority];
                         *ntid != 0;
-                        ntid = &(*ntid)->next)
+                        ntid = &(*ntid)->vmThread->next)
                {
                        if (*ntid == tid)
                        {
-                               *ntid = tid->next;
-                               tid->next = 0;
+                               *ntid = tid->vmThread->next;
+                               tid->vmThread->next = 0;
                                if (tid == currentThread)
                                {
                                        reschedule();
@@ -484,13 +552,13 @@ suspendOnQThread(thread* tid, thread** queue)
 
                for (ntid = &threadQhead[CONTEXT(tid).priority];
                         *ntid != 0;
-                        ntid = &(*ntid)->next)
+                        ntid = &(*ntid)->vmThread->next)
                {
                        if (*ntid == tid)
                        {
-                               *ntid = tid->next;
+                               *ntid = tid->vmThread->next;
                                /* Insert onto head of lock wait Q */
-                               tid->next = *queue;
+                               tid->vmThread->next = *queue;
                                *queue = tid;
                                if (tid == currentThread)
                                {
@@ -511,6 +579,7 @@ suspendOnQThread(thread* tid, thread** queue)
 void
 killThread(thread* tid)
 {
+    vmthread *context;
     thread** ntid;
 
     intsDisable();
@@ -521,26 +590,39 @@ killThread(thread* tid)
                tid = currentThread;
     }
 
+       if (tid->vmThread==0) {
+               long i1;
+               for (i1=0;i1<MAXTHREADS;i1++) {
+                       if (!contexts[i1]) continue;
+                       if (contexts[i1]->thread==tid) {
+                               context=contexts[i1];
+                               break;
+                       }
+               }
+               if (i1==MAXTHREADS) panic("Thread not found in killThread");
+
+       } else context=tid->vmThread;
+
        DBG( printf("killThread %p\n", tid); );
 
-       if (CONTEXT(tid).status != THREAD_DEAD)
+       if (context->status != THREAD_DEAD)
        {
                /* Get thread off runq (if it needs it) */
-               if (CONTEXT(tid).status == THREAD_RUNNING)
+               if (context->status == THREAD_RUNNING)
                {
-                       for (ntid = &threadQhead[CONTEXT(tid).priority];
+                       for (ntid = &threadQhead[context->priority];
                                 *ntid != 0;
-                                ntid = &(*ntid)->next)
+                                ntid = &(*ntid)->vmThread->next)
                        {
                                if (*ntid == tid)
                                {
-                                       *ntid = tid->next;
+                                       *ntid = context->next;
                                        break;
                                }
                        }
                }
 
-               CONTEXT(tid).status = THREAD_DEAD;
+               context->status = THREAD_DEAD;
                talive--;
                if (tid->daemon) {
                        tdaemon--;
@@ -565,23 +647,46 @@ killThread(thread* tid)
                {
                        if (tid == (*ntid))
                        {
-                               (*ntid) = CONTEXT(tid).nextlive;
+                               (*ntid) = context->nextlive;
                                break;
                        }
                }
 
+
                /* Free stack */
-               freeThreadStack(tid);
+               freeThreadStack(context);
 
                /* free context */
-               if (tid != mainThread) {
+               if (tid != mainThread)
+               {
+                       long i;
+                       for (i=0;i<MAXTHREADS;i++) {
+                               if (!contexts[i]) continue;
+                               if (contexts[i]==context) {
+                                       contexts[i]=0;
+                                       break;
+                               }
+                       }
+               }
+/*             if (tid != mainThread) {
                        CONTEXT(tid).free = true;
                        CONTEXT(tid).thread = NULL;
-               }
+               }*/
 
                /* Run something else */
                needReschedule = true;
        }
+               for (ntid = &sleepThreads;
+                        *ntid != 0;
+                        ntid = &(CONTEXT((*ntid)).next))
+               {
+                       if (tid == (*ntid))
+                       {
+                               (*ntid) = context->next;
+                               break;
+                       }
+               }
+
        intsRestore();
 }
 
@@ -595,10 +700,11 @@ setPriorityThread(thread* tid, int prio)
 
        assert(prio >= MIN_THREAD_PRIO && prio <= MAX_THREAD_PRIO);
 
-    if (tid->PrivateInfo == 0) {
+#warning fixme ??
+/*    if (tid->PrivateInfo == 0) {
                tid->priority = prio;
                return;
-    }
+    }*/
 
     if (CONTEXT(tid).status == THREAD_SUSPENDED) {
                CONTEXT(tid).priority = (u8)prio;
@@ -608,9 +714,9 @@ setPriorityThread(thread* tid, int prio)
     intsDisable();
 
     /* Remove from current thread list */
-    for (ntid = &threadQhead[CONTEXT(tid).priority]; *ntid != 0; ntid = &(*ntid)->next) {
+    for (ntid = &threadQhead[CONTEXT(tid).priority]; *ntid != 0; ntid = &(*ntid)->vmThread->next) {
                if (*ntid == tid) {
-                       *ntid = tid->next;
+                       *ntid = tid->vmThread->next;
                        break;
                }
     }
@@ -626,10 +732,10 @@ setPriorityThread(thread* tid, int prio)
                }
     }
     else {
-               threadQtail[prio]->next = tid;
+               threadQtail[prio]->vmThread->next = tid;
                threadQtail[prio] = tid;
     }
-    tid->next = 0;
+    tid->vmThread->next = 0;
 
     intsRestore();
 }
@@ -671,9 +777,9 @@ sleepThread (s8 time)
     CONTEXT(currentThread).time = time + currentTime();
 
     /* Find place in alarm list */
-    for (tidp = &sleepThreads; (*tidp) != 0; tidp = &(*tidp)->next)
+    for (tidp = &sleepThreads; (*tidp) != 0; tidp = &((*tidp)->vmThread->next))
        {
-               if (CONTEXT(*tidp).time > CONTEXT(currentThread).time)
+               if (CONTEXT((*tidp)).time > CONTEXT(currentThread).time)
                        break;
     }
 
@@ -689,7 +795,7 @@ sleepThread (s8 time)
 bool
 aliveThread(thread* tid)
 {
-    if (tid->PrivateInfo != 0 && CONTEXT(tid).status != THREAD_DEAD)
+    if (tid!=mainThread  && CONTEXT(tid).status != THREAD_DEAD)
                return (true);
     else
                return (false);
@@ -734,8 +840,10 @@ reschedule(void)
                                        CONTEXT(currentThread).texceptionptr = *exceptionptr;
 
                     DBG( fprintf(stderr, "thread switch from: %p to: %p\n", lastThread, currentThread); );
+                                       {
                                        THREADSWITCH((&CONTEXT(currentThread)),
                                                                 (&CONTEXT(lastThread)));
+                                       }
                                        blockInts = b;
 
                                        *exceptionptr = CONTEXT(currentThread).texceptionptr;
index 20397e20e0df725985ed7ed9692f80a6715d8d09..2fb7d2670e9abc7d94436e4021d88332f2723d1e 100644 (file)
@@ -56,6 +56,7 @@ typedef struct {
 
 struct _thread;
 
+#if 0
 typedef struct _ctx
 {
     struct _thread    *thread;
@@ -72,6 +73,7 @@ typedef struct _ctx
     struct _thread    *nextlive;
     u1                 flags;
 } ctx;
+#endif
 
 /*
 struct _stringClass;
@@ -91,17 +93,38 @@ typedef struct _threadGroup {
 } threadGroup;
 
 
+
+/* This structure mirrors java.lang.VMThread.h */
+typedef struct vmthread {
+   java_objectheader header;
+   struct _thread* thread;
+   s4 running;
+   s4 status;
+   s4 priority;
+   void* restorePoint;
+   void* stackMem;
+   void* stackBase;
+   void* stackEnd;
+   void* usedStackTop;
+   s8 time;
+   java_objectheader *texceptionptr;
+   struct _thread* nextlive;
+   struct _thread* next;
+   s4 flags;
+} vmthread;
+
 /* This structure mirrors java.lang.Thread.h */
 typedef struct _thread {
    java_objectheader header;
-   struct _threadGroup* group;
-   struct java_objectheader* toRun;
-   struct java_objectheader* name;
-   s8 PrivateInfo;
-   struct _thread* next;
+   vmthread* vmThread;
+   threadGroup* group;
+   struct java_lang_Runnable* runnable;
+   struct java_lang_String* name;
    s4 daemon;
    s4 priority;
-   struct java_objectheader* contextClassLoader;
+   s8 stacksize;
+   struct java_lang_Throwable* stillborn;
+   struct java_lang_ClassLoader* contextClassLoader;
 } thread;
 
 void initThreads (u1 *stackbottom);
@@ -128,7 +151,7 @@ extern int blockInts;
 extern bool needReschedule;
 extern thread *currentThread;
 extern thread *mainThread;
-extern ctx contexts[];
+/*extern ctx contexts[];*/
 extern int threadStackSize;
 
 extern thread *liveThreads;
@@ -137,7 +160,8 @@ extern thread *sleepThreads;
 extern thread *threadQhead[MAX_THREAD_PRIO + 1];
 
 
-#define CONTEXT(_t)     (contexts[(_t)->PrivateInfo - 1])
+/*#define CONTEXT(_t)     (contexts[(_t)->PrivateInfo - 1])*/
+#define CONTEXT(_t)    (*(_t->vmThread))
 
 #define        intsDisable()   blockInts++
 
@@ -153,8 +177,10 @@ extern thread *threadQhead[MAX_THREAD_PRIO + 1];
 
 #define        THREADSWITCH(to, from) \
     do { \
-        asm_perform_threadswitch(&(from)->restorePoint,\
-                                 &(to)->restorePoint, &(from)->usedStackTop); \
+       void *from1; \
+       void *from2; \
+        asm_perform_threadswitch((from?&(from)->restorePoint:&from1),\
+                                 &(to)->restorePoint, (from?&(from)->usedStackTop:&from2)); \
     } while (0)
 
 
index 66cce968fbb0c4bc393f967a47e318df1d786692..7bdae27b50fbbd76138629f051c2980347a83ff7 100644 (file)
@@ -70,7 +70,7 @@ avl_find (const struct avl_table *tree, const void *item)
     {
       int cmp = tree->avl_compare (item, p->avl_data, tree->avl_param);
 
-      if (cmp < 0)
+      if (cmp < 0)  
         p = p->avl_link[0];
       else if (cmp > 0)
         p = p->avl_link[1];
index 6f99656c38b292b4c066fa086a096c729383bf79..ee0e36f2e1568204ab7fc71011e8cd8fa5eac809 100644 (file)
@@ -34,7 +34,7 @@
    calls instead of machine instructions, using the C calling
    convention.
 
-   $Id: builtin.c 1113 2004-06-02 10:31:09Z twisti $
+   $Id: builtin.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -1814,7 +1814,10 @@ stacktraceelement *builtin_stacktrace_copy(stacktraceelement **el,stacktraceelem
        size_t s;
        s=(end-begin);
        /*printf ("begin: %p, end: %p, diff: %ld, size :%ld\n",begin,end,s,s*sizeof(stacktraceelement));*/
+       *el=heap_allocate(sizeof(stacktraceelement)*(s+1), true, 0);
+#if 0
        *el=MNEW(stacktraceelement,s+1); /*GC*/
+#endif
        memcpy(*el,begin,(end-begin)*sizeof(stacktraceelement));
        (*el)[s].method=0;
 #if defined(__GNUC__)
index 0998df46549f74c68d856b8fec50f5dc87c537ea..7247302ba894d1391611be941e6bee284d65909c 100644 (file)
@@ -31,7 +31,7 @@
             Philipp Tomsich
                        Edwin Steiner
 
-   $Id: global.h 1155 2004-06-09 16:28:52Z twisti $
+   $Id: global.h 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -611,6 +611,7 @@ struct methodinfo {                 /* method structure                       */
         /* should # method def'd and used be kept after static parse (will it be used?) */
        s4        subRedefs;
        s4        subRedefsUsed;
+       s4        nativelyoverloaded;           /*used in header.c and only valid there*/
 };
 
 
@@ -792,6 +793,7 @@ struct arraydescriptor {
 
 /* flag variables *************************************************************/
 
+extern bool cacao_initializing;
 extern bool compileall;
 extern bool runverbose;         
 extern bool verboseexception;         
index a7ca17e2019b3fe89b7966c2b1749031f535623e..ca98704c94db47a80a98f7a0695b51922685cf95 100644 (file)
@@ -29,7 +29,7 @@
 
    Changes: Christian Thalinger
 
-   $Id: asmpart.h 1164 2004-06-12 13:32:49Z stefan $
+   $Id: asmpart.h 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -106,8 +106,10 @@ void asm_builtin_exittrace();
 #if defined(USE_THREADS) && defined(NATIVE_THREADS)
 extern threadcritnode asm_criticalsections;
 #endif
+
 void asm_getclassvalues_atomic(vftbl *super, vftbl *sub, castinfo *out);
 
+
 #endif /* _ASMPART_H */
 
 
index b1fa389a8e8f2485a75221e307c848e04d22e270..2d5feff2224f97ee7b674796c8a59f505b0caa98 100644 (file)
@@ -48,7 +48,7 @@
    memory. All functions writing values into the data area return the offset
    relative the begin of the code area (start of procedure).   
 
-   $Id: codegen.inc 1165 2004-06-12 13:33:38Z stefan $
+   $Id: codegen.inc 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -139,7 +139,7 @@ struct _methodtree_element {
        void *endpc;
 };
 
-static struct avl_table *methodtree;
+static struct avl_table *methodtree=0;
 static int methodtree_comparator(const void *pc, const void *element,
                                                                 void *param);
 #endif
@@ -185,13 +185,17 @@ void codegen_init()
                methodtree = avl_create(methodtree_comparator, NULL, NULL);
 
                mte = NEW(methodtree_element);
-               mte->startpc = (void *) asm_calljavafunction;
-               mte->endpc = (void *) calljava_xhandler;
+
+               mte->startpc = asm_calljavafunction;
+               mte->endpc = asm_calljavafunction2-1;
+
                avl_insert(methodtree, mte);
 
                mte = NEW(methodtree_element);
-               mte->startpc = (void *) asm_calljavafunction2;
-               mte->endpc = (void *) calljava_xhandler2;
+
+               mte->startpc = asm_calljavafunction2;
+               mte->endpc = asm_call_jit_compiler-1;
+
                avl_insert(methodtree, mte);
        }
 #endif
@@ -659,6 +663,33 @@ static void codegen_finish(int mcodelen)
 }
 
 
+void codegen_insertNative(void *startpc,void *endpc) {
+               methodtree_element *mte;
+
+       if (!methodtree) {
+               methodtree_element *mte;
+
+               methodtree = avl_create(methodtree_comparator, NULL, NULL);
+
+               mte = NEW(methodtree_element);
+               mte->startpc = asm_calljavafunction;
+               mte->endpc = asm_calljavafunction2-1;
+               avl_insert(methodtree, mte);
+
+               mte = NEW(methodtree_element);
+               mte->startpc = asm_calljavafunction2;
+               mte->endpc = asm_call_jit_compiler-1;
+               avl_insert(methodtree, mte);
+       }
+
+
+               mte = NEW(methodtree_element);
+               mte->startpc = startpc;
+               mte->endpc = endpc;
+
+               if (avl_insert(methodtree, mte))
+                       panic("duplicate entry");
+}
 
 void dseg_display(s4 *s4ptr)
 {
index 6b0754f2611c74149e160a9b983b0165d8d4b208..7fb4844b87c4b41035e08f51281792aa7c0514e4 100644 (file)
@@ -29,7 +29,7 @@
             Reinhard Grafl
             Christian Thalinger
 
-   $Id: asmpart.S 1140 2004-06-05 20:58:14Z twisti $
+   $Id: asmpart.S 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -1179,6 +1179,13 @@ asm_switchstackandcall:
 
                
 Java_java_lang_VMSecurityManager_currentClassLoader:
+       mov  cacao_initializing,%eax
+       test %eax,%eax
+       jz   Java_java_lang_VMSecurityManager_cont
+
+       mov $0,%eax
+       ret
+Java_java_lang_VMSecurityManager_cont:
        lea  builtin_asm_getclassloader,%eax 
        push %eax       /*store collector function pointer*/
        jmp getClassContext_begin
@@ -1203,7 +1210,7 @@ getClassContext_begin:    /*start the real work*/
        addl $116, %edx
        push %edx /*esp+8*/ /*position of return address of native stub*/
        call builtin_asm_get_stackframeinfo
-       movl (%eax),%eax /*comment ??*/
+/*     movl (%eax),%eax*/ /*TEST*/
        push 0(%eax) /*esp+4*/ /*address of frame info block*/
        movl 124(%esp),%edx
 
@@ -1287,6 +1294,8 @@ getClassContext_checkLeave:
 getClassContext_nativeCall:
        movl $1,32(%esp)
        movl 4(%esp),%eax       /*get top most element on stackframe help information stack*/
+       test %eax,%eax
+       jz getClassContext_leave
        movl 0(%eax),%ecx 
        movl %ecx,4(%esp)
        addl $8,%eax
index 81ec9c28bc1e567d201d53c28abd8e385093966b..387fe306f1577f254bab645a4b5c279644d6e85a 100644 (file)
@@ -28,7 +28,7 @@
    Authors: Andreas Krall
             Christian Thalinger
 
-   $Id: codegen.c 1168 2004-06-12 14:58:25Z stefan $
+   $Id: codegen.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -4841,7 +4841,7 @@ void traverseStackInfo() {
 u1 *createnativestub(functionptr f, methodinfo *m)
 {
     u1 *s = CNEW(u1, NATIVESTUBSIZE);   /* memory to hold the stub            */
-
+    int addmethod=0;
     u1 *tptr;
     int i;
     int stackframesize = 4+12;           /* initial 4 bytes is space for jni env,
@@ -4849,7 +4849,7 @@ u1 *createnativestub(functionptr f, methodinfo *m)
     int stackframeoffset = 4;
 
     int p, t;
-
        mcodeptr = s;                       /* make macros work                   */
 
        if (m->flags & ACC_STATIC) {
@@ -4872,6 +4872,27 @@ u1 *createnativestub(functionptr f, methodinfo *m)
        if (m->flags & ACC_STATIC) {
        /* if class isn't yet initialized, do it */
                if (!m->class->initialized) {
+                       s4 *header=(s4*)s;
+                       *header = 0;/*extablesize*/
+                       header;
+                       *header = 0;/*line number table start*/
+                       header++;
+                       *header = 0;/*line number table size*/
+                       header++;
+                       *header = 0;/*fltsave*/
+                       header++;
+                       *header = 0;/*intsave*/
+                       header++;
+                       *header = 0;/*isleaf*/
+                       header++;
+                       *header = 0;/*issync*/
+                       header++;
+                       *header = 0;/*framesize*/
+                       header++;
+                       *header = m;/*methodpointer*/
+                       *header++;
+                       mcodeptr=s=header;
+                       addmethod=1;
                        /* call helper function which patches this code */
                        i386_mov_imm_reg((s4) m->class, REG_ITMP1);
                        i386_mov_imm_reg((s4) asm_check_clinit, REG_ITMP2);
@@ -5087,8 +5108,14 @@ u1 *createnativestub(functionptr f, methodinfo *m)
        i386_mov_imm_reg((s4) asm_handle_nat_exception, REG_ITMP3);
        i386_jmp_reg(REG_ITMP3);
 
+       if (addmethod) {
+               codegen_insertNative(s,mcodeptr);
+       }
+
 #if 0
-       dolog_plain("stubsize: %d (for %d params)\n", (s4) (mcodeptr - s), m->paramcount);
+       dolog_plain("native stubentry: %p, stubsize: %x (for %d params) --", (s4)s,(s4) (mcodeptr - s), m->paramcount);
+       utf_display(m->name);
+       dolog_plain("\n");
 #endif
 
 #if defined(STATISTICS)
index 02494de6f3bdb557ad317bb14b11d92f47686335..1f4a0e805f2b887e11a8ac8c0981582fd7385ad0 100644 (file)
@@ -30,7 +30,7 @@
             Mark Probst
                        Edwin Steiner
 
-   $Id: loader.c 1154 2004-06-09 16:28:00Z twisti $
+   $Id: loader.c 1173 2004-06-16 14:56:18Z jowenn $
 
 */
 
@@ -1091,7 +1091,7 @@ static methodinfo *method_load(classbuffer *cb, classinfo *c, methodinfo *m)
        m->linenumbercount = 0;
        m->linenumbers = 0;
        m->class = c;
-       
+       m->nativelyoverloaded=false;
        m->flags = suck_u2(cb);
        m->name = class_getconstant(c, suck_u2(cb), CONSTANT_Utf8);
 
diff --git a/tests/fintest2.java b/tests/fintest2.java
new file mode 100644 (file)
index 0000000..7fab27e
--- /dev/null
@@ -0,0 +1,30 @@
+public class fintest2 {
+       public int num;
+       
+       public fintest2 (int n) { num = n; }
+
+       public void finalize () {
+               System.out.print ("finalized ");
+               System.out.print (num);
+               System.out.println (". object");
+               }
+
+       public static void main (String[] s) {
+               int i;
+               fintest2 f=null;
+               
+               Runtime.getRuntime().runFinalizersOnExit(true);
+
+               for (i=0; i<100; i++) {
+                       System.out.print (i);
+                       System.out.println (". Objekt wird angelegt");
+                       f = new fintest2(i);
+                       }
+
+               Runtime.getRuntime().exit(0);
+       
+               }
+               
+       }
+
+       
diff --git a/tests/fintest2a.java b/tests/fintest2a.java
new file mode 100644 (file)
index 0000000..ba07cdb
--- /dev/null
@@ -0,0 +1,28 @@
+public class fintest2a {
+       public int num;
+       
+       public fintest2a (int n) { num = n; }
+
+       public void finalize () {
+               System.out.print ("finalized ");
+               System.out.print (num);
+               System.out.println (". object");
+               }
+
+       public static void main (String[] s) {
+               int i;
+               fintest2a f=null;
+               
+               for (i=0; i<100; i++) {
+                       System.out.print (i);
+                       System.out.println (". Objekt wird angelegt");
+                       f = new fintest2a(i);
+                       }
+
+               Runtime.getRuntime().exit(0);
+       
+               }
+               
+       }
+
+       
diff --git a/tests/fintest3.java b/tests/fintest3.java
new file mode 100644 (file)
index 0000000..eb09955
--- /dev/null
@@ -0,0 +1,27 @@
+public class fintest3 {
+       public int num;
+       
+       public fintest3 (int n) { num = n; }
+
+       public void finalize () {
+               System.out.print ("finalized ");
+               System.out.print (num);
+               System.out.println (". object");
+               }
+
+       public static void main (String[] s) {
+               int i;
+               fintest3 f=null;
+               Runtime.getRuntime().runFinalizersOnExit(true); 
+               for (i=0; i<100; i++) {
+                       System.out.print (i);
+                       System.out.println (". Objekt wird angelegt");
+                       f = new fintest3(i);
+                       }
+
+       
+               }
+               
+       }
+
+       
diff --git a/tests/fintest3a.java b/tests/fintest3a.java
new file mode 100644 (file)
index 0000000..40b56bb
--- /dev/null
@@ -0,0 +1,27 @@
+public class fintest3a {
+       public int num;
+       
+       public fintest3a (int n) { num = n; }
+
+       public void finalize () {
+               System.out.print ("finalized ");
+               System.out.print (num);
+               System.out.println (". object");
+               }
+
+       public static void main (String[] s) {
+               int i;
+               fintest3a f=null;
+
+               for (i=0; i<100; i++) {
+                       System.out.print (i);
+                       System.out.println (". Objekt wird angelegt");
+                       f = new fintest3a(i);
+                       }
+
+       
+               }
+               
+       }
+
+       
diff --git a/tests/fintest4.java b/tests/fintest4.java
new file mode 100644 (file)
index 0000000..822b227
--- /dev/null
@@ -0,0 +1,27 @@
+public class fintest4 {
+       public int num;
+       
+       public fintest4 (int n) { num = n; }
+
+       public void finalize () {
+               System.out.print ("finalized ");
+               System.out.print (num);
+               System.out.println (". object");
+               }
+
+       public static void main (String[] s) {
+               int i;
+               fintest3 f=null;
+               Runtime.getRuntime().runFinalizersOnExit(true); 
+               for (i=0; i<100; i++) {
+                       System.out.print (i);
+                       System.out.println (". Objekt wird angelegt");
+                       f = new fintest3(i);
+                       }
+       
+                       throw new NullPointerException();
+               }
+               
+       }
+
+       
diff --git a/tests/fintest4a.java b/tests/fintest4a.java
new file mode 100644 (file)
index 0000000..f5607f2
--- /dev/null
@@ -0,0 +1,27 @@
+public class fintest4a {
+       public int num;
+       
+       public fintest4a (int n) { num = n; }
+
+       public void finalize () {
+               System.out.print ("finalized ");
+               System.out.print (num);
+               System.out.println (". object");
+               }
+
+       public static void main (String[] s) {
+               int i;
+               fintest3a f=null;
+
+               for (i=0; i<100; i++) {
+                       System.out.print (i);
+                       System.out.println (". Objekt wird angelegt");
+                       f = new fintest3a(i);
+                       }
+
+                       throw new NullPointerException();       
+               }
+               
+       }
+
+       
index 54c29b188da0ad27307d626cde3d6df277570785..017469ec77a30b8f064ae86533014b111b4ec46f 100644 (file)
@@ -153,7 +153,7 @@ class ServerThread extends Thread
 public class httpd
 {
 
-    static String document_root = "/nethome/hansolo/schani/public_html";
+    static String document_root;
     static int num_threads = 10;
 
     ServerThread threads[] = null;
@@ -190,6 +190,7 @@ public class httpd
 
     public static void main (String args[])
     {
+       document_root=args[0];
        new httpd().run();
     }
 
index 9c1e3e88ced2765330423483b69ac7e225004398..8cc2950a71f304a24cc5cf9d4ced6e393a2300eb 100644 (file)
@@ -1,4 +1,4 @@
-all: testlib1 testlib2
+all: testlib1 testlib2 testlib3
 
 testlib1:
        javac stackTraceTest1.java
@@ -7,10 +7,17 @@ testlib1:
 testlib2:
        javac stackTraceTest2.java
        gcc -shared -o libstackTraceTest2.so stackTraceTest2.c
+
+testlib3:
+       javac stackTraceTest3.java
+       gcc -shared -o libstackTraceTest3.so stackTraceTest3.c
+
 clean:
        rm -f libstackTraceTest1.so stackTraceTest1.class
        rm -f libstackTraceTest2.so stackTraceTest2.class
+       rm -f libstackTraceTest3.so stackTraceTest3.class
 test:
        LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd` java stackTraceTest1
        LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd` java stackTraceTest2
+       LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd` java stackTraceTest3
 
diff --git a/tests/stack/nestedstaticinitializers2.java b/tests/stack/nestedstaticinitializers2.java
new file mode 100644 (file)
index 0000000..a1dc616
--- /dev/null
@@ -0,0 +1,38 @@
+class nestedstaticinitializers2_clinit1 {
+
+       public nestedstaticinitializers2_clinit1() {
+               System.out.println("Never reached");
+       }
+
+       public static int x;
+       static {
+               nestedstaticinitializers2_clinit2.x=3;
+       }
+
+}
+
+class nestedstaticinitializers2_clinit2 {
+       public static int x;
+       static {
+               nestedstaticinitializers2_clinit3.x=3;
+       }
+
+}
+
+class nestedstaticinitializers2_clinit3 {
+       public static int x;
+       static {
+               int y[]=new int[-1];
+       }
+
+}
+
+class nestedstaticinitializers2 {
+       public static void main (String args[]) {
+               try {
+                       nestedstaticinitializers2_clinit1  x[]=new nestedstaticinitializers2_clinit1[10];
+               } catch (Throwable t) {
+                       t.printStackTrace();
+               }
+       }
+}
index 0f602fac000acc4156a3262c7d435504830564a8..b550f3208cdd73da201e81b78531103e4e34294d 100644 (file)
@@ -453,7 +453,7 @@ internal_unlock_mutex(iMux* mux)
                if (mux->muxWaiters != 0)
                {
                        tid = mux->muxWaiters;
-                       mux->muxWaiters = tid->next;
+                       mux->muxWaiters = tid->vmThread->next;
                        iresumeThread(tid);
                }
     }
@@ -485,7 +485,7 @@ internal_wait_cond(iMux* mux, iCv* cv, s8 timeout)
     /* If there's anyone waiting here, wake them up */
     if (mux->muxWaiters != 0) {
                tid = mux->muxWaiters;
-               mux->muxWaiters = tid->next;
+               mux->muxWaiters = tid->vmThread->next;
                iresumeThread(tid);
     }
 
@@ -526,10 +526,10 @@ internal_signal_cond (iCv* cv)
                DBG( fprintf(stderr, "releasing a waiter\n"); );
 
                tid = cv->cvWaiters;
-               cv->cvWaiters = tid->next;
+               cv->cvWaiters = tid->vmThread->next;
 
                /* Place it on mux list */
-               tid->next = cv->mux->muxWaiters;
+               tid->vmThread->next = cv->mux->muxWaiters;
                cv->mux->muxWaiters = tid;
     }
 }
@@ -555,7 +555,7 @@ internal_broadcast_cond (iCv* cv)
 
     /* Find the end of the cv list */
     if (cv->cvWaiters) {
-               for (tidp = &cv->cvWaiters; *tidp != 0; tidp = &(*tidp)->next)
+               for (tidp = &cv->cvWaiters; *tidp != 0; tidp = &(*tidp)->vmThread->next)
                        ;
 
                /* Place entire cv list on mux list */
index 3fd3ab1c2fb2d774833f3b5cd870586f18e51625..09536e19cddfa1667be1670e800e7a3ad2964ead 100644 (file)
@@ -51,7 +51,7 @@ thread* sleepThreads = NULL;
 int blockInts;
 bool needReschedule;
 
-ctx contexts[MAXTHREADS];
+vmthread *contexts[MAXTHREADS];
 
 /* Number of threads alive, also counting daemons */
 static int talive;
@@ -71,6 +71,47 @@ void *stack_to_be_freed = 0;
 
 static thread* startDaemon(void* func, char* nm, int stackSize);
 
+
+
+java_objectheader *init_vmthread(void *thr)
+{
+        methodinfo *m;
+        java_objectheader *o;
+       classinfo *c=class_new(utf_new_char("java/lang/VMThread"));
+
+        if (!c)
+                return *exceptionptr;
+
+        o = builtin_new(c);          /* create object          */
+
+        if (!o)
+                return NULL;
+
+        /* find initializer */
+
+        m = class_findmethod(c,
+                                                 utf_new_char("<init>"),
+                                                 utf_new_char("(Ljava/lang/Thread;)V"));
+
+        if (!m) {                                       /* initializer not found  */
+                if (verbose) {
+                        char logtext[MAXLOGTEXT];
+                        sprintf(logtext, "Warning: class has no instance-initializer: ");
+                        utf_sprint_classname(logtext + strlen(logtext), c->name);
+                        log_text(logtext);
+                }
+                return o;
+        }
+
+        /* call initializer */
+
+        asm_calljavafunction(m, o, thr, NULL, NULL);
+       return o;
+}
+
+
+
+
 /*
  * Allocate the stack for a thread
  */
@@ -97,23 +138,23 @@ allocThreadStack (thread *tid, int size)
  * immediately because it is still in use!
  */
 void
-freeThreadStack (thread *tid)
+freeThreadStack (vmthread *vmtid)
 {
-    if (!(CONTEXT(tid).flags & THREAD_FLAGS_NOSTACKALLOC))
+    if (!(vmtid->flags & THREAD_FLAGS_NOSTACKALLOC))
     {
                int pageSize = getpagesize();
                unsigned long pageBegin;
 
-               pageBegin = (unsigned long)(CONTEXT(tid).stackMem) + pageSize - 1;
+               pageBegin = (unsigned long)(vmtid->stackMem) + pageSize - 1;
                pageBegin = pageBegin - pageBegin % pageSize;
 
                assert(stack_to_be_freed == 0);
 
-               stack_to_be_freed = CONTEXT(tid).stackMem;
+               stack_to_be_freed = vmtid->stackMem;
     }
-    CONTEXT(tid).stackMem = 0;
-    CONTEXT(tid).stackBase = 0;
-    CONTEXT(tid).stackEnd = 0;
+    vmtid->stackMem = 0;
+    vmtid->stackBase = 0;
+    vmtid->stackEnd = 0;
 }
 
 /*
@@ -132,17 +173,17 @@ initThreads(u1 *stackbottom)
     initLocks();
 
     for (i = 0; i < MAXTHREADS; ++i) {
-               contexts[i].free = true;
-               contexts[i].thread = NULL;
+               contexts[i]=0;
        }
 
     /* Allocate a thread to be the main thread */
     liveThreads = the_main_thread = 
         (thread *) builtin_new(class_new(utf_new_char("java/lang/Thread")));
+    the_main_thread->vmThread=init_vmthread(the_main_thread);
     assert(the_main_thread != 0);
     
-    the_main_thread->PrivateInfo = 1;
-    CONTEXT(the_main_thread).free = false;
+/*    the_main_thread->PrivateInfo = 1;
+    CONTEXT(the_main_thread).free = false;*/
 
 #if 0
     {
@@ -163,10 +204,11 @@ printf("DEADCODE LIVES ?????????\n");fflush(stdout);
                for (i=0; i<len; i++)
                        d[i] = mainname[i];
        }*/
+
     the_main_thread->priority = NORM_THREAD_PRIO;
     CONTEXT(the_main_thread).priority = (u1)the_main_thread->priority;
     CONTEXT(the_main_thread).texceptionptr = 0;
-    the_main_thread->next = 0;
+    the_main_thread->vmThread->next = 0;
     CONTEXT(the_main_thread).status = THREAD_SUSPENDED;
     CONTEXT(the_main_thread).stackBase = CONTEXT(the_main_thread).stackEnd = stackbottom;
     THREADINFO(&CONTEXT(the_main_thread));
@@ -178,7 +220,7 @@ printf("DEADCODE LIVES ?????????\n");fflush(stdout);
 
        CONTEXT(the_main_thread).flags = THREAD_FLAGS_NOSTACKALLOC;
        CONTEXT(the_main_thread).nextlive = 0;
-       CONTEXT(the_main_thread).thread = the_main_thread;
+       /*CONTEXT(the_main_thread).thread = the_main_thread;*/
        /*the_main_thread->single_step = 0;*/
        the_main_thread->daemon = 0;
        /*the_main_thread->stillborn = 0;*/
@@ -204,7 +246,7 @@ printf("DEADCODE LIVES ?????????\n");fflush(stdout);
        DBG( fprintf(stderr, "finishing initThreads\n"); );
 
     mainThread = currentThread = the_main_thread;
-
+       contexts[0]=mainThread->vmThread;
        /* Add thread into runQ */
        iresumeThread(mainThread);
 
@@ -221,17 +263,22 @@ startThread (thread* tid)
 
     /* Allocate a stack context */
     for (i = 0; i < MAXTHREADS; ++i)
-               if (contexts[i].free)
+               if (contexts[i]==0)
                        break;
 
-    if (i == MAXTHREADS)
+   if (i == MAXTHREADS)
                panic("Too many threads");
 
        assert(tid->priority >= MIN_THREAD_PRIO && tid->priority <= MAX_THREAD_PRIO);
+       contexts[i]=tid->vmThread;
+/*    tid->PrivateInfo = i + 1;
+    CONTEXT(tid).free = false;*/
+    if (tid->vmThread==0) {
+       panic("vmThread field not set");
+/*     tid->vmThread=init_vmthread(tid);*/
+    }
 
-    tid->PrivateInfo = i + 1;
-    CONTEXT(tid).free = false;
-       CONTEXT(tid).thread = tid;
+/*     CONTEXT(tid).thread = tid;*/
     CONTEXT(tid).nextlive = liveThreads;
     liveThreads = tid;
     allocThreadStack(tid, threadStackSize);
@@ -270,18 +317,18 @@ static thread *startDaemon(void* func, char* nm, int stackSize)
        tid = (thread *) builtin_new(class_new(utf_new_char("java/lang/Thread")));
        assert(tid != 0);
 
-       for (i = 0; i < MAXTHREADS; ++i)
-               if (contexts[i].free)
+/*     for (i = 0; i < MAXTHREADS; ++i)
+               if (contexts[i]==0)
                        break;
        if (i == MAXTHREADS)
-               panic("Too many threads");
+               panic("Too many threads");*/
 
-       tid->PrivateInfo = i + 1;
-       CONTEXT(tid).free = false;
+/*     tid->PrivateInfo = i + 1;
+       CONTEXT(tid).free = false;*/
        tid->name = 0;          /* for the moment */
        tid->priority = MAX_THREAD_PRIO;
        CONTEXT(tid).priority = (u1)tid->priority;
-       tid->next = 0;
+       tid->vmThread->next = 0;
        CONTEXT(tid).status = THREAD_SUSPENDED;
 
        allocThreadStack(tid, stackSize);
@@ -319,12 +366,12 @@ firstStartThread(void)
        assert(blockInts == 0);
 
        /* Find the run()V method and call it */
-       method = class_findmethod(currentThread->header.vftbl->class,
+       method = class_findmethod(currentThread->vmThread->header.vftbl->class,
                                                          utf_new_char("run"), utf_new_char("()V"));
        if (method == 0)
                panic("Cannot find method \'void run ()\'");
 
-       asm_calljavafunction(method, currentThread, NULL, NULL, NULL);
+       asm_calljavafunction(method, currentThread->vmThread, NULL, NULL, NULL);
 
     if (*exceptionptr) {
         utf_display((*exceptionptr)->vftbl->class->name);
@@ -345,9 +392,29 @@ firstStartThread(void)
 void
 iresumeThread(thread* tid)
 {
+       vmthread *vmctid;
     DBG( printf("resumeThread %p\n", tid); );
 
        intsDisable();
+       if (tid->vmThread==0) {
+               intsRestore();
+               return;
+       }
+       
+       if (currentThread->vmThread==0) {
+               long i1;
+               for (i1=0;i1<MAXTHREADS;i1++) {
+                       if (!contexts[i1]) continue;
+                       if (contexts[i1]->thread==currentThread) {
+                               vmctid=contexts[i1];
+                               break;
+                       }
+               }
+               if (i1==MAXTHREADS) vmctid=0; /*panic("Thread not found in iresumeThread");*/
+
+       } else {
+               vmctid=currentThread->vmThread;
+       }
 
        if (CONTEXT(tid).status != THREAD_RUNNING)
        {
@@ -359,16 +426,17 @@ iresumeThread(thread* tid)
                if (threadQhead[CONTEXT(tid).priority] == 0) {
                        threadQhead[CONTEXT(tid).priority] = tid;
                        threadQtail[CONTEXT(tid).priority] = tid;
-                       if (CONTEXT(tid).priority
-                               > CONTEXT(currentThread).priority)
+                       
+                       if ((vmctid==0) ||  (CONTEXT(tid).priority
+                               > vmctid->priority) )
                                needReschedule = true;
                }
                else
                {
-                       threadQtail[CONTEXT(tid).priority]->next = tid;
+                       threadQtail[CONTEXT(tid).priority]->vmThread->next = tid;
                        threadQtail[CONTEXT(tid).priority] = tid;
                }
-               tid->next = 0;
+               tid->vmThread->next = 0;
        }
        SDBG( else { printf("Re-resuming %p\n", tid); } );
 
@@ -387,10 +455,10 @@ yieldThread()
                != threadQtail[CONTEXT(currentThread).priority])
     {
                /* Get the next thread and move me to the end */
-               threadQhead[CONTEXT(currentThread).priority] = currentThread->next;
-               threadQtail[CONTEXT(currentThread).priority]->next = currentThread;
+               threadQhead[CONTEXT(currentThread).priority] = currentThread->vmThread->next;
+               threadQtail[CONTEXT(currentThread).priority]->vmThread->next = currentThread;
                threadQtail[CONTEXT(currentThread).priority] = currentThread;
-               currentThread->next = 0;
+               currentThread->vmThread->next = 0;
                needReschedule = true;
     }
 
@@ -447,12 +515,12 @@ suspendThread(thread* tid)
 
                for (ntid = &threadQhead[CONTEXT(tid).priority];
                         *ntid != 0;
-                        ntid = &(*ntid)->next)
+                        ntid = &(*ntid)->vmThread->next)
                {
                        if (*ntid == tid)
                        {
-                               *ntid = tid->next;
-                               tid->next = 0;
+                               *ntid = tid->vmThread->next;
+                               tid->vmThread->next = 0;
                                if (tid == currentThread)
                                {
                                        reschedule();
@@ -484,13 +552,13 @@ suspendOnQThread(thread* tid, thread** queue)
 
                for (ntid = &threadQhead[CONTEXT(tid).priority];
                         *ntid != 0;
-                        ntid = &(*ntid)->next)
+                        ntid = &(*ntid)->vmThread->next)
                {
                        if (*ntid == tid)
                        {
-                               *ntid = tid->next;
+                               *ntid = tid->vmThread->next;
                                /* Insert onto head of lock wait Q */
-                               tid->next = *queue;
+                               tid->vmThread->next = *queue;
                                *queue = tid;
                                if (tid == currentThread)
                                {
@@ -511,6 +579,7 @@ suspendOnQThread(thread* tid, thread** queue)
 void
 killThread(thread* tid)
 {
+    vmthread *context;
     thread** ntid;
 
     intsDisable();
@@ -521,26 +590,39 @@ killThread(thread* tid)
                tid = currentThread;
     }
 
+       if (tid->vmThread==0) {
+               long i1;
+               for (i1=0;i1<MAXTHREADS;i1++) {
+                       if (!contexts[i1]) continue;
+                       if (contexts[i1]->thread==tid) {
+                               context=contexts[i1];
+                               break;
+                       }
+               }
+               if (i1==MAXTHREADS) panic("Thread not found in killThread");
+
+       } else context=tid->vmThread;
+
        DBG( printf("killThread %p\n", tid); );
 
-       if (CONTEXT(tid).status != THREAD_DEAD)
+       if (context->status != THREAD_DEAD)
        {
                /* Get thread off runq (if it needs it) */
-               if (CONTEXT(tid).status == THREAD_RUNNING)
+               if (context->status == THREAD_RUNNING)
                {
-                       for (ntid = &threadQhead[CONTEXT(tid).priority];
+                       for (ntid = &threadQhead[context->priority];
                                 *ntid != 0;
-                                ntid = &(*ntid)->next)
+                                ntid = &(*ntid)->vmThread->next)
                        {
                                if (*ntid == tid)
                                {
-                                       *ntid = tid->next;
+                                       *ntid = context->next;
                                        break;
                                }
                        }
                }
 
-               CONTEXT(tid).status = THREAD_DEAD;
+               context->status = THREAD_DEAD;
                talive--;
                if (tid->daemon) {
                        tdaemon--;
@@ -565,23 +647,46 @@ killThread(thread* tid)
                {
                        if (tid == (*ntid))
                        {
-                               (*ntid) = CONTEXT(tid).nextlive;
+                               (*ntid) = context->nextlive;
                                break;
                        }
                }
 
+
                /* Free stack */
-               freeThreadStack(tid);
+               freeThreadStack(context);
 
                /* free context */
-               if (tid != mainThread) {
+               if (tid != mainThread)
+               {
+                       long i;
+                       for (i=0;i<MAXTHREADS;i++) {
+                               if (!contexts[i]) continue;
+                               if (contexts[i]==context) {
+                                       contexts[i]=0;
+                                       break;
+                               }
+                       }
+               }
+/*             if (tid != mainThread) {
                        CONTEXT(tid).free = true;
                        CONTEXT(tid).thread = NULL;
-               }
+               }*/
 
                /* Run something else */
                needReschedule = true;
        }
+               for (ntid = &sleepThreads;
+                        *ntid != 0;
+                        ntid = &(CONTEXT((*ntid)).next))
+               {
+                       if (tid == (*ntid))
+                       {
+                               (*ntid) = context->next;
+                               break;
+                       }
+               }
+
        intsRestore();
 }
 
@@ -595,10 +700,11 @@ setPriorityThread(thread* tid, int prio)
 
        assert(prio >= MIN_THREAD_PRIO && prio <= MAX_THREAD_PRIO);
 
-    if (tid->PrivateInfo == 0) {
+#warning fixme ??
+/*    if (tid->PrivateInfo == 0) {
                tid->priority = prio;
                return;
-    }
+    }*/
 
     if (CONTEXT(tid).status == THREAD_SUSPENDED) {
                CONTEXT(tid).priority = (u8)prio;
@@ -608,9 +714,9 @@ setPriorityThread(thread* tid, int prio)
     intsDisable();
 
     /* Remove from current thread list */
-    for (ntid = &threadQhead[CONTEXT(tid).priority]; *ntid != 0; ntid = &(*ntid)->next) {
+    for (ntid = &threadQhead[CONTEXT(tid).priority]; *ntid != 0; ntid = &(*ntid)->vmThread->next) {
                if (*ntid == tid) {
-                       *ntid = tid->next;
+                       *ntid = tid->vmThread->next;
                        break;
                }
     }
@@ -626,10 +732,10 @@ setPriorityThread(thread* tid, int prio)
                }
     }
     else {
-               threadQtail[prio]->next = tid;
+               threadQtail[prio]->vmThread->next = tid;
                threadQtail[prio] = tid;
     }
-    tid->next = 0;
+    tid->vmThread->next = 0;
 
     intsRestore();
 }
@@ -671,9 +777,9 @@ sleepThread (s8 time)
     CONTEXT(currentThread).time = time + currentTime();
 
     /* Find place in alarm list */
-    for (tidp = &sleepThreads; (*tidp) != 0; tidp = &(*tidp)->next)
+    for (tidp = &sleepThreads; (*tidp) != 0; tidp = &((*tidp)->vmThread->next))
        {
-               if (CONTEXT(*tidp).time > CONTEXT(currentThread).time)
+               if (CONTEXT((*tidp)).time > CONTEXT(currentThread).time)
                        break;
     }
 
@@ -689,7 +795,7 @@ sleepThread (s8 time)
 bool
 aliveThread(thread* tid)
 {
-    if (tid->PrivateInfo != 0 && CONTEXT(tid).status != THREAD_DEAD)
+    if (tid!=mainThread  && CONTEXT(tid).status != THREAD_DEAD)
                return (true);
     else
                return (false);
@@ -734,8 +840,10 @@ reschedule(void)
                                        CONTEXT(currentThread).texceptionptr = *exceptionptr;
 
                     DBG( fprintf(stderr, "thread switch from: %p to: %p\n", lastThread, currentThread); );
+                                       {
                                        THREADSWITCH((&CONTEXT(currentThread)),
                                                                 (&CONTEXT(lastThread)));
+                                       }
                                        blockInts = b;
 
                                        *exceptionptr = CONTEXT(currentThread).texceptionptr;
index 20397e20e0df725985ed7ed9692f80a6715d8d09..2fb7d2670e9abc7d94436e4021d88332f2723d1e 100644 (file)
@@ -56,6 +56,7 @@ typedef struct {
 
 struct _thread;
 
+#if 0
 typedef struct _ctx
 {
     struct _thread    *thread;
@@ -72,6 +73,7 @@ typedef struct _ctx
     struct _thread    *nextlive;
     u1                 flags;
 } ctx;
+#endif
 
 /*
 struct _stringClass;
@@ -91,17 +93,38 @@ typedef struct _threadGroup {
 } threadGroup;
 
 
+
+/* This structure mirrors java.lang.VMThread.h */
+typedef struct vmthread {
+   java_objectheader header;
+   struct _thread* thread;
+   s4 running;
+   s4 status;
+   s4 priority;
+   void* restorePoint;
+   void* stackMem;
+   void* stackBase;
+   void* stackEnd;
+   void* usedStackTop;
+   s8 time;
+   java_objectheader *texceptionptr;
+   struct _thread* nextlive;
+   struct _thread* next;
+   s4 flags;
+} vmthread;
+
 /* This structure mirrors java.lang.Thread.h */
 typedef struct _thread {
    java_objectheader header;
-   struct _threadGroup* group;
-   struct java_objectheader* toRun;
-   struct java_objectheader* name;
-   s8 PrivateInfo;
-   struct _thread* next;
+   vmthread* vmThread;
+   threadGroup* group;
+   struct java_lang_Runnable* runnable;
+   struct java_lang_String* name;
    s4 daemon;
    s4 priority;
-   struct java_objectheader* contextClassLoader;
+   s8 stacksize;
+   struct java_lang_Throwable* stillborn;
+   struct java_lang_ClassLoader* contextClassLoader;
 } thread;
 
 void initThreads (u1 *stackbottom);
@@ -128,7 +151,7 @@ extern int blockInts;
 extern bool needReschedule;
 extern thread *currentThread;
 extern thread *mainThread;
-extern ctx contexts[];
+/*extern ctx contexts[];*/
 extern int threadStackSize;
 
 extern thread *liveThreads;
@@ -137,7 +160,8 @@ extern thread *sleepThreads;
 extern thread *threadQhead[MAX_THREAD_PRIO + 1];
 
 
-#define CONTEXT(_t)     (contexts[(_t)->PrivateInfo - 1])
+/*#define CONTEXT(_t)     (contexts[(_t)->PrivateInfo - 1])*/
+#define CONTEXT(_t)    (*(_t->vmThread))
 
 #define        intsDisable()   blockInts++
 
@@ -153,8 +177,10 @@ extern thread *threadQhead[MAX_THREAD_PRIO + 1];
 
 #define        THREADSWITCH(to, from) \
     do { \
-        asm_perform_threadswitch(&(from)->restorePoint,\
-                                 &(to)->restorePoint, &(from)->usedStackTop); \
+       void *from1; \
+       void *from2; \
+        asm_perform_threadswitch((from?&(from)->restorePoint:&from1),\
+                                 &(to)->restorePoint, (from?&(from)->usedStackTop:&from2)); \
     } while (0)
 
 
index 1f9036cec65808a5d08bbafc321df216c127bc0c..7f8da88d42a5fda8e05e22780b8c7b56493b9b5d 100644 (file)
@@ -392,8 +392,8 @@ checkEvents(bool block)
        while (sleepThreads != 0 && time >= CONTEXT(sleepThreads).time)
        {
            tid = sleepThreads;
-           sleepThreads = sleepThreads->next;
-           tid->next = 0;
+           sleepThreads = sleepThreads->vmThread->next;
+           tid->vmThread->next = 0;
 
            iresumeThread(tid);
        }
@@ -445,8 +445,8 @@ checkEvents(bool block)
        while (sleepThreads != 0 && time >= CONTEXT(sleepThreads).time)
        {
            tid = sleepThreads;
-           sleepThreads = sleepThreads->next;
-           tid->next = 0;
+           sleepThreads = sleepThreads->vmThread->next;
+           tid->vmThread->next = 0;
 
            iresumeThread(tid);
        }
@@ -458,7 +458,7 @@ checkEvents(bool block)
        {
            for (tid = readQ[i]; tid != 0; tid = ntid)
            {
-               ntid = tid->next;
+               ntid = tid->vmThread->next;
                iresumeThread(tid);
            }
            readQ[i] = 0;
@@ -468,7 +468,7 @@ checkEvents(bool block)
        {
            for (tid = writeQ[i]; tid != 0; tid = ntid)
            {
-               ntid = tid->next;
+               ntid = tid->vmThread->next;
                iresumeThread(tid);
            }
            writeQ[i] = 0;
index 66cce968fbb0c4bc393f967a47e318df1d786692..7bdae27b50fbbd76138629f051c2980347a83ff7 100644 (file)
@@ -70,7 +70,7 @@ avl_find (const struct avl_table *tree, const void *item)
     {
       int cmp = tree->avl_compare (item, p->avl_data, tree->avl_param);
 
-      if (cmp < 0)
+      if (cmp < 0)  
         p = p->avl_link[0];
       else if (cmp > 0)
         p = p->avl_link[1];