public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
* How to configure GDB for software single-stepping on an ARM remote stub
@ 2012-05-31 10:03 Jonas Zaddach
  2012-05-31 10:27 ` Pedro Alves
  0 siblings, 1 reply; 3+ messages in thread
From: Jonas Zaddach @ 2012-05-31 10:03 UTC (permalink / raw)
  To: gdb

Hi,

I have written a remote stub for some ARM hardware that supports just
memory breakpoints (the device does not have a hardware debugging
unit). I figured out that I need single-stepping to go around
breakpoints, and that there is support for software single-stepping in
the code ... but I have no idea on how to tell GDB that I want
software single-stepping on my target. Can you give me a hint how to
do it or where to look for documentation?

Thank you, Jonas

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: How to configure GDB for software single-stepping on an ARM remote stub
  2012-05-31 10:03 How to configure GDB for software single-stepping on an ARM remote stub Jonas Zaddach
@ 2012-05-31 10:27 ` Pedro Alves
  2012-05-31 10:48   ` Jonas Zaddach
  0 siblings, 1 reply; 3+ messages in thread
From: Pedro Alves @ 2012-05-31 10:27 UTC (permalink / raw)
  To: Jonas Zaddach; +Cc: gdb

On 05/31/2012 11:02 AM, Jonas Zaddach wrote:

> Hi,
> 
> I have written a remote stub for some ARM hardware that supports just
> memory breakpoints (the device does not have a hardware debugging
> unit). I figured out that I need single-stepping to go around
> breakpoints, 


Or more fundamentally, for all stepping, right?

> and that there is support for software single-stepping in
> the code ... but I have no idea on how to tell GDB that I want
> software single-stepping on my target. Can you give me a hint how to
> do it or where to look for documentation?


Unfortunately, GDB is not smart enough to figure out the target can't
single-step, and that it needs to do it itself with software
single-stepping.
The current way is that GDB hardcodes knowledge of when does the target
need it; it depends on architecture, for example, on ARM and MIPS, gdb
assumes the target can step, and then knows that if the target is running
Linux, it needs software stepping.  On other archs, knowing that no chip
was or will be built with hardware debugging smarts, GDB always uses
software stepping.  The simplest is to use a hack like below to force your
GDB to assume software stepping is necessary.  The best would be to make
GDB smarter.

 gdb/arm-tdep.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index df5dea7..829cb5c 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -10122,6 +10122,8 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 		      _("arm_gdbarch_init: bad byte order for float format"));
     }

+  set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
+
   /* On ARM targets char defaults to unsigned.  */
   set_gdbarch_char_signed (gdbarch, 0);

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: How to configure GDB for software single-stepping on an ARM remote stub
  2012-05-31 10:27 ` Pedro Alves
@ 2012-05-31 10:48   ` Jonas Zaddach
  0 siblings, 0 replies; 3+ messages in thread
From: Jonas Zaddach @ 2012-05-31 10:48 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gdb

Thank you, that is exactly what I wanted :) I felt a bit stupid since
I thought that there must be some configuration file for it ...
A good way to make this configurable in my opinion would be to allow
the remote stub to reply with an error to the step command, or query
stepping support with a qStepping command, and then switch on software
stepping when needed ... If you think other people are interested in
that I can do a patch.

On Thu, May 31, 2012 at 12:27 PM, Pedro Alves <palves@redhat.com> wrote:
> On 05/31/2012 11:02 AM, Jonas Zaddach wrote:
>
>> Hi,
>>
>> I have written a remote stub for some ARM hardware that supports just
>> memory breakpoints (the device does not have a hardware debugging
>> unit). I figured out that I need single-stepping to go around
>> breakpoints,
>
>
> Or more fundamentally, for all stepping, right?
>
>> and that there is support for software single-stepping in
>> the code ... but I have no idea on how to tell GDB that I want
>> software single-stepping on my target. Can you give me a hint how to
>> do it or where to look for documentation?
>
>
> Unfortunately, GDB is not smart enough to figure out the target can't
> single-step, and that it needs to do it itself with software
> single-stepping.
> The current way is that GDB hardcodes knowledge of when does the target
> need it; it depends on architecture, for example, on ARM and MIPS, gdb
> assumes the target can step, and then knows that if the target is running
> Linux, it needs software stepping.  On other archs, knowing that no chip
> was or will be built with hardware debugging smarts, GDB always uses
> software stepping.  The simplest is to use a hack like below to force your
> GDB to assume software stepping is necessary.  The best would be to make
> GDB smarter.
>
>  gdb/arm-tdep.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
> index df5dea7..829cb5c 100644
> --- a/gdb/arm-tdep.c
> +++ b/gdb/arm-tdep.c
> @@ -10122,6 +10122,8 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
>                      _("arm_gdbarch_init: bad byte order for float format"));
>     }
>
> +  set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
> +
>   /* On ARM targets char defaults to unsigned.  */
>   set_gdbarch_char_signed (gdbarch, 0);
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-05-31 10:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-31 10:03 How to configure GDB for software single-stepping on an ARM remote stub Jonas Zaddach
2012-05-31 10:27 ` Pedro Alves
2012-05-31 10:48   ` Jonas Zaddach

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).