This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Is there single step debugging support being added to aarch64-linux?
- From: Prafull Suryawanshi <prafull dot net at gmail dot com>
- To: Yao Qi <qiyaoltc at gmail dot com>
- Cc: Andrew Pinski <pinskia at gmail dot com>, Andreas Schwab <schwab at suse dot de>, "gdb at sourceware dot org" <gdb at sourceware dot org>
- Date: Tue, 16 Jun 2015 10:51:58 +0530
- Subject: Re: Is there single step debugging support being added to aarch64-linux?
- Authentication-results: sourceware.org; auth=none
- References: <CAJgVtDUtj=s58sBPZyd3x_ExtG=rA3vogMWm9hEPa6h_j-J_Uw at mail dot gmail dot com> <mvmoakh9rz6 dot fsf at hawking dot suse dot de> <CAJgVtDVY-Qvpq1Wa1tEV0+2T4JUfUxhD7+N7DnL9j68pv_k6=w at mail dot gmail dot com> <CAJgVtDX2oXdf8fjE3n34Xe3m2uPrjCHV4ObH+Rspg++nG6knyg at mail dot gmail dot com> <D8AF3977-52F1-4976-8F90-237ADA8FC267 at gmail dot com> <CAJgVtDXpEWCs8oWzDcUydNA4XAQuVFrMffOk824DkTZ1cReHhQ at mail dot gmail dot com> <86si9trv7l dot fsf at gmail dot com> <CAJgVtDW7qi4Zfz_ELnk25THoJpfPf_im=rpv8nv9-ZqqcQmXRw at mail dot gmail dot com>
(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 (éå)