diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/linker/arm64/relative_patcher_arm64.cc | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/compiler/linker/arm64/relative_patcher_arm64.cc b/compiler/linker/arm64/relative_patcher_arm64.cc index b4ecbd8c50..72771079be 100644 --- a/compiler/linker/arm64/relative_patcher_arm64.cc +++ b/compiler/linker/arm64/relative_patcher_arm64.cc @@ -210,7 +210,14 @@ void Arm64RelativePatcher::PatchPcRelativeReference(std::vector<uint8_t>* code, } else { if ((insn & 0xfffffc00) == 0x91000000) { // ADD immediate, 64-bit with imm12 == 0 (unset). - DCHECK(patch.GetType() == LinkerPatch::Type::kStringRelative) << patch.GetType(); + if (!kEmitCompilerReadBarrier) { + DCHECK(patch.GetType() == LinkerPatch::Type::kStringRelative) << patch.GetType(); + } else { + // With the read barrier (non-baker) enabled, it could be kDexCacheArray in the + // HLoadString::LoadKind::kDexCachePcRelative case of VisitLoadString(). + DCHECK(patch.GetType() == LinkerPatch::Type::kStringRelative || + patch.GetType() == LinkerPatch::Type::kDexCacheArray) << patch.GetType(); + } shift = 0u; // No shift for ADD. } else { // LDR 32-bit or 64-bit with imm12 == 0 (unset). |