# HG changeset patch # User Roman Kennke # Date 1421082859 -3600 # Node ID 1dac30aedd401df7e6315d1e3a66e48597db4e8d # Parent e94e32873b55689e94bc169f52e4de85a14ec341 Add missing read barriers to invokedynamic call generator. diff -r e94e32873b55 -r 1dac30aedd40 src/cpu/x86/vm/methodHandles_x86.cpp --- 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: