[PATCH] Do framep replacement even on RHS outside of MEM contexts (PR debug/44694 followup)
Richard Guenther
rguenther@suse.de
Thu Jul 1 11:07:00 GMT 2010
On Thu, 1 Jul 2010, Jakub Jelinek wrote:
> On Thu, Jul 01, 2010 at 10:22:05AM +0200, Jakub Jelinek wrote:
> > On Thu, Jul 01, 2010 at 04:13:03PM +0800, Jie Zhang wrote:
> > > This patch caused ICE for arm-none-eabi target:
> > >
> > > internal compiler error: in arm_dbx_register_number, at
> > > config/arm/arm.c:21155
> > >
> > > when compiling thumb multilib libstdc++.
> >
> > Richard Earnshaw has already reported this in the PR, and here is my fix for
> > that. I don't have any arm boxes, so will just test it on x86_64-linux and
> > i686-linux (the PR44694 patch has been tested also on ppc/ppc64/s390/s390x
> > btw), could you please test it on arm? Thanks.
> >
> > 2010-07-01 Jakub Jelinek <jakub@redhat.com>
> >
> > PR debug/44694
> > * dwarf2out.c (reg_loc_descriptor): For eliminated arg_pointer_rtx
> > or frame_pointer_rtx use DW_OP_fbreg offset DW_OP_stack_value.
>
> Now bootstrapped/regtested on x86_64-linux and i686-linux. Ok for trunk/4.5?
Ok.
Thanks,
Richard.
> > --- gcc/dwarf2out.c.jj 2010-07-01 08:45:55.000000000 +0200
> > +++ gcc/dwarf2out.c 2010-07-01 09:19:47.000000000 +0200
> > @@ -12999,6 +12999,26 @@ reg_loc_descriptor (rtx rtl, enum var_in
> > if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
> > return 0;
> >
> > + /* We only use "frame base" when we're sure we're talking about the
> > + post-prologue local stack frame. We do this by *not* running
> > + register elimination until this point, and recognizing the special
> > + argument pointer and soft frame pointer rtx's.
> > + Use DW_OP_fbreg offset DW_OP_stack_value in this case. */
> > + if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
> > + && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
> > + {
> > + dw_loc_descr_ref result = NULL;
> > +
> > + if (dwarf_version >= 4 || !dwarf_strict)
> > + {
> > + result = mem_loc_descriptor (rtl, VOIDmode, initialized);
> > + if (result)
> > + add_loc_descr (&result,
> > + new_loc_descr (DW_OP_stack_value, 0, 0));
> > + }
> > + return result;
> > + }
> > +
> > regs = targetm.dwarf_register_span (rtl);
> >
> > if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
> >
>
> Jakub
>
>
--
Richard Guenther <rguenther@suse.de>
Novell / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 - GF: Markus Rex
More information about the Gcc-patches
mailing list