recent mips-elf linker "architecture ... incompatible" regressions

Thiemo Seufer ica2_ts@csv.ica.uni-stuttgart.de
Thu Mar 14 04:50:00 GMT 2002


Alan Modra wrote:
[snip]
> Index: bfd/cpu-mips.c
> ===================================================================
> RCS file: /cvs/src/src/bfd/cpu-mips.c,v
> retrieving revision 1.10
> diff -u -p -r1.10 cpu-mips.c
> --- cpu-mips.c	2001/08/31 21:24:28	1.10
> +++ cpu-mips.c	2002/03/14 09:44:25
> @@ -1,5 +1,5 @@
>  /* bfd back-end for mips support
> -   Copyright 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 2000
> +   Copyright 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002
>     Free Software Foundation, Inc.
>     Written by Steve Chamberlain of Cygnus Support.
>  
> @@ -23,6 +23,26 @@ Foundation, Inc., 59 Temple Place - Suit
>  #include "sysdep.h"
>  #include "libbfd.h"
>  
> +/* The default routine tests bits_per_word, which is wrong on mips as
> +   mips word size doesn't correlate with reloc size.  */
> +
> +const bfd_arch_info_type *
> +mips_compatible (a, b)
> +     const bfd_arch_info_type *a;
> +     const bfd_arch_info_type *b;
> +{
> +  if (a->arch != b->arch)
> +    return NULL;
> +
> +  if (a->mach > b->mach)
> +    return a;
> +
> +  if (b->mach > a->mach)
> +    return b;

How will this work? It seems to do as it did before, but I don't
understand why it worked ever. The bfd_mach_mips* defines are not
always upward compatible to all of the lower numbers. E.g.

#define bfd_mach_mips6000 6000

and

#define bfd_mach_mipsisa64 64

are obvious exceptions.


Thiemo



More information about the Binutils mailing list