daily update
[deliverable/binutils-gdb.git] / binutils / readelf.c
index 3f4167b0c20fbf6fb4c3114b745b2bb179280a17..0607d897fd8131c31277d0a3c52d0930092aa173 100644 (file)
@@ -1,6 +1,6 @@
 /* readelf.c -- display contents of an ELF format file
    Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2008, 2009, 2010
+   2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
 
    Originally developed by Eric Youngdale <eric@andante.jic.com>
@@ -380,15 +380,16 @@ print_vma (bfd_vma vma, print_mode mode)
    Returns the number of emitted characters.  */
 
 static unsigned int
-print_symbol (int width, const char * symbol)
+print_symbol (int width, const char *symbol)
 {
-  const char * c;
+  const char *c;
   bfd_boolean extra_padding = FALSE;
   unsigned int num_printed = 0;
 
   if (do_wide)
     {
-      /* Set the width to a very large value.  This simplifies the code below.  */
+      /* Set the width to a very large value.  This simplifies the
+        code below.  */
       width = INT_MAX;
     }
   else if (width < 0)
@@ -407,7 +408,7 @@ print_symbol (int width, const char * symbol)
       /* Look for non-printing symbols inside the symbol's name.
         This test is triggered in particular by the names generated
         by the assembler for local labels.  */
-      while (ISPRINT (* c))
+      while (ISPRINT (*c))
        c++;
 
       len = c - symbol;
@@ -423,12 +424,12 @@ print_symbol (int width, const char * symbol)
          num_printed += len;
        }
 
-      if (* c == 0 || width == 0)
+      if (*c == 0 || width == 0)
        break;
 
       /* Now display the non-printing character, if
         there is room left in which to dipslay it.  */
-      if (*c < 32)
+      if ((unsigned char) *c < 32)
        {
          if (width < 2)
            break;
@@ -443,7 +444,7 @@ print_symbol (int width, const char * symbol)
          if (width < 6)
            break;
 
-         printf ("<0x%.2x>", *c);
+         printf ("<0x%.2x>", (unsigned char) *c);
 
          width -= 6;
          num_printed += 6;
@@ -3141,7 +3142,7 @@ usage (FILE * stream)
   -w[lLiaprmfFsoRt] or\n\
   --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,\n\
                =frames-interp,=str,=loc,=Ranges,=pubtypes,\n\
-               =trace_info,=trace_abbrev,=trace_aranges]\n\
+               =gdb_index,=trace_info,=trace_abbrev,=trace_aranges]\n\
                          Display the contents of DWARF2 debug sections\n"));
 #ifdef SUPPORT_DISASSEMBLY
   fprintf (stream, _("\
@@ -3637,7 +3638,11 @@ process_program_headers (FILE * file)
 
   if (elf_header.e_phnum == 0)
     {
-      if (do_segments)
+      /* PR binutils/12467.  */
+      if (elf_header.e_phoff != 0)
+       warn (_("possibly corrupt ELF header - it has a non-zero program"
+               " header offset, but no program headers"));
+      else if (do_segments)
        printf (_("\nThere are no program headers in this file.\n"));
       return 0;
     }
@@ -4376,7 +4381,11 @@ process_section_headers (FILE * file)
 
   if (elf_header.e_shnum == 0)
     {
-      if (do_sections)
+      /* PR binutils/12467.  */
+      if (elf_header.e_shoff != 0)
+       warn (_("possibly corrupt ELF file header - it has a non-zero"
+               " section header offset, but no section headers\n"));
+      else if (do_sections)
        printf (_("\nThere are no sections in this file.\n"));
 
       return 1;
@@ -4564,6 +4573,8 @@ process_section_headers (FILE * file)
        request_dump_bynumber (i, DEBUG_DUMP);
       else if (do_debug_frames && streq (name, ".eh_frame"))
        request_dump_bynumber (i, DEBUG_DUMP);
+      else if (do_gdb_index && streq (name, ".gdb_index"))
+       request_dump_bynumber (i, DEBUG_DUMP);
       /* Trace sections for Itanium VMS.  */
       else if ((do_debugging || do_trace_info || do_trace_abbrevs
                 || do_trace_aranges)
@@ -4857,7 +4868,7 @@ process_section_groups (FILE * file)
   if (elf_header.e_shnum == 0)
     {
       if (do_section_groups)
-       printf (_("\nThere are no sections in this file.\n"));
+       printf (_("\nThere are no sections to group in this file.\n"));
 
       return 1;
     }
@@ -12402,6 +12413,12 @@ process_object (char * file_name, FILE * file)
       dynamic_syminfo = NULL;
     }
 
+  if (dynamic_section)
+    {
+      free (dynamic_section);
+      dynamic_section = NULL;
+    }
+
   if (section_headers_groups)
     {
       free (section_headers_groups);
@@ -12637,6 +12654,13 @@ process_archive (char * file_name, FILE * file, bfd_boolean is_thin_archive)
           ret |= process_object (qualified_name, file);
         }
 
+      if (dump_sects != NULL)
+       {
+         free (dump_sects);
+         dump_sects = NULL;
+         num_dump_sects = 0;
+       }
+
       free (qualified_name);
     }
 
This page took 0.025763 seconds and 4 git commands to generate.