diff options
Diffstat (limited to 'binutils/objdump.c')
-rw-r--r-- | binutils/objdump.c | 52 |
1 files changed, 31 insertions, 21 deletions
diff --git a/binutils/objdump.c b/binutils/objdump.c index 784ead2..ede9ba3 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); } |