VMAccessController.getStack (currently leads in some cases to endless loops)
authorjowenn <none@none>
Thu, 19 May 2005 08:48:55 +0000 (08:48 +0000)
committerjowenn <none@none>
Thu, 19 May 2005 08:48:55 +0000 (08:48 +0000)
src/native/include/Makefile.am
src/native/native.c
src/native/vm/Makefile.am
src/vm/class.c
src/vm/class.h
src/vm/jit/stacktrace.c
src/vm/jit/stacktrace.h
src/vm/jit/x86_64/patcher.c
src/vm/loader.c

index 8c3a77fef401a2ea6593244801c143d8e2f5a874..98cd75eb19ee27ff0393b316442c11148a52ed10 100644 (file)
@@ -28,7 +28,7 @@
 ##
 ## Changes:
 ##
-## $Id: Makefile.am 2480 2005-05-13 15:32:22Z twisti $
+## $Id: Makefile.am 2482 2005-05-19 08:48:55Z jowenn $
 
 ## Process this file with automake to produce Makefile.in
 
@@ -75,7 +75,8 @@ ADDITIONAL_IMPLEMENTED_VM_CLASSES_HEADER_FILES = \
        java_lang_VMRuntime.h \
        java_lang_VMString.h \
        java_lang_VMSystem.h \
-       java_lang_reflect_Proxy.h
+       java_lang_reflect_Proxy.h \
+       java_security_VMAccessController
 
 ADDITIONAL_STATIC_CLASSPATH_HEADER_FILES = \
        java_net_DatagramPacket.h \
index 20d003b2df302b24643916802967bc564b3c36a9..583264b6dbec1a1373e34cb37d9e620c5784ed66 100644 (file)
@@ -30,7 +30,7 @@
 
    Changes: Christian Thalinger
 
-   $Id: native.c 2465 2005-05-13 00:02:01Z twisti $
+   $Id: native.c 2482 2005-05-19 08:48:55Z jowenn $
 
 */
 
@@ -96,6 +96,7 @@
 #include "native/include/java_lang_reflect_Field.h"
 #include "native/include/java_lang_reflect_Proxy.h"
 #include "native/include/java_lang_reflect_Method.h"
+#include "native/include/java_security_VMAccessController.h"
 
 #if defined(STATIC_CLASSPATH)
 
@@ -211,6 +212,8 @@ static functionptr dummynativetable[] = {
        (functionptr) Java_java_lang_reflect_Method_getParameterTypes,
        (functionptr) Java_java_lang_reflect_Method_getExceptionTypes,
        (functionptr) Java_java_lang_reflect_Method_invokeNative,
+
+       (functionptr) Java_java_security_VMAccessController_getStack,
 };
 
 #endif /* defined(STATIC_CLASSPATH) */
index ffa9d91f4722dfc42af83bc1d4231b894a63ce9c..7c1cdbe3cf60c11cde644e9c20aa58e707ea348c 100644 (file)
@@ -28,7 +28,7 @@
 ##
 ## Changes:
 ##
-## $Id: Makefile.am 1992 2005-03-05 16:53:16Z twisti $
+## $Id: Makefile.am 2482 2005-05-19 08:48:55Z jowenn $
 
 ## Process this file with automake to produce Makefile.in
 
@@ -50,7 +50,8 @@ libnativevm_la_SOURCES = \
        VMSystem.c \
        VMSystemProperties.c \
        VMThread.c \
-       VMThrowable.c
+       VMThrowable.c \
+       VMAccessController.c
 
 
 ## Local variables:
index 14da923462cbe28176d9e013643f0ac12ee624da..9826f59a2d40e0151c858661c24188f933e06496 100644 (file)
@@ -30,7 +30,7 @@
             Andreas Krall
             Christian Thalinger
 
-   $Id: class.c 2427 2005-05-01 12:27:54Z jowenn $
+   $Id: class.c 2482 2005-05-19 08:48:55Z jowenn $
 
 */
 
@@ -123,7 +123,7 @@ classinfo *class_java_lang_Double = NULL;
 classinfo *class_java_util_Vector = NULL;
 classinfo *class_java_lang_reflect_Constructor = NULL;
 classinfo *class_java_lang_reflect_Method = NULL;
-
+classinfo *arrayclass_java_lang_Object=NULL;
 
 /* pseudo classes for the typechecker */
 
index c9d7f0b6b350c9a3f59b93936fc1500a52cd4cad..d70c3637ccbe5cc9c97667e6a58a7e7081b1614c 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes:
 
-   $Id: class.h 2427 2005-05-01 12:27:54Z jowenn $
+   $Id: class.h 2482 2005-05-19 08:48:55Z jowenn $
 
 */
 
@@ -191,6 +191,7 @@ extern classinfo *class_java_lang_Double;
 extern classinfo *class_java_util_Vector;
 extern classinfo *class_java_lang_reflect_Constructor;
 extern classinfo *class_java_lang_reflect_Method;
+extern classinfo *arrayclass_java_lang_Object;
 
 /* pseudo classes for the type checker ****************************************/
 
index 1e05043998baffb4a1583cfb910eb46928005b69..260ce8a10a4577d48d5a4284cf02ad83d5f60bb1 100644 (file)
@@ -26,7 +26,7 @@
 
    Authors: Joseph Wenninger
 
-   $Id: stacktrace.c 2430 2005-05-03 19:25:52Z twisti $
+   $Id: stacktrace.c 2482 2005-05-19 08:48:55Z jowenn $
 
 */
 
 #include "vm/tables.h"
 #include "vm/jit/codegen.inc.h"
 #include "vm/loader.h"
+#include "vm/stringlocal.h"
+#include "vm/exceptions.h"
 
 #undef JWDEBUG
+#undef JWDEBUG2
+#undef JWDEBUG3
 
 /*JoWenn: simplify collectors (trace doesn't contain internal methods)*/
 
@@ -85,7 +89,7 @@ static void addEntry(stackTraceBuffer* buffer,methodinfo*method ,LineNumber line
                tmp->method=method;
                tmp->linenumber=line;
                buffer->full = buffer->full + 1;
-#ifdef JWDEBUG
+#if (defined(JWDEBUG) || defined (JWDEBUG2))
                log_text("addEntry (stacktrace):");
                printf("method %p\n",method);
                if (method) printf("method->name %p\n",method->name);
@@ -216,7 +220,7 @@ void  cacao_stacktrace_fillInStackTrace(void **target,CacaoStackTraceCollector c
        stackTraceBuffer buffer;
        buffer.needsFree=0;
        buffer.start=primaryBlock;
-       buffer.size=BLOCK_INITIALSIZE*sizeof(stacktraceelement);
+       buffer.size=BLOCK_INITIALSIZE; /**sizeof(stacktraceelement)*/;
        buffer.full=0;
 #ifdef JWDEBUG
        log_text("entering cacao_stacktrace_fillInStacktrace");
@@ -380,9 +384,11 @@ void classContextCollector(void **target, stackTraceBuffer *buffer) {
        start=buffer->start;
        start++;
        targetSize--;
-
         if (targetSize > 0) {
                 if ((start->method) && (start->method->class== class_java_lang_SecurityManager)) {
+#if (defined(JWDEBUG) || defined(JWDEBUG3))
+                       printf("removing one frame");
+#endif
                         targetSize--;
                         start++;
                 }
@@ -390,9 +396,12 @@ void classContextCollector(void **target, stackTraceBuffer *buffer) {
 
         tmpArray = builtin_anewarray(targetSize, class_java_lang_Class);
 
+#if (defined(JWDEBUG) || defined(JWDEBUG3))
+       printf("==========================================================================================================\n");
+#endif
         for(i = 0, current = start; i < targetSize; i++, current++) {
                 if (current->method==0) { i--; /*printf("Skipping\n");*/ continue;}
-#ifdef JWDEBUG
+#if (defined(JWDEBUG) || defined(JWDEBUG3))
                {
                        printf("after current->method check\n");
                        if (current->method->class==0) printf("Error method defining class i null\n");
@@ -412,7 +421,7 @@ void classContextCollector(void **target, stackTraceBuffer *buffer) {
                printf("array item has been set\n");
 #endif
         }
-#ifdef JWDEBUG
+#if (defined(JWDEBUG) || defined(JWDEBUG3))
        printf("leaving classContextCollector");
 #endif
         *target=tmpArray;
@@ -455,7 +464,7 @@ void classLoaderCollector(void **target, stackTraceBuffer *buffer) {
                        /* XXX handle exception */;
 
         for(i=0, current = start; i < size; i++, current++) {
-                m=start->method;
+                m=current->method;
                if (!m) continue;
 
                 if (m->class == privilegedAction) {
@@ -491,6 +500,64 @@ methodinfo *cacao_callingMethod() {
        return method;
 }
 
+
+static
+void getStackCollector(void **target, stackTraceBuffer *buffer) {
+       java_objectarray *classes;
+       java_objectarray *methodnames;
+       java_objectarray **result=(java_objectarray**)target;
+       java_lang_String *str;
+       classinfo *c;
+        stacktraceelement *current;
+       int i,size;
+
+       /*log_text("getStackCollector");*/
+
+       size=buffer->full;
+
+
+       *result=builtin_anewarray(2,arrayclass_java_lang_Object);
+       if (result==0) panic("getStackCollector (very out of memory)");
+       classes=builtin_anewarray(size,class_java_lang_Class);
+       methodnames=builtin_anewarray(size,class_java_lang_String);
+       (*result)->data[0]=(java_objectheader*)classes;
+       (*result)->data[1]=(java_objectheader*)methodnames;
+       if ( (0==classes) || (0==methodnames)) {
+               classes=builtin_anewarray(0,class_java_lang_Class);
+               methodnames=builtin_anewarray(0,class_java_lang_String);
+               (*result)->data[0]=(java_objectheader*)classes;
+               (*result)->data[1]=(java_objectheader*)methodnames;
+               if ( (0==classes) || (0==methodnames)) panic ("getStackCollector (very out of memory 2)");
+               return;
+       }
+       /*log_text("Before for loop");*/
+       for (i=0,current=&(buffer->start[0]);i<size;i++,current++) {
+               /*log_text("In loop");*/
+               c=current->method->class;
+               use_class_as_object(c);
+               classes->data[i]=(java_objectheader*)c;
+               str=javastring_new(current->method->name);
+               if (!str) return;
+               methodnames->data[i]=(java_objectheader*)str;
+               /*printf("getStackCollector: %s.%s\n",c->name->text,current->method->name->text);*/
+       }
+
+       /*if (*exceptionptr) panic("Exception in getStackCollector");*/
+
+       /*log_text("loop left");*/
+        return;
+
+}
+
+java_objectarray *cacao_getStackForVMAccessController() {
+       java_objectarray *result=0;
+       cacao_stacktrace_fillInStackTrace((void**)&result,&getStackCollector);
+       return result;
+}
+
+
+
+
 /*
  * 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 ba0d5ad16483288e2958d089b47e5395cb8a8bfc..8f39f384bfe3f7a7863fead389077ff7e9f56789 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes:
 
-   $Id: stacktrace.h 2402 2005-04-27 13:17:07Z jowenn $
+   $Id: stacktrace.h 2482 2005-05-19 08:48:55Z jowenn $
 
 */
 
@@ -92,7 +92,7 @@ void cacao_stacktrace_NormalTrace(void **target);
 java_objectarray *cacao_createClassContextArray();
 java_objectheader *cacao_currentClassLoader();
 methodinfo* cacao_callingMethod();
-
+java_objectarray *cacao_getStackForVMAccessController();
 #endif /* _STACKTRACE_H */
 
 
index 9e1d82b0e168a5bb4602eb143ebbb9f1ec3b9a84..d2b225f51d6e8d65013287a9fc618c71630eb585 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes:
 
-   $Id: patcher.c 2448 2005-05-11 13:03:20Z twisti $
+   $Id: patcher.c 2482 2005-05-19 08:48:55Z jowenn $
 
 */
 
@@ -43,7 +43,7 @@
 #include "vm/exceptions.h"
 
 
-helper_initialize_class(void* beginOfJavaStack,classinfo *c,u1 *ra) {
+bool helper_initialize_class(void* beginOfJavaStack,classinfo *c,u1 *ra) {
        if (!c->initialized) {
                bool init;
                {
index 3b6a86e371c3fbe21507d6b481594f7756139392..b3cddc651d98f669ac94afa640a89a74112d4807 100644 (file)
@@ -32,7 +32,7 @@
             Edwin Steiner
             Christian Thalinger
 
-   $Id: loader.c 2456 2005-05-12 22:59:04Z twisti $
+   $Id: loader.c 2482 2005-05-19 08:48:55Z jowenn $
 
 */
 
@@ -204,6 +204,8 @@ bool loader_init(u1 *stackbottom)
        if (!load_class_bootstrap(utf_java_lang_reflect_Method, &class_java_lang_reflect_Method))
                return false;
 
+       if (! load_class_bootstrap(utf_new_char("[Ljava/lang/Object;"),&arrayclass_java_lang_Object))
+               return false;
 #if defined(USE_THREADS)
        if (stackbottom != 0)
                initLocks();