Mercurial > hg > shenandoah-preopenjdk-archive > openjdk8 > hotspot
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: