diff options
| author | Ian Rogers <irogers@google.com> | 2012-06-06 17:09:28 -0700 |
|---|---|---|
| committer | Ian Rogers <irogers@google.com> | 2012-06-21 22:11:24 -0700 |
| commit | 0399dde18753aa9bd2bd0d7cf60beef154d164a4 (patch) | |
| tree | ea88327c01ca321074aaa59b97e4c54348802937 /test/StackWalk | |
| parent | de5705dcf4ab5f92d48e144bcd7b59f7bcd18e16 (diff) | |
| download | android_art-0399dde18753aa9bd2bd0d7cf60beef154d164a4.tar.gz android_art-0399dde18753aa9bd2bd0d7cf60beef154d164a4.tar.bz2 android_art-0399dde18753aa9bd2bd0d7cf60beef154d164a4.zip | |
Remove Frame, merge shadow and quick representations.
Change-Id: I5ae03a5e52111792d2df7e83cbd89ab25777844b
Diffstat (limited to 'test/StackWalk')
| -rw-r--r-- | test/StackWalk/stack_walk_jni.cc | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/test/StackWalk/stack_walk_jni.cc b/test/StackWalk/stack_walk_jni.cc index 15d866f4f0..37731981ff 100644 --- a/test/StackWalk/stack_walk_jni.cc +++ b/test/StackWalk/stack_walk_jni.cc @@ -29,31 +29,36 @@ namespace art { ( ((reg) < mh.GetCodeItem()->registers_size_) && \ (( *((reg_bitmap) + (reg)/8) >> ((reg) % 8) ) & 0x01) ) -#define CHECK_REGS(...) do { \ - int t[] = {__VA_ARGS__}; \ - int t_size = sizeof(t) / sizeof(*t); \ - for (int i = 0; i < t_size; ++i) \ - CHECK(REG(mh, reg_bitmap, t[i])) << "Error: Reg " << i << " is not in RegisterMap"; \ - } while (false) +#define CHECK_REGS(...) if (!IsShadowFrame()) { \ + int t[] = {__VA_ARGS__}; \ + int t_size = sizeof(t) / sizeof(*t); \ + for (int i = 0; i < t_size; ++i) \ + CHECK(REG(mh, reg_bitmap, t[i])) << "Error: Reg " << i << " is not in RegisterMap"; \ + } static int gJava_StackWalk_refmap_calls = 0; -struct TestReferenceMapVisitor : public Thread::StackVisitor { - TestReferenceMapVisitor() { +struct TestReferenceMapVisitor : public StackVisitor { + explicit TestReferenceMapVisitor(const ManagedStack* stack, + const std::vector<TraceStackFrame>* trace_stack) : + StackVisitor(stack, trace_stack) { } - bool VisitFrame(const Frame& frame, uintptr_t pc) { - Method* m = frame.GetMethod(); + bool VisitFrame() { + Method* m = GetMethod(); CHECK(m != NULL); LOG(INFO) << "At " << PrettyMethod(m, false); if (m->IsCalleeSaveMethod() || m->IsNative()) { LOG(WARNING) << "no PC for " << PrettyMethod(m); - CHECK_EQ(pc, 0u); + CHECK_EQ(GetDexPc(), DexFile::kDexNoIndex); return true; } - verifier::PcToReferenceMap map(m->GetGcMap(), m->GetGcMapLength()); - const uint8_t* reg_bitmap = map.FindBitMap(m->ToDexPC(pc)); + const uint8_t* reg_bitmap = NULL; + if (!IsShadowFrame()) { + verifier::PcToReferenceMap map(m->GetGcMap(), m->GetGcMapLength()); + reg_bitmap = map.FindBitMap(GetDexPc()); + } MethodHelper mh(m); StringPiece m_name(mh.GetName()); @@ -62,29 +67,29 @@ struct TestReferenceMapVisitor : public Thread::StackVisitor { // find is what is expected. if (m_name == "f") { if (gJava_StackWalk_refmap_calls == 1) { - CHECK_EQ(1U, m->ToDexPC(pc)); + CHECK_EQ(1U, GetDexPc()); CHECK_REGS(1); } else { CHECK_EQ(gJava_StackWalk_refmap_calls, 2); - CHECK_EQ(5U, m->ToDexPC(pc)); + CHECK_EQ(5U, GetDexPc()); CHECK_REGS(1); } } else if (m_name == "g") { if (gJava_StackWalk_refmap_calls == 1) { - CHECK_EQ(0xcU, m->ToDexPC(pc)); + CHECK_EQ(0xcU, GetDexPc()); CHECK_REGS(0, 2); // Note that v1 is not in the minimal root set } else { CHECK_EQ(gJava_StackWalk_refmap_calls, 2); - CHECK_EQ(0xcU, m->ToDexPC(pc)); + CHECK_EQ(0xcU, GetDexPc()); CHECK_REGS(0, 2); } } else if (m_name == "shlemiel") { if (gJava_StackWalk_refmap_calls == 1) { - CHECK_EQ(0x380U, m->ToDexPC(pc)); + CHECK_EQ(0x380U, GetDexPc()); CHECK_REGS(2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 25); } else { CHECK_EQ(gJava_StackWalk_refmap_calls, 2); - CHECK_EQ(0x380U, m->ToDexPC(pc)); + CHECK_EQ(0x380U, GetDexPc()); CHECK_REGS(2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 25); } } @@ -99,8 +104,9 @@ extern "C" JNIEXPORT jint JNICALL Java_StackWalk_refmap(JNIEnv*, jobject, jint c gJava_StackWalk_refmap_calls++; // Visitor - TestReferenceMapVisitor mapper; - Thread::Current()->WalkStack(&mapper); + TestReferenceMapVisitor mapper(Thread::Current()->GetManagedStack(), + Thread::Current()->GetTraceStack()); + mapper.WalkStack(); return count + 1; } @@ -109,8 +115,9 @@ extern "C" JNIEXPORT jint JNICALL Java_StackWalk2_refmap2(JNIEnv*, jobject, jint gJava_StackWalk_refmap_calls++; // Visitor - TestReferenceMapVisitor mapper; - Thread::Current()->WalkStack(&mapper); + TestReferenceMapVisitor mapper(Thread::Current()->GetManagedStack(), + Thread::Current()->GetTraceStack()); + mapper.WalkStack(); return count + 1; } |
