196516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFaddenHANDLE_OPCODE(OP_BREAKPOINT)
296516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden    {
396516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden        /*
496516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         * Restart this instruction with the original opcode.  We do
596516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         * this by simply jumping to the handler.
696516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         *
796516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         * It's probably not necessary to update "inst", but we do it
896516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         * for the sake of anything that needs to do disambiguation in a
996516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         * common handler with INST_INST.
1096516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         *
1199e3e6e72e3471eb85fc2e405866392b01c080febuzbee         * The breakpoint itself is handled over in updateDebugger(),
1296516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         * because we need to detect other events (method entry, single
1396516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         * step) and report them in the same event packet, and we're not
1496516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         * yet handling those through breakpoint instructions.  By the
1596516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         * time we get here, the breakpoint has already been handled and
1696516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         * the thread resumed.
1796516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden         */
189a1f81699cc05b58378ffb9aadb4e97677943791Dan Bornstein        u1 originalOpcode = dvmGetOriginalOpcode(pc);
1992c1f6f1b4249e4e379452ee7b49f027052bf4ceSteve Block        ALOGV("+++ break 0x%02x (0x%04x -> 0x%04x)", originalOpcode, inst,
209a1f81699cc05b58378ffb9aadb4e97677943791Dan Bornstein            INST_REPLACE_OP(inst, originalOpcode));
219a1f81699cc05b58378ffb9aadb4e97677943791Dan Bornstein        inst = INST_REPLACE_OP(inst, originalOpcode);
229a1f81699cc05b58378ffb9aadb4e97677943791Dan Bornstein        FINISH_BKPT(originalOpcode);
2396516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden    }
2496516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFaddenOP_END
25