This is the mail archive of the binutils@sources.redhat.com 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]

Multi-file dumping in readelf


When dumping debug section in multiple files at once with readelf you
can get spurious messages about non-existent or unrecognized sections.
The dump requests should be reset after every file, because the debug
sections are usually numbered differently in every object file.

Andreas.

2002-12-22  Andreas Schwab  <schwab@suse.de>

	* readelf.c (main): Reset dump request after each file.

--- binutils/readelf.c.~1.185.~	2002-12-12 23:42:19.000000000 +0100
+++ binutils/readelf.c	2002-12-22 14:08:17.000000000 +0100
@@ -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;
 }


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