2008-12-09 Tristan Gingold <gingold@adacore.com>
authorTristan Gingold <gingold@adacore.com>
Tue, 9 Dec 2008 09:51:08 +0000 (09:51 +0000)
committerTristan Gingold <gingold@adacore.com>
Tue, 9 Dec 2008 09:51:08 +0000 (09:51 +0000)
* cpu-avr.c (compatible): Makes avr-6 compatible only with itself.

bfd/ChangeLog
bfd/cpu-avr.c

index dd67ef2f3e5ccfe6348e1b416f2b8d30a58b01cf..93a8de835d2560a1386218f4653202c57bbb41fe 100644 (file)
@@ -1,3 +1,7 @@
+2008-12-09  Tristan Gingold  <gingold@adacore.com>
+
+       * cpu-avr.c (compatible): Makes avr-6 compatible only with itself.
+
 2008-12-04  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
        
        * elf64-s390.c (elf_s390_check_relocs): Initialize
index 364f64ea2e321843a61cb6d4e8a2ba417f952ce4..ddc410beed41f251e092305013e4eada16f31663 100644 (file)
@@ -38,7 +38,13 @@ compatible (const bfd_arch_info_type * a,
   if (a->mach == b->mach)
     return a;
 
-  if (a->mach <= bfd_mach_avr6 && b->mach <= bfd_mach_avr6)
+  /* avr-6 is compatible only with itself as its call convention is not
+     compatible with other avr (the mcu saves the return address on 3 bytes
+     instead of 2).  */
+  if (a->mach == bfd_mach_avr6 || b->mach == bfd_mach_avr6)
+    return NULL;
+
+  if (a->mach < bfd_mach_avr6 && b->mach < bfd_mach_avr6)
     {
       /* Special case for ATmega[16]03 (avr:3) and ATmega83 (avr:4).  */
       if ((a->mach == bfd_mach_avr3 && b->mach == bfd_mach_avr4)