Am 06.12.2012 10:27, schrieb li guang: > 在 2012-12-06四的 09:23 +0000,Peter Maydell写道: >> On 6 December 2012 09:16, li guang <lig.f...@cn.fujitsu.com> wrote: >>> 在 2012-12-06四的 08:54 +0000,Peter Maydell写道: >>>> On 6 December 2012 03:03, liguang <lig.f...@cn.fujitsu.com> wrote: >>>>> Signed-off-by: liguang <lig.f...@cn.fujitsu.com> >>>>> --- a/target-i386/seg_helper.c >>>>> +++ b/target-i386/seg_helper.c >>>>> @@ -465,9 +465,9 @@ static void switch_tss(CPUX86State *env, int >>>>> tss_selector, >>>>> >>>>> #ifndef CONFIG_USER_ONLY >>>>> /* reset local breakpoints */ >>>>> - if (env->dr[7] & 0x55) { >>>>> - for (i = 0; i < 4; i++) { >>>>> - if (hw_breakpoint_enabled(env->dr[7], i) == 0x1) { >>>>> + if (env->dr[7] & DR7_LOCAL_BP_MASK) { >>>>> + for (i = 0; i < DR7_MAX_BP; i++) { >>>>> + if (hw_breakpoint_enabled(env->dr[7], i)) { >>>>> hw_breakpoint_remove(env, i); >>>>> } >>>>> } >>>> >>>> This is still wrong. >>> >>> do you mean the use of 'hw_breakpoint_enabled'? or others? >>> maybe a mistake, I change it to 'hw_local_breakpoint_enabled'. >>> if it is I'll re-send a corrected patch. >> >> I mean that in the comments on the previous version of this >> patchseet we explained that this check is specifically checking >> for whether the breakpoint is enabled locally, and that your >> change to just returning bool broke this. And in this version >> of the patch there is still exactly the same problem. > > why broke? > this function just ask if breakpoint 'i' was enable, > so we answer enabled or not? 2 simple cases, any problem?
The code comment specifically says "reset local breakpoints". IIUC you are also resetting global breakpoints, which you shouldn't. Personally I'd be fine with a hw_local_breakpoint_enabled(). Regards, Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg