This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: DWARF location descriptor and multi-register frame pointer
- From: Richard Henderson <rth at redhat dot com>
- To: Senthil Kumar Selvaraj <senthil_kumar dot selvaraj at atmel dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Tue, 20 Nov 2012 13:03:35 -0800
- Subject: Re: DWARF location descriptor and multi-register frame pointer
- References: <20121120102225.GB19754@atmel.com>
On 11/20/2012 02:22 AM, Senthil Kumar Selvaraj wrote:
> Hi all,
>
> For the AVR target, the FP register spans two registers, yet the DWARF
> location information (DW_AT_location) for a local variable refers to only one
> of them.
>
> Looking at the code, I found that based_loc_descr in dwar2out.c, which handles
> base+offset based location descriptions, gets the register number from
> the rtx representing the reg and directly proceeds to create DW_OP_breg0+regno,
> without considering the mode. This is unlike reg_loc_descriptor, which
> checks hard_regno_nregs[regno][mode] and acts accordingly.
>
> How are frame pointer registers that span more than one hard register
> handled?
I would have to say "poorly", because it simply doesn't happen for any
other target.
I'm not really sure what advantage you'd have for using a multiple_reg_loc
to represent the frame pointer in the DW_AT_location for the frame base.
Especially since if you consider Dwarf3 and later should be indicating
the frame base via the CFA (DW_OP_call_frame_cfa).
> A related question - why does based_loc_descr generate DW_OP_fbreg
> only if eliminate_regs eliminates the frame/arg pointer register? I
> traced through the execution for my native (x86_64) compiler, and found
> that the elimination is actually from the soft frame pointer to the hard frame
> pointer. What if HARD_FRAME_POINTER_REGNUM is the same as
> FRAME_POINTER_REGNUM? Shouldn't DW_OP_fbreg be generated for those
> targets too?
Probably. It would take some digging to figure out why fbreg might not
be in use unless elimination succeeded.
r~