David Daney <[EMAIL PROTECTED]> writes:

> Ian Lance Taylor wrote:
> > David Daney <[EMAIL PROTECTED]> writes:
> >
> >>I am going to try to fix:
> >>
> >>http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29721
> >>
> >>Which is a problem where a %lo relocation gets separated from its
> >>corresponding %hi.
> >>
> >>What is the mechanism that tries to prevent this from happening?  And
> >>where is it implemented?
> > This implemented by having the assembler sort the relocations so that
> > each %lo relocations follows the appropriate set of %hi relocations.
> > It is implemented in gas/config/tc-mips.c in append_insn.  Look for
> > reloc_needs_lo_p and mips_frob_file.
> > At first glance the assembler does appear to handle %got correctly,
> > so
> > I'm not sure why it is failing for you.
> 
> Did you look at the assembly fragment in the PR?
> 
> Is it correct in that there is a pair of %got/%lo in the middle of
> another %got/%lo pair?

Sure, why not?  They can be disambiguated by looking at which symbol
the %got/%lo applies to.  That is just what the assembler reloc
sorting implements in mips_frob_file.  (Or, at least, is supposed to
implement, though apparently something is going wrong in your case.)
The assembler sorts the relocations so that the linker always see the
%lo reloc immediately after the corresponding %got reloc(s).

Ian

Reply via email to