Hi, Chris and all

After permgen removal integration, the previous webrev (see http://cr.openjdk.java.net/~minqi/6830717) need changes according to metadata changes.

  Thanks for your comments

   http://cr.openjdk.java.net/~minqi/6830717.01

Thanks
Yumin

On 8/13/2012 5:02 PM, Christian Thalinger wrote:
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

Reply via email to