diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-04-17 19:16:13 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-04-17 19:16:13 +0000 |
commit | 1fddef4b1ba3bf14d36472475019a4a6acd4d976 (patch) | |
tree | 4cef1b563a49637d0bd0cacc5ec4c78c32e953de /target-arm/translate.c | |
parent | 6e4255f6a65091fbe7d17bfda546e2aa1b72f9a6 (diff) | |
download | qemu-1fddef4b1ba3bf14d36472475019a4a6acd4d976.zip qemu-1fddef4b1ba3bf14d36472475019a4a6acd4d976.tar.gz qemu-1fddef4b1ba3bf14d36472475019a4a6acd4d976.tar.bz2 |
gdb support for user mode (Paul Brook)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1367 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-arm/translate.c')
-rw-r--r-- | target-arm/translate.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/target-arm/translate.c b/target-arm/translate.c index 39c28e7..280b68c 100644 --- a/target-arm/translate.c +++ b/target-arm/translate.c @@ -2026,6 +2026,17 @@ static inline int gen_intermediate_code_internal(CPUState *env, dc->pc = pc_start; lj = -1; do { + if (env->nb_breakpoints > 0) { + for(j = 0; j < env->nb_breakpoints; j++) { + if (env->breakpoints[j] == dc->pc) { + gen_op_movl_T0_im((long)dc->pc); + gen_op_movl_reg_TN[0][15](); + gen_op_debug(); + dc->is_jmp = DISAS_JUMP; + break; + } + } + } if (search_pc) { j = gen_opc_ptr - gen_opc_buf; if (lj < j) { @@ -2040,7 +2051,8 @@ static inline int gen_intermediate_code_internal(CPUState *env, disas_thumb_insn(dc); else disas_arm_insn(env, dc); - } while (!dc->is_jmp && gen_opc_ptr < gen_opc_end && + } while (!dc->is_jmp && gen_opc_ptr < gen_opc_end && + !env->singlestep_enabled && (dc->pc - pc_start) < (TARGET_PAGE_SIZE - 32)); switch(dc->is_jmp) { case DISAS_JUMP_NEXT: |