This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch]: objdump nested archives


Hi,

this is a minor adjustment to objdump so that it handles nested archives (and dump only elements).

Ok for trunk ?

(no regression for x86_64 gnu/linux).

Tristan.

binutils/
2012-01-04  Tristan Gingold  <gingold@adacore.com>

	* 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/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);
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]