X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Farchures.c;h=7f2c5f72367d9e93f8789c473eaddc436c94bbe9;hb=dc9e099fc0eced486ae2b49455c9da113c11f4ff;hp=5090291e75bc2f64d5ecbf23ede43aefc019f16a;hpb=cd6213ffae0d56407113218fe4241078e8bf29f6;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/archures.c b/bfd/archures.c index 5090291e75..7f2c5f7236 100644 --- a/bfd/archures.c +++ b/bfd/archures.c @@ -1,5 +1,5 @@ /* BFD library support routines for architectures. - Copyright (C) 1990, 91, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1990, 91-98, 1999 Free Software Foundation, Inc. Hacked by John Gilmore and Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -70,6 +70,14 @@ DESCRIPTION . 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 +.#define bfd_mach_m68010 3 +.#define bfd_mach_m68020 4 +.#define bfd_mach_m68030 5 +.#define bfd_mach_m68040 6 +.#define bfd_mach_m68060 7 +.#define bfd_mach_cpu32 8 . bfd_arch_vax, {* DEC Vax *} . bfd_arch_i960, {* Intel 960 *} . {* The order of the following is important. @@ -97,15 +105,32 @@ DESCRIPTION .#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_v9 6 -.#define bfd_mach_sparc_v9a 7 {* 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 *} .{* Nonzero if MACH has the v9 instruction set. *} .#define bfd_mach_sparc_v9_p(mach) \ . ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9a) . bfd_arch_mips, {* MIPS Rxxxx *} +.#define bfd_mach_mips3000 3000 +.#define bfd_mach_mips3900 3900 +.#define bfd_mach_mips4000 4000 +.#define bfd_mach_mips4010 4010 +.#define bfd_mach_mips4100 4100 +.#define bfd_mach_mips4111 4111 +.#define bfd_mach_mips4300 4300 +.#define bfd_mach_mips4400 4400 +.#define bfd_mach_mips4600 4600 +.#define bfd_mach_mips4650 4650 +.#define bfd_mach_mips5000 5000 +.#define bfd_mach_mips6000 6000 +.#define bfd_mach_mips8000 8000 +.#define bfd_mach_mips10000 10000 +.#define bfd_mach_mips16 16 . bfd_arch_i386, {* Intel 386 *} .#define bfd_mach_i386_i386 0 .#define bfd_mach_i386_i8086 1 +.#define bfd_mach_i386_i386_intel_syntax 2 . bfd_arch_we32k, {* AT&T WE32xxx *} . bfd_arch_tahoe, {* CCI/Harris Tahoe *} . bfd_arch_i860, {* Intel 860 *} @@ -121,33 +146,47 @@ DESCRIPTION . bfd_arch_powerpc, {* PowerPC *} . bfd_arch_rs6000, {* IBM RS/6000 *} . bfd_arch_hppa, {* HP PA RISC *} -. {* start-sanitize-d10v *} . bfd_arch_d10v, {* Mitsubishi D10V *} -. {* end-sanitize-d10v *} +. bfd_arch_d30v, {* Mitsubishi D30V *} . bfd_arch_z8k, {* Zilog Z8000 *} .#define bfd_mach_z8001 1 .#define bfd_mach_z8002 2 . bfd_arch_h8500, {* Hitachi H8/500 *} . bfd_arch_sh, {* Hitachi SH *} +.#define bfd_mach_sh 0 +.#define bfd_mach_sh3 0x30 +.#define bfd_mach_sh3e 0x3e . 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 *} +.#define bfd_mach_arm_2 1 +.#define bfd_mach_arm_2a 2 +.#define bfd_mach_arm_3 3 +.#define bfd_mach_arm_3M 4 +.#define bfd_mach_arm_4 5 +.#define bfd_mach_arm_4T 6 +.#define bfd_mach_arm_5 7 +.#define bfd_mach_arm_5T 8 . bfd_arch_ns32k, {* National Semiconductors ns32000 *} . bfd_arch_w65, {* WDC 65816 *} -. {* start-sanitize-v850 *} +. bfd_arch_tic30, {* Texas Instruments TMS320C30 *} +. bfd_arch_tic80, {* TI TMS320c80 (MVP) *} . bfd_arch_v850, {* NEC V850 *} -. {* end-sanitize-v850 *} -. {* start-sanitize-arc *} +.#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 -.#define bfd_mach_arc_host 1 -.#define bfd_mach_arc_graphics 2 -.#define bfd_mach_arc_audio 3 -. {* end-sanitize-arc *} -. {* start-sanitize-m32r *} -. bfd_arch_m32r, {* Mitsubishi M32R *} -. {* end-sanitize-m32r *} +. bfd_arch_m32r, {* Mitsubishi M32R/D *} +.#define bfd_mach_m32r 0 {* backwards compatibility *} . bfd_arch_mn10200, {* Matsushita MN10200 *} . bfd_arch_mn10300, {* Matsushita MN10300 *} +.#define bfd_mach_mn10300 300 +. bfd_arch_fr30, +.#define bfd_mach_fr30 0x46523330 +. bfd_arch_mcore, . bfd_arch_last . }; @@ -188,22 +227,17 @@ DESCRIPTION extern const bfd_arch_info_type bfd_a29k_arch; extern const bfd_arch_info_type bfd_alpha_arch; -/* start-sanitize-arc */ extern const bfd_arch_info_type bfd_arc_arch; -/* end-sanitize-arc */ extern const bfd_arch_info_type bfd_arm_arch; -/* start-sanitize-d10v */ extern const bfd_arch_info_type bfd_d10v_arch; -/* end-sanitize-d10v */ +extern const bfd_arch_info_type bfd_d30v_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; 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; -/* start-sanitize-m32r */ extern const bfd_arch_info_type bfd_m32r_arch; -/* end-sanitize-m32r */ 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_mips_arch; @@ -213,17 +247,16 @@ 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_sh_arch; extern const bfd_arch_info_type bfd_sparc_arch; -/* start-sanitize-tic80 */ +extern const bfd_arch_info_type bfd_tic30_arch; extern const bfd_arch_info_type bfd_tic80_arch; -/* end-sanitize-tic80 */ 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; -/* start-sanitize-v850 */ extern const bfd_arch_info_type bfd_v850_arch; -/* end-sanitize-v850 */ +extern const bfd_arch_info_type bfd_fr30_arch; +extern const bfd_arch_info_type bfd_mcore_arch; static const bfd_arch_info_type * const bfd_archures_list[] = { @@ -232,22 +265,17 @@ static const bfd_arch_info_type * const bfd_archures_list[] = #else &bfd_a29k_arch, &bfd_alpha_arch, -/* start-sanitize-arc */ &bfd_arc_arch, -/* end-sanitize-arc */ &bfd_arm_arch, -/* start-sanitize-d10v */ &bfd_d10v_arch, -/* end-sanitize-d10v */ + &bfd_d30v_arch, &bfd_h8300_arch, &bfd_h8500_arch, &bfd_hppa_arch, &bfd_i386_arch, &bfd_i860_arch, &bfd_i960_arch, -/* start-sanitize-m32r */ &bfd_m32r_arch, -/* end-sanitize-m32r */ &bfd_m68k_arch, &bfd_m88k_arch, &bfd_mips_arch, @@ -257,14 +285,16 @@ static const bfd_arch_info_type * const bfd_archures_list[] = &bfd_rs6000_arch, &bfd_sh_arch, &bfd_sparc_arch, + &bfd_tic30_arch, + &bfd_tic80_arch, &bfd_vax_arch, &bfd_we32k_arch, &bfd_z8k_arch, &bfd_ns32k_arch, &bfd_w65_arch, -/* start-sanitize-v850*/ &bfd_v850_arch, -/* end-sanitize-v850 */ + &bfd_fr30_arch, + & bfd_mcore_arch, #endif 0 }; @@ -326,6 +356,61 @@ bfd_scan_arch (string) +/* +FUNCTION + bfd_arch_list + +SYNOPSIS + const char **bfd_arch_list(void); + +DESCRIPTION + Return a freshly malloced NULL-terminated vector of the names + of all the valid BFD architectures. Do not modify the names. + +*/ + +const char ** +bfd_arch_list () +{ + int vec_length = 0; + const char **name_ptr; + const char **name_list; + const bfd_arch_info_type * const *app; + + /* Determine the number of architectures */ + vec_length = 0; + for (app = bfd_archures_list; *app != NULL; app++) + { + const bfd_arch_info_type *ap; + for (ap = *app; ap != NULL; ap = ap->next) + { + vec_length++; + } + } + + name_list = (CONST char **) + bfd_malloc ((vec_length + 1) * sizeof (char **)); + if (name_list == NULL) + return NULL; + + /* Point the list at each of the names */ + name_ptr = name_list; + for (app = bfd_archures_list; *app != NULL; app++) + { + const bfd_arch_info_type *ap; + for (ap = *app; ap != NULL; ap = ap->next) + { + *name_ptr = ap->printable_name; + name_ptr++; + } + } + *name_ptr = NULL; + + return name_list; +} + + + /* FUNCTION bfd_arch_get_compatible @@ -577,11 +662,59 @@ bfd_default_scan (info, string) const char *ptr_tst; unsigned long number; enum bfd_architecture arch; + const char *printable_name_colon; - /* First test for an exact match */ - if (strcmp (string, info->printable_name) == 0) + /* Exact match of the architecture name (ARCH_NAME) and also the + default architecture? */ + if (strcasecmp (string, info->arch_name) == 0 + && info->the_default) return true; + /* Exact match of the machine name (PRINTABLE_NAME)? */ + if (strcasecmp (string, info->printable_name) == 0) + return true; + + /* Given that printable_name contains no colon, attempt to match: + ARCH_NAME [ ":" ] PRINTABLE_NAME? */ + printable_name_colon = strchr (info->printable_name, ':'); + if (printable_name_colon == NULL) + { + int strlen_arch_name = strlen (info->arch_name); + if (strncasecmp (string, info->arch_name, strlen_arch_name) == 0) + { + if (string[strlen_arch_name] == ':') + { + if (strcasecmp (string + strlen_arch_name + 1, + info->printable_name) == 0) + return true; + } + else + { + if (strcasecmp (string + strlen_arch_name, + info->printable_name) == 0) + return true; + } + } + } + + /* Given that PRINTABLE_NAME has the form: ":" ; + Attempt to match: ? */ + if (printable_name_colon != NULL) + { + int 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) + return true; + } + + /* Given that PRINTABLE_NAME has the form: ":" ; Do not + attempt to match just , it could be ambigious. This test + is left until later. */ + + /* NOTE: The below is retained for compatibility only. Please do not + add to this code */ + /* See how much of the supplied string matches with the architecture, eg the string m68k:68020 would match the 68k entry up to the :, then we get left with the machine number */ @@ -606,69 +739,59 @@ bfd_default_scan (info, string) } number = 0; - while (isdigit(*ptr_src)) + while (isdigit ((unsigned char) *ptr_src)) { number = number * 10 + *ptr_src - '0'; ptr_src++; } + /* NOTE: The below is retained for compatibility only. + PLEASE DO NOT ADD TO THIS CODE. */ + switch (number) { - case 65: - arch = bfd_arch_w65; - break; - - case 300: - arch = bfd_arch_h8300; - break; - - case 500: - arch = bfd_arch_h8500; + /* FIXME: These are needed to parse IEEE objects. */ + case 68000: + arch = bfd_arch_m68k; + number = bfd_mach_m68000; break; - case 68010: + arch = bfd_arch_m68k; + number = bfd_mach_m68010; + break; case 68020: + arch = bfd_arch_m68k; + number = bfd_mach_m68020; + break; case 68030: - case 68040: - case 68332: - case 68050: - case 68000: - arch = bfd_arch_m68k; + arch = bfd_arch_m68k; + number = bfd_mach_m68030; break; - - case 386: - case 80386: - case 486: - case 80486: - arch = bfd_arch_i386; + case 68040: + arch = bfd_arch_m68k; + number = bfd_mach_m68040; break; - - case 29000: - arch = bfd_arch_a29k; + case 68060: + arch = bfd_arch_m68k; + number = bfd_mach_m68060; break; - - case 8000: - arch = bfd_arch_z8k; + case 68332: + arch = bfd_arch_m68k; + number = bfd_mach_cpu32; break; case 32000: arch = bfd_arch_we32k; break; - case 860: - case 80860: - arch = bfd_arch_i860; - break; - case 960: - case 80960: - arch = bfd_arch_i960; + case 3000: + arch = bfd_arch_mips; + number = bfd_mach_mips3000; break; - case 2000: - case 3000: case 4000: - case 4400: arch = bfd_arch_mips; + number = bfd_mach_mips4000; break; case 6000: