src/cpu/aarch64/vm/frame_aarch64.inline.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8172844 Sdiff src/cpu/aarch64/vm

src/cpu/aarch64/vm/frame_aarch64.inline.hpp

Print this page




  65 }
  66 
  67 inline frame::frame(intptr_t* sp, intptr_t* fp, address pc) {
  68   init(sp, fp, pc);
  69 }
  70 
  71 inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc) {
  72   intptr_t a = intptr_t(sp);
  73   intptr_t b = intptr_t(fp);
  74   _sp = sp;
  75   _unextended_sp = unextended_sp;
  76   _fp = fp;
  77   _pc = pc;
  78   assert(pc != NULL, "no pc?");
  79   _cb = CodeCache::find_blob(pc);
  80   adjust_unextended_sp();
  81 
  82   address original_pc = CompiledMethod::get_deopt_original_pc(this);
  83   if (original_pc != NULL) {
  84     _pc = original_pc;
  85     assert(((CompiledMethod*)_cb)->insts_contains(_pc), "original PC must be in CompiledMethod");

  86     _deopt_state = is_deoptimized;
  87   } else {
  88     _deopt_state = not_deoptimized;
  89   }
  90 }
  91 
  92 inline frame::frame(intptr_t* sp, intptr_t* fp) {
  93   intptr_t a = intptr_t(sp);
  94   intptr_t b = intptr_t(fp);
  95   _sp = sp;
  96   _unextended_sp = sp;
  97   _fp = fp;
  98   _pc = (address)(sp[-1]);
  99 
 100   // Here's a sticky one. This constructor can be called via AsyncGetCallTrace
 101   // when last_Java_sp is non-null but the pc fetched is junk. If we are truly
 102   // unlucky the junk value could be to a zombied method and we'll die on the
 103   // find_blob call. This is also why we can have no asserts on the validity
 104   // of the pc we find here. AsyncGetCallTrace -> pd_get_top_frame_for_signal_handler
 105   // -> pd_last_frame should use a specialized version of pd_last_frame which could




  65 }
  66 
  67 inline frame::frame(intptr_t* sp, intptr_t* fp, address pc) {
  68   init(sp, fp, pc);
  69 }
  70 
  71 inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc) {
  72   intptr_t a = intptr_t(sp);
  73   intptr_t b = intptr_t(fp);
  74   _sp = sp;
  75   _unextended_sp = unextended_sp;
  76   _fp = fp;
  77   _pc = pc;
  78   assert(pc != NULL, "no pc?");
  79   _cb = CodeCache::find_blob(pc);
  80   adjust_unextended_sp();
  81 
  82   address original_pc = CompiledMethod::get_deopt_original_pc(this);
  83   if (original_pc != NULL) {
  84     _pc = original_pc;
  85     assert(_cb->as_compiled_method()->insts_contains_inclusive(_pc),
  86            "original PC must be in the main code section of the the compiled method (or must be immediately following it)");
  87     _deopt_state = is_deoptimized;
  88   } else {
  89     _deopt_state = not_deoptimized;
  90   }
  91 }
  92 
  93 inline frame::frame(intptr_t* sp, intptr_t* fp) {
  94   intptr_t a = intptr_t(sp);
  95   intptr_t b = intptr_t(fp);
  96   _sp = sp;
  97   _unextended_sp = sp;
  98   _fp = fp;
  99   _pc = (address)(sp[-1]);
 100 
 101   // Here's a sticky one. This constructor can be called via AsyncGetCallTrace
 102   // when last_Java_sp is non-null but the pc fetched is junk. If we are truly
 103   // unlucky the junk value could be to a zombied method and we'll die on the
 104   // find_blob call. This is also why we can have no asserts on the validity
 105   // of the pc we find here. AsyncGetCallTrace -> pd_get_top_frame_for_signal_handler
 106   // -> pd_last_frame should use a specialized version of pd_last_frame which could


src/cpu/aarch64/vm/frame_aarch64.inline.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File