X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Farchures.c;h=7f2c5f72367d9e93f8789c473eaddc436c94bbe9;hb=dc9e099fc0eced486ae2b49455c9da113c11f4ff;hp=1b8f58ed67abeec03b1c44e49d20bf9c85db3066;hpb=b7577823b60110d3b33ac7753e68a0291f0b132a;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/archures.c b/bfd/archures.c index 1b8f58ed67..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, 1995 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. @@ -18,6 +18,11 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include "bfd.h" +#include "sysdep.h" +#include "libbfd.h" +#include + /* SECTION @@ -65,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. @@ -81,16 +94,43 @@ DESCRIPTION .#define bfd_mach_i960_mc 4 .#define bfd_mach_i960_xa 5 .#define bfd_mach_i960_ca 6 -. {* start-sanitize-i960xl *} -.#define bfd_mach_i960_xl 7 -. {* end-sanitize-i960xl *} +.#define bfd_mach_i960_jx 7 +.#define bfd_mach_i960_hx 8 . . bfd_arch_a29k, {* AMD 29000 *} . bfd_arch_sparc, {* SPARC *} -.#define bfd_mach_sparc 1 -.#define bfd_mach_sparc64 2 +.#define bfd_mach_sparc 1 +.{* The difference between v8plus and v9 is that v9 is a true 64 bit env. *} +.#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_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 *} @@ -102,39 +142,57 @@ DESCRIPTION . bfd_arch_h8300, {* Hitachi H8/300 *} .#define bfd_mach_h8300 1 .#define bfd_mach_h8300h 2 +.#define bfd_mach_h8300s 3 . bfd_arch_powerpc, {* PowerPC *} . bfd_arch_rs6000, {* IBM RS/6000 *} . bfd_arch_hppa, {* HP PA RISC *} +. bfd_arch_d10v, {* Mitsubishi 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-rce *} -. bfd_arch_rce, {* Motorola RCE *} -. {* end-sanitize-rce *} -. {* start-sanitize-arc *} +. bfd_arch_tic30, {* Texas Instruments TMS320C30 *} +. bfd_arch_tic80, {* TI TMS320c80 (MVP) *} +. bfd_arch_v850, {* NEC V850 *} +.#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 *} +. 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 . }; */ -#include "bfd.h" -#include "sysdep.h" -#include "libbfd.h" -#include - /* SUBSECTION @@ -151,38 +209,102 @@ DESCRIPTION . int bits_per_address; . int bits_per_byte; . enum bfd_architecture arch; -. long mach; -. char *arch_name; -. CONST char *printable_name; +. unsigned long mach; +. const char *arch_name; +. const char *printable_name; . unsigned int section_align_power; . {* true if this is the default machine for the architecture *} . boolean the_default; -. CONST struct bfd_arch_info * (*compatible) -. PARAMS ((CONST struct bfd_arch_info *a, -. CONST struct bfd_arch_info *b)); +. const struct bfd_arch_info * (*compatible) +. PARAMS ((const struct bfd_arch_info *a, +. const struct bfd_arch_info *b)); . -. boolean (*scan) PARAMS ((CONST struct bfd_arch_info *, CONST char *)); -. {* How to disassemble an instruction, producing a printable -. representation on a specified stdio stream. This isn't -. defined for most processors at present, because of the size -. of the additional tables it would drag in, and because gdb -. wants to use a different interface. *} -. unsigned int (*disassemble) PARAMS ((bfd_vma addr, CONST char *data, -. PTR stream)); +. boolean (*scan) PARAMS ((const struct bfd_arch_info *, const char *)); . -. struct bfd_arch_info *next; +. const struct bfd_arch_info *next; .} bfd_arch_info_type; */ -bfd_arch_info_type *bfd_arch_info_list; - +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_d10v_arch; +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; +extern const bfd_arch_info_type bfd_m32r_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_mips_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_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_tic80_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; + +static const bfd_arch_info_type * const bfd_archures_list[] = +{ +#ifdef SELECT_ARCHITECTURES + SELECT_ARCHITECTURES, +#else + &bfd_a29k_arch, + &bfd_alpha_arch, + &bfd_arc_arch, + &bfd_arm_arch, + &bfd_d10v_arch, + &bfd_d30v_arch, + &bfd_h8300_arch, + &bfd_h8500_arch, + &bfd_hppa_arch, + &bfd_i386_arch, + &bfd_i860_arch, + &bfd_i960_arch, + &bfd_m32r_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_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, +#endif + 0 +}; /* FUNCTION bfd_printable_name SYNOPSIS - CONST char *bfd_printable_name(bfd *abfd); + const char *bfd_printable_name(bfd *abfd); DESCRIPTION Return a printable string representing the architecture and machine @@ -190,7 +312,7 @@ DESCRIPTION */ -CONST char * +const char * bfd_printable_name (abfd) bfd *abfd; { @@ -204,7 +326,7 @@ FUNCTION bfd_scan_arch SYNOPSIS - bfd_arch_info_type *bfd_scan_arch(CONST char *string); + const bfd_arch_info_type *bfd_scan_arch(const char *string); DESCRIPTION Figure out if BFD supports any cpu which could be described with @@ -213,21 +335,78 @@ DESCRIPTION */ -bfd_arch_info_type * +const bfd_arch_info_type * bfd_scan_arch (string) - CONST char *string; + const char *string; { - struct bfd_arch_info *ap; + const bfd_arch_info_type * const *app, *ap; /* Look through all the installed architectures */ - for (ap = bfd_arch_info_list; - ap != (bfd_arch_info_type *)NULL; - ap = ap->next) { - - if (ap->scan(ap, string)) - return ap; - } - return (bfd_arch_info_type *)NULL; + for (app = bfd_archures_list; *app != NULL; app++) + { + for (ap = *app; ap != NULL; ap = ap->next) + { + if (ap->scan (ap, string)) + return ap; + } + } + + return NULL; +} + + + +/* +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; } @@ -237,9 +416,9 @@ FUNCTION bfd_arch_get_compatible SYNOPSIS - CONST bfd_arch_info_type *bfd_arch_get_compatible( - CONST bfd *abfd, - CONST bfd *bbfd); + const bfd_arch_info_type *bfd_arch_get_compatible( + const bfd *abfd, + const bfd *bbfd); DESCRIPTION Determine whether two BFDs' @@ -249,10 +428,10 @@ DESCRIPTION an <> structure describing the compatible machine. */ -CONST bfd_arch_info_type * +const bfd_arch_info_type * bfd_arch_get_compatible (abfd, bbfd) - CONST bfd *abfd; - CONST bfd *bbfd; + const bfd *abfd; + const bfd *bbfd; { /* If either architecture is unknown, then all we can do is assume the user knows what he's doing. */ @@ -262,7 +441,7 @@ bfd_arch_get_compatible (abfd, bbfd) return abfd->arch_info; /* Otherwise architecture-specific code has to decide. */ - return abfd->arch_info->compatible(abfd->arch_info,bbfd->arch_info); + return abfd->arch_info->compatible (abfd->arch_info, bbfd->arch_info); } @@ -277,11 +456,11 @@ DESCRIPTION structure, until the correct back end has determined the real architecture of the file. -.extern bfd_arch_info_type bfd_default_arch_struct; +.extern const bfd_arch_info_type bfd_default_arch_struct; */ -bfd_arch_info_type bfd_default_arch_struct = +const bfd_arch_info_type bfd_default_arch_struct = { 32,32,8,bfd_arch_unknown,0,"unknown","unknown",2,true, bfd_default_compatible, @@ -294,7 +473,7 @@ FUNCTION bfd_set_arch_info SYNOPSIS - void bfd_set_arch_info(bfd *abfd, bfd_arch_info_type *arg); + void bfd_set_arch_info(bfd *abfd, const bfd_arch_info_type *arg); DESCRIPTION Set the architecture info of @var{abfd} to @var{arg}. @@ -303,7 +482,7 @@ DESCRIPTION void bfd_set_arch_info (abfd, arg) bfd *abfd; - bfd_arch_info_type *arg; + const bfd_arch_info_type *arg; { abfd->arch_info = arg; } @@ -328,39 +507,27 @@ boolean bfd_default_set_arch_mach (abfd, arch, mach) bfd *abfd; enum bfd_architecture arch; - unsigned long mach; + unsigned long mach; { - static struct bfd_arch_info *old_ptr = &bfd_default_arch_struct; - boolean found = false; - /* run through the table to find the one we want, we keep a little - cache to speed things up */ - if (old_ptr == 0 || arch != old_ptr->arch || mach != old_ptr->mach) { - bfd_arch_info_type *ptr; - old_ptr = (bfd_arch_info_type *)NULL; - for (ptr = bfd_arch_info_list; - ptr != (bfd_arch_info_type *)NULL; - ptr= ptr->next) { - if (ptr->arch == arch && - ((ptr->mach == mach) || (ptr->the_default && mach == 0))) { - old_ptr = ptr; - found = true; - break; - } - } - if (found==false) { - /*looked for it and it wasn't there, so put in the default */ - old_ptr = &bfd_default_arch_struct; - bfd_set_error (bfd_error_bad_value); - } - } - else { - /* it was in the cache */ - found = true; - } + const bfd_arch_info_type * const *app, *ap; - abfd->arch_info = old_ptr; + 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; + } + } + } - return found; + abfd->arch_info = &bfd_default_arch_struct; + bfd_set_error (bfd_error_bad_value); + return false; } @@ -443,138 +610,33 @@ bfd_arch_bits_per_address (abfd) } -extern void bfd_a29k_arch PARAMS ((void)); -extern void bfd_alpha_arch PARAMS ((void)); -/* start-sanitize-arc */ -extern void bfd_arc_arch PARAMS ((void)); -/* end-sanitize-arc */ -extern void bfd_arm_arch PARAMS ((void)); -extern void bfd_h8300_arch PARAMS ((void)); -extern void bfd_h8500_arch PARAMS ((void)); -extern void bfd_hppa_arch PARAMS ((void)); -extern void bfd_i386_arch PARAMS ((void)); -extern void bfd_i960_arch PARAMS ((void)); -extern void bfd_m68k_arch PARAMS ((void)); -extern void bfd_m88k_arch PARAMS ((void)); -extern void bfd_mips_arch PARAMS ((void)); -extern void bfd_powerpc_arch PARAMS ((void)); -extern void bfd_rs6000_arch PARAMS ((void)); -extern void bfd_sh_arch PARAMS ((void)); -/* start-sanitize-rce */ -extern void bfd_rce_arch PARAMS ((void)); -/* end-sanitize-rce */ -extern void bfd_sparc_arch PARAMS ((void)); -extern void bfd_vax_arch PARAMS ((void)); -extern void bfd_we32k_arch PARAMS ((void)); -extern void bfd_z8k_arch PARAMS ((void)); -extern void bfd_ns32k_arch PARAMS ((void)); -extern void bfd_w65_arch PARAMS ((void)); - -static void (*const archures_init_table[]) PARAMS ((void)) = -{ -#ifdef SELECT_ARCHITECTURES - SELECT_ARCHITECTURES, -#else - bfd_a29k_arch, - bfd_alpha_arch, -/* start-sanitize-arc */ - bfd_arc_arch, -/* end-sanitize-arc */ - bfd_arm_arch, - bfd_h8300_arch, - bfd_h8500_arch, - bfd_hppa_arch, - bfd_i386_arch, - bfd_i960_arch, - bfd_m68k_arch, - bfd_m88k_arch, - bfd_mips_arch, - bfd_powerpc_arch, - bfd_rs6000_arch, - bfd_sh_arch, -/* start-sanitize-rce */ - bfd_rce_arch, -/* end-sanitize-rce */ - bfd_sparc_arch, - bfd_vax_arch, - bfd_we32k_arch, - bfd_z8k_arch, - bfd_ns32k_arch, - bfd_w65_arch, -#endif - 0 - }; - - - -/* -INTERNAL_FUNCTION - bfd_arch_init - -SYNOPSIS - void bfd_arch_init(void); - -DESCRIPTION - Initialize the architecture dispatch table by - calling all installed architecture packages and getting them - to poke around. -*/ - -void -bfd_arch_init () -{ - void (*const *ptable) PARAMS ((void)); - for (ptable = archures_init_table; *ptable ; ptable++) - (*ptable)(); -} - - -/* -INTERNAL_FUNCTION - bfd_arch_linkin - -SYNOPSIS - void bfd_arch_linkin(bfd_arch_info_type *ptr); - -DESCRIPTION - Link the architecture info structure @var{ptr} into the list. -*/ - -void -bfd_arch_linkin (ptr) - bfd_arch_info_type *ptr; -{ - ptr->next = bfd_arch_info_list; - bfd_arch_info_list = ptr; -} - - /* INTERNAL_FUNCTION bfd_default_compatible SYNOPSIS - CONST bfd_arch_info_type *bfd_default_compatible - (CONST bfd_arch_info_type *a, - CONST bfd_arch_info_type *b); + const bfd_arch_info_type *bfd_default_compatible + (const bfd_arch_info_type *a, + const bfd_arch_info_type *b); DESCRIPTION The default function for testing for compatibility. */ -CONST bfd_arch_info_type * +const bfd_arch_info_type * bfd_default_compatible (a,b) - CONST bfd_arch_info_type *a; - CONST bfd_arch_info_type *b; + const bfd_arch_info_type *a; + const bfd_arch_info_type *b; { - if(a->arch != b->arch) return NULL; + if (a->arch != b->arch) + return NULL; - if (a->mach > b->mach) { + if (a->mach > b->mach) return a; - } - if (b->mach > a->mach) { + + if (b->mach > a->mach) return b; - } + return a; } @@ -584,7 +646,7 @@ INTERNAL_FUNCTION bfd_default_scan SYNOPSIS - boolean bfd_default_scan(CONST struct bfd_arch_info *info, CONST char *string); + boolean bfd_default_scan(const struct bfd_arch_info *info, const char *string); DESCRIPTION The default function for working out whether this is an @@ -593,99 +655,143 @@ DESCRIPTION boolean bfd_default_scan (info, string) - CONST struct bfd_arch_info *info; - CONST char *string; + const struct bfd_arch_info *info; + const char *string; { - CONST char *ptr_src; - CONST char *ptr_tst; + const char *ptr_src; + const char *ptr_tst; unsigned long number; enum bfd_architecture arch; - /* First test for an exact match */ - if (strcmp(string, info->printable_name) == 0) return true; + const char *printable_name_colon; + + /* 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 */ - for (ptr_src = string, - ptr_tst = info->arch_name; + for (ptr_src = string, ptr_tst = info->arch_name; *ptr_src && *ptr_tst; - ptr_src++, - ptr_tst++) + ptr_src++, ptr_tst++) { if (*ptr_src != *ptr_tst) break; } /* Chewed up as much of the architecture as will match, skip any colons */ - if (*ptr_src == ':') ptr_src++; - - if (*ptr_src == 0) { - /* nothing more, then only keep this one if it is the default - machine for this architecture */ - return info->the_default; - } - number = 0; - while (isdigit(*ptr_src)) { - number = number * 10 + *ptr_src - '0'; + if (*ptr_src == ':') ptr_src++; - } + + if (*ptr_src == 0) + { + /* nothing more, then only keep this one if it is the default + machine for this architecture */ + return info->the_default; + } - switch (number) + number = 0; + while (isdigit ((unsigned char) *ptr_src)) { - case 65: - arch = bfd_arch_w65; - break; + number = number * 10 + *ptr_src - '0'; + ptr_src++; + } - case 300: - arch = bfd_arch_h8300; - break; + /* NOTE: The below is retained for compatibility only. + PLEASE DO NOT ADD TO THIS CODE. */ - case 500: - arch = bfd_arch_h8500; + switch (number) + { + /* 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: @@ -695,6 +801,7 @@ bfd_default_scan (info, string) default: return false; } + if (arch != info->arch) return false; @@ -710,17 +817,17 @@ FUNCTION bfd_get_arch_info SYNOPSIS - bfd_arch_info_type * bfd_get_arch_info(bfd *abfd); + const bfd_arch_info_type * bfd_get_arch_info(bfd *abfd); DESCRIPTION Return the architecture info struct in @var{abfd}. */ -bfd_arch_info_type * +const bfd_arch_info_type * bfd_get_arch_info (abfd) bfd *abfd; { - return abfd->arch_info; + return abfd->arch_info; } @@ -729,10 +836,10 @@ FUNCTION bfd_lookup_arch SYNOPSIS - bfd_arch_info_type *bfd_lookup_arch + const bfd_arch_info_type *bfd_lookup_arch (enum bfd_architecture arch, - long machine); + unsigned long machine); DESCRIPTION Look for the architecure info structure which matches the @@ -741,23 +848,25 @@ DESCRIPTION default. */ -bfd_arch_info_type * +const bfd_arch_info_type * bfd_lookup_arch (arch, machine) enum bfd_architecture arch; - long machine; + unsigned long machine; { - bfd_arch_info_type *ap; - bfd_check_init(); - for (ap = bfd_arch_info_list; - ap != (bfd_arch_info_type *)NULL; - ap = ap->next) { - if (ap->arch == arch && - ((ap->mach == machine) - || (ap->the_default && machine == 0))) { - return ap; - } + 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 == machine + || (machine == 0 && ap->the_default))) + return ap; } - return (bfd_arch_info_type *)NULL; + } + + return NULL; } @@ -766,7 +875,7 @@ FUNCTION bfd_printable_arch_mach SYNOPSIS - CONST char *bfd_printable_arch_mach + const char *bfd_printable_arch_mach (enum bfd_architecture arch, unsigned long machine); DESCRIPTION @@ -776,12 +885,14 @@ DESCRIPTION This routine is depreciated. */ -CONST char * +const char * bfd_printable_arch_mach (arch, machine) enum bfd_architecture arch; unsigned long machine; { - bfd_arch_info_type *ap = bfd_lookup_arch(arch, machine); - if(ap) return ap->printable_name; + const bfd_arch_info_type *ap = bfd_lookup_arch (arch, machine); + + if (ap) + return ap->printable_name; return "UNKNOWN!"; }