* show_icmd_method: use a monitor since the binutils disassembler is not
authortwisti <none@none>
Tue, 12 Jul 2005 20:58:01 +0000 (20:58 +0000)
committertwisti <none@none>
Tue, 12 Jul 2005 20:58:01 +0000 (20:58 +0000)
  reentrantable and it would be unreadable if 2 or more thread write
  assembler
* stack_init: added

src/vm/jit/helper.c
src/vm/jit/jit.c
src/vm/jit/stack.c
src/vm/jit/stack.h

index 61c83bdabff414b37579877beafb6fb8f76188f5..17e98aeeb615c8272261f9b4803b4aa78247df5a 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes:
 
-   $Id: helper.c 2955 2005-07-09 13:55:06Z twisti $
+   $Id: helper.c 3007 2005-07-12 20:58:01Z twisti $
 
 */
 
@@ -61,39 +61,8 @@ classinfo *helper_resolve_classinfo(constant_classref *cr)
 
        /* resolve and load the class */
 
-       if (!resolve_classref(NULL, cr, resolveEager, true, true, &c)) {
-               java_objectheader *xptr;
-               java_objectheader *cause;
-
-               /* get the cause */
-
-               cause = *exceptionptr;
-
-               /* convert ClassNotFoundException's to NoClassDefFoundError's */
-
-               if (builtin_instanceof(cause, class_java_lang_ClassNotFoundException)) {
-                       /* clear exception, because we are calling jit code again */
-
-                       *exceptionptr = NULL;
-
-                       /* create new error */
-
-                       xptr =
-                               new_exception_javastring(string_java_lang_NoClassDefFoundError,
-                                                                                ((java_lang_Throwable *) cause)->detailMessage);
-
-                       /* we had an exception while creating the error */
-
-                       if (*exceptionptr)
-                               return NULL;
-
-                       /* set new exception */
-
-                       *exceptionptr = xptr;
-               }
-
+       if (!resolve_classref(NULL, cr, resolveEager, true, true, &c))
                return NULL;
-       }
 
        /* return the classinfo pointer */
 
index f06de7d24760c0fba8cbffe91394071fffd6cf2f..a0505b0fd488680d46fba874f0e5fb2f6afe8387 100644 (file)
@@ -30,7 +30,7 @@
    Changes: Edwin Steiner
             Christian Thalinger
 
-   $Id: jit.c 2953 2005-07-09 13:38:42Z twisti $
+   $Id: jit.c 3007 2005-07-12 20:58:01Z twisti $
 
 */
 
@@ -1174,7 +1174,122 @@ char *opcode_names[256] = {
 };
 
 
-/* include compiler subsystems ************************************************/
+/* jit_init ********************************************************************
+
+   Initializes the JIT subsystem.
+
+*******************************************************************************/
+
+void jit_init(void)
+{
+       s4 i;
+
+#if defined(__ALPHA__)
+       has_ext_instr_set = ! has_no_x_instr_set();
+#endif
+
+       for (i = 0; i < 256; i++)
+               stackreq[i] = 1;
+
+       stackreq[JAVA_NOP]          = 0;
+       stackreq[JAVA_ISTORE]       = 0;
+       stackreq[JAVA_LSTORE]       = 0;
+       stackreq[JAVA_FSTORE]       = 0;
+       stackreq[JAVA_DSTORE]       = 0;
+       stackreq[JAVA_ASTORE]       = 0;
+       stackreq[JAVA_ISTORE_0]     = 0;
+       stackreq[JAVA_ISTORE_1]     = 0;
+       stackreq[JAVA_ISTORE_2]     = 0;
+       stackreq[JAVA_ISTORE_3]     = 0;
+       stackreq[JAVA_LSTORE_0]     = 0;
+       stackreq[JAVA_LSTORE_1]     = 0;
+       stackreq[JAVA_LSTORE_2]     = 0;
+       stackreq[JAVA_LSTORE_3]     = 0;
+       stackreq[JAVA_FSTORE_0]     = 0;
+       stackreq[JAVA_FSTORE_1]     = 0;
+       stackreq[JAVA_FSTORE_2]     = 0;
+       stackreq[JAVA_FSTORE_3]     = 0;
+       stackreq[JAVA_DSTORE_0]     = 0;
+       stackreq[JAVA_DSTORE_1]     = 0;
+       stackreq[JAVA_DSTORE_2]     = 0;
+       stackreq[JAVA_DSTORE_3]     = 0;
+       stackreq[JAVA_ASTORE_0]     = 0;
+       stackreq[JAVA_ASTORE_1]     = 0;
+       stackreq[JAVA_ASTORE_2]     = 0;
+       stackreq[JAVA_ASTORE_3]     = 0;
+       stackreq[JAVA_IASTORE]      = 0;
+       stackreq[JAVA_LASTORE]      = 0;
+       stackreq[JAVA_FASTORE]      = 0;
+       stackreq[JAVA_DASTORE]      = 0;
+       stackreq[JAVA_AASTORE]      = 0;
+       stackreq[JAVA_BASTORE]      = 0;
+       stackreq[JAVA_CASTORE]      = 0;
+       stackreq[JAVA_SASTORE]      = 0;
+       stackreq[JAVA_POP]          = 0;
+       stackreq[JAVA_POP2]         = 0;
+       stackreq[JAVA_IINC]         = 0;
+       stackreq[JAVA_IFEQ]         = 0;
+       stackreq[JAVA_IFNE]         = 0;
+       stackreq[JAVA_IFLT]         = 0;
+       stackreq[JAVA_IFGE]         = 0;
+       stackreq[JAVA_IFGT]         = 0;
+       stackreq[JAVA_IFLE]         = 0;
+       stackreq[JAVA_IF_ICMPEQ]    = 0;
+       stackreq[JAVA_IF_ICMPNE]    = 0;
+       stackreq[JAVA_IF_ICMPLT]    = 0;
+       stackreq[JAVA_IF_ICMPGE]    = 0;
+       stackreq[JAVA_IF_ICMPGT]    = 0;
+       stackreq[JAVA_IF_ICMPLE]    = 0;
+       stackreq[JAVA_IF_ACMPEQ]    = 0;
+       stackreq[JAVA_IF_ACMPNE]    = 0;
+       stackreq[JAVA_GOTO]         = 0;
+       stackreq[JAVA_RET]          = 0;
+       stackreq[JAVA_TABLESWITCH]  = 0;
+       stackreq[JAVA_LOOKUPSWITCH] = 0;
+       stackreq[JAVA_IRETURN]      = 0;
+       stackreq[JAVA_LRETURN]      = 0;
+       stackreq[JAVA_FRETURN]      = 0;
+       stackreq[JAVA_DRETURN]      = 0;
+       stackreq[JAVA_ARETURN]      = 0;
+       stackreq[JAVA_RETURN]       = 0;
+       stackreq[JAVA_PUTSTATIC]    = 0;
+       stackreq[JAVA_PUTFIELD]     = 0;
+       stackreq[JAVA_MONITORENTER] = 0;
+       stackreq[JAVA_MONITOREXIT]  = 0;
+       stackreq[JAVA_WIDE]         = 0;
+       stackreq[JAVA_IFNULL]       = 0;
+       stackreq[JAVA_IFNONNULL]    = 0;
+       stackreq[JAVA_GOTO_W]       = 0;
+       stackreq[JAVA_BREAKPOINT]   = 0;
+
+       stackreq[JAVA_SWAP] = 2;
+       stackreq[JAVA_DUP2] = 2;
+       stackreq[JAVA_DUP_X1] = 3;
+       stackreq[JAVA_DUP_X2] = 4;
+       stackreq[JAVA_DUP2_X1] = 3;
+       stackreq[JAVA_DUP2_X2] = 4;
+
+       /* initialize stack analysis subsystem */
+
+       (void) stack_init();
+
+       /* initialize codegen subsystem */
+
+       codegen_init();
+}
+
+
+/* jit_close *******************************************************************
+
+   Close the JIT subsystem.
+
+*******************************************************************************/
+
+void jit_close(void)
+{
+       /* do nothing */
+}
+
 
 /* dummy function, used when there is no JavaVM code available                */
 
@@ -1520,111 +1635,6 @@ void compile_all_class_methods(classinfo *c)
 }
 
 
-/* jit_init ********************************************************************
-
-   XXX
-
-*******************************************************************************/
-
-void jit_init(void)
-{
-       s4 i;
-
-#if defined(__ALPHA__)
-       has_ext_instr_set = ! has_no_x_instr_set();
-#endif
-
-       for (i = 0; i < 256; i++)
-               stackreq[i] = 1;
-
-       stackreq[JAVA_NOP]          = 0;
-       stackreq[JAVA_ISTORE]       = 0;
-       stackreq[JAVA_LSTORE]       = 0;
-       stackreq[JAVA_FSTORE]       = 0;
-       stackreq[JAVA_DSTORE]       = 0;
-       stackreq[JAVA_ASTORE]       = 0;
-       stackreq[JAVA_ISTORE_0]     = 0;
-       stackreq[JAVA_ISTORE_1]     = 0;
-       stackreq[JAVA_ISTORE_2]     = 0;
-       stackreq[JAVA_ISTORE_3]     = 0;
-       stackreq[JAVA_LSTORE_0]     = 0;
-       stackreq[JAVA_LSTORE_1]     = 0;
-       stackreq[JAVA_LSTORE_2]     = 0;
-       stackreq[JAVA_LSTORE_3]     = 0;
-       stackreq[JAVA_FSTORE_0]     = 0;
-       stackreq[JAVA_FSTORE_1]     = 0;
-       stackreq[JAVA_FSTORE_2]     = 0;
-       stackreq[JAVA_FSTORE_3]     = 0;
-       stackreq[JAVA_DSTORE_0]     = 0;
-       stackreq[JAVA_DSTORE_1]     = 0;
-       stackreq[JAVA_DSTORE_2]     = 0;
-       stackreq[JAVA_DSTORE_3]     = 0;
-       stackreq[JAVA_ASTORE_0]     = 0;
-       stackreq[JAVA_ASTORE_1]     = 0;
-       stackreq[JAVA_ASTORE_2]     = 0;
-       stackreq[JAVA_ASTORE_3]     = 0;
-       stackreq[JAVA_IASTORE]      = 0;
-       stackreq[JAVA_LASTORE]      = 0;
-       stackreq[JAVA_FASTORE]      = 0;
-       stackreq[JAVA_DASTORE]      = 0;
-       stackreq[JAVA_AASTORE]      = 0;
-       stackreq[JAVA_BASTORE]      = 0;
-       stackreq[JAVA_CASTORE]      = 0;
-       stackreq[JAVA_SASTORE]      = 0;
-       stackreq[JAVA_POP]          = 0;
-       stackreq[JAVA_POP2]         = 0;
-       stackreq[JAVA_IINC]         = 0;
-       stackreq[JAVA_IFEQ]         = 0;
-       stackreq[JAVA_IFNE]         = 0;
-       stackreq[JAVA_IFLT]         = 0;
-       stackreq[JAVA_IFGE]         = 0;
-       stackreq[JAVA_IFGT]         = 0;
-       stackreq[JAVA_IFLE]         = 0;
-       stackreq[JAVA_IF_ICMPEQ]    = 0;
-       stackreq[JAVA_IF_ICMPNE]    = 0;
-       stackreq[JAVA_IF_ICMPLT]    = 0;
-       stackreq[JAVA_IF_ICMPGE]    = 0;
-       stackreq[JAVA_IF_ICMPGT]    = 0;
-       stackreq[JAVA_IF_ICMPLE]    = 0;
-       stackreq[JAVA_IF_ACMPEQ]    = 0;
-       stackreq[JAVA_IF_ACMPNE]    = 0;
-       stackreq[JAVA_GOTO]         = 0;
-       stackreq[JAVA_RET]          = 0;
-       stackreq[JAVA_TABLESWITCH]  = 0;
-       stackreq[JAVA_LOOKUPSWITCH] = 0;
-       stackreq[JAVA_IRETURN]      = 0;
-       stackreq[JAVA_LRETURN]      = 0;
-       stackreq[JAVA_FRETURN]      = 0;
-       stackreq[JAVA_DRETURN]      = 0;
-       stackreq[JAVA_ARETURN]      = 0;
-       stackreq[JAVA_RETURN]       = 0;
-       stackreq[JAVA_PUTSTATIC]    = 0;
-       stackreq[JAVA_PUTFIELD]     = 0;
-       stackreq[JAVA_MONITORENTER] = 0;
-       stackreq[JAVA_MONITOREXIT]  = 0;
-       stackreq[JAVA_WIDE]         = 0;
-       stackreq[JAVA_IFNULL]       = 0;
-       stackreq[JAVA_IFNONNULL]    = 0;
-       stackreq[JAVA_GOTO_W]       = 0;
-       stackreq[JAVA_BREAKPOINT]   = 0;
-
-       stackreq[JAVA_SWAP] = 2;
-       stackreq[JAVA_DUP2] = 2;
-       stackreq[JAVA_DUP_X1] = 3;
-       stackreq[JAVA_DUP_X2] = 4;
-       stackreq[JAVA_DUP2_X1] = 3;
-       stackreq[JAVA_DUP2_X2] = 4;
-
-       /* initialize the codegen stuff */
-       codegen_init();
-}
-
-
-void jit_close()
-{
-}
-
-
 /*
  * These are local overrides for various environment variables in Emacs.
  * Please do not remove this and leave it at the end of the file, where
index 03d985654d176d808689ffe908c7e8f0403dcd04..e556801d93551804dc6e06fecc9cab71234f3925 100644 (file)
@@ -30,7 +30,7 @@
             Christian Thalinger
                        Christian Ullrich
 
-   $Id: stack.c 3001 2005-07-12 16:01:56Z twisti $
+   $Id: stack.c 3007 2005-07-12 20:58:01Z twisti $
 
 */
 
 #include "vm/jit/lsra.h"
 
 
+/* global variables ***********************************************************/
+
+static java_objectheader show_icmd_lock;
+
+
+/* stack_init ******************************************************************
+
+   Initialized the stack analysis subsystem (called by jit_init).
+
+*******************************************************************************/
+
+bool stack_init(void)
+{
+       /* initialize the show lock */
+
+       show_icmd_lock.monitorPtr = get_dummyLR();
+
+       /* everything's ok */
+
+       return true;
+}
+
+
 /**********************************************************************/
 /* analyse_stack                                                      */
 /**********************************************************************/
@@ -2322,11 +2345,25 @@ static char *jit_type[] = {
 };
 
 
+/* show_icmd_method ************************************************************
+
+   XXX
+
+*******************************************************************************/
+
 void show_icmd_method(methodinfo *m, codegendata *cd, registerdata *rd)
 {
-       int i, j;
-       basicblock *bptr;
+       basicblock     *bptr;
        exceptiontable *ex;
+       s4              i, j;
+
+#if defined(USE_THREADS)
+       /* We need to enter a lock here, since the binutils disassembler is not   */
+       /* reentrant-able and we could not read functions printed at the same     */
+       /* time.                                                                  */
+
+       builtin_monitorenter(&show_icmd_lock);
+#endif
 
        printf("\n");
        utf_fprint_classname(stdout, m->class->name);
@@ -2382,6 +2419,7 @@ void show_icmd_method(methodinfo *m, codegendata *cd, registerdata *rd)
                printf("\n");
        }
        printf("\n");
+
 #ifdef LSRA
        if (!opt_lsra) {
 #endif
@@ -2441,6 +2479,7 @@ void show_icmd_method(methodinfo *m, codegendata *cd, registerdata *rd)
                }
        }
        printf("\n");
+
 #ifdef LSRA
        }
 #endif
@@ -2539,6 +2578,10 @@ void show_icmd_method(methodinfo *m, codegendata *cd, registerdata *rd)
 
                printf("\n");
        }
+
+#if defined(USE_THREADS)
+       builtin_monitorexit(&show_icmd_lock);
+#endif
 }
 
 
index 92a263de97f4579941bb401f7436c7de2a004f81..a49b2e40ab4090749c9fc6c725309011c2689552 100644 (file)
@@ -26,7 +26,7 @@
 
    Authors: Christian Thalinger
 
-   $Id: stack.h 2935 2005-07-08 15:06:55Z twisti $
+   $Id: stack.h 3007 2005-07-12 20:58:01Z twisti $
 
 */
 
 
 /* function prototypes ********************************************************/
 
+bool stack_init(void);
+
 methodinfo *analyse_stack(methodinfo *m, codegendata *cd, registerdata *rd);
 
 void icmd_print_stack(codegendata *cd, stackptr s);