From e63a745f26fec5a5b4162fc83f6e88a1f696c30c Mon Sep 17 00:00:00 2001 From: Hiroshi Yamauchi Date: Thu, 27 Feb 2014 14:44:36 -0800 Subject: Make heap reference poisoning work with the interpreter. It is disabled by default. Bug: 12687968 Change-Id: Iee0cad647f341a7b566f4cf74c2770d1c19312c9 --- compiler/utils/arm/assembler_arm.cc | 3 +++ compiler/utils/mips/assembler_mips.cc | 3 +++ compiler/utils/x86/assembler_x86.cc | 3 +++ 3 files changed, 9 insertions(+) (limited to 'compiler/utils') diff --git a/compiler/utils/arm/assembler_arm.cc b/compiler/utils/arm/assembler_arm.cc index 828dffafa1..dbd078a81c 100644 --- a/compiler/utils/arm/assembler_arm.cc +++ b/compiler/utils/arm/assembler_arm.cc @@ -1550,6 +1550,9 @@ void ArmAssembler::LoadRef(ManagedRegister mdest, ManagedRegister base, CHECK(dst.IsCoreRegister() && dst.IsCoreRegister()) << dst; LoadFromOffset(kLoadWord, dst.AsCoreRegister(), base.AsArm().AsCoreRegister(), offs.Int32Value()); + if (kPoisonHeapReferences) { + rsb(dst.AsCoreRegister(), dst.AsCoreRegister(), ShifterOperand(0)); + } } void ArmAssembler::LoadRef(ManagedRegister mdest, FrameOffset src) { diff --git a/compiler/utils/mips/assembler_mips.cc b/compiler/utils/mips/assembler_mips.cc index fdd2bab4da..ce21b84867 100644 --- a/compiler/utils/mips/assembler_mips.cc +++ b/compiler/utils/mips/assembler_mips.cc @@ -684,6 +684,9 @@ void MipsAssembler::LoadRef(ManagedRegister mdest, ManagedRegister base, CHECK(dest.IsCoreRegister() && dest.IsCoreRegister()); LoadFromOffset(kLoadWord, dest.AsCoreRegister(), base.AsMips().AsCoreRegister(), offs.Int32Value()); + if (kPoisonHeapReferences) { + Subu(dest.AsCoreRegister(), ZERO, dest.AsCoreRegister()); + } } void MipsAssembler::LoadRawPtr(ManagedRegister mdest, ManagedRegister base, diff --git a/compiler/utils/x86/assembler_x86.cc b/compiler/utils/x86/assembler_x86.cc index 136d2486df..16165029f4 100644 --- a/compiler/utils/x86/assembler_x86.cc +++ b/compiler/utils/x86/assembler_x86.cc @@ -1553,6 +1553,9 @@ void X86Assembler::LoadRef(ManagedRegister mdest, ManagedRegister base, X86ManagedRegister dest = mdest.AsX86(); CHECK(dest.IsCpuRegister() && dest.IsCpuRegister()); movl(dest.AsCpuRegister(), Address(base.AsX86().AsCpuRegister(), offs)); + if (kPoisonHeapReferences) { + negl(dest.AsCpuRegister()); + } } void X86Assembler::LoadRawPtr(ManagedRegister mdest, ManagedRegister base, -- cgit v1.2.3