6614036: REGRESSION: Java server x86 VM intermittently crash with SIGSEGV (0xb)
authorrasbold
Wed, 05 Dec 2007 09:03:00 -0800
changeset 192 d66300cdf939
parent 191 314312979e7a
child 193 171c404abf72
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
hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp	Wed Dec 05 09:02:00 2007 -0800
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp	Wed Dec 05 09:03:00 2007 -0800
@@ -1416,8 +1416,8 @@
     // ======== 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 @@
     // 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