* src/vm/jit/stacktrace.c (stacktrace_fillInStackTrace): Returns a bytearray.
authorMichael Starzinger <michi@complang.tuwien.ac.at>
Wed, 3 Oct 2007 15:33:39 +0000 (17:33 +0200)
committerMichael Starzinger <michi@complang.tuwien.ac.at>
Wed, 3 Oct 2007 15:33:39 +0000 (17:33 +0200)
(stacktrace_print_trace): Does not use stacktracecontainer anymore.

* src/vm/jit/stacktrace.h (stacktracecontainer): Removed.
(stacktrace_fillInStackTrace): Adapted prototype to above change.

* src/native/vm/cldc1.1/java_lang_Throwable.c: Adapted to above changes.
* src/native/vm/gnu/java_lang_VMThrowable.c: Likewise.
* src/native/vm/sun/jvm.c: Likewise.

src/native/vm/cldc1.1/java_lang_Throwable.c
src/native/vm/gnu/java_lang_VMThrowable.c
src/native/vm/sun/jvm.c
src/vm/jit/stacktrace.c
src/vm/jit/stacktrace.h

index 5fa3f77cfaca79c671369b99e9107a15ea0d5915..1d5defa305a53ec3fd1300d2e3acf7c42d76fb15 100644 (file)
@@ -88,14 +88,14 @@ JNIEXPORT void JNICALL Java_java_lang_Throwable_printStackTrace(JNIEnv *env, jav
  */
 JNIEXPORT void JNICALL Java_java_lang_Throwable_fillInStackTrace(JNIEnv *env, java_lang_Throwable *this)
 {
-       stacktracecontainer *stc;
+       java_handle_bytearray_t *ba;
 
-       stc = stacktrace_fillInStackTrace();
+       ba = stacktrace_fillInStackTrace();
 
-       if (stc == NULL)
+       if (ba == NULL)
                return;
 
-       this->backtrace = (java_lang_Object *) stc;
+       this->backtrace = (java_lang_Object *) ba;
 }
 
 
index 6c612b4c2d93daf7259502aca4a8c9f62dc18418..246681c23bd72a22dca3cb50891d7a95d47cf345 100644 (file)
@@ -86,8 +86,8 @@ void _Jv_java_lang_VMThrowable_init(void)
  */
 JNIEXPORT java_lang_VMThrowable* JNICALL Java_java_lang_VMThrowable_fillInStackTrace(JNIEnv *env, jclass clazz, java_lang_Throwable *t)
 {
-       java_lang_VMThrowable *o;
-       stacktracecontainer   *stc;
+       java_lang_VMThrowable   *o;
+       java_handle_bytearray_t *ba;
 
        o = (java_lang_VMThrowable *)
                native_new_and_init(class_java_lang_VMThrowable);
@@ -95,12 +95,12 @@ JNIEXPORT java_lang_VMThrowable* JNICALL Java_java_lang_VMThrowable_fillInStackT
        if (o == NULL)
                return NULL;
 
-       stc = stacktrace_fillInStackTrace();
+       ba = stacktrace_fillInStackTrace();
 
-       if (stc == NULL)
+       if (ba == NULL)
                return NULL;
 
-       LLNI_field_set_ref(o, vmData, (gnu_classpath_Pointer *) stc);
+       LLNI_field_set_ref(o, vmData, (gnu_classpath_Pointer *) ba);
 
        return o;
 }
@@ -113,7 +113,7 @@ JNIEXPORT java_lang_VMThrowable* JNICALL Java_java_lang_VMThrowable_fillInStackT
  */
 JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMThrowable_getStackTrace(JNIEnv *env, java_lang_VMThrowable *this, java_lang_Throwable *t)
 {
-       stacktracecontainer         *stc;
+       java_handle_bytearray_t     *ba;
        stacktracebuffer            *stb;
        stacktrace_entry            *ste;
        stacktrace_entry            *tmpste;
@@ -133,9 +133,8 @@ JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMThrowable_getStack
 
        /* get the stacktrace buffer from the VMThrowable object */
 
-       /*XXX stc = (stacktracecontainer *) this->vmData;*/
-       LLNI_field_get_ref(this, vmData, stc);
-       stb = &(stc->stb);
+       LLNI_field_get_ref(this, vmData, ba);
+       stb = (stacktracebuffer *) LLNI_array_data(ba);
 
        /* get the class of the Throwable object */
 
index c02a0c02463800c1d6d9047dea1598a00cea5a4e..a2594f5b1250cfec84ac5bccad86ba70d379b329 100644 (file)
@@ -382,8 +382,8 @@ jint JVM_ActiveProcessorCount(void)
 
 void JVM_FillInStackTrace(JNIEnv *env, jobject receiver)
 {
-       java_lang_Throwable *o;
-       stacktracecontainer *stc;
+       java_lang_Throwable     *o;
+       java_handle_bytearray_t *ba;
 
 #if PRINTJVM
        log_println("JVM_FillInStackTrace: receiver=%p", receiver);
@@ -391,12 +391,12 @@ void JVM_FillInStackTrace(JNIEnv *env, jobject receiver)
 
        o = (java_lang_Throwable *) receiver;
 
-       stc = stacktrace_fillInStackTrace();
+       ba = stacktrace_fillInStackTrace();
 
-       if (stc == NULL)
+       if (ba == NULL)
                return;
 
-    o->backtrace = (java_lang_Object *) stc;
+       o->backtrace = (java_lang_Object *) ba;
 }
 
 
@@ -412,17 +412,17 @@ void JVM_PrintStackTrace(JNIEnv *env, jobject receiver, jobject printable)
 
 jint JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable)
 {
-       java_lang_Throwable *o;
-       stacktracecontainer *stc;
-       stacktracebuffer    *stb;
+       java_lang_Throwable     *o;
+       java_handle_bytearray_t *ba;
+       stacktracebuffer        *stb;
 
 #if PRINTJVM
        log_println("JVM_GetStackTraceDepth: throwable=%p", throwable);
 #endif
 
        o   = (java_lang_Throwable *) throwable;
-       stc = (stacktracecontainer *) o->backtrace;
-       stb = &(stc->stb);
+       ba  = (java_handle_bytearray_t *) o->backtrace;
+       stb = (stacktracebuffer *) LLNI_array_data(ba);
 
        return stb->used;
 }
@@ -433,9 +433,9 @@ jint JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable)
 jobject JVM_GetStackTraceElement(JNIEnv *env, jobject throwable, jint index)
 {
        java_lang_Throwable *t;
-       stacktracecontainer *stc;
-       stacktracebuffer    *stb;
-       stacktrace_entry    *ste;
+       java_handle_bytearray_t     *ba;
+       stacktracebuffer            *stb;
+       stacktrace_entry            *ste;
        java_lang_StackTraceElement *o;
        java_lang_String            *declaringclass;
        java_lang_String            *filename;
@@ -446,8 +446,8 @@ jobject JVM_GetStackTraceElement(JNIEnv *env, jobject throwable, jint index)
 #endif
 
        t   = (java_lang_Throwable *) throwable;
-       stc = (stacktracecontainer *) t->backtrace;
-       stb = &(stc->stb);
+       ba  = (java_handle_bytearray_t *) t->backtrace;
+       stb = (stacktracebuffer *) LLNI_array_data(ba);
 
        if ((index < 0) || (index >= stb->used)) {
                /* XXX This should be an IndexOutOfBoundsException (check this
index e422acfa460fbca68ceaf90bc5f7832e5a5e54cf..2e546ee6fe1e36e41c5f680357422576e6a7c93d 100644 (file)
@@ -476,7 +476,10 @@ stacktracebuffer *stacktrace_create(stackframeinfo *sfi)
                                if (opt_DebugStackTrace) {
                                        printf("ra=%p sp=%p, ", ra, sp);
                                        method_print(m);
-                                       printf(": native stub\n");
+                                       if (m)
+                                               printf(": native stub\n");
+                                       else
+                                               printf(": builtin stub\n");
                                        fflush(stdout);
                                }
 #endif
@@ -718,12 +721,12 @@ stacktracebuffer *stacktrace_create(stackframeinfo *sfi)
 
 *******************************************************************************/
 
-stacktracecontainer *stacktrace_fillInStackTrace(void)
+java_handle_bytearray_t *stacktrace_fillInStackTrace(void)
 {
-       stacktracebuffer    *stb;
-       stacktracecontainer *gcstc;
-       s4                   gcstc_size;
-       s4                   dumpsize;
+       stacktracebuffer        *stb;
+       java_handle_bytearray_t *ba;
+       s4                       ba_size;
+       s4                       dumpsize;
        CYCLES_STATS_DECLARE_AND_START_WITH_OVERHEAD
 
        /* mark start of dump memory area */
@@ -738,18 +741,17 @@ stacktracecontainer *stacktrace_fillInStackTrace(void)
                goto return_NULL;
 
        /* allocate memory from the GC heap and copy the stacktrace buffer */
-       /* ATTENTION: use stacktracecontainer for this and make it look like
-       an array */
+       /* ATTENTION: use a bytearray for this to not confuse the GC */
 
-       gcstc_size = sizeof(stacktracebuffer) +
-                    sizeof(stacktrace_entry) * stb->used -
-                                sizeof(stacktrace_entry) * STACKTRACE_CAPACITY_DEFAULT;
-       gcstc = (stacktracecontainer *) builtin_newarray_byte(gcstc_size);
+       ba_size = sizeof(stacktracebuffer) +
+                 sizeof(stacktrace_entry) * stb->used -
+                 sizeof(stacktrace_entry) * STACKTRACE_CAPACITY_DEFAULT;
+       ba = builtin_newarray_byte(ba_size);
 
-       if (gcstc == NULL)
+       if (ba == NULL)
                goto return_NULL;
 
-       MCOPY(&(gcstc->stb), stb, u1, gcstc_size);
+       MCOPY(LLNI_array_data(ba), stb, u1, ba_size);
 
        /* release dump memory */
 
@@ -757,7 +759,7 @@ stacktracecontainer *stacktrace_fillInStackTrace(void)
 
        CYCLES_STATS_END_WITH_OVERHEAD(stacktrace_fillInStackTrace,
                                                                   stacktrace_overhead)
-       return gcstc;
+       return ba;
 
 return_NULL:
        dump_release(dumpsize);
@@ -1062,12 +1064,12 @@ void stacktrace_print_trace_from_buffer(stacktracebuffer *stb)
 
 void stacktrace_print_trace(java_handle_t *xptr)
 {
-       java_lang_Throwable   *t;
+       java_lang_Throwable     *t;
 #if defined(WITH_CLASSPATH_GNU)
-       java_lang_VMThrowable *vmt;
+       java_lang_VMThrowable   *vmt;
 #endif
-       stacktracecontainer   *stc;
-       stacktracebuffer      *stb;
+       java_handle_bytearray_t *ba;
+       stacktracebuffer        *stb;
 
        t = (java_lang_Throwable *) xptr;
 
@@ -1078,14 +1080,15 @@ void stacktrace_print_trace(java_handle_t *xptr)
 
 #if defined(WITH_CLASSPATH_GNU)
        LLNI_field_get_ref(t, vmState, vmt);
-       stc = (stacktracecontainer *) LLNI_field_direct(vmt, vmData);
+       LLNI_field_get_ref(vmt, vmData, ba);
 #elif defined(WITH_CLASSPATH_SUN) || defined(WITH_CLASSPATH_CLDC1_1)
-       stc = (stacktracecontainer *) t->backtrace;
+       LLNI_field_get_ref(t, backtrace, ba);
 #else
 # error unknown classpath configuration
 #endif
 
-       stb = &(stc->stb);
+       assert(ba);
+       stb = (stacktracebuffer *) LLNI_array_data(ba);
 
        stacktrace_print_trace_from_buffer(stb);
 }
index ab9bc3c97fb55c5d569a9aad300cd908f2b2327f..9708c8456f1bb890aa5791fcefe0102d489043ab 100644 (file)
@@ -95,19 +95,6 @@ struct stacktracebuffer {
 };
 
 
-/* stacktracecontainer ********************************************************
-
-   ATTENTION: Use the stacktracecontainer to place a stacktrace onto the heap
-   with stacktrace_fillInStackTrace() so that the GC does not get confused.
-
-*******************************************************************************/
-
-typedef struct stacktracecontainer {
-       java_array_t            header;     /* default array header for the GC    */
-       struct stacktracebuffer stb;        /* wrapped stacktracebuffer           */
-} stacktracecontainer;
-
-
 /* function prototypes ********************************************************/
 
 #if defined(ENABLE_INTRP)
@@ -126,7 +113,7 @@ void stacktrace_remove_stackframeinfo(stackframeinfo *sfi);
 
 stacktracebuffer *stacktrace_create(stackframeinfo *sfi);
 
-stacktracecontainer *stacktrace_fillInStackTrace(void);
+java_handle_bytearray_t   *stacktrace_fillInStackTrace(void);
 
 #if defined(ENABLE_JAVASE)
 java_handle_objectarray_t *stacktrace_getClassContext(void);