7106944: assert(_pc == *pc_addr) failed may be too strong
authortwisti
Thu, 03 Nov 2011 04:12:49 -0700
changeset 10980 8b23df12c7f6
parent 10979 c25dd872c62f
child 10981 31a7be6a8ef8
7106944: assert(_pc == *pc_addr) failed may be too strong Reviewed-by: kvn, never
hotspot/src/cpu/x86/vm/frame_x86.cpp
--- a/hotspot/src/cpu/x86/vm/frame_x86.cpp	Thu Nov 03 01:43:26 2011 -0700
+++ b/hotspot/src/cpu/x86/vm/frame_x86.cpp	Thu Nov 03 04:12:49 2011 -0700
@@ -234,10 +234,12 @@
 void frame::patch_pc(Thread* thread, address pc) {
   address* pc_addr = &(((address*) sp())[-1]);
   if (TracePcPatching) {
-    tty->print_cr("patch_pc at address " INTPTR_FORMAT " [" INTPTR_FORMAT " -> " INTPTR_FORMAT "] ",
+    tty->print_cr("patch_pc at address " INTPTR_FORMAT " [" INTPTR_FORMAT " -> " INTPTR_FORMAT "]",
                   pc_addr, *pc_addr, pc);
   }
-  assert(_pc == *pc_addr, err_msg("must be: " INTPTR_FORMAT " == " INTPTR_FORMAT, _pc, *pc_addr));
+  // Either the return address is the original one or we are going to
+  // patch in the same address that's already there.
+  assert(_pc == *pc_addr || pc == *pc_addr, "must be");
   *pc_addr = pc;
   _cb = CodeCache::find_blob(pc);
   address original_pc = nmethod::get_deopt_original_pc(this);