+2015-03-18 Jon Turney <jon.turney@dronecode.org.uk>
+ Nick Clifton <nickc@redhat.com>
+
+ PR binutils/18087
+ * coffgen.c (make_a_section_from_file): Only prepend a z to a
+ debug section's name if the section was actually compressed.
+ * elf.c (_bfd_elf_make_section_from_shdr): Likewise.
+ * compress.c (bfd_init_section_compress_status): Do not compress
+ the section if doing so would make it bigger. In such cases leave
+ the section alone and return COMPRESS_SECTION_NONE.
+
2015-03-17 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Return count of 0
abfd, name);
return FALSE;
}
- if (name[1] != 'z')
+ if (return_section->compress_status == COMPRESS_SECTION_DONE)
{
- unsigned int len = strlen (name);
+ if (name[1] != 'z')
+ {
+ unsigned int len = strlen (name);
- new_name = bfd_alloc (abfd, len + 2);
- if (new_name == NULL)
- return FALSE;
- new_name[0] = '.';
- new_name[1] = 'z';
- memcpy (new_name + 2, name + 1, len);
+ new_name = bfd_alloc (abfd, len + 2);
+ if (new_name == NULL)
+ return FALSE;
+ new_name[0] = '.';
+ new_name[1] = 'z';
+ memcpy (new_name + 2, name + 1, len);
+ }
}
- break;
+ break;
case decompress:
if (!bfd_init_section_decompress_status (abfd, return_section))
{
uncompressed_buffer,
uncompressed_size);
- free (uncompressed_buffer);
+ /* PR binutils/18087: If compression didn't make
+ the section smaller, just keep it uncompressed. */
+ if (ret && uncompressed_size < sec->size)
+ {
+ free (sec->contents);
+ sec->contents = uncompressed_buffer;
+ sec->size = uncompressed_size;
+ sec->compress_status = COMPRESS_SECTION_NONE;
+ }
+ else
+ free (uncompressed_buffer);
+
return ret;
#endif
}
abfd, name);
return FALSE;
}
- if (name[1] != 'z')
+ /* PR binutils/18087: Compression does not always make a section
+ smaller. So only rename the section when compression has
+ actually taken place. */
+ if (newsect->compress_status == COMPRESS_SECTION_DONE)
{
- unsigned int len = strlen (name);
-
- new_name = bfd_alloc (abfd, len + 2);
- if (new_name == NULL)
- return FALSE;
- new_name[0] = '.';
- new_name[1] = 'z';
- memcpy (new_name + 2, name + 1, len);
+ if (name[1] != 'z')
+ {
+ unsigned int len = strlen (name);
+
+ new_name = bfd_alloc (abfd, len + 2);
+ if (new_name == NULL)
+ return FALSE;
+ new_name[0] = '.';
+ new_name[1] = 'z';
+ memcpy (new_name + 2, name + 1, len);
+ }
}
break;
case decompress:
+2015-03-18 Jon Turney <jon.turney@dronecode.org.uk>
+ Nick Clifton <nickc@redhat.com>
+
+ PR binutils/18087
+ * doc/binutils.texi: Note that when objcopy compresses debug
+ sections the compression is only performed if it makes the section
+ smaller.
+
2015-03-10 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/18101
linker input file.
@item --compress-debug-sections
-Compress DWARF debug sections using zlib.
+Compress DWARF debug sections using zlib. The debug sections are
+renamed to begin with @samp{.zdebug} instead of @samp{.debug}. Note -
+if compression would actually make a section @emph{larger} then it is
+not compressed or renamed.
@item --decompress-debug-sections
-Decompress DWARF debug sections using zlib.
+Decompress DWARF debug sections using zlib. The original section
+names of the compressed sections are restored.
@item -V
@itemx --version
+2015-03-18 Jon Turney <jon.turney@dronecode.org.uk>
+ Nick Clifton <nickc@redhat.com>
+
+ PR binutils/18087
+ * doc/as.texinfo: Note that when gas compresses debug sections the
+ compression is only performed if it makes the section smaller.
+ * write.c (compress_debug): Do not compress a debug section if
+ doing so would make it larger.
+
2015-03-17 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
* config/tc-i386.c (cpu_arch): Add PROCESSOR_ZNVER flags.
@item --compress-debug-sections
Compress DWARF debug sections using zlib. The debug sections are renamed
to begin with @samp{.zdebug}, and the resulting object file may not be
-compatible with older linkers and object file utilities.
+compatible with older linkers and object file utilities. Note if compression
+would make a given section @emph{larger} then it is not compressed or renamed.
@item --nocompress-debug-sections
Do not compress DWARF debug sections. This is the default.
+2015-03-18 Jon Turney <jon.turney@dronecode.org.uk>
+ Nick Clifton <nickc@redhat.com>
+
+ PR binutils/18087
+ * gas/i386/dw2-compress-1.d: Do not expect the .debug_abbrev or
+ .debug_info sections to be compressed.
+
2015-03-17 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
* gas/i386/i386.exp: Add new znver1 test cases.
#readelf: -w
#name: DWARF2 debugging information 1
-Contents of the .zdebug_info section:
+Contents of the .debug_info section:
Compilation Unit @ offset 0x0:
Length: 0x4e \(32-bit\)
<50> DW_AT_encoding : 5 \(signed\)
<1><51>: Abbrev Number: 0
-Contents of the .zdebug_abbrev section:
+Contents of the .debug_abbrev section:
Number TAG \(0x0\)
1 DW_TAG_compile_unit \[has children\]
break;
}
+ /* PR binutils/18087: If compression didn't make
+ the section smaller, just keep it uncompressed. */
+ if (compressed_size > sec->size)
+ return;
+
/* Replace the uncompressed frag list with the compressed frag list. */
seginfo->frchainP->frch_root = first_newf;
seginfo->frchainP->frch_last = last_newf;