From: Tristan Gingold Date: Tue, 10 Jan 2012 11:52:27 +0000 (+0000) Subject: 2012-01-10 Tristan Gingold X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1598539f980dd19c52884d1272463d6a1be8c305;p=binutils-gdb.git 2012-01-10 Tristan Gingold * objdump.c (display_object_bfd): Renamed from ... (display_bfd): ... this. (display_any_bfd): New function. (display_file): Split. Handle nested archives. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index c78b13ffe6a..16c8316f747 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,10 @@ +2012-01-10 Tristan Gingold + + * objdump.c (display_object_bfd): Renamed from ... + (display_bfd): ... this. + (display_any_bfd): New function. + (display_file): Split. Handle nested archives. + 2012-01-09 Roland McGrath * configure.in: Use AM_ZLIB. diff --git a/binutils/objdump.c b/binutils/objdump.c index 784ead27e08..ede9ba3b9aa 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -3257,7 +3257,7 @@ dump_bfd (bfd *abfd) } static void -display_bfd (bfd *abfd) +display_object_bfd (bfd *abfd) { char **matching; @@ -3297,24 +3297,8 @@ display_bfd (bfd *abfd) } static void -display_file (char *filename, char *target) +display_any_bfd (bfd *file, int level) { - bfd *file; - bfd *arfile = NULL; - - if (get_file_size (filename) < 1) - { - exit_status = 1; - return; - } - - file = bfd_openr (filename, target); - if (file == NULL) - { - nonfatal (filename); - return; - } - /* Decompress sections unless dumping the section contents. */ if (!dump_section_contents) file->flags |= BFD_DECOMPRESS; @@ -3322,9 +3306,14 @@ display_file (char *filename, char *target) /* If the file is an archive, process all of its elements. */ if (bfd_check_format (file, bfd_archive)) { + bfd *arfile = NULL; bfd *last_arfile = NULL; - printf (_("In archive %s:\n"), bfd_get_filename (file)); + if (level == 0) + printf (_("In archive %s:\n"), bfd_get_filename (file)); + else + printf (_("In nested archive %s:\n"), bfd_get_filename (file)); + for (;;) { bfd_set_error (bfd_error_no_error); @@ -3337,7 +3326,7 @@ display_file (char *filename, char *target) break; } - display_bfd (arfile); + display_any_bfd (arfile, level + 1); if (last_arfile != NULL) bfd_close (last_arfile); @@ -3348,7 +3337,28 @@ display_file (char *filename, char *target) bfd_close (last_arfile); } else - display_bfd (file); + display_object_bfd (file); +} + +static void +display_file (char *filename, char *target) +{ + bfd *file; + + if (get_file_size (filename) < 1) + { + exit_status = 1; + return; + } + + file = bfd_openr (filename, target); + if (file == NULL) + { + nonfatal (filename); + return; + } + + display_any_bfd (file, 0); bfd_close (file); }