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.
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
