Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: Pierre Langlois <pierre.langlois@embecosm.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH][PR breakpoints/16606] AVR8 breakpoint out of range, decrement pc after break
Date: Mon, 10 Mar 2014 11:08:00 -0000	[thread overview]
Message-ID: <20140310110809.GC4882@adacore.com> (raw)
In-Reply-To: <531A2316.5090507@embecosm.com>

Hello Pierre,

> For example:
> 
> (gdb) break *0x10e
> would result in a breakpoint at the address 0x80010e, out of range.

> diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
> index 6e58f04..a4a4a6d 100644
> --- a/gdb/avr-tdep.c
> +++ b/gdb/avr-tdep.c
> @@ -333,7 +333,10 @@ avr_integer_to_address (struct gdbarch *gdbarch,
>  {
>    ULONGEST addr = unpack_long (type, buf);
>  
> -  return avr_make_saddr (addr);
> +  if (TYPE_CODE_SPACE (type))
> +    return avr_make_iaddr (addr);
> +  else
> +    return avr_make_saddr (addr);
>  }
>  
>  static CORE_ADDR
> @@ -1436,6 +1439,7 @@ avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
>    set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
>  
>    set_gdbarch_breakpoint_from_pc (gdbarch, avr_breakpoint_from_pc);
> +  set_gdbarch_decr_pc_after_break (gdbarch, 2);

This part seems fine, but it would be good if you could submit it
separately, with an explanation of the problem you are seeing
(a copy of the gdb debugging session is often useful).

>    frame_unwind_append_unwinder (gdbarch, &avr_frame_unwind);
>    frame_base_set_default (gdbarch, &avr_frame_base);
> diff --git a/gdb/linespec.c b/gdb/linespec.c
> index 610809d..8355114 100644
> --- a/gdb/linespec.c
> +++ b/gdb/linespec.c
> @@ -2588,6 +2588,7 @@ initialize_defaults (struct symtab **default_symtab, int *default_line)
>  static CORE_ADDR
>  linespec_expression_to_pc (const char **exp_ptr)
>  {
> +  struct value *val;
>    if (current_program_space->executing_startup)
>      /* The error message doesn't really matter, because this case
>         should only hit during breakpoint reset.  */
> @@ -2595,7 +2596,14 @@ linespec_expression_to_pc (const char **exp_ptr)
>  				    "program space is in startup"));
>  
>    (*exp_ptr)++;
> -  return value_as_address (parse_to_comma_and_eval (exp_ptr));
> +  val = parse_to_comma_and_eval (exp_ptr);
> +  /* The value given by parse_to_comma_and_eval is an address but does not have
> +     any information about the address space in which it resides.  Harvard
> +     architectures need to know this when converting a value to an address with
> +     gdbarch_integer_to_address. It is safe to assume linespecs give an address
> +     in code space.  */
> +  TYPE_INSTANCE_FLAGS (value_type (val)) |= TYPE_INSTANCE_FLAG_CODE_SPACE;
> +  return value_as_address (val);

I don't think it's correct to be doing that, as the type you are
modifying is not specific to the value being returned. The change
you are making is therefore affecting other values, and cause
incorrect output for values of that type.

The way we have been dealing with this sort of issue is basically
to add a cast to a function pointer to the expression.  If you really
want to support this feature, you'll probably want to store the
information in the value rather than the type. But I am a little
less familiar with struct value, so others might a better suggestion.


-- 
Joel


  parent reply	other threads:[~2014-03-10 11:08 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-07 19:50 Pierre Langlois
2014-03-10  9:23 ` Pierre Langlois
2014-03-10 11:08 ` Joel Brobecker [this message]
2014-03-10 17:07   ` Pedro Alves
2014-03-11 11:58   ` Pierre Langlois
2014-03-12  8:08     ` Joel Brobecker
2014-03-13 14:05       ` Pierre Langlois

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140310110809.GC4882@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=pierre.langlois@embecosm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox