On 19.10.2015 20:04, Richard Henderson wrote: > On 10/19/2015 01:04 AM, Sergey Fedorov wrote: >> On 19.10.2015 01:46, Richard Henderson wrote: >>> On 10/16/2015 04:08 AM, Sergey Fedorov wrote: >>>> On 16.10.2015 04:14, Richard Henderson wrote: >>>>> On 10/16/2015 03:36 AM, Peter Maydell wrote: >>>>>> On 14 October 2015 at 22:02, Richard Henderson <r...@twiddle.net> >>>>>> wrote: >>>>>>> On 10/15/2015 06:34 AM, Peter Maydell wrote: >>>>>>>> >>>>>>>> This is still the same cryptic comment we have in the >>>>>>>> targets which do do this. Can we have something >>>>>>>> that is a bit more explanatory about what is going on and >>>>>>>> why we need to do this, please? >>>>>>> >>>>>>> >>>>>>> Suggestions? >>>>>> >>>>>> ...well, I don't entirely understand the problem it's >>>>>> fixing, which is why I'm asking for a better comment :-) >>>>> >>>>> Heh. Fair enough. How about >>>>> >>>>> /* The address covered by the breakpoint must be included in >>>>> [tb->pc, tb->pc + tb->size) in order to for it to be >>>>> properly cleared -- thus we increment the PC here so that >>>>> the logic setting tb->size below does the right thing. */ >>>>> >>>>> There are two edge cases that cause the problem with clearing that >>>>> could be described, but I think that the comment becomes too >>>>> bulky, as >>>>> well as confuses the situation for someone cutting-and-pasting the >>>>> logic to a new port. >>>> >>>> Maybe we could rather fix that condition in >>>> tb_invalidate_phys_page_range()? It seems weird that it can't handle a >>>> zero-sized TB. >>> >>> We also need to be able to handle a TB which crosses a page. E.g. the >>> breakpoint is at the page boundary, and we fall through into it from >>> the top. This will be true on e.g. x86. This is not simply true for >>> breakpoint insertion/removal, but also page invalidation. >>> >>> The same fix, adding a byte to the size, handles this as well. >> >> It's clear except that instructions crossing a page boundary can be >> different in size. AFAIK, x86 instructions can be up to 15-byte long. >> What if only the very last byte of instruction crosses a page boundary? > > Then only the last byte crosses? What's your point?
My point is if "adding a byte to the size" handles such case as well. Best, Sergey