This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Do framep replacement even on RHS outside of MEM contexts (PR debug/44694 followup)


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]