New function: bfd_arch_list cf bfd_target_list.

Make bfd_default_scan (arch) more flexable in its match of name to arch,
remove some of the dead code.
This commit is contained in:
Andrew Cagney 1997-09-10 05:55:15 +00:00
parent 02508bb179
commit eaa9c2e7ac
3 changed files with 123 additions and 40 deletions

View File

@ -1,3 +1,17 @@
Wed Sep 10 11:17:50 1997 Andrew Cagney <cagney@b1.cygnus.com>
* archures.c (bfd_default_scan): Use strcasecmp.
(bfd_default_scan): Test for match with arch_name + ":" +
printable_name.
(bfd_default_scan): Test for match with printable_name - ":".
(bfd_default_scan): Delete w65, h8300, h8500, z8k, i960 special
cases. Each implements their own scan function.
(bfd_default_scan): Delete 386, 2900, 860, mips 2000, mips 4400
special cases. Since info->mach == 0. The test mach == number
fails.
(bfd_arch_list): New function, return name of all the supported
architectures.
Tue Sep 9 10:21:56 1997 Nick Clifton <nickc@cygnus.com>
* elf32-v850.c (v850_elf_print_private_bfd_data): Break after

View File

@ -333,6 +333,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
@ -584,11 +639,57 @@ 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: <arch> ":" <mach>;
Attempt to match: <arch> <mach>? */
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: <arch> ":" <mach>; Do not
attempt to match just <mach>, 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 */
@ -619,20 +720,11 @@ bfd_default_scan (info, string)
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;
break;
case 68010:
case 68020:
case 68030:
@ -643,38 +735,12 @@ bfd_default_scan (info, string)
arch = bfd_arch_m68k;
break;
case 386:
case 80386:
case 486:
case 80486:
arch = bfd_arch_i386;
break;
case 29000:
arch = bfd_arch_a29k;
break;
case 8000:
arch = bfd_arch_z8k;
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;
break;
case 2000:
case 3000:
case 4000:
case 4400:
arch = bfd_arch_mips;
break;

View File

@ -1283,6 +1283,9 @@ bfd_printable_name PARAMS ((bfd *abfd));
const bfd_arch_info_type *
bfd_scan_arch PARAMS ((const char *string));
const char **
bfd_arch_list PARAMS ((void));
const bfd_arch_info_type *
bfd_arch_get_compatible PARAMS ((
const bfd *abfd,