Move display_info() function into bucomm.c

This commit is contained in:
Nick Clifton 2003-03-24 11:28:35 +00:00
parent 17c0759ec4
commit 06d86cf78e
6 changed files with 256 additions and 218 deletions

View file

@ -123,21 +123,21 @@ static void usage
static void nonfatal
PARAMS ((const char *));
static void display_file
PARAMS ((char *filename, char *target));
PARAMS ((char *, char *));
static void dump_section_header
PARAMS ((bfd *, asection *, PTR));
static void dump_headers
PARAMS ((bfd *));
static void dump_data
PARAMS ((bfd *abfd));
PARAMS ((bfd *));
static void dump_relocs
PARAMS ((bfd *abfd));
PARAMS ((bfd *));
static void dump_dynamic_relocs
PARAMS ((bfd * abfd));
PARAMS ((bfd *));
static void dump_reloc_set
PARAMS ((bfd *, asection *, arelent **, long));
static void dump_symbols
PARAMS ((bfd *abfd, bfd_boolean dynamic));
PARAMS ((bfd *, bfd_boolean));
static void dump_bfd_header
PARAMS ((bfd *));
static void dump_bfd_private_header
@ -145,15 +145,7 @@ static void dump_bfd_private_header
static void dump_bfd
PARAMS ((bfd *));
static void display_bfd
PARAMS ((bfd *abfd));
static void display_target_list
PARAMS ((void));
static void display_info_table
PARAMS ((int, int));
static void display_target_tables
PARAMS ((void));
static void display_info
PARAMS ((void));
PARAMS ((bfd *));
static void objdump_print_value
PARAMS ((bfd_vma, struct disassemble_info *, bfd_boolean));
static void objdump_print_symname
@ -176,8 +168,6 @@ static void disassemble_bytes
bfd_byte *, bfd_vma, bfd_vma, arelent ***, arelent **));
static void disassemble_data
PARAMS ((bfd *));
static const char *endian_string
PARAMS ((enum bfd_endian));
static asymbol ** slurp_symtab
PARAMS ((bfd *));
static asymbol ** slurp_dynamic_symtab
@ -2571,183 +2561,6 @@ dump_reloc_set (abfd, sec, relpp, relcount)
}
}
/* The length of the longest architecture name + 1. */
#define LONGEST_ARCH sizeof("powerpc:common")
static const char *
endian_string (endian)
enum bfd_endian endian;
{
if (endian == BFD_ENDIAN_BIG)
return "big endian";
else if (endian == BFD_ENDIAN_LITTLE)
return "little endian";
else
return "endianness unknown";
}
/* List the targets that BFD is configured to support, each followed
by its endianness and the architectures it supports. */
static void
display_target_list ()
{
extern const bfd_target *const *bfd_target_vector;
char *dummy_name;
int t;
dummy_name = make_temp_file (NULL);
for (t = 0; bfd_target_vector[t]; t++)
{
const bfd_target *p = bfd_target_vector[t];
bfd *abfd = bfd_openw (dummy_name, p->name);
int a;
printf ("%s\n (header %s, data %s)\n", p->name,
endian_string (p->header_byteorder),
endian_string (p->byteorder));
if (abfd == NULL)
{
nonfatal (dummy_name);
continue;
}
if (! bfd_set_format (abfd, bfd_object))
{
if (bfd_get_error () != bfd_error_invalid_operation)
nonfatal (p->name);
bfd_close_all_done (abfd);
continue;
}
for (a = (int) bfd_arch_obscure + 1; a < (int) bfd_arch_last; a++)
if (bfd_set_arch_mach (abfd, (enum bfd_architecture) a, 0))
printf (" %s\n",
bfd_printable_arch_mach ((enum bfd_architecture) a, 0));
bfd_close_all_done (abfd);
}
unlink (dummy_name);
free (dummy_name);
}
/* Print a table showing which architectures are supported for entries
FIRST through LAST-1 of bfd_target_vector (targets across,
architectures down). */
static void
display_info_table (first, last)
int first;
int last;
{
extern const bfd_target *const *bfd_target_vector;
int t, a;
char *dummy_name;
/* Print heading of target names. */
printf ("\n%*s", (int) LONGEST_ARCH, " ");
for (t = first; t < last && bfd_target_vector[t]; t++)
printf ("%s ", bfd_target_vector[t]->name);
putchar ('\n');
dummy_name = make_temp_file (NULL);
for (a = (int) bfd_arch_obscure + 1; a < (int) bfd_arch_last; a++)
if (strcmp (bfd_printable_arch_mach (a, 0), "UNKNOWN!") != 0)
{
printf ("%*s ", (int) LONGEST_ARCH - 1,
bfd_printable_arch_mach (a, 0));
for (t = first; t < last && bfd_target_vector[t]; t++)
{
const bfd_target *p = bfd_target_vector[t];
bfd_boolean ok = TRUE;
bfd *abfd = bfd_openw (dummy_name, p->name);
if (abfd == NULL)
{
nonfatal (p->name);
ok = FALSE;
}
if (ok)
{
if (! bfd_set_format (abfd, bfd_object))
{
if (bfd_get_error () != bfd_error_invalid_operation)
nonfatal (p->name);
ok = FALSE;
}
}
if (ok)
{
if (! bfd_set_arch_mach (abfd, a, 0))
ok = FALSE;
}
if (ok)
printf ("%s ", p->name);
else
{
int l = strlen (p->name);
while (l--)
putchar ('-');
putchar (' ');
}
if (abfd != NULL)
bfd_close_all_done (abfd);
}
putchar ('\n');
}
unlink (dummy_name);
free (dummy_name);
}
/* Print tables of all the target-architecture combinations that
BFD has been configured to support. */
static void
display_target_tables ()
{
int t, columns;
extern const bfd_target *const *bfd_target_vector;
char *colum;
columns = 0;
colum = getenv ("COLUMNS");
if (colum != NULL)
columns = atoi (colum);
if (columns == 0)
columns = 80;
t = 0;
while (bfd_target_vector[t] != NULL)
{
int oldt = t, wid;
wid = LONGEST_ARCH + strlen (bfd_target_vector[t]->name) + 1;
++t;
while (wid < columns && bfd_target_vector[t] != NULL)
{
int newwid;
newwid = wid + strlen (bfd_target_vector[t]->name) + 1;
if (newwid >= columns)
break;
wid = newwid;
++t;
}
display_info_table (oldt, t);
}
}
static void
display_info ()
{
printf (_("BFD header file version %s\n"), BFD_VERSION_STRING);
display_target_list ();
display_target_tables ();
}
int main PARAMS ((int, char **));
int
@ -2943,7 +2756,7 @@ main (argc, argv)
usage (stderr, 2);
if (formats_info)
display_info ();
exit_status = display_info ();
else
{
if (optind == argc)