diff options
| -rw-r--r-- | runtime/verifier/method_verifier.cc | 11 | ||||
| -rw-r--r-- | runtime/verifier/method_verifier.h | 4 |
2 files changed, 12 insertions, 3 deletions
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc index 416ada84cd..afb3224944 100644 --- a/runtime/verifier/method_verifier.cc +++ b/runtime/verifier/method_verifier.cc @@ -1685,10 +1685,15 @@ void MethodVerifier::Dump(VariableIndentationOutputStream* vios) { for (const DexInstructionPcPair& inst : code_item_accessor_) { const size_t dex_pc = inst.DexPc(); - RegisterLine* reg_line = reg_table_.GetLine(dex_pc); - if (reg_line != nullptr) { - vios->Stream() << reg_line->Dump(this) << "\n"; + + // Might be asked to dump before the table is initialized. + if (reg_table_.IsInitialized()) { + RegisterLine* reg_line = reg_table_.GetLine(dex_pc); + if (reg_line != nullptr) { + vios->Stream() << reg_line->Dump(this) << "\n"; + } } + vios->Stream() << StringPrintf("0x%04zx", dex_pc) << ": " << GetInstructionFlags(dex_pc).ToString() << " "; const bool kDumpHexOfInstruction = false; diff --git a/runtime/verifier/method_verifier.h b/runtime/verifier/method_verifier.h index cadf4eb0ba..26c598f224 100644 --- a/runtime/verifier/method_verifier.h +++ b/runtime/verifier/method_verifier.h @@ -77,6 +77,10 @@ class PcToRegisterLineTable { void Init(RegisterTrackingMode mode, InstructionFlags* flags, uint32_t insns_size, uint16_t registers_size, MethodVerifier* verifier); + bool IsInitialized() const { + return !register_lines_.empty(); + } + RegisterLine* GetLine(size_t idx) const { return register_lines_[idx].get(); } |