poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Alien tokens and GDB integration, and docs


From: Mohammad-Reza Nabipoor
Subject: Re: Alien tokens and GDB integration, and docs
Date: Sun, 29 Sep 2024 16:33:40 +0200

Hi Jose.

On Wed, Sep 25, 2024 at 12:18:58PM GMT, Jose E. Marchesi wrote:
> 
> In poke_alien_token_handler I see:
> 
>   /* In GDB delimited alien poke tokens with the form $<&FOO> or $addr::FOO
>      provide the address of the symbol `FOO' as an offset in bytes, i.e. it
>      resolves to the GDB value &FOO as a Poke offset with unit bytes
>      and a magnitude whose width is the number of bits conforming an
>      address in the target architecture.
> 
>      $<FOO> or $FOO, on the other hand, provides the value of the symbol FOO
>      incarnated in a proper Poke value, provided that FOO is of a type
>      that this handler knows how to handle.  Otherwise the string is
>      not recognized as a token.  */
> 
> I have a couple of questions:
> 
> - FOO in $FOO shall be an identifier referring to some GDB symbol, but
>   FOO in $<FOO> can be any GDB expression, like in $<2 + 3>, correct?
>   It would be good for the comment to reflect this, and the
>   documentation as well.


Right.  OK.

> 
> - Is it really necessary to handle $<&EXPR> as a special case in
>   poke_alien_token_handler?  If `foo' is a GDB symbol, then `&foo' is a
>   valid expression.  Instead of checking for startswith (expr, "&"), the
>   code could ask GDB for the type of `value'.  If it is a pointer type,
>   then create an offset alien token.


Correct. Works for most of the cases, but not all!

`&foo' is valid syntax in C, C++, Go and Rust. So works out of the box.

It's not valid syntax in Ada and (I think) Fortran, but gdb accepts `&foo' and 
does the
right thing.

This is how they've extended Ada grammar to accept this 
(binutils-gdb/gdb/ada-exp.y):

```
/* Some extensions borrowed from C, for the benefit of those who find they
   can't get used to Ada notation in GDB.  */

primary :       '*' primary             %prec '.'
                        { ada_wrap<ada_unop_ind_operation> (); }
        |       '&' primary             %prec '.'
                        { ada_addrof (); }
        |       primary '[' exp ']'
                        {
                          ada_wrap2<subscript_operation> (BINOP_SUBSCRIPT);
                          ada_wrap<ada_wrapped_operation> ();
                        }
        ;

```

But! This is not implemented for Modula-2, so `&foo' is not recongnized!

So I think handling $<&EXPR> as a special case is better.  WDYT?


Regards,
Mohammad-Reza



reply via email to

[Prev in Thread] Current Thread [Next in Thread]