Re: Is there single step debugging support being added to aarch64-linux?

Prafull Suryawanshi
2015-06-16T05:22:02Z

(sent too early, putting complete reply)

I debugged this one and found that when compared to gdb-arm,
gdb-aarch64 behaves little different.
Before even invoking software-single-step operations, gdb-arm invokes
Z0 packet before getting registers.
But gdb-aarch64 does not do it. It sets the Z0 after reading registers.
So in case gdb-arm, the Z0 is set to next pc value.
But for gdb-aarch64 it sets the Z0 at current pc only.

Below is logs when enabled remote_debug option.
for gdb-arm
infrun: resume (step=1, signal=GDB_SIGNAL_0), trap_expected=1, current
thread [Thread 2229] at 0xc01b2ddc
Sending packet: $Z0,c01b2de0,4#67...Ack

For gdb-aarch64,
infrun: resume (step=1, signal=GDB_SIGNAL_0), trap_expected=1, current
thread [Thread 3462] at 0xffffffc00021014c
Sending packet: $Z0,ffffffc00021014c,4#c8...Ack

As we can see, gdb-aarch64 puts Z0 (breakpoint) at same place where
current pc is. But gdb-arm puts breakpoint at just next pc.

Then I found that gdb-arm has below output
infrun: software single step trap for Thread 2229

So I implemented same for gdb-aarch64.

As for KGDB code for aarch64 do not have hardware breakpoint support.
(usermode does have)
Not sure if that could be issue.

Thanks,
Prafull

On Tue, Jun 16, 2015 at 10:47 AM, Prafull Suryawanshi
<prafull.net@gmail.com> wrote:
> I debugged this one and found that when compared to gdb-arm,
> gdb-aarch64 behaves little different.
> Before even invoking software-single-step operations, gdb-arm invokes
> Z0 packet before getting registers.
> But gdb-aarch64 does not do it. It sets the Z0 after reading registers.
> So in case gdb-arm, the Z0 is set to next pc value.
> But for gdb-aarch64 it sets the Z0 at current pc only.
>
> Below is logs when enabled remote_debug option.
> for gdb-arm
> infrun: resume (step=1, signal=GDB_SIGNAL_0), trap_expected=1, current
> thread [Thread 2229] at 0xc01b2ddc
> Sending packet: $Z0,c01b2de0,4#67...Ack
>
>
> For gdb-aarch64,
> infrun: resume (step=1, signal=GDB_SIGNAL_0), trap_expected=1, current
> thread [Thread 3462] at 0xffffffc00021014c
>
> On Mon, Jun 15, 2015 at 6:21 PM, Yao Qi <qiyaoltc@gmail.com> wrote:
>> Prafull Suryawanshi <prafull.net@gmail.com> writes:
>>
>>> I am not sure why hw stepper not works here (might be limitation of hw
>>> I am using).
>>
>> You'd better to check whether hw single step doesn't work in your case.
>>
>>> That is may be the infrun loops as it never gets stop signal. (the
>>> output I earlier pasted).
>>> Is it ok to provide patch for software single step like arm here?
>>
>> We only implement software single step on the targets don't have
>> hardware single step capability, like arm.
>>
>>> (I am preparing one. It will have simulate aarch64 instruction set and
>>> implement aarch64 version of functions of
>>> arm_linux_software_single_step, arm_insert_single_step_breakpoint and
>>> arm_get_next_pc.)
>>
>> Before you start it, better to get the reason why hw single step doesn't
>> work on aarch64.
>>
>> --
>> Yao (齐尧)