< prev index next >

src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp

Print this page
rev 56646 : 8231757: [ppc] Fix VerifyOops. Errors show since 8231058.
Summary: Also make the checks print the wrong value and where a failure occurred.

@@ -741,14 +741,15 @@
       case T_OBJECT:
         {
           if (UseCompressedOops && !wide) {
             // Encoding done in caller
             __ stw(from_reg->as_register(), offset, base);
+            __ verify_coop(from_reg->as_register(), FILE_AND_LINE);
           } else {
             __ std(from_reg->as_register(), offset, base);
+            __ verify_oop(from_reg->as_register(), FILE_AND_LINE);
           }
-          __ verify_oop(from_reg->as_register());
           break;
         }
       case T_FLOAT : __ stfs(from_reg->as_float_reg(), offset, base); break;
       case T_DOUBLE: __ stfd(from_reg->as_double_reg(), offset, base); break;
       default      : ShouldNotReachHere();

@@ -781,14 +782,15 @@
     case T_OBJECT:
       {
         if (UseCompressedOops && !wide) {
           // Encoding done in caller.
           __ stwx(from_reg->as_register(), base, disp);
+          __ verify_coop(from_reg->as_register(), FILE_AND_LINE); // kills R0
         } else {
           __ stdx(from_reg->as_register(), base, disp);
+          __ verify_oop(from_reg->as_register(), FILE_AND_LINE); // kills R0
         }
-        __ verify_oop(from_reg->as_register()); // kills R0
         break;
       }
     case T_FLOAT : __ stfsx(from_reg->as_float_reg(), base, disp); break;
     case T_DOUBLE: __ stfdx(from_reg->as_double_reg(), base, disp); break;
     default      : ShouldNotReachHere();

@@ -829,11 +831,13 @@
             __ lwz(to_reg->as_register(), offset, base);
             __ decode_heap_oop(to_reg->as_register());
           } else {
             __ ld(to_reg->as_register(), offset, base);
           }
-          __ verify_oop(to_reg->as_register());
+          // Emitting oop verification here makes the code exceed the
+          // allowed size for PatchingStubs.
+          // __ verify_oop(to_reg->as_register(), FILE_AND_LINE);
           break;
         }
       case T_FLOAT:  __ lfs(to_reg->as_float_reg(), offset, base); break;
       case T_DOUBLE: __ lfd(to_reg->as_double_reg(), offset, base); break;
       default      : ShouldNotReachHere();

@@ -860,11 +864,13 @@
           __ lwzx(to_reg->as_register(), base, disp);
           __ decode_heap_oop(to_reg->as_register());
         } else {
           __ ldx(to_reg->as_register(), base, disp);
         }
-        __ verify_oop(to_reg->as_register());
+        // Emitting oop verification here makes the code exceed the
+        // allowed size for PatchingStubs.
+        //__ verify_oop(to_reg->as_register(), FILE_AND_LINE);
         break;
       }
     case T_FLOAT:  __ lfsx(to_reg->as_float_reg() , base, disp); break;
     case T_DOUBLE: __ lfdx(to_reg->as_double_reg(), base, disp); break;
     case T_LONG  :

@@ -1139,11 +1145,11 @@
   if (info != NULL && needs_explicit_null_check) {
     explicit_null_check(src, info);
   }
 
   if (addr->base()->type() == T_OBJECT) {
-    __ verify_oop(src);
+    __ verify_oop(src, FILE_AND_LINE);
   }
 
   PatchingStub* patch = NULL;
   if (needs_patching) {
     patch = new PatchingStub(_masm, PatchingStub::access_field_id);

@@ -1236,11 +1242,11 @@
     }
   } else {
     ShouldNotReachHere();
   }
   if (is_reference_type(to_reg->type())) {
-    __ verify_oop(to_reg->as_register());
+    __ verify_oop(to_reg->as_register(), FILE_AND_LINE);
   }
 }
 
 
 void LIR_Assembler::reg2mem(LIR_Opr from_reg, LIR_Opr dest, BasicType type,

@@ -1263,11 +1269,11 @@
   if (info != NULL && needs_explicit_null_check) {
     explicit_null_check(src, info);
   }
 
   if (addr->base()->is_oop_register()) {
-    __ verify_oop(src);
+    __ verify_oop(src, FILE_AND_LINE);
   }
 
   PatchingStub* patch = NULL;
   if (needs_patching) {
     patch = new PatchingStub(_masm, PatchingStub::access_field_id);

@@ -2306,11 +2312,11 @@
                      op->object_size(),
                      op->klass()->as_register(),
                      *op->stub()->entry());
 
   __ bind(*op->stub()->continuation());
-  __ verify_oop(op->obj()->as_register());
+  __ verify_oop(op->obj()->as_register(), FILE_AND_LINE);
 }
 
 
 void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) {
   LP64_ONLY( __ extsw(op->len()->as_register(), op->len()->as_register()); )

@@ -2531,11 +2537,11 @@
     Register k_RInfo = op->tmp1()->as_register();
     Register klass_RInfo = op->tmp2()->as_register();
     Register Rtmp1 = op->tmp3()->as_register();
     bool should_profile = op->should_profile();
 
-    __ verify_oop(value);
+    __ verify_oop(value, FILE_AND_LINE);
     CodeStub* stub = op->stub();
     // Check if it needs to be profiled.
     ciMethodData* md = NULL;
     ciProfileData* data = NULL;
     int mdo_offset_bias = 0;

@@ -3084,11 +3090,11 @@
   bool do_update = !TypeEntries::is_type_unknown(current_klass) && !exact_klass_set;
 
   assert(do_null || do_update, "why are we here?");
   assert(!TypeEntries::was_null_seen(current_klass) || do_update, "why are we here?");
 
-  __ verify_oop(obj);
+  __ verify_oop(obj, FILE_AND_LINE);
 
   if (do_null) {
     if (!TypeEntries::was_null_seen(current_klass)) {
       __ cmpdi(CCR0, obj, 0);
       __ bne(CCR0, Lupdate);
< prev index next >