HANDLE_OPCODE(OP_BREAKPOINT) { /* * Restart this instruction with the original opcode. We do * this by simply jumping to the handler. * * It's probably not necessary to update "inst", but we do it * for the sake of anything that needs to do disambiguation in a * common handler with INST_INST. * * The breakpoint itself is handled over in updateDebugger(), * because we need to detect other events (method entry, single * step) and report them in the same event packet, and we're not * yet handling those through breakpoint instructions. By the * time we get here, the breakpoint has already been handled and * the thread resumed. */ u1 originalOpcode = dvmGetOriginalOpcode(pc); ALOGV("+++ break 0x%02x (0x%04x -> 0x%04x)", originalOpcode, inst, INST_REPLACE_OP(inst, originalOpcode)); inst = INST_REPLACE_OP(inst, originalOpcode); FINISH_BKPT(originalOpcode); } OP_END