diff options
author | Shih-wei Liao <sliao@google.com> | 2011-10-24 02:20:31 -0700 |
---|---|---|
committer | Shih-wei Liao <sliao@google.com> | 2011-10-27 10:22:11 -0700 |
commit | 39723d3bdd9532af903efeac8908391bb94a12ac (patch) | |
tree | 7c3c3c33c152466732be79812f47a3f994033af6 /test/ReferenceMap | |
parent | 9fdfc1808f2a3845ee7e890a4e5d22a10f2ee93d (diff) | |
download | art-39723d3bdd9532af903efeac8908391bb94a12ac.zip art-39723d3bdd9532af903efeac8908391bb94a12ac.tar.gz art-39723d3bdd9532af903efeac8908391bb94a12ac.tar.bz2 |
Fix the ReferenceMap test.
Change-Id: Ib580210b2b51f5cf4480843dbb6b939bc2584956
Diffstat (limited to 'test/ReferenceMap')
-rw-r--r-- | test/ReferenceMap/stack_walk_refmap_jni.cc | 191 |
1 files changed, 83 insertions, 108 deletions
diff --git a/test/ReferenceMap/stack_walk_refmap_jni.cc b/test/ReferenceMap/stack_walk_refmap_jni.cc index af2c4f3..2566f05 100644 --- a/test/ReferenceMap/stack_walk_refmap_jni.cc +++ b/test/ReferenceMap/stack_walk_refmap_jni.cc @@ -10,19 +10,19 @@ namespace art { -#define REG(method, reg_bitmap, reg) \ +#define IS_IN_REF_BITMAP(method, ref_bitmap, reg) \ ( ((reg) < (method)->NumRegisters()) && \ - (( *((reg_bitmap) + (reg)/8) >> ((reg) % 8) ) & 0x01) ) + (( *((ref_bitmap) + (reg)/8) >> ((reg) % 8) ) & 0x01) ) -#define CHECK_REGS(...) do { \ +#define CHECK_REGS_CONTAIN_REFS(...) \ + do { \ int t[] = {__VA_ARGS__}; \ int t_size = sizeof(t) / sizeof(*t); \ for (int i = 0; i < t_size; ++i) \ - EXPECT_TRUE(REG(m, reg_bitmap, t[i])) << "Error: Reg " << i << " is not in RegisterMap"; \ + CHECK(IS_IN_REF_BITMAP(m, ref_bitmap, t[i])) \ + << "Error: Reg @ " << i << "-th argument is not in GC map"; \ } while(false) -// << "Error: Reg " << i << " is not in RegisterMap"; - struct ReferenceMap2Visitor : public Thread::StackVisitor { ReferenceMap2Visitor() { } @@ -45,114 +45,89 @@ struct ReferenceMap2Visitor : public Thread::StackVisitor { return; } - const uint8_t* reg_bitmap = NULL; + const uint8_t* ref_bitmap = NULL; std::string m_name = m->GetName()->ToModifiedUtf8(); // Given the method name and the number of times the method has been called, // we know the Dex registers with live reference values. Assert that what we // find is what is expected. if (m_name.compare("f") == 0) { - reg_bitmap = map.FindBitMap(0x01U); - if (reg_bitmap) { - LOG(WARNING) << "Reg1: " << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(7); //v7: this - } - - reg_bitmap = map.FindBitMap(0x02U); - if (reg_bitmap) { - LOG(WARNING) << "Reg2: " << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(7); //v7: this - } - - reg_bitmap = map.FindBitMap(0x03U); - if (reg_bitmap) { - LOG(WARNING) << "Reg3: " << std::hex << reg_bitmap[0] << reg_bitmap[1]; - CHECK_REGS(7); //v7: this - } - - reg_bitmap = map.FindBitMap(0x05U); - if (reg_bitmap) { - LOG(WARNING) << "Reg4: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 7); //v0: x, v7: this - } - - reg_bitmap = map.FindBitMap(0x06U); - if (reg_bitmap) { - LOG(WARNING) << "Reg5: " << std::hex << reg_bitmap[0] << reg_bitmap[1]; - CHECK_REGS(0, 7); //v0: x, v7: this - } - - reg_bitmap = map.FindBitMap(0x08U); - if (reg_bitmap) { - LOG(WARNING) << "Reg6: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 2, 7); //v0: x, v2: y, v7: this - } - - reg_bitmap = map.FindBitMap(0x0bU); - if (reg_bitmap) { - LOG(WARNING) << "Reg7: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 2, 7); //v0: x, v2: y, v7: this - } - - reg_bitmap = map.FindBitMap(0x0cU); - if (reg_bitmap) { - LOG(WARNING) << "Reg8: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 2, 7); //v0: x, v2: y, v7: this - } - - reg_bitmap = map.FindBitMap(0x38U); - if (reg_bitmap) { - LOG(WARNING) << "Reg9: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 2, 7); //v0: x, v2: y, v7: this - } - - reg_bitmap = map.FindBitMap(0x39U); - if (reg_bitmap) { - LOG(WARNING) << "Reg10: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 2, 7, 1); //v0: x, v2: y, v7: this, v1: ex - } - - reg_bitmap = map.FindBitMap(0x3aU); - if (reg_bitmap) { - LOG(WARNING) << "Reg11: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 2, 7, 1); //v0: x, v2: y, v7: this, v1: y - } - - reg_bitmap = map.FindBitMap(0x16U); - if (reg_bitmap) { - LOG(WARNING) << "Reg12: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 7, 1); //v0: x, v7: this, v1: y - } - - reg_bitmap = map.FindBitMap(0x20U); - if (reg_bitmap) { - LOG(WARNING) << "Reg13: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 7, 1); //v0: x, v7: this, v1: y - } - - reg_bitmap = map.FindBitMap(0x22U); - if (reg_bitmap) { - LOG(WARNING) << "Reg14: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 7, 1); //v0: x, v7: this, v1: y - } - - reg_bitmap = map.FindBitMap(0x25U); - if (reg_bitmap) { - LOG(WARNING) << "Reg15: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0); //v0: x, v7: this, v1: y - } - - reg_bitmap = map.FindBitMap(0x26U); - if (reg_bitmap) { - LOG(WARNING) << "Reg16: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 7, 1); //v0: y, v7: this, v1: y - } - - reg_bitmap = map.FindBitMap(0x14U); - if (reg_bitmap) { - LOG(WARNING) << "Reg17: " << std::hex << *reg_bitmap << *(reg_bitmap+1); - CHECK_REGS(0, 7); //v0: y, v7: this - } + ref_bitmap = map.FindBitMap(0x03U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8); // v8: this + + ref_bitmap = map.FindBitMap(0x06U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 1); // v7: this, v2: x + + ref_bitmap = map.FindBitMap(0x08U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 3, 1); // v7: this, v2: x, v0: y + + ref_bitmap = map.FindBitMap(0x0cU); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 3, 1); // v7: this, v2: x, v0: y + + ref_bitmap = map.FindBitMap(0x0eU); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 3, 1); // v7: this, v2: x, v0: y + + ref_bitmap = map.FindBitMap(0x10U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 3, 1); // v7: this, v2: x, v0: y + + ref_bitmap = map.FindBitMap(0x13U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 3, 2, 1); // v7: this, v2: x, v0: y + + ref_bitmap = map.FindBitMap(0x15U); + CHECK(ref_bitmap); + // FIXME: v1? + CHECK_REGS_CONTAIN_REFS(8, 2, 1, 0); // v7: this, v2: x, v0: y, v1: y or ex. + + ref_bitmap = map.FindBitMap(0x18U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 2, 1, 0); // v7: this, v2: x, v0: y + + ref_bitmap = map.FindBitMap(0x1aU); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 5, 2, 1, 0); // v7: this, v2: x, v0: y, v3: x[1] + + ref_bitmap = map.FindBitMap(0x1dU); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 5, 2, 1, 0); // v7: this, v2: x, v0: y, v3: x[1] + + ref_bitmap = map.FindBitMap(0x1fU); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 2, 1, 0); // v7: this, v2: x, v0: y + + ref_bitmap = map.FindBitMap(0x21U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 2, 1, 0); // v7: this, v2: x, v0: y + + ref_bitmap = map.FindBitMap(0x25U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 3, 2, 1, 0); // v7: this, v2: x, v0: y + + ref_bitmap = map.FindBitMap(0x27U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 4, 2, 1); // v7: this, v2: x, v0: ex, v1: y + + ref_bitmap = map.FindBitMap(0x29U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 4, 2, 1); // v7: this, v2: x, v0: ex, v1: y + + ref_bitmap = map.FindBitMap(0x2cU); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 4, 2, 1); // v7: this, v2: x, v0: ex, v1: y + + ref_bitmap = map.FindBitMap(0x2fU); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 4, 3, 2, 1); // v7: this, v2: x, v0: ex, v1: y, v6: ex + + ref_bitmap = map.FindBitMap(0x32U); + CHECK(ref_bitmap); + CHECK_REGS_CONTAIN_REFS(8, 3, 2, 1, 0); // v7: this, v2: x, v0: ex, v1: y } } |