diff options
author | jiangli <none@none> | 2012-07-05 20:54:45 -0400 |
---|---|---|
committer | jiangli <none@none> | 2012-07-05 20:54:45 -0400 |
commit | 96b276d261c2b3de763bff86bb5c94826bb033b2 (patch) | |
tree | 19d5945b327a67a7ec3d6814f66f15117740348d /src/share/vm | |
parent | e79505894cbdddc8d3cafd5bad551bbe0dd98131 (diff) |
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
Diffstat (limited to 'src/share/vm')
-rw-r--r-- | src/share/vm/oops/methodOop.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/share/vm/oops/methodOop.cpp b/src/share/vm/oops/methodOop.cpp index 66c545a6c..ee5ef09bf 100644 --- a/src/share/vm/oops/methodOop.cpp +++ b/src/share/vm/oops/methodOop.cpp @@ -1082,6 +1082,7 @@ methodHandle methodOopDesc:: clone_with_new_data(methodHandle m, u_char* new_cod 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 @@ methodHandle methodOopDesc:: clone_with_new_data(methodHandle m, u_char* new_cod 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(), |