New failures with .debug_ranges test

Oleg Endo oleg.endo@t-online.de
Wed Dec 2 12:06:00 GMT 2015


On Tue, 2015-12-01 at 22:41 +1030, Alan Modra wrote:
> On Tue, Dec 01, 2015 at 10:07:59PM +1030, Alan Modra wrote:
> > >   For sh64:
> > Huh, sh64-elf looks OK.  sh64-linux fails.  I'm not sure why
> > exactly,
> > but the weird R_SH_DIR32 reloc howto has src_mask non-zero and the
> > section contents differ between the two targets (besides being
> > different endianness).  My guess is that the test is exposing an
> > assembler error.
> 
> Yes, it is an assembler error.
> 
> From shmedia_md_end():
>   for (symp = symbol_rootP; symp != NULL; symp = symp->sy_next)
>     if (S_GET_OTHER (symp) & STO_SH5_ISA32)
>       symp->sy_value.X_add_number++;
> 
> So some symbols get their value bumped by one.  Later in
> adjust_reloc_syms some fixups are converted to be against a section
> symbol.  This involves adding the current symbol value to the fixup
> fx_offset, which becomes one greater than it should be.  Eventually
> we emit section contents off by one.
> 
> A relatively easy fix I guess is to make the SH tc_fix_adjustable
> reject symbols with STO_SH5_ISA32 set.  Another possibility is to
> make
> the STO_SH5_ISA32 adjustment later.  I'm leaving this to a SH
> maintainer to fix.

Notice that SH5/SH64 has been declared obsolete starting with GCC 6.  I
don't know whether binutils wants to follow this.

Cheers,
Oleg



More information about the Binutils mailing list