* readelf.c (main): Reset dump request after each file.
authorAndreas Schwab <schwab@linux-m68k.org>
Mon, 23 Dec 2002 13:18:02 +0000 (13:18 +0000)
committerAndreas Schwab <schwab@linux-m68k.org>
Mon, 23 Dec 2002 13:18:02 +0000 (13:18 +0000)
binutils/ChangeLog
binutils/readelf.c

index 828ae57fcd1f27b1d4563194748c787574ee5393..0a60a64001028e2f6fd320fea3a46e59a8e500cb 100644 (file)
@@ -1,3 +1,7 @@
+2002-12-23  Andreas Schwab  <schwab@suse.de>
+
+       * readelf.c (main): Reset dump request after each file.
+
 2002-12-23  Nick Clifton  <nickc@redhat.com>
 
        * nlmconv.c (main): Pass TRUE as third argument to
index 461d63f701ac812bfe270ee05d85b833c0224103..c3a39da9faba7ebe0c86828140dc7132a73b0e22 100644 (file)
@@ -10275,6 +10275,8 @@ main (argc, argv)
      char **argv;
 {
   int err;
+  char *cmdline_dump_sects = NULL;
+  unsigned num_cmdline_dump_sects = 0;
 
 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
   setlocale (LC_MESSAGES, "");
@@ -10290,12 +10292,38 @@ main (argc, argv)
   if (optind < (argc - 1))
     show_name = 1;
 
+  /* When processing more than one file remember the dump requests
+     issued on command line to reset them after each file.  */
+  if (optind + 1 < argc && dump_sects != NULL)
+    {
+      cmdline_dump_sects = malloc (num_dump_sects);
+      if (cmdline_dump_sects == NULL)
+       error (_("Out of memory allocating dump request table."));
+      else
+       {
+         memcpy (cmdline_dump_sects, dump_sects, num_dump_sects);
+         num_cmdline_dump_sects = num_dump_sects;
+       }
+    }
+
   err = 0;
   while (optind < argc)
-    err |= process_file (argv[optind++]);
+    {
+      err |= process_file (argv[optind++]);
+
+      /* Reset dump requests.  */
+      if (optind < argc && dump_sects != NULL)
+       {
+         num_dump_sects = num_cmdline_dump_sects;
+         if (num_cmdline_dump_sects > 0)
+           memcpy (dump_sects, cmdline_dump_sects, num_cmdline_dump_sects);
+       }
+    }
 
   if (dump_sects != NULL)
     free (dump_sects);
+  if (cmdline_dump_sects != NULL)
+    free (cmdline_dump_sects);
 
   return err;
 }