You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

dont-clear-f1.patch 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # HG changeset patch
  2. # Parent 89c7125da633a3b47b117c4c7ccbc60b6daa7581
  3. diff -r 89c7125da633 src/share/vm/oops/cpCache.cpp
  4. --- a/src/share/vm/oops/cpCache.cpp Wed Apr 06 12:04:17 2016 -0700
  5. +++ b/src/share/vm/oops/cpCache.cpp Wed Apr 06 20:11:06 2016 -0700
  6. @@ -536,17 +536,22 @@
  7. // Enhanced RedefineClasses() API support (DCEVM):
  8. // Clear cached entry, let it be re-resolved
  9. void ConstantPoolCacheEntry::clear_entry() {
  10. + // Always clear for invokehandle/invokedynamic to re-resolve them
  11. + bool clearData = bytecode_1() == Bytecodes::_invokehandle || bytecode_1() == Bytecodes::_invokedynamic;
  12. _indices = constant_pool_index();
  13. - _f1 = NULL;
  14. - if (!is_resolved_reference()) {
  15. - _f2 = 0;
  16. +
  17. + if (clearData) {
  18. + if (!is_resolved_reference()) {
  19. + _f2 = 0;
  20. + }
  21. + // FIXME: (DCEVM) we want to clear flags, but parameter size is actually used
  22. + // after we return from the method, before entry is re-initialized. So let's
  23. + // keep parameter size the same.
  24. + // For example, it's used in TemplateInterpreterGenerator::generate_return_entry_for
  25. + // Also, we need to keep flag marking entry as one containing resolved_reference
  26. + _flags &= parameter_size_mask | (1 << is_resolved_ref_shift);
  27. + _f1 = NULL;
  28. }
  29. - // FIXME: (DCEVM) we want to clear flags, but parameter size is actually used
  30. - // after we return from the method, before entry is re-initialized. So let's
  31. - // keep parameter size the same.
  32. - // For example, it's used in TemplateInterpreterGenerator::generate_return_entry_for
  33. - // Also, we need to keep flag marking entry as one containing resolved_reference
  34. - _flags &= parameter_size_mask | (1 << is_resolved_ref_shift);
  35. }
  36. #endif // INCLUDE_JVMTI
  37. diff -r 89c7125da633 src/share/vm/oops/cpCache.hpp
  38. --- a/src/share/vm/oops/cpCache.hpp Wed Apr 06 12:04:17 2016 -0700
  39. +++ b/src/share/vm/oops/cpCache.hpp Wed Apr 06 20:11:06 2016 -0700
  40. @@ -141,13 +141,13 @@
  41. void set_bytecode_2(Bytecodes::Code code);
  42. void set_f1(Metadata* f1) {
  43. Metadata* existing_f1 = (Metadata*)_f1; // read once
  44. - assert(existing_f1 == NULL || existing_f1 == f1, "illegal field change");
  45. + //assert(existing_f1 == NULL || existing_f1 == f1, "illegal field change");
  46. _f1 = f1;
  47. }
  48. void release_set_f1(Metadata* f1);
  49. void set_f2(intx f2) {
  50. intx existing_f2 = _f2; // read once
  51. - assert(existing_f2 == 0 || existing_f2 == f2, "illegal field change");
  52. + //assert(existing_f2 == 0 || existing_f2 == f2, "illegal field change");
  53. _f2 = f2;
  54. }
  55. void set_f2_as_vfinal_method(Method* f2) {