Revert "Revert "Add missing card mark verification to CC""

Add missing write barrier for AddStrongRoot on the dex cache.

Test: test-art-host-run-test ART_TEST_INTERPRETER=true ART_TEST_OPTIMIZING=true ART_TEST_GC_STRESS=true

Bug: 12687968

This reverts commit 50805e747cbb7e9c8d30bd3b49e27ab0741f3cf8.

Change-Id: I72c6de2120d8e0ddc2512dd41010776aecfc9e2c
diff --git a/runtime/entrypoints/quick/quick_dexcache_entrypoints.cc b/runtime/entrypoints/quick/quick_dexcache_entrypoints.cc
index 47c6b51..355d7b3 100644
--- a/runtime/entrypoints/quick/quick_dexcache_entrypoints.cc
+++ b/runtime/entrypoints/quick/quick_dexcache_entrypoints.cc
@@ -32,12 +32,9 @@
 namespace art {
 
 static inline void BssWriteBarrier(ArtMethod* outer_method) REQUIRES_SHARED(Locks::mutator_lock_) {
-  // For non-CC AOT code, we need a write barrier for the class loader that holds the
-  // GC roots in the .bss. For CC, we do not need to do anything because the roots
-  // we're storing are all referencing to-space and do not need to be re-visited.
-  // However, we do the DCHECK() for the registration of oat files with .bss sections.
-  const DexFile* dex_file =
-      (kUseReadBarrier && !kIsDebugBuild) ? nullptr : outer_method->GetDexFile();
+  // For AOT code, we need a write barrier for the class loader that holds the
+  // GC roots in the .bss.
+  const DexFile* dex_file = outer_method->GetDexFile();
   if (dex_file != nullptr &&
       dex_file->GetOatDexFile() != nullptr &&
       !dex_file->GetOatDexFile()->GetOatFile()->GetBssGcRoots().empty()) {
@@ -50,15 +47,13 @@
           << "Oat file with .bss GC roots was not registered in class table: "
           << dex_file->GetOatDexFile()->GetOatFile()->GetLocation();
     }
-    if (!kUseReadBarrier) {
-      if (class_loader != nullptr) {
-        // Note that we emit the barrier before the compiled code stores the String or Class
-        // as a GC root. This is OK as there is no suspend point point in between.
-        Runtime::Current()->GetHeap()->WriteBarrierEveryFieldOf(class_loader);
-      } else {
-        Runtime::Current()->GetClassLinker()->WriteBarrierForBootOatFileBssRoots(
-            dex_file->GetOatDexFile()->GetOatFile());
-      }
+    if (class_loader != nullptr) {
+      // Note that we emit the barrier before the compiled code stores the String or Class
+      // as a GC root. This is OK as there is no suspend point point in between.
+      Runtime::Current()->GetHeap()->WriteBarrierEveryFieldOf(class_loader);
+    } else {
+      Runtime::Current()->GetClassLinker()->WriteBarrierForBootOatFileBssRoots(
+          dex_file->GetOatDexFile()->GetOatFile());
     }
   }
 }