-/* Dump selected contents of ABFD */
-
-static void
-dump_bfd (abfd)
- bfd *abfd;
-{
- /* If we are adjusting section VMA's, change them all now. Changing
- the BFD information is a hack. However, we must do it, or
- bfd_find_nearest_line will not do the right thing. */
- if (adjust_section_vma != 0)
- {
- asection *s;
-
- for (s = abfd->sections; s != NULL; s = s->next)
- {
- s->vma += adjust_section_vma;
- s->lma += adjust_section_vma;
- }
- }
-
- printf (_("\n%s: file format %s\n"), bfd_get_filename (abfd),
- abfd->xvec->name);
- if (dump_ar_hdrs)
- print_arelt_descr (stdout, abfd, true);
- if (dump_file_header)
- dump_bfd_header (abfd);
- if (dump_private_headers)
- dump_bfd_private_header (abfd);
- putchar ('\n');
- if (dump_section_headers)
- dump_headers (abfd);
- if (dump_symtab || dump_reloc_info || disassemble || dump_debugging)
- {
- syms = slurp_symtab (abfd);
- }
- if (dump_dynamic_symtab || dump_dynamic_reloc_info)
- {
- dynsyms = slurp_dynamic_symtab (abfd);
- }
- if (dump_symtab)
- dump_symbols (abfd, false);
- if (dump_dynamic_symtab)
- dump_symbols (abfd, true);
- if (dump_stab_section_info)
- dump_stabs (abfd);
- if (dump_reloc_info && ! disassemble)
- dump_relocs (abfd);
- if (dump_dynamic_reloc_info)
- dump_dynamic_relocs (abfd);
- if (dump_section_contents)
- dump_data (abfd);
- if (disassemble)
- disassemble_data (abfd);
- if (dump_debugging)
- {
- PTR dhandle;
-
- dhandle = read_debugging_info (abfd, syms, symcount);
- if (dhandle != NULL)
- {
- if (! print_debugging_info (stdout, dhandle))
- {
- non_fatal (_("%s: printing debugging information failed"),
- bfd_get_filename (abfd));
- exit_status = 1;
- }
- }
- }
- if (syms)
- {
- free (syms);
- syms = NULL;
- }
- if (dynsyms)
- {
- free (dynsyms);
- dynsyms = NULL;
- }
-}
-
-static void
-display_bfd (abfd)
- bfd *abfd;
-{
- char **matching;
-
- if (bfd_check_format_matches (abfd, bfd_object, &matching))
- {
- dump_bfd (abfd);
- return;
- }
-
- if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
- {
- nonfatal (bfd_get_filename (abfd));
- list_matching_formats (matching);
- free (matching);
- return;
- }
-
- if (bfd_get_error () != bfd_error_file_not_recognized)
- {
- nonfatal (bfd_get_filename (abfd));
- return;
- }
-
- if (bfd_check_format_matches (abfd, bfd_core, &matching))
- {
- dump_bfd (abfd);
- return;
- }
-
- nonfatal (bfd_get_filename (abfd));
-
- if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
- {
- list_matching_formats (matching);
- free (matching);
- }
-}
-
-static void
-display_file (filename, target)
- char *filename;
- char *target;
-{
- bfd *file, *arfile = (bfd *) NULL;
-
- file = bfd_openr (filename, target);
- if (file == NULL)
- {
- nonfatal (filename);
- return;
- }
-
- if (bfd_check_format (file, bfd_archive) == true)
- {
- bfd *last_arfile = NULL;
-
- printf (_("In archive %s:\n"), bfd_get_filename (file));
- for (;;)
- {
- bfd_set_error (bfd_error_no_error);
-
- arfile = bfd_openr_next_archived_file (file, arfile);
- if (arfile == NULL)
- {
- if (bfd_get_error () != bfd_error_no_more_archived_files)
- nonfatal (bfd_get_filename (file));
- break;
- }
-
- display_bfd (arfile);
-
- if (last_arfile != NULL)
- bfd_close (last_arfile);
- last_arfile = arfile;
- }
-
- if (last_arfile != NULL)
- bfd_close (last_arfile);
- }
- else
- display_bfd (file);
-
- bfd_close (file);
-}