Re: Is there single step debugging support being added to aarch64-linux?
Prafull Suryawanshi <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <CAJgVtDVxUS+aoFkD5zmHKpSuyhLvu_gTMc0ed4F6GjXcJE2qLg@mail.gmail.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 <[email protected]> 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 <[email protected]> wrote: >> Prafull Suryawanshi <[email protected]> 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 (齐尧)