226
227 class java_lang_Class : AllStatic {
228 friend class VMStructs;
229
230 private:
231 // The fake offsets are added by the class loader when java.lang.Class is loaded
232
233 static int _klass_offset;
234 static int _array_klass_offset;
235
236 static int _oop_size_offset;
237 static int _static_oop_field_count_offset;
238
239 static int _protection_domain_offset;
240 static int _init_lock_offset;
241 static int _signers_offset;
242 static int _class_loader_offset;
243 static int _component_mirror_offset;
244
245 static bool offsets_computed;
246 static int classRedefinedCount_offset;
247
248 static GrowableArray<Klass*>* _fixup_mirror_list;
249
250 static void set_init_lock(oop java_class, oop init_lock);
251 static void set_protection_domain(oop java_class, oop protection_domain);
252 static void set_class_loader(oop java_class, oop class_loader);
253 static void set_component_mirror(oop java_class, oop comp_mirror);
254 static void initialize_mirror_fields(KlassHandle k, Handle mirror, Handle protection_domain, TRAPS);
255 public:
256 static void compute_offsets();
257
258 // Instance creation
259 static void create_mirror(KlassHandle k, Handle class_loader,
260 Handle protection_domain, TRAPS);
261 static void fixup_mirror(KlassHandle k, TRAPS);
262 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
263 // Conversion
264 static Klass* as_Klass(oop java_class);
265 static void set_klass(oop java_class, Klass* klass);
268 Klass* refk_oop = NULL;
269 BasicType result = as_BasicType(java_class, &refk_oop);
270 (*reference_klass) = KlassHandle(refk_oop);
271 return result;
272 }
273 static Symbol* as_signature(oop java_class, bool intern_if_not_found, TRAPS);
274 static void print_signature(oop java_class, outputStream *st);
275 // Testing
276 static bool is_instance(oop obj) {
277 return obj != NULL && obj->klass() == SystemDictionary::Class_klass();
278 }
279 static bool is_primitive(oop java_class);
280 static BasicType primitive_type(oop java_class);
281 static oop primitive_mirror(BasicType t);
282 // JVM_NewArray support
283 static Klass* array_klass(oop java_class);
284 static void set_array_klass(oop java_class, Klass* klass);
285 // compiler support for class operations
286 static int klass_offset_in_bytes() { return _klass_offset; }
287 static int array_klass_offset_in_bytes() { return _array_klass_offset; }
288 // Support for classRedefinedCount field
289 static int classRedefinedCount(oop the_class_mirror);
290 static void set_classRedefinedCount(oop the_class_mirror, int value);
291
292 // Support for embedded per-class oops
293 static oop protection_domain(oop java_class);
294 static oop init_lock(oop java_class);
295 static oop component_mirror(oop java_class);
296 static objArrayOop signers(oop java_class);
297 static void set_signers(oop java_class, objArrayOop signers);
298
299 static oop class_loader(oop java_class);
300
301 static int oop_size(oop java_class);
302 static void set_oop_size(oop java_class, int size);
303 static int static_oop_field_count(oop java_class);
304 static void set_static_oop_field_count(oop java_class, int size);
305
306 static GrowableArray<Klass*>* fixup_mirror_list() {
307 return _fixup_mirror_list;
308 }
309 static void set_fixup_mirror_list(GrowableArray<Klass*>* v) {
310 _fixup_mirror_list = v;
311 }
312 // Debugging
313 friend class JavaClasses;
314 friend class InstanceKlass; // verification code accesses offsets
315 friend class ClassFileParser; // access to number_of_fake_fields
316 };
317
318 // Interface to java.lang.Thread objects
319
320 class java_lang_Thread : AllStatic {
321 private:
322 // Note that for this class the layout changed between JDK1.2 and JDK1.3,
323 // so we compute the offsets at startup rather than hard-wiring them.
324 static int _name_offset;
325 static int _group_offset;
326 static int _contextClassLoader_offset;
327 static int _inheritedAccessControlContext_offset;
328 static int _priority_offset;
329 static int _eetop_offset;
330 static int _daemon_offset;
331 static int _stillborn_offset;
332 static int _stackSize_offset;
333 static int _tid_offset;
334 static int _thread_status_offset;
335 static int _park_blocker_offset;
|
226
227 class java_lang_Class : AllStatic {
228 friend class VMStructs;
229
230 private:
231 // The fake offsets are added by the class loader when java.lang.Class is loaded
232
233 static int _klass_offset;
234 static int _array_klass_offset;
235
236 static int _oop_size_offset;
237 static int _static_oop_field_count_offset;
238
239 static int _protection_domain_offset;
240 static int _init_lock_offset;
241 static int _signers_offset;
242 static int _class_loader_offset;
243 static int _component_mirror_offset;
244
245 static bool offsets_computed;
246 static int _classData_offset;
247 static int classRedefinedCount_offset;
248
249 static GrowableArray<Klass*>* _fixup_mirror_list;
250
251 static void set_init_lock(oop java_class, oop init_lock);
252 static void set_protection_domain(oop java_class, oop protection_domain);
253 static void set_class_loader(oop java_class, oop class_loader);
254 static void set_component_mirror(oop java_class, oop comp_mirror);
255 static void initialize_mirror_fields(KlassHandle k, Handle mirror, Handle protection_domain, TRAPS);
256 public:
257 static void compute_offsets();
258
259 // Instance creation
260 static void create_mirror(KlassHandle k, Handle class_loader,
261 Handle protection_domain, TRAPS);
262 static void fixup_mirror(KlassHandle k, TRAPS);
263 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
264 // Conversion
265 static Klass* as_Klass(oop java_class);
266 static void set_klass(oop java_class, Klass* klass);
269 Klass* refk_oop = NULL;
270 BasicType result = as_BasicType(java_class, &refk_oop);
271 (*reference_klass) = KlassHandle(refk_oop);
272 return result;
273 }
274 static Symbol* as_signature(oop java_class, bool intern_if_not_found, TRAPS);
275 static void print_signature(oop java_class, outputStream *st);
276 // Testing
277 static bool is_instance(oop obj) {
278 return obj != NULL && obj->klass() == SystemDictionary::Class_klass();
279 }
280 static bool is_primitive(oop java_class);
281 static BasicType primitive_type(oop java_class);
282 static oop primitive_mirror(BasicType t);
283 // JVM_NewArray support
284 static Klass* array_klass(oop java_class);
285 static void set_array_klass(oop java_class, Klass* klass);
286 // compiler support for class operations
287 static int klass_offset_in_bytes() { return _klass_offset; }
288 static int array_klass_offset_in_bytes() { return _array_klass_offset; }
289
290 static oop classData(oop obj);
291
292 // Support for classRedefinedCount field
293 static int classRedefinedCount(oop the_class_mirror);
294 static void set_classRedefinedCount(oop the_class_mirror, int value);
295
296 // Support for embedded per-class oops
297 static oop protection_domain(oop java_class);
298 static oop init_lock(oop java_class);
299 static oop component_mirror(oop java_class);
300 static objArrayOop signers(oop java_class);
301 static void set_signers(oop java_class, objArrayOop signers);
302
303 static oop class_loader(oop java_class);
304
305 static int oop_size(oop java_class);
306 static void set_oop_size(oop java_class, int size);
307 static int static_oop_field_count(oop java_class);
308 static void set_static_oop_field_count(oop java_class, int size);
309
310 static GrowableArray<Klass*>* fixup_mirror_list() {
311 return _fixup_mirror_list;
312 }
313 static void set_fixup_mirror_list(GrowableArray<Klass*>* v) {
314 _fixup_mirror_list = v;
315 }
316 // Debugging
317 friend class JavaClasses;
318 friend class InstanceKlass; // verification code accesses offsets
319 friend class ClassFileParser; // access to number_of_fake_fields_sequenceNumber_offset
320 };
321
322 /**
323 * java.lang.Class$ClassData
324 */
325 class java_lang_Class_ClassData : AllStatic {
326 friend class JavaClasses;
327
328 private:
329 static int _elementData_offset;
330 static int _size_offset;
331 static int _sequenceNumber_offset;
332
333 static void compute_offsets();
334
335 public:
336 static bool is_instance(oop obj);
337 static oop memberNameTable(oop obj);
338 static objArrayOop elementData(oop obj);
339 static int size(oop obj);
340 static void incSequenceNumber(oop obj);
341
342 };
343
344 // Interface to java.lang.Thread objects
345
346 class java_lang_Thread : AllStatic {
347 private:
348 // Note that for this class the layout changed between JDK1.2 and JDK1.3,
349 // so we compute the offsets at startup rather than hard-wiring them.
350 static int _name_offset;
351 static int _group_offset;
352 static int _contextClassLoader_offset;
353 static int _inheritedAccessControlContext_offset;
354 static int _priority_offset;
355 static int _eetop_offset;
356 static int _daemon_offset;
357 static int _stillborn_offset;
358 static int _stackSize_offset;
359 static int _tid_offset;
360 static int _thread_status_offset;
361 static int _park_blocker_offset;
|