This is the mail archive of the binutils@sources.redhat.com 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]

Re: mips gas is horribly broken


"H . J . Lu" <hjl@lucon.org> writes:

> On Thu, Jun 07, 2001 at 09:52:37PM -0700, Ian Lance Taylor wrote:
> > 
> > If you are looking for a hack, perhaps you could add 1 to the addend
> > and subtract 1 from the contents of the object file?
> > 
> 
> How do I do it in such a way that I only have to do it for the mips
> assembler? Is 1 a valid mips addend? If 1 is not a valid mips addend,
> I can do
> 
> bfd_reloc_status_type
> _bfd_mips_elf_generic_reloc (...)
> {
>   if (output_bfd != (bfd *) NULL 
>       && (symbol->flags & BSF_SECTION_SYM) == 0
>       && (! reloc_entry->howto->partial_inplace
>           || reloc_entry->addend == 0))
>     {
>       reloc_entry->address += input_section->output_offset;
>       return bfd_reloc_ok;
>     }
> 
>   if (reloc_entry->addend == 1)
>     reloc_entry->addend = 0;
> 
>   return bfd_reloc_continue;
> }
> 
> If 1 is a valid mips addend, is there some value I can use?

I haven't looked at the code.  It's quite possible that any addend
value is legal.  I wasn't suggesting that you use
_bfd_mips_elf_generic_reloc.  I was suggesting that in the assembler
you change the addend and the object file so that the result comes out
right without ever having an addend of zero.  That is generally how
these sorts of problems are solved now: by adding hacks to gas.  Of
course, each hack makes it harder to implement the right solution.

Ian


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