[RFC] objcopy/objdump targets list
Elias Athanasopoulos
elathan@phys.uoa.gr
Mon Mar 24 14:40:00 GMT 2003
More information about the Binutils mailing list
Mon Mar 24 14:40:00 GMT 2003
- Previous message (by thread): [RFC] objcopy/objdump targets list
- Next message (by thread): [RFC] objcopy/objdump targets list
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Mon, Mar 17, 2003 at 11:30:33AM +0000, Nick Clifton wrote: > Hi Elias, > > > objdump has a very nice and handy -i option to list all the > > supported targets. I propose to move this code > > (display_targets_table, etc) in bucomm.c and make objcopy use it, > > too. > > This would be OK. It might also be an idea to tidy up the formatting Here is a patch that moves all the needed stuff from objdump.c to bucomm.c. If it is approved I'm going to change objcopy to use the 'new' functions. Regards, Elias ChangeLog 2003-03-24 Elias Athanasopoulos <elathan@phys.uoa.gr> * objdump.c (endian_string): Move to bucomm.c. (display_info): Likewise. (display_target_list): Likewise. (display_info_table): Likewise. (display_target_tables): Likewise. (main): Assign the return value of display_info to exit_status. * bucomm.c: Include bfdver.h (display_target_list): Call bfd_nonfatal instead of nonfatal and return 0 on a non-fatal errror, 1 on success. (display_info_table): Likewise. * bucomm.h (endian_string): Define. Make it non-static. (display_info): Define. Change prototype so as to return int, instead of static void. (display_target_list): Likewise. (display_info_table): Likewise. (display_target_tables): Likewise. =================================================================== RCS file: /home/anteater/bucvs/src/binutils/objdump.c,v retrieving revision 1.2 diff -u -r1.2 /home/anteater/bucvs/src/binutils/objdump.c --- /home/anteater/bucvs/src/binutils/objdump.c 2003/03/20 16:20:39 1.2 +++ /home/anteater/bucvs/src/binutils/objdump.c 2003/03/24 07:54:15 @@ -146,14 +146,6 @@ 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)); static void objdump_print_value PARAMS ((bfd_vma, struct disassemble_info *, bfd_boolean)); static void objdump_print_symname @@ -176,8 +168,6 @@ 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 @@ -2570,183 +2560,6 @@ printf ("\n"); } } - -/* 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 **)); @@ -2943,7 +2756,7 @@ usage (stderr, 2); if (formats_info) - display_info (); + exit_status = display_info (); else { if (optind == argc) =================================================================== RCS file: /home/anteater/bucvs/src/binutils/bucomm.c,v retrieving revision 1.2 diff -u -r1.2 /home/anteater/bucvs/src/binutils/bucomm.c --- /home/anteater/bucvs/src/binutils/bucomm.c 2003/03/20 16:20:44 1.2 +++ /home/anteater/bucvs/src/binutils/bucomm.c 2003/03/24 07:52:19 @@ -1,5 +1,6 @@ /* bucomm.c -- Bin Utils COMmon code. - Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002 + Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002, + 2003 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -23,6 +24,7 @@ loaded, but for now it's not necessary. */ #include "bfd.h" +#include "bfdver.h" #include "libiberty.h" #include "bucomm.h" #include "filenames.h" @@ -160,7 +162,201 @@ fprintf (f, " %s", *arch); fprintf (f, "\n"); } - + +/* The length of the longest architecture name + 1. */ +#define LONGEST_ARCH sizeof("powerpc:common") + +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. */ + +int +display_target_list () +{ + extern const bfd_target *const *bfd_target_vector; + char *dummy_name; + int t, ret = 1; + + 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) + { + bfd_nonfatal (dummy_name); + ret = 0; + continue; + } + + if (! bfd_set_format (abfd, bfd_object)) + { + if (bfd_get_error () != bfd_error_invalid_operation) + { + bfd_nonfatal (p->name); + ret = 0; + } + 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); + + return ret; +} + +/* Print a table showing which architectures are supported for entries + FIRST through LAST-1 of bfd_target_vector (targets across, + architectures down). */ + +int +display_info_table (first, last) + int first; + int last; +{ + extern const bfd_target *const *bfd_target_vector; + int t, a, ret = 1; + 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) + { + bfd_nonfatal (p->name); + ret = 0; + ok = FALSE; + } + + if (ok) + { + if (! bfd_set_format (abfd, bfd_object)) + { + if (bfd_get_error () != bfd_error_invalid_operation) + { + bfd_nonfatal (p->name); + ret = 0; + } + 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); + + return ret; +} + +/* Print tables of all the target-architecture combinations that + BFD has been configured to support. */ + +int +display_target_tables () +{ + int t, columns, ret = 1; + 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; + } + if (! display_info_table (oldt, t)) + ret = 0; + } + + return ret; +} + +int +display_info () +{ + printf (_("BFD header file version %s\n"), BFD_VERSION_STRING); + if (! display_target_list () || ! display_target_tables ()) + return 1; + else + return 0; +} + /* Display the archive header for an element as if it were an ls -l listing: Mode User\tGroup\tSize\tDate Name */ =================================================================== RCS file: /home/anteater/bucvs/src/binutils/bucomm.h,v retrieving revision 1.1 diff -u -r1.1 /home/anteater/bucvs/src/binutils/bucomm.h --- /home/anteater/bucvs/src/binutils/bucomm.h 2003/03/20 16:34:06 1.1 +++ /home/anteater/bucvs/src/binutils/bucomm.h 2003/03/24 07:52:34 @@ -1,6 +1,6 @@ /* bucomm.h -- binutils common include file. Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2002 Free Software Foundation, Inc. + 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -175,6 +175,21 @@ void list_supported_architectures PARAMS ((const char *, FILE *)); +const char * endian_string + PARAMS ((enum bfd_endian)); + +int display_info + PARAMS ((void)); + +int display_target_list + PARAMS ((void)); + +int display_info_table + PARAMS ((int, int)); + +int display_target_tables + PARAMS ((void)); + void print_arelt_descr PARAMS ((FILE *file, bfd *abfd, bfd_boolean verbose));
- Previous message (by thread): [RFC] objcopy/objdump targets list
- Next message (by thread): [RFC] objcopy/objdump targets list
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list