X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Fcpu-z80.c;h=6bab53af01dc3f515b6c339da35d7b3888e13b60;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=15da16437ecfe6b8d0de34c1e157f9a17bf3f022;hpb=2571583aed598dd3f9651b53434e5f177a0e3cf7;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/cpu-z80.c b/bfd/cpu-z80.c index 15da16437e..6bab53af01 100644 --- a/bfd/cpu-z80.c +++ b/bfd/cpu-z80.c @@ -1,5 +1,5 @@ /* BFD library support routines for the Z80 architecture. - Copyright (C) 2005-2017 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Contributed by Arnold Metselaar This file is part of BFD, the Binary File Descriptor library. @@ -31,27 +31,91 @@ const bfd_arch_info_type bfd_z80_arch; static const bfd_arch_info_type * compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b) { - if (a->arch != b->arch) + if (a->arch != b->arch || a->arch != bfd_arch_z80) return NULL; if (a->mach == b->mach) return a; + switch (a->mach) + { + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + switch (b->mach) + { + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + return & bfd_z80_arch; + case bfd_mach_z180: + case bfd_mach_ez80_z80: + case bfd_mach_ez80_adl: + case bfd_mach_z80n: + case bfd_mach_r800: + return b; + } + break; + case bfd_mach_z80n: + case bfd_mach_r800: + switch (b->mach) + { + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + return a; + } + break; + case bfd_mach_z180: + switch (b->mach) + { + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + return a; + case bfd_mach_ez80_z80: + case bfd_mach_ez80_adl: + return b; + } + break; + case bfd_mach_ez80_z80: + case bfd_mach_ez80_adl: + switch (b->mach) + { + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + case bfd_mach_z180: + case bfd_mach_ez80_z80: + return a; + case bfd_mach_ez80_adl: + return b; + } + break; + case bfd_mach_gbz80: + return NULL; + } - return (a->arch == bfd_arch_z80) ? & bfd_z80_arch : NULL; + return NULL; } -#define N(name,print,default,next) \ -{ 16, 16, 8, bfd_arch_z80, name, "z80", print, 0, default, \ - compatible, bfd_default_scan, bfd_arch_default_fill, next } +#define N(name,print,bits,default,next) \ + { 16, bits, 8, bfd_arch_z80, name, "z80", print, 0, default, \ + compatible, bfd_default_scan, bfd_arch_default_fill, next, 0 } #define M(n) &arch_info_struct[n] static const bfd_arch_info_type arch_info_struct[] = { - N (bfd_mach_z80strict, "z80-strict", FALSE, M(1)), - N (bfd_mach_z80, "z80", FALSE, M(2)), - N (bfd_mach_z80full, "z80-full", FALSE, M(3)), - N (bfd_mach_r800, "r800", FALSE, NULL) + N (bfd_mach_z80, "z80", 16, TRUE, M(1)), + N (bfd_mach_z80strict, "z80-strict", 16, FALSE, M(2)), + N (bfd_mach_z80full, "z80-full", 16, FALSE, M(3)), + N (bfd_mach_r800, "r800", 16, FALSE, M(4)), + N (bfd_mach_gbz80, "gbz80", 16, FALSE, M(5)), + N (bfd_mach_z180, "z180", 16, FALSE, M(6)), + N (bfd_mach_z80n, "z80n", 16, FALSE, M(7)), + N (bfd_mach_ez80_z80, "ez80-z80", 16, FALSE, M(8)), + N (bfd_mach_ez80_adl, "ez80-adl", 24, FALSE, NULL) }; -const bfd_arch_info_type bfd_z80_arch = N (0, "z80-any", TRUE, M(0)); +const bfd_arch_info_type bfd_z80_arch = + N (bfd_mach_z80, "z80", 16, TRUE, M(1));