This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: register name for DW_AT_frame_base value
- From: Daniel Berlin <dberlin at dberlin dot org>
- To: Jerome Guitton <guitton at adacore dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Tue, 19 Apr 2005 13:00:25 -0400
- Subject: Re: register name for DW_AT_frame_base value
- References: <20050419162927.GE13591@adacore.com>
On Tue, 2005-04-19 at 18:29 +0200, Jerome Guitton wrote:
> A Dwarf interpretation question:
>
> We have a problem to make GCC-compiled code interact with the HP
> native debugger, and it looks like it is caused by the way the
> attribute DW_AT_frame_base is interpreted. Apparently, when a frame
> pointer can be found in a register, the value generated by GCC for the
> DW_AT_frame_base of the corresponding subroutine is a register name
> (i.e. DW_OP_reg<some_number>). Is it really allowed by the dwarf 2
> standard? I would tend to think that it is not.
>
> The "definition" of DW_AT_frame_base is:
>
> "A subroutine or entry point entry may also have a DW_AT_frame_base
> attribute, whose value is a location description that computes the
> frame base for the subroutine or entry point."
>
> OK. So, it is a location description. A location description can be
> either a register name or an addressing operation, so at first glance
> it is correct. But if the value is a "location description that
> computes the frame base", when evaluated it should be an address;
> so it cannot be a register name, IMHO.
> So, when a frame pointer is stored into a register <regno>, I would
> say that the value of DW_AT_frame_base should be something like
> "DW_OP_bregx <regno> 0" instead of something like "DW_OP_regx <regno>".
We are having this exact discussion on the DWARF3 standard mailing list
right now (whether fbreg has an implicit dereference, etc).
You should probably take this there.