changeset 7445:1dac30aedd40

Add missing read barriers to invokedynamic call generator.
author Roman Kennke <rkennke@redhat.com>
date Mon, 12 Jan 2015 18:14:19 +0100
parents e94e32873b55
children 675763177043
files src/cpu/x86/vm/methodHandles_x86.cpp
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/x86/vm/methodHandles_x86.cpp	Sat Dec 13 00:14:54 2014 +0100
+++ b/src/cpu/x86/vm/methodHandles_x86.cpp	Mon Jan 12 18:14:19 2015 +0100
@@ -164,8 +164,10 @@
   //NOT_PRODUCT({ FlagSetting fs(TraceMethodHandles, true); trace_method_handle(_masm, "LZMH"); });
 
   // Load the invoker, as MH -> MH.form -> LF.vmentry
+  oopDesc::bs()->compile_resolve_oop(_masm, recv);
   __ verify_oop(recv);
   __ load_heap_oop(method_temp, Address(recv, NONZERO(java_lang_invoke_MethodHandle::form_offset_in_bytes())));
+  oopDesc::bs()->compile_resolve_oop(_masm, method_temp);
   __ verify_oop(method_temp);
   __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())));
   __ verify_oop(method_temp);
@@ -179,8 +181,10 @@
                         Address(temp2, ConstMethod::size_of_parameters_offset()),
                         sizeof(u2), /*is_signed*/ false);
     // assert(sizeof(u2) == sizeof(Method::_size_of_parameters), "");
+    __ movptr(temp2, __ argument_address(temp2, -1));
+    oopDesc::bs()->compile_resolve_oop(_masm, temp2);
     Label L;
-    __ cmpptr(recv, __ argument_address(temp2, -1));
+    __ cmpptr(recv, temp2);
     __ jcc(Assembler::equal, L);
     __ movptr(rax, __ argument_address(temp2, -1));
     __ STOP("receiver not on stack");
@@ -375,6 +379,7 @@
     //  rsi/r13 - interpreter linkage (if interpreted)
     //  rcx, rdx, rsi, rdi, r8, r8 - compiler arguments (if compiled)
 
+    oopDesc::bs()->compile_resolve_oop(_masm, member_reg);
     Label L_incompatible_class_change_error;
     switch (iid) {
     case vmIntrinsics::_linkToSpecial: