jamvm

changeset 403:907df5a02819

Fix storage of protection domain for OpenJDK.

2008-08-04 Andrew John Hughes <gnu_andrew@member.fsf.org>

* src/class.c,
* src/jam.h:
Change signature of defineClass to include
protection domain.
* src/jni.c: Fix call to defineClass to send
NULL protection domain as HotSpot does.
* src/natives.c: Send protection domain directly
to defineClass on OpenJDK as there is no field to
inject it into.
author andrew
date Tue Aug 05 06:03:08 2008 +0100 (2008-08-05)
parents 24373fc1d951
children f70700d622a8
files ChangeLog src/class.c src/jam.h src/jni.c src/natives.c
line diff
     1.1 --- a/ChangeLog	Tue Aug 05 05:46:09 2008 +0100
     1.2 +++ b/ChangeLog	Tue Aug 05 06:03:08 2008 +0100
     1.3 @@ -5,6 +5,18 @@
     1.4  ==============
     1.5  2008-08-04  Andrew John Hughes  <gnu_andrew@member.fsf.org>
     1.6  
     1.7 +	* src/class.c,
     1.8 +	* src/jam.h:
     1.9 +	Change signature of defineClass to include
    1.10 +	protection domain.
    1.11 +	* src/jni.c: Fix call to defineClass to send
    1.12 +	NULL protection domain as HotSpot does.
    1.13 +	* src/natives.c: Send protection domain directly
    1.14 +	to defineClass on OpenJDK as there is no field to
    1.15 +	inject it into.
    1.16 +
    1.17 +2008-08-04  Andrew John Hughes  <gnu_andrew@member.fsf.org>
    1.18 +
    1.19  	* .hgignore: Updated with autogen.sh output.
    1.20  	* configure.ac: Add new trace options.
    1.21  	* src/class.c,
     2.1 --- a/src/class.c	Tue Aug 05 05:46:09 2008 +0100
     2.2 +++ b/src/class.c	Tue Aug 05 06:03:08 2008 +0100
     2.3 @@ -157,7 +157,7 @@
     2.4      }
     2.5  }
     2.6  
     2.7 -Class *defineClass(char *classname, char *data, int offset, int len, Object *class_loader) {
     2.8 +Class *defineClass(char *classname, char *data, int offset, int len, Object *class_loader, Object* pd) {
     2.9      unsigned char *ptr = (unsigned char *)data+offset;
    2.10      int cp_count, intf_count, i;
    2.11      u2 major_version, minor_version, this_idx, super_idx;
    2.12 @@ -294,6 +294,7 @@
    2.13      }
    2.14  
    2.15      classblock->class_loader = class_loader;
    2.16 +    classblock->protection_domain = pd;
    2.17  
    2.18      READ_U2(intf_count = classblock->interfaces_count, ptr, len);
    2.19      interfaces = classblock->interfaces =
    2.20 @@ -1249,7 +1250,7 @@
    2.21          return NULL;
    2.22      }
    2.23  
    2.24 -    class = defineClass(classname, data, 0, file_len, NULL);
    2.25 +    class = defineClass(classname, data, 0, file_len, NULL, NULL);
    2.26      sysFree(data);
    2.27  
    2.28      if(verbose && class)
     3.1 --- a/src/jam.h	Tue Aug 05 05:46:09 2008 +0100
     3.2 +++ b/src/jam.h	Tue Aug 05 06:03:08 2008 +0100
     3.3 @@ -531,6 +531,7 @@
     3.4     int initing_tid;
     3.5     int dim;
     3.6     Object *class_loader;
     3.7 +   Object *protection_domain;
     3.8     u2 declaring_class;
     3.9     u2 inner_access_flags;
    3.10     u2 inner_class_count;
    3.11 @@ -739,7 +740,7 @@
    3.12  
    3.13  extern Class *java_lang_Class;
    3.14  
    3.15 -extern Class *defineClass(char *classname, char *data, int offset, int len, Object *class_loader);
    3.16 +extern Class *defineClass(char *classname, char *data, int offset, int len, Object *class_loader, Object* pd);
    3.17  extern void linkClass(Class *class);
    3.18  extern Class *initClass(Class *class);
    3.19  extern Class *findSystemClass(char *);
     4.1 --- a/src/jni.c	Tue Aug 05 05:46:09 2008 +0100
     4.2 +++ b/src/jni.c	Tue Aug 05 06:03:08 2008 +0100
     4.3 @@ -412,7 +412,7 @@
     4.4  }
     4.5  
     4.6  jclass Jam_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize bufLen) {
     4.7 -    return (jclass)defineClass((char*)name, (char *)buf, 0, (int)bufLen, (Object *)loader);
     4.8 +    return (jclass)defineClass((char*)name, (char *)buf, 0, (int)bufLen, (Object *)loader, NULL);
     4.9  }
    4.10  
    4.11  jclass Jam_FindClass(JNIEnv *env, const char *name) {
     5.1 --- a/src/natives.c	Tue Aug 05 05:46:09 2008 +0100
     5.2 +++ b/src/natives.c	Tue Aug 05 06:03:08 2008 +0100
     5.3 @@ -638,7 +638,11 @@
     5.4      Object *array = (Object *)ostack[2];
     5.5      int offset = ostack[3];
     5.6      int data_len = ostack[4];
     5.7 +#ifdef WITH_JAVA_RUNTIME_LIBRARY_CLASSPATH
     5.8      uintptr_t pd = ostack[5];
     5.9 +#elif WITH_JAVA_RUNTIME_LIBRARY_OPENJDK
    5.10 +    Object* pd = ostack[5];
    5.11 +#endif
    5.12      Class *class = NULL;
    5.13  
    5.14      if(array == NULL)
    5.15 @@ -656,8 +660,12 @@
    5.16              for(i = 0; i < len; i++)
    5.17                  if(cstr[i]=='.') cstr[i]='/';
    5.18  
    5.19 -            if((class = defineClass(cstr, data, offset, data_len, class_loader)) != NULL) {
    5.20 -                INST_DATA(class)[pd_offset] = pd;
    5.21 +#ifdef WITH_JAVA_RUNTIME_LIBRARY_CLASSPATH
    5.22 +            if((class = defineClass(cstr, data, offset, data_len, class_loader, NULL)) != NULL) {
    5.23 +	      INST_DATA(class)[pd_offset] = pd;
    5.24 +#elif WITH_JAVA_RUNTIME_LIBRARY_OPENJDK
    5.25 +            if((class = defineClass(cstr, data, offset, data_len, class_loader, pd)) != NULL) {
    5.26 +#endif
    5.27                  linkClass(class);
    5.28              }
    5.29