308 static int interpreter_frame_monitor_size();
309
310 void interpreter_frame_verify_monitor(BasicObjectLock* value) const;
311
312 // Return/result value from this interpreter frame
313 // If the method return type is T_OBJECT or T_ARRAY populates oop_result
314 // For other (non-T_VOID) the appropriate field in the jvalue is populated
315 // with the result value.
316 // Should only be called when at method exit when the method is not
317 // exiting due to an exception.
318 BasicType interpreter_frame_result(oop* oop_result, jvalue* value_result);
319
320 public:
321 // Method & constant pool cache
322 Method* interpreter_frame_method() const;
323 void interpreter_frame_set_method(Method* method);
324 Method** interpreter_frame_method_addr() const;
325 ConstantPoolCache** interpreter_frame_cache_addr() const;
326 oop* interpreter_frame_mirror_addr() const;
327
328 void interpreter_frame_set_mirror(oop mirror);
329
330 public:
331 // Entry frames
332 JavaCallWrapper* entry_frame_call_wrapper() const { return *entry_frame_call_wrapper_addr(); }
333 JavaCallWrapper* entry_frame_call_wrapper_if_safe(JavaThread* thread) const;
334 JavaCallWrapper** entry_frame_call_wrapper_addr() const;
335 intptr_t* entry_frame_argument_at(int offset) const;
336
337 // tells whether there is another chunk of Delta stack above
338 bool entry_frame_is_first() const;
339
340 // Compiled frames:
341
342 public:
343 // Given the index of a local, and the number of argument words
344 // in this stack frame, tell which word of the stack frame to find
345 // the local in. Arguments are stored above the ofp/rpc pair,
346 // while other locals are stored below it.
347 // Since monitors (BasicLock blocks) are also assigned indexes,
376
377 void describe_pd(FrameValues& values, int frame_no);
378
379 public:
380 void print_value() const { print_value_on(tty,NULL); }
381 void print_value_on(outputStream* st, JavaThread *thread) const;
382 void print_on(outputStream* st) const;
383 void interpreter_frame_print_on(outputStream* st) const;
384 void print_on_error(outputStream* st, char* buf, int buflen, bool verbose = false) const;
385 static void print_C_frame(outputStream* st, char* buf, int buflen, address pc);
386
387 // Add annotated descriptions of memory locations belonging to this frame to values
388 void describe(FrameValues& values, int frame_no);
389
390 // Conversion from an VMReg to physical stack location
391 oop* oopmapreg_to_location(VMReg reg, const RegisterMap* regmap) const;
392
393 // Oops-do's
394 void oops_compiled_arguments_do(Symbol* signature, bool has_receiver, bool has_appendix, const RegisterMap* reg_map, OopClosure* f);
395 void oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache = true);
396
397 private:
398 void oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f);
399
400 // Iteration of oops
401 void oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache);
402 void oops_entry_do(OopClosure* f, const RegisterMap* map);
403 void oops_code_blob_do(OopClosure* f, CodeBlobClosure* cf, const RegisterMap* map);
404 int adjust_offset(Method* method, int index); // helper for above fn
405 public:
406 // Memory management
407 void oops_do(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cf, map, true); }
408 void nmethods_do(CodeBlobClosure* cf);
409
410 // RedefineClasses support for finding live interpreted methods on the stack
411 void metadata_do(void f(Metadata*));
412
413 // Verification
414 void verify(const RegisterMap* map);
415 static bool verify_return_pc(address x);
|
308 static int interpreter_frame_monitor_size();
309
310 void interpreter_frame_verify_monitor(BasicObjectLock* value) const;
311
312 // Return/result value from this interpreter frame
313 // If the method return type is T_OBJECT or T_ARRAY populates oop_result
314 // For other (non-T_VOID) the appropriate field in the jvalue is populated
315 // with the result value.
316 // Should only be called when at method exit when the method is not
317 // exiting due to an exception.
318 BasicType interpreter_frame_result(oop* oop_result, jvalue* value_result);
319
320 public:
321 // Method & constant pool cache
322 Method* interpreter_frame_method() const;
323 void interpreter_frame_set_method(Method* method);
324 Method** interpreter_frame_method_addr() const;
325 ConstantPoolCache** interpreter_frame_cache_addr() const;
326 oop* interpreter_frame_mirror_addr() const;
327
328 intptr_t* interpreter_frame_vt_alloc_ptr() const;
329 intptr_t** interpreter_frame_vt_alloc_ptr_addr() const;
330 void interpreter_frame_set_vt_alloc_ptr(intptr_t* ptr);
331
332 void interpreter_frame_set_mirror(oop mirror);
333
334 public:
335 // Entry frames
336 JavaCallWrapper* entry_frame_call_wrapper() const { return *entry_frame_call_wrapper_addr(); }
337 JavaCallWrapper* entry_frame_call_wrapper_if_safe(JavaThread* thread) const;
338 JavaCallWrapper** entry_frame_call_wrapper_addr() const;
339 intptr_t* entry_frame_argument_at(int offset) const;
340
341 // tells whether there is another chunk of Delta stack above
342 bool entry_frame_is_first() const;
343
344 // Compiled frames:
345
346 public:
347 // Given the index of a local, and the number of argument words
348 // in this stack frame, tell which word of the stack frame to find
349 // the local in. Arguments are stored above the ofp/rpc pair,
350 // while other locals are stored below it.
351 // Since monitors (BasicLock blocks) are also assigned indexes,
380
381 void describe_pd(FrameValues& values, int frame_no);
382
383 public:
384 void print_value() const { print_value_on(tty,NULL); }
385 void print_value_on(outputStream* st, JavaThread *thread) const;
386 void print_on(outputStream* st) const;
387 void interpreter_frame_print_on(outputStream* st) const;
388 void print_on_error(outputStream* st, char* buf, int buflen, bool verbose = false) const;
389 static void print_C_frame(outputStream* st, char* buf, int buflen, address pc);
390
391 // Add annotated descriptions of memory locations belonging to this frame to values
392 void describe(FrameValues& values, int frame_no);
393
394 // Conversion from an VMReg to physical stack location
395 oop* oopmapreg_to_location(VMReg reg, const RegisterMap* regmap) const;
396
397 // Oops-do's
398 void oops_compiled_arguments_do(Symbol* signature, bool has_receiver, bool has_appendix, const RegisterMap* reg_map, OopClosure* f);
399 void oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache = true);
400 void buffered_values_interpreted_do(BufferedValueClosure* f);
401
402 private:
403 void oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f);
404
405 // Iteration of oops
406 void oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache);
407 void oops_entry_do(OopClosure* f, const RegisterMap* map);
408 void oops_code_blob_do(OopClosure* f, CodeBlobClosure* cf, const RegisterMap* map);
409 int adjust_offset(Method* method, int index); // helper for above fn
410 public:
411 // Memory management
412 void oops_do(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cf, map, true); }
413 void nmethods_do(CodeBlobClosure* cf);
414
415 // RedefineClasses support for finding live interpreted methods on the stack
416 void metadata_do(void f(Metadata*));
417
418 // Verification
419 void verify(const RegisterMap* map);
420 static bool verify_return_pc(address x);
|