This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH 1/4] MIPS/GAS: Fix equated symbols in relaxation
- From: "Maciej W. Rozycki" <macro at codesourcery dot com>
- To: Richard Sandiford <rdsandiford at googlemail dot com>
- Cc: binutils at sourceware dot org, Catherine Moore <clm at codesourcery dot com>, gnu-mips-sgxx at codesourcery dot com
- Date: Tue, 27 Jul 2010 20:49:25 +0100 (BST)
- Subject: Re: [PATCH 1/4] MIPS/GAS: Fix equated symbols in relaxation
- References: <alpine.DEB.1.10.1007241701380.29495@tp.orcam.me.uk> <87sk34py8x.fsf@firetop.home>
On Tue, 27 Jul 2010, Richard Sandiford wrote:
> > Equated symbols (defined with .eqv) are not yet fully resolved by the
> > time relaxation is made. As a result, if used in a relaxed expression,
> > they cause a failure as follows:
> >
> > branch-self.s:30: Error: attempt to get value of unresolved symbol `fnord'
> >
> > The fix is to manually walk the chain of symbols; we handle additive
> > expressions involving constant (positive or negative) addends here only
> > like elsewhere.
> >
> > 2010-07-26 Maciej W. Rozycki <macro@codesourcery.com>
> >
> > gas/
> > * config/tc-mips.c: Include "struc-symbol.h".
> > (md_convert_frag): Resolve equated symbols manually.
>
> Can you explain in more detail why the equated symbol handling
> in resolve_symbol_value doesn't do the right thing?
finalize_syms isn't set yet and hence resolve_symbol_value() won't make
the final resolution of the symbol -- see write_object_file(). We get
here from relax_seg() which is before finalize_syms is possibly set at the
earliest. Try to assemble this program:
.text
.set mips16
foo:
.eqv bar, foo
b bar
to trigger it.
Maciej