diff options
Diffstat (limited to 'compiler/dex/quick/codegen_util.cc')
| -rw-r--r-- | compiler/dex/quick/codegen_util.cc | 33 | 
1 files changed, 24 insertions, 9 deletions
diff --git a/compiler/dex/quick/codegen_util.cc b/compiler/dex/quick/codegen_util.cc index 509d4487ad..483a5d06cc 100644 --- a/compiler/dex/quick/codegen_util.cc +++ b/compiler/dex/quick/codegen_util.cc @@ -203,12 +203,17 @@ void Mir2Lir::DumpLIRInsn(LIR* lir, unsigned char* base_addr) {    /* Handle pseudo-ops individually, and all regular insns as a group */    switch (lir->opcode) { -    case kPseudoMethodEntry: -      LOG(INFO) << "-------- method entry " -                << PrettyMethod(cu_->method_idx, *cu_->dex_file); +    case kPseudoPrologueBegin: +      LOG(INFO) << "-------- PrologueBegin";        break; -    case kPseudoMethodExit: -      LOG(INFO) << "-------- Method_Exit"; +    case kPseudoPrologueEnd: +      LOG(INFO) << "-------- PrologueEnd"; +      break; +    case kPseudoEpilogueBegin: +      LOG(INFO) << "-------- EpilogueBegin"; +      break; +    case kPseudoEpilogueEnd: +      LOG(INFO) << "-------- EpilogueEnd";        break;      case kPseudoBarrier:        LOG(INFO) << "-------- BARRIER"; @@ -267,8 +272,9 @@ void Mir2Lir::DumpLIRInsn(LIR* lir, unsigned char* base_addr) {                                                 lir, base_addr));          std::string op_operands(BuildInsnString(GetTargetInstFmt(lir->opcode),                                                      lir, base_addr)); -        LOG(INFO) << StringPrintf("%5p: %-9s%s%s", +        LOG(INFO) << StringPrintf("%5p|0x%02x: %-9s%s%s",                                    base_addr + offset, +                                  lir->dalvik_offset,                                    op_name.c_str(), op_operands.c_str(),                                    lir->flags.is_nop ? "(nop)" : "");        } @@ -713,14 +719,17 @@ void Mir2Lir::CreateMappingTables() {    DCHECK_EQ(static_cast<size_t>(write_pos - &encoded_mapping_table_[0]), hdr_data_size);    uint8_t* write_pos2 = write_pos + pc2dex_data_size; +  bool is_in_prologue_or_epilogue = false;    pc2dex_offset = 0u;    pc2dex_dalvik_offset = 0u;    dex2pc_offset = 0u;    dex2pc_dalvik_offset = 0u;    for (LIR* tgt_lir = first_lir_insn_; tgt_lir != nullptr; tgt_lir = NEXT_LIR(tgt_lir)) { -    if (generate_src_map && !tgt_lir->flags.is_nop) { -      src_mapping_table_.push_back(SrcMapElem({tgt_lir->offset, -              static_cast<int32_t>(tgt_lir->dalvik_offset)})); +    if (generate_src_map && !tgt_lir->flags.is_nop && tgt_lir->opcode >= 0) { +      if (!is_in_prologue_or_epilogue) { +        src_mapping_table_.push_back(SrcMapElem({tgt_lir->offset, +                static_cast<int32_t>(tgt_lir->dalvik_offset)})); +      }      }      if (!tgt_lir->flags.is_nop && (tgt_lir->opcode == kPseudoSafepointPC)) {        DCHECK(pc2dex_offset <= tgt_lir->offset); @@ -738,6 +747,12 @@ void Mir2Lir::CreateMappingTables() {        dex2pc_offset = tgt_lir->offset;        dex2pc_dalvik_offset = tgt_lir->dalvik_offset;      } +    if (tgt_lir->opcode == kPseudoPrologueBegin || tgt_lir->opcode == kPseudoEpilogueBegin) { +      is_in_prologue_or_epilogue = true; +    } +    if (tgt_lir->opcode == kPseudoPrologueEnd || tgt_lir->opcode == kPseudoEpilogueEnd) { +      is_in_prologue_or_epilogue = false; +    }    }    DCHECK_EQ(static_cast<size_t>(write_pos - &encoded_mapping_table_[0]),              hdr_data_size + pc2dex_data_size);  |