187
188 private:
189 // The fake offsets are added by the class loader when java.lang.Class is loaded
190
191 static int _klass_offset;
192 static int _array_klass_offset;
193
194 static int _oop_size_offset;
195 static int _static_oop_field_count_offset;
196
197 static int _protection_domain_offset;
198 static int _init_lock_offset;
199 static int _signers_offset;
200 static int _class_loader_offset;
201 static int _module_offset;
202 static int _component_mirror_offset;
203
204 static bool offsets_computed;
205 static int classRedefinedCount_offset;
206
207 static GrowableArray<Klass*>* _fixup_mirror_list;
208 static GrowableArray<Klass*>* _fixup_module_field_list;
209
210 static void set_init_lock(oop java_class, oop init_lock);
211 static void set_protection_domain(oop java_class, oop protection_domain);
212 static void set_class_loader(oop java_class, oop class_loader);
213 static void set_component_mirror(oop java_class, oop comp_mirror);
214 static void initialize_mirror_fields(Klass* k, Handle mirror, Handle protection_domain, TRAPS);
215 static void set_mirror_module_field(Klass* K, Handle mirror, Handle module, TRAPS);
216 public:
217 static void allocate_fixup_lists();
218 static void compute_offsets();
219
220 // Instance creation
221 static void create_mirror(Klass* k, Handle class_loader, Handle module,
222 Handle protection_domain, TRAPS);
223 static void fixup_mirror(Klass* k, TRAPS);
224 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
225
226 // Archiving
227 static void serialize(SerializeClosure* f) NOT_CDS_RETURN;
228 static void archive_basic_type_mirrors(TRAPS) NOT_CDS_JAVA_HEAP_RETURN;
229 static oop archive_mirror(Klass* k, TRAPS) NOT_CDS_JAVA_HEAP_RETURN_(NULL);
251 static Klass* array_klass_acquire(oop java_class);
252 static void release_set_array_klass(oop java_class, Klass* klass);
253 // compiler support for class operations
254 static int klass_offset_in_bytes() { return _klass_offset; }
255 static int array_klass_offset_in_bytes() { return _array_klass_offset; }
256 // Support for classRedefinedCount field
257 static int classRedefinedCount(oop the_class_mirror);
258 static void set_classRedefinedCount(oop the_class_mirror, int value);
259
260 // Support for embedded per-class oops
261 static oop protection_domain(oop java_class);
262 static oop init_lock(oop java_class);
263 static oop component_mirror(oop java_class);
264 static objArrayOop signers(oop java_class);
265 static void set_signers(oop java_class, objArrayOop signers);
266
267 static oop class_loader(oop java_class);
268 static void set_module(oop java_class, oop module);
269 static oop module(oop java_class);
270
271 static int oop_size(oop java_class);
272 static void set_oop_size(oop java_class, int size);
273 static int static_oop_field_count(oop java_class);
274 static void set_static_oop_field_count(oop java_class, int size);
275
276 static GrowableArray<Klass*>* fixup_mirror_list() {
277 return _fixup_mirror_list;
278 }
279 static void set_fixup_mirror_list(GrowableArray<Klass*>* v) {
280 _fixup_mirror_list = v;
281 }
282
283 static GrowableArray<Klass*>* fixup_module_field_list() {
284 return _fixup_module_field_list;
285 }
286 static void set_fixup_module_field_list(GrowableArray<Klass*>* v) {
287 _fixup_module_field_list = v;
288 }
289
290 // Debugging
455 // Offsets
456 enum {
457 hc_backtrace_offset = 0,
458 hc_detailMessage_offset = 1,
459 hc_cause_offset = 2, // New since 1.4
460 hc_stackTrace_offset = 3 // New since 1.4
461 };
462 // Trace constants
463 enum {
464 trace_methods_offset = 0,
465 trace_bcis_offset = 1,
466 trace_mirrors_offset = 2,
467 trace_names_offset = 3,
468 trace_next_offset = 4,
469 trace_size = 5,
470 trace_chunk_size = 32
471 };
472
473 static int backtrace_offset;
474 static int detailMessage_offset;
475 static int stackTrace_offset;
476 static int depth_offset;
477 static int static_unassigned_stacktrace_offset;
478
479 // StackTrace (programmatic access, new since 1.4)
480 static void clear_stacktrace(oop throwable);
481 // Stacktrace (post JDK 1.7.0 to allow immutability protocol to be followed)
482 static void set_stacktrace(oop throwable, oop st_element_array);
483 static oop unassigned_stacktrace();
484
485 public:
486 // Backtrace
487 static oop backtrace(oop throwable);
488 static void set_backtrace(oop throwable, oop value);
489 static int depth(oop throwable);
490 static void set_depth(oop throwable, int value);
491 // Needed by JVMTI to filter out this internal field.
492 static int get_backtrace_offset() { return backtrace_offset;}
493 static int get_detailMessage_offset() { return detailMessage_offset;}
494 // Message
495 static oop message(oop throwable);
496 static void set_message(oop throwable, oop value);
497 static Symbol* detail_message(oop throwable);
498 static void print_stack_element(outputStream *st, const methodHandle& method, int bci);
499 static void print_stack_usage(Handle stream);
500
501 static void compute_offsets();
502 static void serialize(SerializeClosure* f) NOT_CDS_RETURN;
503
504 // Allocate space for backtrace (created but stack trace not filled in)
505 static void allocate_backtrace(Handle throwable, TRAPS);
506 // Fill in current stack trace for throwable with preallocated backtrace (no GC)
507 static void fill_in_stack_trace_of_preallocated_backtrace(Handle throwable);
508 // Fill in current stack trace, can cause GC
509 static void fill_in_stack_trace(Handle throwable, const methodHandle& method, TRAPS);
510 static void fill_in_stack_trace(Handle throwable, const methodHandle& method = methodHandle());
511 // Programmatic access to stack trace
512 static void get_stack_trace_elements(Handle throwable, objArrayHandle stack_trace, TRAPS);
513 // Printing
514 static void print(oop throwable, outputStream* st);
515 static void print_stack_trace(Handle throwable, outputStream* st);
516 static void java_printStackTrace(Handle throwable, TRAPS);
517 // Debugging
|
187
188 private:
189 // The fake offsets are added by the class loader when java.lang.Class is loaded
190
191 static int _klass_offset;
192 static int _array_klass_offset;
193
194 static int _oop_size_offset;
195 static int _static_oop_field_count_offset;
196
197 static int _protection_domain_offset;
198 static int _init_lock_offset;
199 static int _signers_offset;
200 static int _class_loader_offset;
201 static int _module_offset;
202 static int _component_mirror_offset;
203
204 static bool offsets_computed;
205 static int classRedefinedCount_offset;
206
207 static int _exceptionThrownDuringClinit_offset;
208
209 static GrowableArray<Klass*>* _fixup_mirror_list;
210 static GrowableArray<Klass*>* _fixup_module_field_list;
211
212
213 static void set_init_lock(oop java_class, oop init_lock);
214 static void set_protection_domain(oop java_class, oop protection_domain);
215 static void set_class_loader(oop java_class, oop class_loader);
216 static void set_component_mirror(oop java_class, oop comp_mirror);
217 static void initialize_mirror_fields(Klass* k, Handle mirror, Handle protection_domain, TRAPS);
218 static void set_mirror_module_field(Klass* K, Handle mirror, Handle module, TRAPS);
219 public:
220 static void allocate_fixup_lists();
221 static void compute_offsets();
222
223 // Instance creation
224 static void create_mirror(Klass* k, Handle class_loader, Handle module,
225 Handle protection_domain, TRAPS);
226 static void fixup_mirror(Klass* k, TRAPS);
227 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
228
229 // Archiving
230 static void serialize(SerializeClosure* f) NOT_CDS_RETURN;
231 static void archive_basic_type_mirrors(TRAPS) NOT_CDS_JAVA_HEAP_RETURN;
232 static oop archive_mirror(Klass* k, TRAPS) NOT_CDS_JAVA_HEAP_RETURN_(NULL);
254 static Klass* array_klass_acquire(oop java_class);
255 static void release_set_array_klass(oop java_class, Klass* klass);
256 // compiler support for class operations
257 static int klass_offset_in_bytes() { return _klass_offset; }
258 static int array_klass_offset_in_bytes() { return _array_klass_offset; }
259 // Support for classRedefinedCount field
260 static int classRedefinedCount(oop the_class_mirror);
261 static void set_classRedefinedCount(oop the_class_mirror, int value);
262
263 // Support for embedded per-class oops
264 static oop protection_domain(oop java_class);
265 static oop init_lock(oop java_class);
266 static oop component_mirror(oop java_class);
267 static objArrayOop signers(oop java_class);
268 static void set_signers(oop java_class, objArrayOop signers);
269
270 static oop class_loader(oop java_class);
271 static void set_module(oop java_class, oop module);
272 static oop module(oop java_class);
273
274 // Accessor for field containing exception thrown during class initialization.
275 static oop exceptionThrownDuringClinit(oop java_class);
276
277 static int oop_size(oop java_class);
278 static void set_oop_size(oop java_class, int size);
279 static int static_oop_field_count(oop java_class);
280 static void set_static_oop_field_count(oop java_class, int size);
281
282 static GrowableArray<Klass*>* fixup_mirror_list() {
283 return _fixup_mirror_list;
284 }
285 static void set_fixup_mirror_list(GrowableArray<Klass*>* v) {
286 _fixup_mirror_list = v;
287 }
288
289 static GrowableArray<Klass*>* fixup_module_field_list() {
290 return _fixup_module_field_list;
291 }
292 static void set_fixup_module_field_list(GrowableArray<Klass*>* v) {
293 _fixup_module_field_list = v;
294 }
295
296 // Debugging
461 // Offsets
462 enum {
463 hc_backtrace_offset = 0,
464 hc_detailMessage_offset = 1,
465 hc_cause_offset = 2, // New since 1.4
466 hc_stackTrace_offset = 3 // New since 1.4
467 };
468 // Trace constants
469 enum {
470 trace_methods_offset = 0,
471 trace_bcis_offset = 1,
472 trace_mirrors_offset = 2,
473 trace_names_offset = 3,
474 trace_next_offset = 4,
475 trace_size = 5,
476 trace_chunk_size = 32
477 };
478
479 static int backtrace_offset;
480 static int detailMessage_offset;
481 static int cause_offset;
482 static int stackTrace_offset;
483 static int depth_offset;
484 static int static_unassigned_stacktrace_offset;
485
486 // StackTrace (programmatic access, new since 1.4)
487 static void clear_stacktrace(oop throwable);
488 // Stacktrace (post JDK 1.7.0 to allow immutability protocol to be followed)
489 static void set_stacktrace(oop throwable, oop st_element_array);
490 static oop unassigned_stacktrace();
491
492 public:
493 // Backtrace
494 static oop backtrace(oop throwable);
495 static void set_backtrace(oop throwable, oop value);
496 static int depth(oop throwable);
497 static void set_depth(oop throwable, int value);
498 // Needed by JVMTI to filter out this internal field.
499 static int get_backtrace_offset() { return backtrace_offset;}
500 static int get_detailMessage_offset() { return detailMessage_offset;}
501 // Message
502 static oop message(oop throwable);
503 static void set_message(oop throwable, oop value);
504 static Symbol* detail_message(oop throwable);
505 static void set_cause(oop throwable, oop cause);
506 static void print_stack_element(outputStream *st, const methodHandle& method, int bci);
507 static void print_stack_usage(Handle stream);
508
509 static void compute_offsets();
510 static void serialize(SerializeClosure* f) NOT_CDS_RETURN;
511
512 // Allocate space for backtrace (created but stack trace not filled in)
513 static void allocate_backtrace(Handle throwable, TRAPS);
514 // Fill in current stack trace for throwable with preallocated backtrace (no GC)
515 static void fill_in_stack_trace_of_preallocated_backtrace(Handle throwable);
516 // Fill in current stack trace, can cause GC
517 static void fill_in_stack_trace(Handle throwable, const methodHandle& method, TRAPS);
518 static void fill_in_stack_trace(Handle throwable, const methodHandle& method = methodHandle());
519 // Programmatic access to stack trace
520 static void get_stack_trace_elements(Handle throwable, objArrayHandle stack_trace, TRAPS);
521 // Printing
522 static void print(oop throwable, outputStream* st);
523 static void print_stack_trace(Handle throwable, outputStream* st);
524 static void java_printStackTrace(Handle throwable, TRAPS);
525 // Debugging
|