8133646: Internal Error: x86/vm/macroAssembler_x86.cpp:886 DEBUG MESSAGE: StubRoutines::call_stub: threads must correspond
Reviewed-by: kvn, coleenp, dcubed
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp Tue Aug 25 17:22:56 2015 -0400
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp Wed Aug 26 18:59:08 2015 -0400
@@ -367,16 +367,20 @@
#ifdef ASSERT
// verify that threads correspond
{
- Label L, S;
+ Label L1, L2, L3;
__ cmpptr(r15_thread, thread);
- __ jcc(Assembler::notEqual, S);
+ __ jcc(Assembler::equal, L1);
+ __ stop("StubRoutines::call_stub: r15_thread is corrupted");
+ __ bind(L1);
__ get_thread(rbx);
+ __ cmpptr(r15_thread, thread);
+ __ jcc(Assembler::equal, L2);
+ __ stop("StubRoutines::call_stub: r15_thread is modified by call");
+ __ bind(L2);
__ cmpptr(r15_thread, rbx);
- __ jcc(Assembler::equal, L);
- __ bind(S);
- __ jcc(Assembler::equal, L);
+ __ jcc(Assembler::equal, L3);
__ stop("StubRoutines::call_stub: threads must correspond");
- __ bind(L);
+ __ bind(L3);
}
#endif
@@ -450,15 +454,20 @@
#ifdef ASSERT
// verify that threads correspond
{
- Label L, S;
+ Label L1, L2, L3;
__ cmpptr(r15_thread, thread);
- __ jcc(Assembler::notEqual, S);
+ __ jcc(Assembler::equal, L1);
+ __ stop("StubRoutines::catch_exception: r15_thread is corrupted");
+ __ bind(L1);
__ get_thread(rbx);
+ __ cmpptr(r15_thread, thread);
+ __ jcc(Assembler::equal, L2);
+ __ stop("StubRoutines::catch_exception: r15_thread is modified by call");
+ __ bind(L2);
__ cmpptr(r15_thread, rbx);
- __ jcc(Assembler::equal, L);
- __ bind(S);
+ __ jcc(Assembler::equal, L3);
__ stop("StubRoutines::catch_exception: threads must correspond");
- __ bind(L);
+ __ bind(L3);
}
#endif