[PATCH 1/2] This patch fixes GDBServer's run control for single stepping
Antoine Tremblay
antoine.tremblay@ericsson.com
Sun Feb 19 19:40:00 GMT 2017
Yao Qi writes:
> On 17-02-17 19:17:56, Antoine Tremblay wrote:
>> > In ARM ARM, we have the pseudo code,
>> >
>> > boolean InITBlock()
>> > return (ITSTATE.IT<3:0> != â0000â);
>> >
>> > ITSTATE can be got from CPSR.
>>
>> Yes that's good if you're inserting a breakpoint at current PC but
>> otherwise you will need something else...
>
> In software single step, we calculate the next pcs, and select
> breakpoint kinds of them, according to current pc. If current
> pc is not within IT block (!InITBlock ()) or the last instruction
> in IT block (LastInITBlock ()), we can safely use 16-bit thumb
> breakpoint for any thumb instruction. That is, in
> gdbserver/linux-aarch32-low.c:arm_breakpoint_kind_from_current_state,
> we can return ARM_BP_KIND_THUMB if (!InITBlock () || LastInITBlock ()).
>
> Then, in some level, when installing software single step breakpoints,
> if one breakpoint type is ARM_BP_KIND_THUMB2 and installed
> address is 2-byte aligned, stop all threads.
Yes that would make sense but I think we can be calling get_next_pc
to insert a software single step breakpoint at an address different then
the current PCs next address.
See: https://sourceware.org/ml/gdb-patches/2016-06/msg00268.html
"> If we only remove before reporting an event to gdb, then I don't
> understand this. We already insert single-step breakpoints when
> we process the resume request from gdb, no?
We insert single-step breakpoints when we process the resume requests
and threads are about to be resumed. If threads still have pending
status, single-step breakpoints are not installed, so we need to install
them in proceed_all_lwps."
This is still true AFAIK so GDBServer may be at any PC stopped on a
pending event and need to insert a single step breakpoint at an address
unrelated to that event so in that case CPSR can't be used...
Thanks,
Antoine
More information about the Gdb-patches
mailing list