diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2014-08-13 02:11:24 +0100 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2014-09-17 09:53:50 +0100 |
commit | e982f0b8e809cece6f460fa2d8df25873aa69de4 (patch) | |
tree | df729d47439f7243b498dd4503a5f7aa41a4818b /test/004-StackWalk | |
parent | f031724abf4f215e1627ff837f87cad5d7a25165 (diff) | |
download | art-e982f0b8e809cece6f460fa2d8df25873aa69de4.tar.gz art-e982f0b8e809cece6f460fa2d8df25873aa69de4.tar.bz2 art-e982f0b8e809cece6f460fa2d8df25873aa69de4.zip |
Implement invoke virtual in optimizing compiler.
Also refactor 004 tests to make them work with both Quick and
Optimizing.
Change-Id: I87e275cb0ae0258fc3bb32b612140000b1d2adf8
Diffstat (limited to 'test/004-StackWalk')
-rw-r--r-- | test/004-StackWalk/stack_walk_jni.cc | 49 |
1 files changed, 12 insertions, 37 deletions
diff --git a/test/004-StackWalk/stack_walk_jni.cc b/test/004-StackWalk/stack_walk_jni.cc index 30a0d5906a..c40de7e247 100644 --- a/test/004-StackWalk/stack_walk_jni.cc +++ b/test/004-StackWalk/stack_walk_jni.cc @@ -14,54 +14,29 @@ * limitations under the License. */ -#include <stdio.h> -#include <memory> - -#include "class_linker.h" -#include "gc_map.h" -#include "mirror/art_method-inl.h" -#include "mirror/class-inl.h" -#include "mirror/object_array-inl.h" -#include "mirror/object-inl.h" +#include "check_reference_map_visitor.h" #include "jni.h" -#include "scoped_thread_state_change.h" namespace art { -#define REG(reg_bitmap, reg) \ - (((reg) < m->GetCodeItem()->registers_size_) && \ - ((*((reg_bitmap) + (reg)/8) >> ((reg) % 8) ) & 0x01)) - -#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(reg_bitmap, t[i])) << "Error: Reg " << i << " is not in RegisterMap"; \ - } +#define CHECK_REGS(...) do { \ + int t[] = {__VA_ARGS__}; \ + int t_size = sizeof(t) / sizeof(*t); \ + CheckReferences(t, t_size, GetNativePcOffset()); \ +} while (false); static int gJava_StackWalk_refmap_calls = 0; -struct TestReferenceMapVisitor : public StackVisitor { - explicit TestReferenceMapVisitor(Thread* thread) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) - : StackVisitor(thread, NULL) { - } +class TestReferenceMapVisitor : public CheckReferenceMapVisitor { + public: + explicit TestReferenceMapVisitor(Thread* thread) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) + : CheckReferenceMapVisitor(thread) {} bool VisitFrame() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* 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(GetDexPc(), DexFile::kDexNoIndex); + if (CheckReferenceMapVisitor::VisitFrame()) { return true; } - const uint8_t* reg_bitmap = NULL; - if (!IsShadowFrame()) { - NativePcOffsetToReferenceMap map(m->GetNativeGcMap()); - reg_bitmap = map.FindBitMap(GetNativePcOffset()); - } + mirror::ArtMethod* m = GetMethod(); StringPiece m_name(m->GetName()); // Given the method name and the number of times the method has been called, |