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.

dmh-field-accessors-java8u201.patch 7.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. # HG changeset patch
  2. # User jklos
  3. # Date 1547858019 -3600
  4. # Sat Jan 19 01:33:39 2019 +0100
  5. # Node ID 5ae0a29dd9ec239bbe6869f284bdad5f1a0e180c
  6. # Parent 3f33ee07f37817b4f687797700aa471edbec1da5
  7. diff -r 3f33ee07f378 -r 5ae0a29dd9ec src/share/vm/classfile/javaClasses.cpp
  8. --- a/src/share/vm/classfile/javaClasses.cpp Sat Jan 19 01:28:17 2019 +0100
  9. +++ b/src/share/vm/classfile/javaClasses.cpp Sat Jan 19 01:33:39 2019 +0100
  10. @@ -2726,6 +2726,50 @@
  11. }
  12. }
  13. +// Support for java_lang_invoke_DirectMethodHandle$StaticAccessor
  14. +
  15. +int java_lang_invoke_DirectMethodHandle_StaticAccessor::_static_offset_offset;
  16. +
  17. +long java_lang_invoke_DirectMethodHandle_StaticAccessor::static_offset(oop dmh) {
  18. + assert(_static_offset_offset != 0, "");
  19. + return dmh->long_field(_static_offset_offset);
  20. +}
  21. +
  22. +void java_lang_invoke_DirectMethodHandle_StaticAccessor::set_static_offset(oop dmh, long static_offset) {
  23. + assert(_static_offset_offset != 0, "");
  24. + dmh->long_field_put(_static_offset_offset, static_offset);
  25. +}
  26. +
  27. +
  28. +void java_lang_invoke_DirectMethodHandle_StaticAccessor::compute_offsets() {
  29. + Klass* klass_oop = SystemDictionary::DirectMethodHandle_StaticAccessor_klass();
  30. + if (klass_oop != NULL && EnableInvokeDynamic) {
  31. + compute_offset(_static_offset_offset, klass_oop, vmSymbols::static_offset_name(), vmSymbols::long_signature());
  32. + }
  33. +}
  34. +
  35. +// Support for java_lang_invoke_DirectMethodHandle$Accessor
  36. +
  37. +int java_lang_invoke_DirectMethodHandle_Accessor::_field_offset_offset;
  38. +
  39. +int java_lang_invoke_DirectMethodHandle_Accessor::field_offset(oop dmh) {
  40. + assert(_field_offset_offset != 0, "");
  41. + return dmh->int_field(_field_offset_offset);
  42. +}
  43. +
  44. +void java_lang_invoke_DirectMethodHandle_Accessor::set_field_offset(oop dmh, int field_offset) {
  45. + assert(_field_offset_offset != 0, "");
  46. + dmh->int_field_put(_field_offset_offset, field_offset);
  47. +}
  48. +
  49. +
  50. +void java_lang_invoke_DirectMethodHandle_Accessor::compute_offsets() {
  51. + Klass* klass_oop = SystemDictionary::DirectMethodHandle_Accessor_klass();
  52. + if (klass_oop != NULL && EnableInvokeDynamic) {
  53. + compute_offset(_field_offset_offset, klass_oop, vmSymbols::field_offset_name(), vmSymbols::int_signature());
  54. + }
  55. +}
  56. +
  57. // Support for java_lang_invoke_MethodHandle
  58. int java_lang_invoke_MethodHandle::_type_offset;
  59. @@ -3386,6 +3430,9 @@
  60. java_lang_invoke_LambdaForm::compute_offsets();
  61. java_lang_invoke_MethodType::compute_offsets();
  62. java_lang_invoke_CallSite::compute_offsets();
  63. +
  64. + java_lang_invoke_DirectMethodHandle_StaticAccessor::compute_offsets();
  65. + java_lang_invoke_DirectMethodHandle_Accessor::compute_offsets();
  66. }
  67. java_security_AccessControlContext::compute_offsets();
  68. // Initialize reflection classes. The layouts of these classes
  69. diff -r 3f33ee07f378 -r 5ae0a29dd9ec src/share/vm/classfile/javaClasses.hpp
  70. --- a/src/share/vm/classfile/javaClasses.hpp Sat Jan 19 01:28:17 2019 +0100
  71. +++ b/src/share/vm/classfile/javaClasses.hpp Sat Jan 19 01:33:39 2019 +0100
  72. @@ -1042,6 +1042,55 @@
  73. static int member_offset_in_bytes() { return _member_offset; }
  74. };
  75. +// Interface to java.lang.invoke.DirectMethodHandle$StaticAccessor objects
  76. +
  77. +class java_lang_invoke_DirectMethodHandle_StaticAccessor: AllStatic {
  78. + friend class JavaClasses;
  79. +
  80. + private:
  81. + static int _static_offset_offset; // offset to static field
  82. +
  83. + static void compute_offsets();
  84. +
  85. + public:
  86. + // Accessors
  87. + static long static_offset(oop dmh);
  88. + static void set_static_offset(oop dmh, long value);
  89. +
  90. + // Testers
  91. + static bool is_subclass(Klass* klass) {
  92. + return klass->is_subclass_of(SystemDictionary::DirectMethodHandle_StaticAccessor_klass());
  93. + }
  94. + static bool is_instance(oop obj) {
  95. + return obj != NULL && is_subclass(obj->klass());
  96. + }
  97. +};
  98. +
  99. +// Interface to java.lang.invoke.DirectMethodHandle$Accessor objects
  100. +
  101. +class java_lang_invoke_DirectMethodHandle_Accessor: AllStatic {
  102. + friend class JavaClasses;
  103. +
  104. + private:
  105. + static int _field_offset_offset; // offset to field
  106. +
  107. + static void compute_offsets();
  108. +
  109. + public:
  110. + // Accessors
  111. + static int field_offset(oop dmh);
  112. + static void set_field_offset(oop dmh, int value);
  113. +
  114. + // Testers
  115. + static bool is_subclass(Klass* klass) {
  116. + return klass->is_subclass_of(SystemDictionary::DirectMethodHandle_Accessor_klass());
  117. + }
  118. + static bool is_instance(oop obj) {
  119. + return obj != NULL && is_subclass(obj->klass());
  120. + }
  121. +};
  122. +
  123. +
  124. // Interface to java.lang.invoke.LambdaForm objects
  125. // (These are a private interface for managing adapter code generation.)
  126. diff -r 3f33ee07f378 -r 5ae0a29dd9ec src/share/vm/classfile/systemDictionary.hpp
  127. --- a/src/share/vm/classfile/systemDictionary.hpp Sat Jan 19 01:28:17 2019 +0100
  128. +++ b/src/share/vm/classfile/systemDictionary.hpp Sat Jan 19 01:33:39 2019 +0100
  129. @@ -154,6 +154,8 @@
  130. \
  131. /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \
  132. do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle, Opt ) \
  133. + do_klass(DirectMethodHandle_StaticAccessor_klass, java_lang_invoke_DirectMethodHandle_StaticAccessor, Opt ) \
  134. + do_klass(DirectMethodHandle_Accessor_klass, java_lang_invoke_DirectMethodHandle_Accessor, Opt ) \
  135. do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle, Pre_JSR292 ) \
  136. do_klass(MemberName_klass, java_lang_invoke_MemberName, Pre_JSR292 ) \
  137. do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives, Pre_JSR292 ) \
  138. diff -r 3f33ee07f378 -r 5ae0a29dd9ec src/share/vm/classfile/vmSymbols.hpp
  139. --- a/src/share/vm/classfile/vmSymbols.hpp Sat Jan 19 01:28:17 2019 +0100
  140. +++ b/src/share/vm/classfile/vmSymbols.hpp Sat Jan 19 01:33:39 2019 +0100
  141. @@ -269,6 +269,8 @@
  142. template(java_lang_invoke_CallSite, "java/lang/invoke/CallSite") \
  143. template(java_lang_invoke_ConstantCallSite, "java/lang/invoke/ConstantCallSite") \
  144. template(java_lang_invoke_DirectMethodHandle, "java/lang/invoke/DirectMethodHandle") \
  145. + template(java_lang_invoke_DirectMethodHandle_StaticAccessor, "java/lang/invoke/DirectMethodHandle$StaticAccessor") \
  146. + template(java_lang_invoke_DirectMethodHandle_Accessor, "java/lang/invoke/DirectMethodHandle$Accessor") \
  147. template(java_lang_invoke_MutableCallSite, "java/lang/invoke/MutableCallSite") \
  148. template(java_lang_invoke_VolatileCallSite, "java/lang/invoke/VolatileCallSite") \
  149. template(java_lang_invoke_MethodHandle, "java/lang/invoke/MethodHandle") \
  150. @@ -418,6 +420,10 @@
  151. template(getProtectionDomain_name, "getProtectionDomain") \
  152. template(getProtectionDomain_signature, "(Ljava/security/CodeSource;)Ljava/security/ProtectionDomain;") \
  153. template(url_code_signer_array_void_signature, "(Ljava/net/URL;[Ljava/security/CodeSigner;)V") \
  154. + template(static_offset_name, "staticOffset") \
  155. + template(static_base_name, "staticBase") \
  156. + template(field_offset_name, "fieldOffset") \
  157. + template(field_type_name, "fieldType") \
  158. template(resolved_references_name, "<resolved_references>") \
  159. template(referencequeue_null_name, "NULL") \
  160. template(referencequeue_enqueued_name, "ENQUEUED") \