Revision ea4e754f target-ppc/translate.c
b/target-ppc/translate.c | ||
---|---|---|
148 | 148 |
#endif |
149 | 149 |
int fpu_enabled; |
150 | 150 |
ppc_spr_t *spr_cb; /* Needed to check rights for mfspr/mtspr */ |
151 |
int singlestep_enabled; |
|
151 | 152 |
} DisasContext; |
152 | 153 |
|
153 | 154 |
struct opc_handler_t { |
... | ... | |
1738 | 1739 |
gen_op_set_T1(dest); |
1739 | 1740 |
gen_op_b_T1(); |
1740 | 1741 |
gen_op_set_T0((long)tb + n); |
1742 |
if (ctx->singlestep_enabled) |
|
1743 |
gen_op_debug(); |
|
1741 | 1744 |
gen_op_exit_tb(); |
1742 | 1745 |
} else { |
1743 | 1746 |
gen_op_set_T1(dest); |
1744 | 1747 |
gen_op_b_T1(); |
1748 |
if (ctx->singlestep_enabled) |
|
1749 |
gen_op_debug(); |
|
1745 | 1750 |
gen_op_set_T0(0); |
1746 | 1751 |
gen_op_exit_tb(); |
1747 | 1752 |
} |
... | ... | |
2520 | 2525 |
ctx.mem_idx = ((1 - msr_pr) << 1) | msr_le; |
2521 | 2526 |
#endif |
2522 | 2527 |
ctx.fpu_enabled = msr_fp; |
2528 |
ctx.singlestep_enabled = env->singlestep_enabled; |
|
2523 | 2529 |
#if defined (DO_SINGLE_STEP) && 0 |
2524 | 2530 |
/* Single step trace mode */ |
2525 | 2531 |
msr_se = 1; |
2526 | 2532 |
#endif |
2527 | 2533 |
/* Set env in case of segfault during code fetch */ |
2528 | 2534 |
while (ctx.exception == EXCP_NONE && gen_opc_ptr < gen_opc_end) { |
2535 |
if (env->nb_breakpoints > 0) { |
|
2536 |
for(j = 0; j < env->nb_breakpoints; j++) { |
|
2537 |
if (env->breakpoints[j] == ctx.nip) { |
|
2538 |
gen_op_update_nip(ctx.nip); |
|
2539 |
gen_op_debug(); |
|
2540 |
break; |
|
2541 |
} |
|
2542 |
} |
|
2543 |
} |
|
2529 | 2544 |
if (search_pc) { |
2530 | 2545 |
j = gen_opc_ptr - gen_opc_buf; |
2531 | 2546 |
if (lj < j) { |
... | ... | |
2616 | 2631 |
ctx.exception != EXCP_TRAP)) { |
2617 | 2632 |
RET_EXCP(ctxp, EXCP_TRACE, 0); |
2618 | 2633 |
} |
2619 |
/* if we reach a page boundary, stop generation */ |
|
2620 |
if ((ctx.nip & (TARGET_PAGE_SIZE - 1)) == 0) { |
|
2634 |
|
|
2635 |
/* if we reach a page boundary or are single stepping, stop |
|
2636 |
* generation |
|
2637 |
*/ |
|
2638 |
if (((ctx.nip & (TARGET_PAGE_SIZE - 1)) == 0) || |
|
2639 |
(env->singlestep_enabled)) { |
|
2621 | 2640 |
break; |
2622 | 2641 |
} |
2623 | 2642 |
#if defined (DO_SINGLE_STEP) |
Also available in: Unified diff