This is the mail archive of the binutils@sourceware.org mailing list for the binutils 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 1/4] MIPS/GAS: Fix equated symbols in relaxation


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


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