frame.cpp revision 2062
1472N/A * or visit www.oracle.com if you need additional information or have any
1879N/A#include "precompiled.hpp"
1879N/A#include "gc_interface/collectedHeap.inline.hpp"
1879N/A#include "interpreter/interpreter.hpp"
1879N/A#include "interpreter/oopMapCache.hpp"
1879N/A#include "memory/resourceArea.hpp"
1879N/A#include "memory/universe.inline.hpp"
1879N/A#include "oops/markOop.hpp"
1879N/A#include "oops/methodDataOop.hpp"
1879N/A#include "oops/methodOop.hpp"
1879N/A#include "oops/oop.inline.hpp"
1879N/A#include "oops/oop.inline2.hpp"
1879N/A#include "runtime/frame.inline.hpp"
1879N/A#include "runtime/handles.inline.hpp"
1879N/A#include "runtime/javaCalls.hpp"
1879N/A#include "runtime/monitorChunk.hpp"
1879N/A#include "runtime/sharedRuntime.hpp"
1879N/A#include "runtime/signature.hpp"
1879N/A#include "runtime/stubCodeGenerator.hpp"
1879N/A#include "runtime/stubRoutines.hpp"
1929N/A#include "utilities/decoder.hpp"
1879N/A#ifdef TARGET_ARCH_x86
1879N/A# include "nativeInst_x86.hpp"
1879N/A#ifdef TARGET_ARCH_sparc
1879N/A# include "nativeInst_sparc.hpp"
1879N/A#ifdef TARGET_ARCH_zero
1879N/A# include "nativeInst_zero.hpp"
0N/A if (update_map()) {
0N/A for(int i = 0; i < location_valid_size; i++) {
0N/A int j = i*location_valid_type_size;
0N/A set_include_argument_oops(true);
0N/A if (_update_map) {
0N/A for(int i = 0; i < location_valid_size; i++) {
0N/A _location_valid[i] = 0;
0N/A if (is_deoptimized_frame()) {
0N/A if (is_interpreted_frame()) return true;
0N/A if (is_compiled_frame()) return true;
0N/A return s.is_first_frame();
0N/A !is_compiled_frame() ) return false;
0N/A if (TraceDependencies) {
0N/A if (!is_compiled_frame()) return false;
0N/A // It is possible especially with DeoptimizeALot/DeoptimizeRandom that
0N/A if (is_java_frame()) {
0N/A first_java_frame = *this;
0N/A return first_java_frame;
0N/A if (ProfileInterpreter) {
0N/A if (formerly_bci) {
0N/A if (!is_now_bci) {
0N/A if (is_now_bci) {
0N/A BasicObjectLock* next = (BasicObjectLock*) (((intptr_t*) current) + interpreter_frame_monitor_size());
0N/A BasicObjectLock* previous = (BasicObjectLock*) (((intptr_t*) current) - interpreter_frame_monitor_size());
0N/A return &((*interpreter_frame_locals_addr())[n]);
0N/A return &(interpreter_frame_expression_stack()[n]);
0N/A return (interpreter_frame_expression_stack() -
0N/A return (interpreter_frame_tos_address() -
0N/A if (is_compiled_frame()) {
0N/A st->print("%s frame (sp=" INTPTR_FORMAT " unextended sp=" INTPTR_FORMAT, print_name(), sp(), unextended_sp());
0N/A if (is_interpreted_frame()) {
0N/A int _max_locals;
0N/A int _max_stack;
0N/A OopClosure* f) {
0N/A // this condition. Therefore, we call f only if addr is 'inside' the stack (i.e., addr >= esp for Intel).
0N/A void oop_offset_do() {
2062N/A InterpretedArgumentOopFinder(Symbol* signature, bool has_receiver, frame* fr, OopClosure* f) : SignatureInfo(signature), _has_receiver(has_receiver) {
1138N/A if (_has_receiver) {
0N/A bool _is_static;
2062N/A EntryFrameOopFinder(frame* frame, Symbol* signature, bool is_static) : SignatureInfo(signature) {
0N/Avoid frame::oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache) {
0N/A assert((m->is_native() && bci == 0) || (!m->is_native() && bci >= 0 && bci < m->code_size()), "invalid bci value");
1138N/A bool has_receiver = false;
605N/A // occurred during method resolution/execution. In all
1426N/A if (query_oop_map_cache) {
2062N/Avoid frame::oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f) {
989N/Avoid frame::oops_code_blob_do(OopClosure* f, CodeBlobClosure* cf, const RegisterMap* reg_map) {
0N/A virtual void handle_oop_offset() {
2062N/A CompiledArgumentOopFinder(Symbol* signature, bool has_receiver, OopClosure* f, frame fr, const RegisterMap* reg_map)
1138N/A if (_has_receiver) {
2062N/Avoid frame::oops_compiled_arguments_do(Symbol* signature, bool has_receiver, const RegisterMap* reg_map, OopClosure* f) {
989N/Avoid frame::oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache) {
1119N/A if (is_interpreted_frame()) {
1119N/A } else if (is_entry_frame()) {
1612N/A } else if (is_fake_stub_frame()) {
0N/A if (is_interpreted_frame()) {
0N/A if (is_interpreted_frame()) {
0N/A pd_gc_epilog();
0N/A# ifdef ENABLE_ZAP_DEAD_LOCALS
0N/A warning("value @ " INTPTR_FORMAT " looks oopish (" INTPTR_FORMAT ") (thread = " INTPTR_FORMAT ")", p, (address)*p, Thread::current());
0N/A warning("value @ " INTPTR_FORMAT " should be an oop (" INTPTR_FORMAT ") (thread = " INTPTR_FORMAT ")", p, (address)*p, Thread::current());
0N/A if (TraceZapDeadLocals) tty->print_cr("zapping @ " INTPTR_FORMAT " containing " INTPTR_FORMAT, p, (address)*p);
0N/A if (TraceZapDeadLocals) {
0N/A tty->print_cr("--------------------------------------------------------------------------------");
0N/A if (TraceZapDeadLocals) {
1426N/A &_check_oop );
0N/A if (is_interpreted_frame()) {
0N/AStackFrameStream::StackFrameStream(JavaThread *thread, bool update) : _reg_map(thread, update) {