300 |
300 |
301 void os::print_register_info(outputStream *st, void *context) { |
301 void os::print_register_info(outputStream *st, void *context) { |
302 if (context == NULL) return; |
302 if (context == NULL) return; |
303 |
303 |
304 ucontext_t *uc = (ucontext_t*)context; |
304 ucontext_t *uc = (ucontext_t*)context; |
|
305 sigcontext* sc = (sigcontext*)context; |
305 intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc); |
306 intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc); |
306 |
307 |
307 st->print_cr("Register to memory mapping:"); |
308 st->print_cr("Register to memory mapping:"); |
308 st->cr(); |
309 st->cr(); |
309 |
310 |
310 // this is only for the "general purpose" registers |
311 // this is only for the "general purpose" registers |
311 st->print("G1="); print_location(st, SIG_REGS(sc).u_regs[CON__G1]); |
312 st->print("G1="); print_location(st, SIG_REGS(sc).u_regs[CON_G1]); |
312 st->print("G2="); print_location(st, SIG_REGS(sc).u_regs[CON__G2]); |
313 st->print("G2="); print_location(st, SIG_REGS(sc).u_regs[CON_G2]); |
313 st->print("G3="); print_location(st, SIG_REGS(sc).u_regs[CON__G3]); |
314 st->print("G3="); print_location(st, SIG_REGS(sc).u_regs[CON_G3]); |
314 st->print("G4="); print_location(st, SIG_REGS(sc).u_regs[CON__G4]); |
315 st->print("G4="); print_location(st, SIG_REGS(sc).u_regs[CON_G4]); |
315 st->print("G5="); print_location(st, SIG_REGS(sc).u_regs[CON__G5]); |
316 st->print("G5="); print_location(st, SIG_REGS(sc).u_regs[CON_G5]); |
316 st->print("G6="); print_location(st, SIG_REGS(sc).u_regs[CON__G6]); |
317 st->print("G6="); print_location(st, SIG_REGS(sc).u_regs[CON_G6]); |
317 st->print("G7="); print_location(st, SIG_REGS(sc).u_regs[CON__G7]); |
318 st->print("G7="); print_location(st, SIG_REGS(sc).u_regs[CON_G7]); |
318 st->cr(); |
319 st->cr(); |
319 |
320 |
320 st->print("O0="); print_location(st, SIG_REGS(sc).u_regs[CON__O0]); |
321 st->print("O0="); print_location(st, SIG_REGS(sc).u_regs[CON_O0]); |
321 st->print("O1="); print_location(st, SIG_REGS(sc).u_regs[CON__O1]); |
322 st->print("O1="); print_location(st, SIG_REGS(sc).u_regs[CON_O1]); |
322 st->print("O2="); print_location(st, SIG_REGS(sc).u_regs[CON__O2]); |
323 st->print("O2="); print_location(st, SIG_REGS(sc).u_regs[CON_O2]); |
323 st->print("O3="); print_location(st, SIG_REGS(sc).u_regs[CON__O3]); |
324 st->print("O3="); print_location(st, SIG_REGS(sc).u_regs[CON_O3]); |
324 st->print("O4="); print_location(st, SIG_REGS(sc).u_regs[CON__O4]); |
325 st->print("O4="); print_location(st, SIG_REGS(sc).u_regs[CON_O4]); |
325 st->print("O5="); print_location(st, SIG_REGS(sc).u_regs[CON__O5]); |
326 st->print("O5="); print_location(st, SIG_REGS(sc).u_regs[CON_O5]); |
326 st->print("O6="); print_location(st, SIG_REGS(sc).u_regs[CON__O6]); |
327 st->print("O6="); print_location(st, SIG_REGS(sc).u_regs[CON_O6]); |
327 st->print("O7="); print_location(st, SIG_REGS(sc).u_regs[CON__O7]); |
328 st->print("O7="); print_location(st, SIG_REGS(sc).u_regs[CON_O7]); |
328 st->cr(); |
329 st->cr(); |
329 |
330 |
330 st->print("L0="); print_location(st, sp[L0->sp_offset_in_saved_window()]); |
331 st->print("L0="); print_location(st, sp[L0->sp_offset_in_saved_window()]); |
331 st->print("L1="); print_location(st, sp[L1->sp_offset_in_saved_window()]); |
332 st->print("L1="); print_location(st, sp[L1->sp_offset_in_saved_window()]); |
332 st->print("L2="); print_location(st, sp[L2->sp_offset_in_saved_window()]); |
333 st->print("L2="); print_location(st, sp[L2->sp_offset_in_saved_window()]); |
514 inline static bool checkICMiss(sigcontext* uc, address* pc, address* stub) { |
515 inline static bool checkICMiss(sigcontext* uc, address* pc, address* stub) { |
515 #ifdef COMPILER2 |
516 #ifdef COMPILER2 |
516 if (nativeInstruction_at(*pc)->is_ic_miss_trap()) { |
517 if (nativeInstruction_at(*pc)->is_ic_miss_trap()) { |
517 #ifdef ASSERT |
518 #ifdef ASSERT |
518 #ifdef TIERED |
519 #ifdef TIERED |
519 CodeBlob* cb = CodeCache::find_blob_unsafe(pc); |
520 CodeBlob* cb = CodeCache::find_blob_unsafe(*pc); |
520 assert(cb->is_compiled_by_c2(), "Wrong compiler"); |
521 assert(cb->is_compiled_by_c2(), "Wrong compiler"); |
521 #endif // TIERED |
522 #endif // TIERED |
522 #endif // ASSERT |
523 #endif // ASSERT |
523 // Inline cache missed and user trap "Tne G0+ST_RESERVED_FOR_USER_0+2" taken. |
524 // Inline cache missed and user trap "Tne G0+ST_RESERVED_FOR_USER_0+2" taken. |
524 *stub = SharedRuntime::get_ic_miss_stub(); |
525 *stub = SharedRuntime::get_ic_miss_stub(); |