Fix reading of .debug_str_offsets{,.dwo} twice.
authorDoug Evans <dje@google.com>
Mon, 13 Apr 2015 19:50:17 +0000 (12:50 -0700)
committerDoug Evans <dje@google.com>
Mon, 13 Apr 2015 19:50:17 +0000 (12:50 -0700)
PR binutils/18218
* readelf.c (printable_section_name): Constify sec argument.
(apply_relocations): Ditto.  New arg "size".  All callers updated.
(load_specific_debug_section): Constify sec argument.
Remove side-effect of modifying sec->sh_size.

binutils/ChangeLog
binutils/readelf.c

index bd2c715b7c8f63e2215ff692b871eeeaf2c6c863..31eb7a32add7f7c7129e83eb9a9692c4b50b54d8 100644 (file)
@@ -1,3 +1,11 @@
+2015-04-13  Doug Evans  <dje@google.com>
+
+       PR binutils/18218
+       * readelf.c (printable_section_name): Constify sec argument.
+       (apply_relocations): Ditto.  New arg "size".  All callers updated.
+       (load_specific_debug_section): Constify sec argument.
+       Remove side-effect of modifying sec->sh_size.
+
 2015-04-09  H.J. Lu  <hongjiu.lu@intel.com>
 
        * objcopy.c (do_debug_sections): Use bit patterns.
index db69b5df40d5a9d4e98c081cc78913a1faf6dec2..ca251360d00f76cbd608bf3ab298c91c453ee424 100644 (file)
@@ -550,7 +550,7 @@ print_symbol (int width, const char *symbol)
    to print multibyte characters, it just interprets them as hex values.  */
 
 static const char *
-printable_section_name (Elf_Internal_Shdr * sec)
+printable_section_name (const Elf_Internal_Shdr * sec)
 {
 #define MAX_PRINT_SEC_NAME_LEN 128
   static char  sec_name_buf [MAX_PRINT_SEC_NAME_LEN + 1];
@@ -11633,11 +11633,11 @@ is_none_reloc (unsigned int reloc_type)
 
 static void
 apply_relocations (void * file,
-                  Elf_Internal_Shdr * section,
-                  unsigned char * start)
+                  const Elf_Internal_Shdr * section,
+                  unsigned char * start, bfd_size_type size)
 {
   Elf_Internal_Shdr * relsec;
-  unsigned char * end = start + section->sh_size;
+  unsigned char * end = start + size;
 
   if (elf_header.e_type != ET_REL)
     return;
@@ -11929,7 +11929,7 @@ dump_section_as_bytes (Elf_Internal_Shdr * section,
 
   if (relocate)
     {
-      apply_relocations (file, section, start);
+      apply_relocations (file, section, start, section->sh_size);
     }
   else
     {
@@ -12069,7 +12069,7 @@ uncompress_section_contents (unsigned char **buffer,
 
 static int
 load_specific_debug_section (enum dwarf_section_display_enum debug,
-                            Elf_Internal_Shdr * sec, void * file)
+                            const Elf_Internal_Shdr * sec, void * file)
 {
   struct dwarf_section * section = &debug_displays [debug].section;
   char buf [64];
@@ -12109,7 +12109,6 @@ load_specific_debug_section (enum dwarf_section_display_enum debug,
             and the section size if uncompress is successful.  */
          free (section->start);
          section->start = start;
-         sec->sh_size = size;
        }
       section->size = size;
     }
@@ -12118,7 +12117,7 @@ load_specific_debug_section (enum dwarf_section_display_enum debug,
     return 0;
 
   if (debug_displays [debug].relocate)
-    apply_relocations ((FILE *) file, sec, section->start);
+    apply_relocations ((FILE *) file, sec, section->start, section->size);
 
   return 1;
 }