X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Farchures.c;h=36fc56873d5233a7b48dd77ce398fe38e00f122b;hb=86fb1dece37497b267579ed4f062d280cd5760cd;hp=27a41b3cd4ea2576a36e0baeaa913a6e4a56ef4c;hpb=8d88c4ca53bf3be481587f21611576ff82f38ed5;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/archures.c b/bfd/archures.c index 27a41b3cd4..36fc56873d 100644 --- a/bfd/archures.c +++ b/bfd/archures.c @@ -1,5 +1,6 @@ /* BFD library support routines for architectures. - Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999, 2000 + Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2002 Free Software Foundation, Inc. Hacked by John Gilmore and Steve Chamberlain of Cygnus Support. @@ -22,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "bfd.h" #include "sysdep.h" #include "libbfd.h" -#include +#include "safe-ctype.h" /* @@ -68,8 +69,8 @@ DESCRIPTION .enum bfd_architecture .{ -. bfd_arch_unknown, {* File arch not known *} -. bfd_arch_obscure, {* Arch known, not one of these *} +. bfd_arch_unknown, {* File arch not known. *} +. bfd_arch_obscure, {* Arch known, not one of these. *} . bfd_arch_m68k, {* Motorola 68xxx *} .#define bfd_mach_m68000 1 .#define bfd_mach_m68008 2 @@ -79,6 +80,10 @@ DESCRIPTION .#define bfd_mach_m68040 6 .#define bfd_mach_m68060 7 .#define bfd_mach_cpu32 8 +.#define bfd_mach_mcf5200 9 +.#define bfd_mach_mcf5206e 10 +.#define bfd_mach_mcf5307 11 +.#define bfd_mach_mcf5407 12 . bfd_arch_vax, {* DEC Vax *} . bfd_arch_i960, {* Intel 960 *} . {* The order of the following is important. @@ -87,7 +92,7 @@ DESCRIPTION . available to machines with higher numbers. . The exception is the "ca", which is . incompatible with all other machines except -. "core". *} +. "core". *} . .#define bfd_mach_i960_core 1 .#define bfd_mach_i960_ka_sa 2 @@ -98,6 +103,8 @@ DESCRIPTION .#define bfd_mach_i960_jx 7 .#define bfd_mach_i960_hx 8 . +. bfd_arch_or32, {* OpenRISC 32 *} +. . bfd_arch_a29k, {* AMD 29000 *} . bfd_arch_sparc, {* SPARC *} .#define bfd_mach_sparc 1 @@ -105,12 +112,12 @@ DESCRIPTION .#define bfd_mach_sparc_sparclet 2 .#define bfd_mach_sparc_sparclite 3 .#define bfd_mach_sparc_v8plus 4 -.#define bfd_mach_sparc_v8plusa 5 {* with ultrasparc add'ns *} +.#define bfd_mach_sparc_v8plusa 5 {* with ultrasparc add'ns. *} .#define bfd_mach_sparc_sparclite_le 6 .#define bfd_mach_sparc_v9 7 -.#define bfd_mach_sparc_v9a 8 {* with ultrasparc add'ns *} -.#define bfd_mach_sparc_v8plusb 9 {* with cheetah add'ns *} -.#define bfd_mach_sparc_v9b 10 {* with cheetah add'ns *} +.#define bfd_mach_sparc_v9a 8 {* with ultrasparc add'ns. *} +.#define bfd_mach_sparc_v8plusb 9 {* with cheetah add'ns. *} +.#define bfd_mach_sparc_v9b 10 {* with cheetah add'ns. *} .{* Nonzero if MACH has the v9 instruction set. *} .#define bfd_mach_sparc_v9_p(mach) \ . ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \ @@ -130,8 +137,12 @@ DESCRIPTION .#define bfd_mach_mips6000 6000 .#define bfd_mach_mips8000 8000 .#define bfd_mach_mips10000 10000 -.#define bfd_mach_mips4K 32 +.#define bfd_mach_mips12000 12000 .#define bfd_mach_mips16 16 +.#define bfd_mach_mips5 5 +.#define bfd_mach_mips_sb1 12310201 {* octal 'SB', 01 *} +.#define bfd_mach_mipsisa32 32 +.#define bfd_mach_mipsisa64 64 . bfd_arch_i386, {* Intel 386 *} .#define bfd_mach_i386_i386 0 .#define bfd_mach_i386_i8086 1 @@ -151,8 +162,10 @@ DESCRIPTION .#define bfd_mach_h8300 1 .#define bfd_mach_h8300h 2 .#define bfd_mach_h8300s 3 +. bfd_arch_pdp11, {* DEC PDP-11 *} . bfd_arch_powerpc, {* PowerPC *} .#define bfd_mach_ppc 0 +.#define bfd_mach_ppc64 1 .#define bfd_mach_ppc_403 403 .#define bfd_mach_ppc_403gc 4030 .#define bfd_mach_ppc_505 505 @@ -180,6 +193,7 @@ DESCRIPTION .#define bfd_mach_d10v_ts2 2 .#define bfd_mach_d10v_ts3 3 . bfd_arch_d30v, {* Mitsubishi D30V *} +. bfd_arch_dlx, {* DLX *} . bfd_arch_m68hc11, {* Motorola 68HC11 *} . bfd_arch_m68hc12, {* Motorola 68HC12 *} . bfd_arch_z8k, {* Zilog Z8000 *} @@ -194,11 +208,12 @@ DESCRIPTION .#define bfd_mach_sh3_dsp 0x3d .#define bfd_mach_sh3e 0x3e .#define bfd_mach_sh4 0x40 +.#define bfd_mach_sh5 0x50 . bfd_arch_alpha, {* Dec Alpha *} .#define bfd_mach_alpha_ev4 0x10 .#define bfd_mach_alpha_ev5 0x20 .#define bfd_mach_alpha_ev6 0x30 -. bfd_arch_arm, {* Advanced Risc Machines ARM *} +. bfd_arch_arm, {* Advanced Risc Machines ARM. *} .#define bfd_mach_arm_2 1 .#define bfd_mach_arm_2a 2 .#define bfd_mach_arm_3 3 @@ -218,10 +233,13 @@ DESCRIPTION .#define bfd_mach_v850 0 .#define bfd_mach_v850e 'E' .#define bfd_mach_v850ea 'A' -. bfd_arch_arc, {* Argonaut RISC Core *} -.#define bfd_mach_arc_base 0 +. bfd_arch_arc, {* ARC Cores *} +.#define bfd_mach_arc_5 0 +.#define bfd_mach_arc_6 1 +.#define bfd_mach_arc_7 2 +.#define bfd_mach_arc_8 3 . bfd_arch_m32r, {* Mitsubishi M32R/D *} -.#define bfd_mach_m32r 0 {* backwards compatibility *} +.#define bfd_mach_m32r 0 {* For backwards compatibility. *} .#define bfd_mach_m32rx 'x' . bfd_arch_mn10200, {* Matsushita MN10200 *} . bfd_arch_mn10300, {* Matsushita MN10300 *} @@ -234,13 +252,20 @@ DESCRIPTION .#define bfd_mach_ia64_elf64 0 .#define bfd_mach_ia64_elf32 1 . bfd_arch_pj, -. bfd_arch_avr, {* Atmel AVR microcontrollers *} +. bfd_arch_avr, {* Atmel AVR microcontrollers. *} .#define bfd_mach_avr1 1 .#define bfd_mach_avr2 2 .#define bfd_mach_avr3 3 .#define bfd_mach_avr4 4 .#define bfd_mach_avr5 5 . bfd_arch_cris, {* Axis CRIS *} +. bfd_arch_s390, {* IBM s390 *} +.#define bfd_mach_s390_31 0 +.#define bfd_mach_s390_64 1 +. bfd_arch_openrisc, {* OpenRISC *} +. bfd_arch_mmix, {* Donald Knuth's educational processor. *} +. bfd_arch_xstormy16, +.#define bfd_mach_xstormy16 0 . bfd_arch_last . }; */ @@ -264,7 +289,9 @@ DESCRIPTION . const char *arch_name; . const char *printable_name; . unsigned int section_align_power; -. {* True if this is the default machine for the architecture. *} +. {* True if this is the default machine for the architecture. +. The default arch should be the first entry for an arch so that +. all the entries for that arch can be accessed via <>. *} . boolean the_default; . const struct bfd_arch_info * (*compatible) . PARAMS ((const struct bfd_arch_info *a, @@ -273,16 +300,21 @@ DESCRIPTION . boolean (*scan) PARAMS ((const struct bfd_arch_info *, const char *)); . . const struct bfd_arch_info *next; -.} bfd_arch_info_type; +.} +.bfd_arch_info_type; +. */ extern const bfd_arch_info_type bfd_a29k_arch; extern const bfd_arch_info_type bfd_alpha_arch; extern const bfd_arch_info_type bfd_arc_arch; extern const bfd_arch_info_type bfd_arm_arch; +extern const bfd_arch_info_type bfd_avr_arch; extern const bfd_arch_info_type bfd_cris_arch; extern const bfd_arch_info_type bfd_d10v_arch; extern const bfd_arch_info_type bfd_d30v_arch; +extern const bfd_arch_info_type bfd_dlx_arch; +extern const bfd_arch_info_type bfd_fr30_arch; extern const bfd_arch_info_type bfd_h8300_arch; extern const bfd_arch_info_type bfd_h8500_arch; extern const bfd_arch_info_type bfd_hppa_arch; @@ -290,76 +322,89 @@ extern const bfd_arch_info_type bfd_i370_arch; extern const bfd_arch_info_type bfd_i386_arch; extern const bfd_arch_info_type bfd_i860_arch; extern const bfd_arch_info_type bfd_i960_arch; +extern const bfd_arch_info_type bfd_ia64_arch; extern const bfd_arch_info_type bfd_m32r_arch; extern const bfd_arch_info_type bfd_m68hc11_arch; extern const bfd_arch_info_type bfd_m68hc12_arch; extern const bfd_arch_info_type bfd_m68k_arch; extern const bfd_arch_info_type bfd_m88k_arch; +extern const bfd_arch_info_type bfd_mcore_arch; extern const bfd_arch_info_type bfd_mips_arch; +extern const bfd_arch_info_type bfd_mmix_arch; extern const bfd_arch_info_type bfd_mn10200_arch; extern const bfd_arch_info_type bfd_mn10300_arch; -extern const bfd_arch_info_type bfd_powerpc_arch; -extern const bfd_arch_info_type bfd_rs6000_arch; +extern const bfd_arch_info_type bfd_ns32k_arch; +extern const bfd_arch_info_type bfd_openrisc_arch; +extern const bfd_arch_info_type bfd_or32_arch; +extern const bfd_arch_info_type bfd_pdp11_arch; extern const bfd_arch_info_type bfd_pj_arch; +extern const bfd_arch_info_type bfd_powerpc_archs[]; +#define bfd_powerpc_arch bfd_powerpc_archs[0] +extern const bfd_arch_info_type bfd_rs6000_arch; +extern const bfd_arch_info_type bfd_s390_arch; extern const bfd_arch_info_type bfd_sh_arch; extern const bfd_arch_info_type bfd_sparc_arch; extern const bfd_arch_info_type bfd_tic30_arch; extern const bfd_arch_info_type bfd_tic54x_arch; extern const bfd_arch_info_type bfd_tic80_arch; +extern const bfd_arch_info_type bfd_v850_arch; extern const bfd_arch_info_type bfd_vax_arch; extern const bfd_arch_info_type bfd_we32k_arch; -extern const bfd_arch_info_type bfd_z8k_arch; -extern const bfd_arch_info_type bfd_ns32k_arch; extern const bfd_arch_info_type bfd_w65_arch; -extern const bfd_arch_info_type bfd_v850_arch; -extern const bfd_arch_info_type bfd_fr30_arch; -extern const bfd_arch_info_type bfd_mcore_arch; -extern const bfd_arch_info_type bfd_avr_arch; -extern const bfd_arch_info_type bfd_ia64_arch; +extern const bfd_arch_info_type bfd_xstormy16_arch; +extern const bfd_arch_info_type bfd_z8k_arch; -static const bfd_arch_info_type * const bfd_archures_list[] = { +static const bfd_arch_info_type * const bfd_archures_list[] = + { #ifdef SELECT_ARCHITECTURES - SELECT_ARCHITECTURES, + SELECT_ARCHITECTURES, #else - &bfd_a29k_arch, - &bfd_alpha_arch, - &bfd_arc_arch, - &bfd_arm_arch, - &bfd_cris_arch, - &bfd_d10v_arch, - &bfd_d30v_arch, - &bfd_h8300_arch, - &bfd_h8500_arch, - &bfd_hppa_arch, - &bfd_i370_arch, - &bfd_i386_arch, - &bfd_i860_arch, - &bfd_i960_arch, - &bfd_m32r_arch, - &bfd_m68hc11_arch, - &bfd_m68hc12_arch, - &bfd_m68k_arch, - &bfd_m88k_arch, - &bfd_mips_arch, - &bfd_mn10200_arch, - &bfd_mn10300_arch, - &bfd_powerpc_arch, - &bfd_rs6000_arch, - &bfd_sh_arch, - &bfd_sparc_arch, - &bfd_tic30_arch, - &bfd_tic54x_arch, - &bfd_tic80_arch, - &bfd_vax_arch, - &bfd_we32k_arch, - &bfd_z8k_arch, - &bfd_ns32k_arch, - &bfd_w65_arch, - &bfd_v850_arch, - &bfd_fr30_arch, - &bfd_mcore_arch, - &bfd_avr_arch, - &bfd_ia64_arch, + &bfd_a29k_arch, + &bfd_alpha_arch, + &bfd_arc_arch, + &bfd_arm_arch, + &bfd_avr_arch, + &bfd_cris_arch, + &bfd_d10v_arch, + &bfd_d30v_arch, + &bfd_dlx_arch, + &bfd_fr30_arch, + &bfd_h8300_arch, + &bfd_h8500_arch, + &bfd_hppa_arch, + &bfd_i370_arch, + &bfd_i386_arch, + &bfd_i860_arch, + &bfd_i960_arch, + &bfd_ia64_arch, + &bfd_m32r_arch, + &bfd_m68hc11_arch, + &bfd_m68hc12_arch, + &bfd_m68k_arch, + &bfd_m88k_arch, + &bfd_mcore_arch, + &bfd_mips_arch, + &bfd_mmix_arch, + &bfd_mn10200_arch, + &bfd_mn10300_arch, + &bfd_ns32k_arch, + &bfd_openrisc_arch, + &bfd_or32_arch, + &bfd_pdp11_arch, + &bfd_powerpc_arch, + &bfd_rs6000_arch, + &bfd_s390_arch, + &bfd_sh_arch, + &bfd_sparc_arch, + &bfd_tic30_arch, + &bfd_tic54x_arch, + &bfd_tic80_arch, + &bfd_v850_arch, + &bfd_vax_arch, + &bfd_w65_arch, + &bfd_we32k_arch, + &bfd_xstormy16_arch, + &bfd_z8k_arch, #endif 0 }; @@ -435,6 +480,7 @@ bfd_arch_list () const char **name_ptr; const char **name_list; const bfd_arch_info_type * const *app; + bfd_size_type amt; /* Determine the number of architectures. */ vec_length = 0; @@ -447,8 +493,8 @@ bfd_arch_list () } } - name_list = (const char **) - bfd_malloc ((vec_length + 1) * sizeof (char **)); + amt = (vec_length + 1) * sizeof (char **); + name_list = (const char **) bfd_malloc (amt); if (name_list == NULL) return NULL; @@ -563,21 +609,9 @@ bfd_default_set_arch_mach (abfd, arch, mach) enum bfd_architecture arch; unsigned long mach; { - const bfd_arch_info_type * const *app, *ap; - - for (app = bfd_archures_list; *app != NULL; app++) - { - for (ap = *app; ap != NULL; ap = ap->next) - { - if (ap->arch == arch - && (ap->mach == mach - || (mach == 0 && ap->the_default))) - { - abfd->arch_info = ap; - return true; - } - } - } + abfd->arch_info = bfd_lookup_arch (arch, mach); + if (abfd->arch_info != NULL) + return true; abfd->arch_info = &bfd_default_arch_struct; bfd_set_error (bfd_error_bad_value); @@ -681,6 +715,9 @@ bfd_default_compatible (a, b) if (a->arch != b->arch) return NULL; + if (a->bits_per_word != b->bits_per_word) + return NULL; + if (a->mach > b->mach) return a; @@ -704,7 +741,7 @@ DESCRIPTION boolean bfd_default_scan (info, string) - const struct bfd_arch_info *info; + const bfd_arch_info_type *info; const char *string; { const char *ptr_src; @@ -728,7 +765,7 @@ bfd_default_scan (info, string) printable_name_colon = strchr (info->printable_name, ':'); if (printable_name_colon == NULL) { - int strlen_arch_name = strlen (info->arch_name); + size_t strlen_arch_name = strlen (info->arch_name); if (strncasecmp (string, info->arch_name, strlen_arch_name) == 0) { if (string[strlen_arch_name] == ':') @@ -750,7 +787,7 @@ bfd_default_scan (info, string) Attempt to match: ? */ if (printable_name_colon != NULL) { - int colon_index = printable_name_colon - info->printable_name; + size_t colon_index = printable_name_colon - info->printable_name; if (strncasecmp (string, info->printable_name, colon_index) == 0 && strcasecmp (string + colon_index, info->printable_name + colon_index + 1) == 0) @@ -789,7 +826,7 @@ bfd_default_scan (info, string) } number = 0; - while (isdigit ((unsigned char) *ptr_src)) + while (ISDIGIT (*ptr_src)) { number = number * 10 + *ptr_src - '0'; ptr_src++; @@ -841,6 +878,22 @@ bfd_default_scan (info, string) arch = bfd_arch_m68k; number = bfd_mach_cpu32; break; + case 5200: + arch = bfd_arch_m68k; + number = bfd_mach_mcf5200; + break; + case 5206: + arch = bfd_arch_m68k; + number = bfd_mach_mcf5206e; + break; + case 5307: + arch = bfd_arch_m68k; + number = bfd_mach_mcf5307; + break; + case 5407: + arch = bfd_arch_m68k; + number = bfd_mach_mcf5407; + break; case 32000: arch = bfd_arch_we32k;