< prev index next >

src/hotspot/cpu/zero/frame_zero.cpp

Print this page
rev 47445 : 8171853: Remove Shark compiler


  54   return zeroframe()->is_interpreter_frame();
  55 }
  56 
  57 bool frame::is_fake_stub_frame() const {
  58   return zeroframe()->is_fake_stub_frame();
  59 }
  60 
  61 frame frame::sender_for_entry_frame(RegisterMap *map) const {
  62   assert(zeroframe()->is_entry_frame(), "wrong type of frame");
  63   assert(map != NULL, "map must be set");
  64   assert(!entry_frame_is_first(), "next Java fp must be non zero");
  65   assert(entry_frame_call_wrapper()->anchor()->last_Java_sp() == sender_sp(),
  66          "sender should be next Java frame");
  67   map->clear();
  68   assert(map->include_argument_oops(), "should be set by clear");
  69   return frame(zeroframe()->next(), sender_sp());
  70 }
  71 
  72 frame frame::sender_for_nonentry_frame(RegisterMap *map) const {
  73   assert(zeroframe()->is_interpreter_frame() ||
  74          zeroframe()->is_shark_frame() ||
  75          zeroframe()->is_fake_stub_frame(), "wrong type of frame");
  76   return frame(zeroframe()->next(), sender_sp());
  77 }
  78 
  79 frame frame::sender(RegisterMap* map) const {
  80   // Default is not to follow arguments; the various
  81   // sender_for_xxx methods update this accordingly.
  82   map->set_include_argument_oops(false);
  83 
  84   if (is_entry_frame())
  85     return sender_for_entry_frame(map);
  86   else
  87     return sender_for_nonentry_frame(map);
  88 }
  89 
  90 #ifdef CC_INTERP
  91 BasicObjectLock* frame::interpreter_frame_monitor_begin() const {
  92   return get_interpreterState()->monitor_base();
  93 }
  94 
  95 BasicObjectLock* frame::interpreter_frame_monitor_end() const {
  96   return (BasicObjectLock*) get_interpreterState()->stack_base();
  97 }
  98 #endif // CC_INTERP
  99 
 100 void frame::patch_pc(Thread* thread, address pc) {
 101 
 102   if (pc != NULL) {
 103     _cb = CodeCache::find_blob(pc);
 104     SharkFrame* sharkframe = zeroframe()->as_shark_frame();
 105     sharkframe->set_pc(pc);
 106     _pc = pc;
 107     _deopt_state = is_deoptimized;
 108 
 109   } else {
 110     // We borrow this call to set the thread pointer in the interpreter
 111     // state; the hook to set up deoptimized frames isn't supplied it.
 112     assert(pc == NULL, "should be");
 113     get_interpreterState()->set_thread((JavaThread *) thread);
 114   }
 115 }
 116 
 117 bool frame::safe_for_sender(JavaThread *thread) {
 118   ShouldNotCallThis();
 119   return false;
 120 }
 121 
 122 bool frame::is_interpreted_frame_valid(JavaThread *thread) const {
 123   ShouldNotCallThis();
 124   return false;
 125 }


 216     st->print_cr(" " PTR_FORMAT ": %-21s = %s", p2i(addr), fieldbuf, valuebuf);
 217   }
 218 }
 219 
 220 void ZeroFrame::identify_word(int   frame_index,
 221                               int   offset,
 222                               char* fieldbuf,
 223                               char* valuebuf,
 224                               int   buflen) const {
 225   switch (offset) {
 226   case next_frame_off:
 227     strncpy(fieldbuf, "next_frame", buflen);
 228     break;
 229 
 230   case frame_type_off:
 231     strncpy(fieldbuf, "frame_type", buflen);
 232     if (is_entry_frame())
 233       strncpy(valuebuf, "ENTRY_FRAME", buflen);
 234     else if (is_interpreter_frame())
 235       strncpy(valuebuf, "INTERPRETER_FRAME", buflen);
 236     else if (is_shark_frame())
 237       strncpy(valuebuf, "SHARK_FRAME", buflen);
 238     else if (is_fake_stub_frame())
 239       strncpy(valuebuf, "FAKE_STUB_FRAME", buflen);
 240     break;
 241 
 242   default:
 243     if (is_entry_frame()) {
 244       as_entry_frame()->identify_word(
 245         frame_index, offset, fieldbuf, valuebuf, buflen);
 246     }
 247     else if (is_interpreter_frame()) {
 248       as_interpreter_frame()->identify_word(
 249         frame_index, offset, fieldbuf, valuebuf, buflen);
 250     }
 251     else if (is_shark_frame()) {
 252       as_shark_frame()->identify_word(
 253         frame_index, offset, fieldbuf, valuebuf, buflen);
 254     }
 255     else if (is_fake_stub_frame()) {
 256       as_fake_stub_frame()->identify_word(
 257         frame_index, offset, fieldbuf, valuebuf, buflen);
 258     }
 259   }
 260 }
 261 
 262 void EntryFrame::identify_word(int   frame_index,
 263                                int   offset,
 264                                char* fieldbuf,
 265                                char* valuebuf,
 266                                int   buflen) const {
 267   switch (offset) {
 268   case call_wrapper_off:
 269     strncpy(fieldbuf, "call_wrapper", buflen);
 270     break;
 271 
 272   default:
 273     snprintf(fieldbuf, buflen, "local[%d]", offset - 3);
 274   }


 331           snprintf(fieldbuf, buflen, "parameter[%d]%s", param, desc);
 332           return;
 333         }
 334 
 335         for (int i = 0; i < handler->argument_count(); i++) {
 336           if (params[i] == (intptr_t) addr) {
 337             snprintf(fieldbuf, buflen, "unboxed parameter[%d]", i);
 338             return;
 339           }
 340         }
 341       }
 342     }
 343     return;
 344   }
 345 
 346   // Monitors and stack
 347   identify_vp_word(frame_index, addr,
 348                    (intptr_t *) istate->monitor_base(),
 349                    istate->stack_base(),
 350                    fieldbuf, buflen);
 351 }
 352 
 353 void SharkFrame::identify_word(int   frame_index,
 354                                int   offset,
 355                                char* fieldbuf,
 356                                char* valuebuf,
 357                                int   buflen) const {
 358   // Fixed part
 359   switch (offset) {
 360   case pc_off:
 361     strncpy(fieldbuf, "pc", buflen);
 362     if (method()->is_method()) {
 363       CompiledMethod *code = method()->code();
 364       if (code && code->pc_desc_at(pc())) {
 365         SimpleScopeDesc ssd(code, pc());
 366         snprintf(valuebuf, buflen, PTR_FORMAT " (bci %d)",
 367                  (intptr_t) pc(), ssd.bci());
 368       }
 369     }
 370     return;
 371 
 372   case unextended_sp_off:
 373     strncpy(fieldbuf, "unextended_sp", buflen);
 374     return;
 375 
 376   case method_off:
 377     strncpy(fieldbuf, "method", buflen);
 378     if (method()->is_method()) {
 379       method()->name_and_sig_as_C_string(valuebuf, buflen);
 380     }
 381     return;
 382 
 383   case oop_tmp_off:
 384     strncpy(fieldbuf, "oop_tmp", buflen);
 385     return;
 386   }
 387 
 388   // Variable part
 389   if (method()->is_method()) {
 390     identify_vp_word(frame_index, addr_of_word(offset),
 391                      addr_of_word(header_words + 1),
 392                      unextended_sp() + method()->max_stack(),
 393                      fieldbuf, buflen);
 394   }
 395 }
 396 
 397 void ZeroFrame::identify_vp_word(int       frame_index,
 398                                  intptr_t* addr,
 399                                  intptr_t* monitor_base,
 400                                  intptr_t* stack_base,
 401                                  char*     fieldbuf,
 402                                  int       buflen) const {
 403   // Monitors
 404   if (addr >= stack_base && addr < monitor_base) {
 405     int monitor_size = frame::interpreter_frame_monitor_size();
 406     int last_index = (monitor_base - stack_base) / monitor_size - 1;
 407     int index = last_index - (addr - stack_base) / monitor_size;
 408     intptr_t monitor = (intptr_t) (
 409       (BasicObjectLock *) monitor_base - 1 - index);
 410     intptr_t offset = (intptr_t) addr - monitor;
 411 
 412     if (offset == BasicObjectLock::obj_offset_in_bytes())
 413       snprintf(fieldbuf, buflen, "monitor[%d]->_obj", index);
 414     else if (offset ==  BasicObjectLock::lock_offset_in_bytes())




  54   return zeroframe()->is_interpreter_frame();
  55 }
  56 
  57 bool frame::is_fake_stub_frame() const {
  58   return zeroframe()->is_fake_stub_frame();
  59 }
  60 
  61 frame frame::sender_for_entry_frame(RegisterMap *map) const {
  62   assert(zeroframe()->is_entry_frame(), "wrong type of frame");
  63   assert(map != NULL, "map must be set");
  64   assert(!entry_frame_is_first(), "next Java fp must be non zero");
  65   assert(entry_frame_call_wrapper()->anchor()->last_Java_sp() == sender_sp(),
  66          "sender should be next Java frame");
  67   map->clear();
  68   assert(map->include_argument_oops(), "should be set by clear");
  69   return frame(zeroframe()->next(), sender_sp());
  70 }
  71 
  72 frame frame::sender_for_nonentry_frame(RegisterMap *map) const {
  73   assert(zeroframe()->is_interpreter_frame() ||

  74          zeroframe()->is_fake_stub_frame(), "wrong type of frame");
  75   return frame(zeroframe()->next(), sender_sp());
  76 }
  77 
  78 frame frame::sender(RegisterMap* map) const {
  79   // Default is not to follow arguments; the various
  80   // sender_for_xxx methods update this accordingly.
  81   map->set_include_argument_oops(false);
  82 
  83   if (is_entry_frame())
  84     return sender_for_entry_frame(map);
  85   else
  86     return sender_for_nonentry_frame(map);
  87 }
  88 
  89 #ifdef CC_INTERP
  90 BasicObjectLock* frame::interpreter_frame_monitor_begin() const {
  91   return get_interpreterState()->monitor_base();
  92 }
  93 
  94 BasicObjectLock* frame::interpreter_frame_monitor_end() const {
  95   return (BasicObjectLock*) get_interpreterState()->stack_base();
  96 }
  97 #endif // CC_INTERP
  98 
  99 void frame::patch_pc(Thread* thread, address pc) {
 100 
 101   if (pc != NULL) {
 102     _cb = CodeCache::find_blob(pc);


 103     _pc = pc;
 104     _deopt_state = is_deoptimized;
 105 
 106   } else {
 107     // We borrow this call to set the thread pointer in the interpreter
 108     // state; the hook to set up deoptimized frames isn't supplied it.
 109     assert(pc == NULL, "should be");
 110     get_interpreterState()->set_thread((JavaThread *) thread);
 111   }
 112 }
 113 
 114 bool frame::safe_for_sender(JavaThread *thread) {
 115   ShouldNotCallThis();
 116   return false;
 117 }
 118 
 119 bool frame::is_interpreted_frame_valid(JavaThread *thread) const {
 120   ShouldNotCallThis();
 121   return false;
 122 }


 213     st->print_cr(" " PTR_FORMAT ": %-21s = %s", p2i(addr), fieldbuf, valuebuf);
 214   }
 215 }
 216 
 217 void ZeroFrame::identify_word(int   frame_index,
 218                               int   offset,
 219                               char* fieldbuf,
 220                               char* valuebuf,
 221                               int   buflen) const {
 222   switch (offset) {
 223   case next_frame_off:
 224     strncpy(fieldbuf, "next_frame", buflen);
 225     break;
 226 
 227   case frame_type_off:
 228     strncpy(fieldbuf, "frame_type", buflen);
 229     if (is_entry_frame())
 230       strncpy(valuebuf, "ENTRY_FRAME", buflen);
 231     else if (is_interpreter_frame())
 232       strncpy(valuebuf, "INTERPRETER_FRAME", buflen);


 233     else if (is_fake_stub_frame())
 234       strncpy(valuebuf, "FAKE_STUB_FRAME", buflen);
 235     break;
 236 
 237   default:
 238     if (is_entry_frame()) {
 239       as_entry_frame()->identify_word(
 240         frame_index, offset, fieldbuf, valuebuf, buflen);
 241     }
 242     else if (is_interpreter_frame()) {
 243       as_interpreter_frame()->identify_word(
 244         frame_index, offset, fieldbuf, valuebuf, buflen);
 245     }




 246     else if (is_fake_stub_frame()) {
 247       as_fake_stub_frame()->identify_word(
 248         frame_index, offset, fieldbuf, valuebuf, buflen);
 249     }
 250   }
 251 }
 252 
 253 void EntryFrame::identify_word(int   frame_index,
 254                                int   offset,
 255                                char* fieldbuf,
 256                                char* valuebuf,
 257                                int   buflen) const {
 258   switch (offset) {
 259   case call_wrapper_off:
 260     strncpy(fieldbuf, "call_wrapper", buflen);
 261     break;
 262 
 263   default:
 264     snprintf(fieldbuf, buflen, "local[%d]", offset - 3);
 265   }


 322           snprintf(fieldbuf, buflen, "parameter[%d]%s", param, desc);
 323           return;
 324         }
 325 
 326         for (int i = 0; i < handler->argument_count(); i++) {
 327           if (params[i] == (intptr_t) addr) {
 328             snprintf(fieldbuf, buflen, "unboxed parameter[%d]", i);
 329             return;
 330           }
 331         }
 332       }
 333     }
 334     return;
 335   }
 336 
 337   // Monitors and stack
 338   identify_vp_word(frame_index, addr,
 339                    (intptr_t *) istate->monitor_base(),
 340                    istate->stack_base(),
 341                    fieldbuf, buflen);












































 342 }
 343 
 344 void ZeroFrame::identify_vp_word(int       frame_index,
 345                                  intptr_t* addr,
 346                                  intptr_t* monitor_base,
 347                                  intptr_t* stack_base,
 348                                  char*     fieldbuf,
 349                                  int       buflen) const {
 350   // Monitors
 351   if (addr >= stack_base && addr < monitor_base) {
 352     int monitor_size = frame::interpreter_frame_monitor_size();
 353     int last_index = (monitor_base - stack_base) / monitor_size - 1;
 354     int index = last_index - (addr - stack_base) / monitor_size;
 355     intptr_t monitor = (intptr_t) (
 356       (BasicObjectLock *) monitor_base - 1 - index);
 357     intptr_t offset = (intptr_t) addr - monitor;
 358 
 359     if (offset == BasicObjectLock::obj_offset_in_bytes())
 360       snprintf(fieldbuf, buflen, "monitor[%d]->_obj", index);
 361     else if (offset ==  BasicObjectLock::lock_offset_in_bytes())


< prev index next >