예제 #1
0
void PcDesc::print(nmethod* code) {
#ifndef PRODUCT
  ResourceMark rm;
  tty->print_cr("PcDesc(pc=0x%lx offset=%x bits=%x):", real_pc(code), pc_offset(), _flags);

  if (scope_decode_offset() == DebugInformationRecorder::serialized_null) {
    return;
  }

  for (ScopeDesc* sd = code->scope_desc_at(real_pc(code));
       sd != NULL;
       sd = sd->sender()) {
    tty->print("  ");
    sd->method()->print_short_name(tty);
    tty->print("  @%d", sd->bci());
    if (sd->should_reexecute())
      tty->print("  reexecute=true");
    tty->cr();
  }
#endif
}
예제 #2
0
inline address ThreadCodeBuffer::compute_adjusted_pc(address pc) {
  assert(contains(pc), "pc must point into codebuffer") 
  pc = real_pc() + (pc - code_begin());
  assert(method()->contains(pc), "result must be in nmethod");      
  return pc;
}
예제 #3
0
inline address ThreadCodeBuffer::capture_pc(address pc) {
  assert(captures(pc), "pc must point into original code for codebuffer") 
  pc = code_begin() + (pc - real_pc());
  assert(contains(pc), "result must be in codebuffer");
  return pc;
}
예제 #4
0
 bool      captures(address pc) const  { return (real_pc() <= pc && pc < real_pc() + size()); }