Re: [PATCH 0/9 V3] Use reinsert breakpoint for vCont;s

Antoine Tremblay
2016-11-25T14:28:34Z

Antoine Tremblay writes:

> Pedro Alves writes:
>
>> I'm behind on this whole discussion, but, the comment below
>> caught my attention:
>>
>> On 11/25/2016 01:12 PM, Antoine Tremblay wrote:
>>
>>> In fact thinking more about this we may need to remove all breakpoints
>>> at any pc since get_next_pc may read memory in other places then the
>>> current pc to deal with atomic sequences for example or for other
>>> instructions too.
>>>
>>> If it reads a breakpoint in memory there it may come-up with an invalid
>>> next pc.
>>
>> How can that happen, given gdbserver's memory read routine takes
>> share to hide breakpoint breakpoints?
>>
>> I.e., read_inferior_memory -> check_mem_read.
>>
>
> Indeed, this is because arm_get_next_pc uses (*the_target->read_memory)
> directly.
>
> This should be fixed for read_inferior_memory indeed and it would solve
> this issue, sorry I was not so familiar with the check_mem_read hiding
> breakpoints/fast tracepoints jumps.
>
> I'm not sure why it uses that directly at the moment, looks like a plain
> misstake but I'll dig a bit more.
>
> But it's just what we need this may easily fix that issue in particular!

Turns out this a problem in a few places on arm and on other arches too,
the only place you should call it directly basically is
{arch}_breakpoint_at.

Otherwise call target_read_memory.

I'll send patches for that.

Thanks!
Antoine