diff options
author | Ian Rogers <irogers@google.com> | 2012-09-19 13:33:42 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-20 15:26:35 -0700 |
commit | 0c7abda482f53db3d153c073d1c7a145f84e0626 (patch) | |
tree | 837b89c75f0047cbcd16c9121739069a36b4f22a /test/ReferenceMap | |
parent | ba0b9c55adce3f533845ab1b25c552589e5b4118 (diff) | |
download | art-0c7abda482f53db3d153c073d1c7a145f84e0626.zip art-0c7abda482f53db3d153c073d1c7a145f84e0626.tar.gz art-0c7abda482f53db3d153c073d1c7a145f84e0626.tar.bz2 |
NativePcOffsetToReferenceMap
Rather than translate a native PC to a Dex PC and then to the reference
bitmap, just go straight from the native PC to the reference bitmap.
Encode the native PC offsets using a hash rather than linearly
searching.
Change-Id: Iee1073d93c941c0a31f639e5f23cea9e9f747bee
Diffstat (limited to 'test/ReferenceMap')
-rw-r--r-- | test/ReferenceMap/stack_walk_refmap_jni.cc | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/test/ReferenceMap/stack_walk_refmap_jni.cc b/test/ReferenceMap/stack_walk_refmap_jni.cc index 8cb1ed2..649e6ea 100644 --- a/test/ReferenceMap/stack_walk_refmap_jni.cc +++ b/test/ReferenceMap/stack_walk_refmap_jni.cc @@ -18,12 +18,12 @@ #include "UniquePtr.h" #include "class_linker.h" +#include "gc_map.h" #include "object.h" #include "object_utils.h" #include "scoped_thread_state_change.h" #include "thread.h" #include "jni.h" -#include "verifier/gc_map.h" #include "verifier/method_verifier.h" namespace art { @@ -55,7 +55,7 @@ struct ReferenceMap2Visitor : public StackVisitor { } LOG(INFO) << "At " << PrettyMethod(m, false); - verifier::DexPcToReferenceMap map(m->GetGcMap(), m->GetGcMapLength()); + NativePcOffsetToReferenceMap map(m->GetNativeGcMap()); if (m->IsCalleeSaveMethod()) { LOG(WARNING) << "no PC for " << PrettyMethod(m); @@ -75,31 +75,31 @@ struct ReferenceMap2Visitor : public StackVisitor { // we know the Dex registers with live reference values. Assert that what we // find is what is expected. if (m_name.compare("f") == 0) { - ref_bitmap = map.FindBitMap(0x03U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x03U))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8); // v8: this - ref_bitmap = map.FindBitMap(0x06U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x06U))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 1); // v8: this, v1: x - ref_bitmap = map.FindBitMap(0x08U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x08U))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 3, 1); // v8: this, v3: y, v1: x - ref_bitmap = map.FindBitMap(0x0cU); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x0cU))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 3, 1); // v8: this, v3: y, v1: x - ref_bitmap = map.FindBitMap(0x0eU); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x0eU))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 3, 1); // v8: this, v3: y, v1: x - ref_bitmap = map.FindBitMap(0x10U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x10U))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 3, 1); // v8: this, v3: y, v1: x - ref_bitmap = map.FindBitMap(0x13U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x13U))); CHECK(ref_bitmap); // v2 is added because of the instruction at DexPC 0024. Object merges with 0 is Object. See: // 0024: move-object v3, v2 @@ -107,53 +107,49 @@ struct ReferenceMap2Visitor : public StackVisitor { // Detaled dex instructions for ReferenceMap.java are at the end of this function. CHECK_REGS_CONTAIN_REFS(8, 3, 2, 1); // v8: this, v3: y, v2: y, v1: x - ref_bitmap = map.FindBitMap(0x15U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x18U))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 2, 1, 0); // v8: this, v2: y, v1: x, v0: ex - ref_bitmap = map.FindBitMap(0x18U); - CHECK(ref_bitmap); - CHECK_REGS_CONTAIN_REFS(8, 2, 1, 0); // v8: this, v2: y, v1: x, v0: ex - - ref_bitmap = map.FindBitMap(0x1aU); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x1aU))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 5, 2, 1, 0); // v8: this, v5: x[1], v2: y, v1: x, v0: ex - ref_bitmap = map.FindBitMap(0x1dU); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x1dU))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 5, 2, 1, 0); // v8: this, v5: x[1], v2: y, v1: x, v0: ex - ref_bitmap = map.FindBitMap(0x1fU); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x1fU))); CHECK(ref_bitmap); // v5 is removed from the root set because there is a "merge" operation. // See 0015: if-nez v2, 001f. CHECK_REGS_CONTAIN_REFS(8, 2, 1, 0); // v8: this, v2: y, v1: x, v0: ex - ref_bitmap = map.FindBitMap(0x21U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x21U))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 2, 1, 0); // v8: this, v2: y, v1: x, v0: ex - ref_bitmap = map.FindBitMap(0x25U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x25U))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 3, 2, 1, 0); // v8: this, v3: y, v2: y, v1: x, v0: ex - ref_bitmap = map.FindBitMap(0x27U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x27U))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 4, 2, 1); // v8: this, v4: ex, v2: y, v1: x - ref_bitmap = map.FindBitMap(0x29U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x29U))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 4, 2, 1); // v8: this, v4: ex, v2: y, v1: x - ref_bitmap = map.FindBitMap(0x2cU); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x2cU))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 4, 2, 1); // v8: this, v4: ex, v2: y, v1: x - ref_bitmap = map.FindBitMap(0x2fU); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x2fU))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 4, 3, 2, 1); // v8: this, v4: ex, v3: y, v2: y, v1: x - ref_bitmap = map.FindBitMap(0x32U); + ref_bitmap = map.FindBitMap(m->NativePcOffset(m->ToNativePc(0x32U))); CHECK(ref_bitmap); CHECK_REGS_CONTAIN_REFS(8, 3, 2, 1, 0); // v8: this, v3: y, v2: y, v1: x, v0: ex } |