From f86ce47449ad3f6610f5463541064bf5acaae344 Mon Sep 17 00:00:00 2001 From: rasbold Date: Wed, 5 Dec 2007 09:03:00 -0800 Subject: [PATCH] 6614036: REGRESSION: Java server x86 VM intermittently crash with SIGSEGV (0xb) Summary: restore destination address in x86 32-bit checkcast_arraycopy stub Reviewed-by: jrose, kvn, never --- src/cpu/x86/vm/stubGenerator_x86_32.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cpu/x86/vm/stubGenerator_x86_32.cpp b/src/cpu/x86/vm/stubGenerator_x86_32.cpp index 5ea4177f9..9d17fce5f 100644 --- a/src/cpu/x86/vm/stubGenerator_x86_32.cpp +++ b/src/cpu/x86/vm/stubGenerator_x86_32.cpp @@ -1416,8 +1416,8 @@ class StubGenerator: public StubCodeGenerator { // ======== end loop ======== // It was a real error; we must depend on the caller to finish the job. - // Register rdx = -1 * number of *remaining* oops, r14 = *total* oops. - // Emit GC store barriers for the oops we have copied (r14 + rdx), + // Register "count" = -1 * number of *remaining* oops, length_arg = *total* oops. + // Emit GC store barriers for the oops we have copied (length_arg + count), // and report their number to the caller. __ addl(count, length_arg); // transfers = (length - remaining) __ movl(rax, count); // save the value @@ -1430,6 +1430,7 @@ class StubGenerator: public StubCodeGenerator { // Come here on success only. __ BIND(L_do_card_marks); __ movl(count, length_arg); + __ movl(to, to_arg); // reload gen_write_ref_array_post_barrier(to, count); __ xorl(rax, rax); // return 0 on success -- GitLab