Commit 88fe8a41f2abbee28948626a4e6426d17f0498bf
1 parent
b3ceef24
DR6 single step exception status bit, by Juergen Keil.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3024 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
13 additions
and
1 deletions
target-i386/exec.h
| ... | ... | @@ -190,6 +190,7 @@ void helper_divq_EAX_T0(void); |
| 190 | 190 | void helper_idivq_EAX_T0(void); |
| 191 | 191 | void helper_bswapq_T0(void); |
| 192 | 192 | void helper_cmpxchg8b(void); |
| 193 | +void helper_single_step(void); | |
| 193 | 194 | void helper_cpuid(void); |
| 194 | 195 | void helper_enter_level(int level, int data32); |
| 195 | 196 | void helper_enter64_level(int level, int data64); | ... | ... |
target-i386/helper.c
| ... | ... | @@ -1622,6 +1622,12 @@ void helper_cmpxchg8b(void) |
| 1622 | 1622 | CC_SRC = eflags; |
| 1623 | 1623 | } |
| 1624 | 1624 | |
| 1625 | +void helper_single_step() | |
| 1626 | +{ | |
| 1627 | + env->dr[6] |= 0x4000; | |
| 1628 | + raise_exception(EXCP01_SSTP); | |
| 1629 | +} | |
| 1630 | + | |
| 1625 | 1631 | void helper_cpuid(void) |
| 1626 | 1632 | { |
| 1627 | 1633 | uint32_t index; | ... | ... |
target-i386/op.c
target-i386/translate.c
| ... | ... | @@ -2277,7 +2277,7 @@ static void gen_eob(DisasContext *s) |
| 2277 | 2277 | if (s->singlestep_enabled) { |
| 2278 | 2278 | gen_op_debug(); |
| 2279 | 2279 | } else if (s->tf) { |
| 2280 | - gen_op_raise_exception(EXCP01_SSTP); | |
| 2280 | + gen_op_single_step(); | |
| 2281 | 2281 | } else { |
| 2282 | 2282 | gen_op_movl_T0_0(); |
| 2283 | 2283 | gen_op_exit_tb(); | ... | ... |