diff options
author | Hiroshi Yamauchi <yamauchi@google.com> | 2014-02-27 14:44:36 -0800 |
---|---|---|
committer | Hiroshi Yamauchi <yamauchi@google.com> | 2014-03-05 19:20:14 -0800 |
commit | e63a745f26fec5a5b4162fc83f6e88a1f696c30c (patch) | |
tree | f26e1429c8226c5dde5ee4c361a57754ff46298c /compiler/utils | |
parent | e26baffe7f9e2a54f276f5c65e48454e413683ba (diff) | |
download | android_art-e63a745f26fec5a5b4162fc83f6e88a1f696c30c.tar.gz android_art-e63a745f26fec5a5b4162fc83f6e88a1f696c30c.tar.bz2 android_art-e63a745f26fec5a5b4162fc83f6e88a1f696c30c.zip |
Make heap reference poisoning work with the interpreter.
It is disabled by default.
Bug: 12687968
Change-Id: Iee0cad647f341a7b566f4cf74c2770d1c19312c9
Diffstat (limited to 'compiler/utils')
-rw-r--r-- | compiler/utils/arm/assembler_arm.cc | 3 | ||||
-rw-r--r-- | compiler/utils/mips/assembler_mips.cc | 3 | ||||
-rw-r--r-- | compiler/utils/x86/assembler_x86.cc | 3 |
3 files changed, 9 insertions, 0 deletions
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, |