comparison src/share/vm/runtime/vframeArray.cpp @ 1936:8d88c9ac9247

Correct deopt handler entry. New flag -XX:+TraceSignals. More detailed deopt printing.
author Thomas Wuerthinger <wuerthinger@ssw.jku.at>
date Thu, 23 Dec 2010 18:13:28 +0100
parents fd5d4527cdf5
children 06f017f7daa7
comparison
equal deleted inserted replaced
1935:98dbef29f10b 1936:8d88c9ac9247
298 StackValue *value = expressions()->at(i); 298 StackValue *value = expressions()->at(i);
299 intptr_t* addr = iframe()->interpreter_frame_expression_stack_at(i); 299 intptr_t* addr = iframe()->interpreter_frame_expression_stack_at(i);
300 switch(value->type()) { 300 switch(value->type()) {
301 case T_INT: 301 case T_INT:
302 *addr = value->get_int(); 302 *addr = value->get_int();
303 #ifndef PRODUCT
304 if (TraceDeoptimization) {
305 tty->print_cr("Reconstructed expression %d (INT): %d", i, (int)(*addr));
306 }
307 #endif
303 break; 308 break;
304 case T_OBJECT: 309 case T_OBJECT:
305 *addr = value->get_int(T_OBJECT); 310 *addr = value->get_int(T_OBJECT);
311 #ifndef PRODUCT
312 if (TraceDeoptimization) {
313 tty->print("Reconstructed expression %d (OBJECT): ", i);
314 oop o = (oop)(*addr);
315 if (o == NULL) {
316 tty->print_cr("NULL");
317 } else {
318 tty->print_cr(err_msg("%s", o->blueprint()->name()->as_C_string()));
319 }
320 }
321 #endif
306 break; 322 break;
307 case T_CONFLICT: 323 case T_CONFLICT:
308 // A dead stack slot. Initialize to null in case it is an oop. 324 // A dead stack slot. Initialize to null in case it is an oop.
309 *addr = NULL_WORD; 325 *addr = NULL_WORD;
310 break; 326 break;
319 StackValue *value = locals()->at(i); 335 StackValue *value = locals()->at(i);
320 intptr_t* addr = iframe()->interpreter_frame_local_at(i); 336 intptr_t* addr = iframe()->interpreter_frame_local_at(i);
321 switch(value->type()) { 337 switch(value->type()) {
322 case T_INT: 338 case T_INT:
323 *addr = value->get_int(); 339 *addr = value->get_int();
340 #ifndef PRODUCT
341 if (TraceDeoptimization) {
342 tty->print_cr("Reconstructed local %d (INT): %d", i, (int)(*addr));
343 }
344 #endif
324 break; 345 break;
325 case T_OBJECT: 346 case T_OBJECT:
326 *addr = value->get_int(T_OBJECT); 347 *addr = value->get_int(T_OBJECT);
348 #ifndef PRODUCT
349 if (TraceDeoptimization) {
350 tty->print("Reconstructed local %d (OBJECT): ", i);
351 oop o = (oop)(*addr);
352 if (o == NULL) {
353 tty->print_cr("NULL");
354 } else {
355 tty->print_cr(err_msg("%s", o->blueprint()->name()->as_C_string()));
356 }
357 }
358 #endif
327 break; 359 break;
328 case T_CONFLICT: 360 case T_CONFLICT:
329 // A dead location. If it is an oop then we need a NULL to prevent GC from following it 361 // A dead location. If it is an oop then we need a NULL to prevent GC from following it
330 *addr = NULL_WORD; 362 *addr = NULL_WORD;
331 break; 363 break;