< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahVerifier.hpp

Print this page
@@ -1,7 +1,8 @@
  /*
   * Copyright (c) 2017, 2020, Red Hat, Inc. All rights reserved.
+  * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.

@@ -55,10 +56,28 @@
  class ShenandoahVerifier : public CHeapObj<mtGC> {
  private:
    ShenandoahHeap* _heap;
    MarkBitMap* _verification_bit_map;
  public:
+   typedef enum {
+     // Disable remembered set verification.
+     _verify_remembered_disable,
+ 
+     // Old objects should be registered and RS cards within *read-only* RS are dirty for all
+     // inter-generational pointers.
+     _verify_remembered_before_marking,
+ 
+     // Old objects should be registered and RS cards within *read-write* RS are dirty for all
+     // inter-generational pointers.
+     _verify_remembered_before_updating_references,
+ 
+     // Old objects should be registered and RS cards within *read-write* RS are dirty for all
+     // inter-generational pointers.
+     // TODO: This differs from the previous mode by update-watermark() vs top() end range?
+     _verify_remembered_after_full_gc
+   } VerifyRememberedSet;
+ 
    typedef enum {
      // Disable marked objects verification.
      _verify_marked_disable,
  
      // Objects should be marked in "next" bitmap.

@@ -67,11 +86,16 @@
      // Objects should be marked in "complete" bitmap.
      _verify_marked_complete,
  
      // Objects should be marked in "complete" bitmap, except j.l.r.Reference referents, which
      // may be dangling after marking but before conc-weakrefs-processing.
-     _verify_marked_complete_except_references
+     _verify_marked_complete_except_references,
+ 
+     // Objects should be marked in "complete" bitmap, except j.l.r.Reference referents, which
+     // may be dangling after marking but before conc-weakrefs-processing. All SATB buffers must
+     // be empty.
+     _verify_marked_complete_satb_empty,
    } VerifyMarked;
  
    typedef enum {
      // Disable forwarded objects verification.
      _verify_forwarded_disable,

@@ -120,10 +144,21 @@
  
      // No trash and no cset regions allowed
      _verify_regions_notrash_nocset
    } VerifyRegions;
  
+   typedef enum {
+     // Disable size verification
+     _verify_size_disable,
+ 
+     // Enforce exact consistency
+     _verify_size_exact,
+ 
+     // Expect promote-in-place adjustments: padding inserted to temporarily prevent further allocation in regular regions
+     _verify_size_adjusted_for_padding
+   } VerifySize;
+ 
    typedef enum {
      // Disable gc-state verification
      _verify_gcstate_disable,
  
      // Nothing is in progress, no forwarded objects

@@ -134,11 +169,14 @@
  
      // Nothing is in progress, some objects are forwarded
      _verify_gcstate_forwarded,
  
      // Evacuation is in progress, some objects are forwarded
-     _verify_gcstate_evacuation
+     _verify_gcstate_evacuation,
+ 
+     // Evacuation is done, some objects are forwarded, updating is in progress
+     _verify_gcstate_updating
    } VerifyGCState;
  
    struct VerifyOptions {
      VerifyForwarded     _verify_forwarded;
      VerifyMarked        _verify_marked;

@@ -158,16 +196,18 @@
              _verify_liveness(verify_liveness), _verify_regions(verify_regions),
              _verify_gcstate(verify_gcstate) {}
    };
  
  private:
-   void verify_at_safepoint(const char *label,
+   void verify_at_safepoint(const char* label,
+                            VerifyRememberedSet remembered,
                             VerifyForwarded forwarded,
                             VerifyMarked marked,
                             VerifyCollectionSet cset,
                             VerifyLiveness liveness,
                             VerifyRegions regions,
+                            VerifySize sizeness,
                             VerifyGCState gcstate);
  
  public:
    ShenandoahVerifier(ShenandoahHeap* heap, MarkBitMap* verification_bitmap) :
            _heap(heap), _verification_bit_map(verification_bitmap) {};

@@ -186,8 +226,16 @@
  
    // Roots should only contain to-space oops
    void verify_roots_in_to_space();
  
    void verify_roots_no_forwarded();
+ 
+ private:
+    void help_verify_region_rem_set(ShenandoahHeapRegion* r, ShenandoahMarkingContext* ctx,
+                                     HeapWord* from, HeapWord* top, HeapWord* update_watermark, const char* message);
+ 
+   void verify_rem_set_before_mark();
+   void verify_rem_set_before_update_ref();
+   void verify_rem_set_after_full_gc();
  };
  
  #endif // SHARE_GC_SHENANDOAH_SHENANDOAHVERIFIER_HPP
< prev index next >