On Aug 6, 2012, at 2:40 PM, yumin...@oracle.com wrote: > Hi, > > Please give your comments of the changes about > 6830717: replay of compilations would help with debugging. > http://monaco.sfbay.sun.com/detail.jsf?cr=6830717 > > Sometime jvm crashes in the process of compilation or in compiled method. To > reproduce the compilation process in debug JVM is helpful for quickly > identifying root cause. > To do recompilation, we collect data by using of SA (Serviceability Agent) > to extract application and system class data from core file. Those > information includes nmethod, methodOop, methodDataOop, instanceKlass and > corresponding ci counterparts. > With reconfiguring similar (not exactly same) compiling environment as in > the core file, try to compile again the failed java methods. > > contributed by Tom R (never). webrev: > > http://cr.openjdk.java.net/~minqi/6830717/ > <http://cr.openjdk.java.net/%7Eminqi/6830717/>
src/share/vm/ci/ciReplay.cpp: 603 if (strcmp(field_signature, "[B") == 0) { 604 oop value = oopFactory::new_byteArray(length, CHECK); 605 java_mirror->obj_field_put(fd.offset(), value); 606 } else if (strcmp(field_signature, "[Z") == 0) { 607 oop value = oopFactory::new_boolArray(length, CHECK); 608 java_mirror->obj_field_put(fd.offset(), value); 609 } else if (strcmp(field_signature, "[C") == 0) { 610 oop value = oopFactory::new_charArray(length, CHECK); 611 java_mirror->obj_field_put(fd.offset(), value); 612 } else if (strcmp(field_signature, "[S") == 0) { 613 oop value = oopFactory::new_shortArray(length, CHECK); 614 java_mirror->obj_field_put(fd.offset(), value); 615 } else if (strcmp(field_signature, "[F") == 0) { 616 oop value = oopFactory::new_singleArray(length, CHECK); 617 java_mirror->obj_field_put(fd.offset(), value); 618 } else if (strcmp(field_signature, "[D") == 0) { 619 oop value = oopFactory::new_doubleArray(length, CHECK); 620 java_mirror->obj_field_put(fd.offset(), value); 621 } else if (strcmp(field_signature, "[I") == 0) { 622 oop value = oopFactory::new_intArray(length, CHECK); 623 java_mirror->obj_field_put(fd.offset(), value); 624 } else if (strcmp(field_signature, "[J") == 0) { 625 oop value = oopFactory::new_longArray(length, CHECK); 626 java_mirror->obj_field_put(fd.offset(), value); 627 } else if (field_signature[0] == '[' && field_signature[1] == 'L') { Can't we switch on the second character? And move this call: 630 java_mirror->obj_field_put(fd.offset(), value); out of the switch? 637 if (strcmp(field_signature, "I") == 0) { 638 int value = atoi(string_value); 639 java_mirror->int_field_put(fd.offset(), value); 640 } else if (strcmp(field_signature, "B") == 0) { 641 int value = atoi(string_value); 642 java_mirror->byte_field_put(fd.offset(), value); 643 } else if (strcmp(field_signature, "C") == 0) { 644 int value = atoi(string_value); 645 java_mirror->char_field_put(fd.offset(), value); 646 } else if (strcmp(field_signature, "S") == 0) { 647 int value = atoi(string_value); 648 java_mirror->short_field_put(fd.offset(), value); 649 } else if (strcmp(field_signature, "Z") == 0) { 650 int value = atol(string_value); 651 java_mirror->bool_field_put(fd.offset(), value); 652 } else if (strcmp(field_signature, "J") == 0) { 653 jlong value; 654 if (sscanf(string_value, INT64_FORMAT, &value) != 1) { 655 fprintf(stderr, "Error parsing long: %s\n", string_value); 656 return; 657 } 658 java_mirror->long_field_put(fd.offset(), value); 659 } else if (strcmp(field_signature, "F") == 0) { 660 float value = atof(string_value); 661 java_mirror->float_field_put(fd.offset(), value); 662 } else if (strcmp(field_signature, "D") == 0) { 663 double value = atof(string_value); 664 java_mirror->double_field_put(fd.offset(), value); 665 } else if (strcmp(field_signature, "Ljava/lang/String;") == 0) { 666 Handle value = java_lang_String::create_from_str(string_value, CHECK); 667 java_mirror->obj_field_put(fd.offset(), value()); 668 } else if (field_signature[0] == 'L') { Same here (not the put though)? Otherwise it looks good. -- Chris > > Thanks > Yumin