Fixes relating to 003-omnibus-opcodes
Fix computation of bits needed for a PC in GC map.
In the case that ClassLinker::FindClass fails with a class loader,
ignore the exception and raise a NoClassDefFoundError.
Elide callee-save methods from stack traces.
Change-Id: Ie0b7a544816e0c28d0f7df5821828aa84267cab7
diff --git a/src/dex_verifier.cc b/src/dex_verifier.cc
index 7c3b4db..4f22448 100644
--- a/src/dex_verifier.cc
+++ b/src/dex_verifier.cc
@@ -3676,7 +3676,7 @@
*gc_points = local_gc_points;
*ref_bitmap_bits = max_ref_reg + 1; // if max register is 0 we need 1 bit to encode (ie +1)
size_t i = 0;
- while ((1U << i) < max_insn) {
+ while ((1U << i) <= max_insn) {
i++;
}
*log2_max_gc_pc = i;
@@ -3702,10 +3702,10 @@
}
size_t pc_bytes;
RegisterMapFormat format;
- if (pc_bits < 8) {
+ if (pc_bits <= 8) {
format = kRegMapFormatCompact8;
pc_bytes = 1;
- } else if (pc_bits < 16) {
+ } else if (pc_bits <= 16) {
format = kRegMapFormatCompact16;
pc_bytes = 2;
} else {