7181632: nsk classLoad001_14 failure and CompileTheWorld crash after 7178145.
authorjiangli
Thu, 05 Jul 2012 20:54:45 -0400
changeset 13285 5c78ade8d6a3
parent 13284 2fd9450d84b0
child 13286 b8b0898d5f3a
7181632: nsk classLoad001_14 failure and CompileTheWorld crash after 7178145. Summary: Need to copy the inlined exception table to the new constMethodOop during method rewriting. Reviewed-by: coleenp, dholmes
hotspot/src/share/vm/oops/methodOop.cpp
--- a/hotspot/src/share/vm/oops/methodOop.cpp	Thu Jul 05 18:47:41 2012 -0400
+++ b/hotspot/src/share/vm/oops/methodOop.cpp	Thu Jul 05 20:54:45 2012 -0400
@@ -1082,6 +1082,7 @@
   newm->set_method_size(new_method_size);
   assert(newm->code_size() == new_code_length, "check");
   assert(newm->checked_exceptions_length() == checked_exceptions_len, "check");
+  assert(newm->exception_table_length() == exception_table_len, "check");
   assert(newm->localvariable_table_length() == localvariable_len, "check");
   // Copy new byte codes
   memcpy(newm->code_base(), new_code, new_code_length);
@@ -1097,6 +1098,12 @@
            m->checked_exceptions_start(),
            checked_exceptions_len * sizeof(CheckedExceptionElement));
   }
+  // Copy exception table
+  if (exception_table_len > 0) {
+    memcpy(newm->exception_table_start(),
+           m->exception_table_start(),
+           exception_table_len * sizeof(ExceptionTableElement));
+  }
   // Copy local variable number table
   if (localvariable_len > 0) {
     memcpy(newm->localvariable_table_start(),