From 3e22044af11526161ac614fbdc9d0522e1d7221b Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Tue, 9 Dec 2008 09:51:08 +0000 Subject: [PATCH] 2008-12-09 Tristan Gingold * cpu-avr.c (compatible): Makes avr-6 compatible only with itself. --- bfd/ChangeLog | 4 ++++ bfd/cpu-avr.c | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index dd67ef2f3e5..93a8de835d2 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,7 @@ +2008-12-09 Tristan Gingold + + * cpu-avr.c (compatible): Makes avr-6 compatible only with itself. + 2008-12-04 Andreas Krebbel * elf64-s390.c (elf_s390_check_relocs): Initialize diff --git a/bfd/cpu-avr.c b/bfd/cpu-avr.c index 364f64ea2e3..ddc410beed4 100644 --- a/bfd/cpu-avr.c +++ b/bfd/cpu-avr.c @@ -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) -- 2.30.2