PATCH: Add --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi] to ld

H.J. Lu hjl.tools@gmail.com
Wed Apr 15 05:07:00 GMT 2015


On Tue, Apr 14, 2015 at 8:58 PM, Alan Modra <amodra@gmail.com> wrote:
> On Tue, Apr 14, 2015 at 07:43:36PM -0700, H.J. Lu wrote:
>> On Tue, Apr 14, 2015 at 5:55 PM, Alan Modra <amodra@gmail.com> wrote:
>> > So, I'm wondering whether things would look better if
>> > elf_link_input_bfd allocated the extra buffer needed rather than in
>> > both _bfd_write_merged_section and _bfd_elf_set_section_contents.
>> > Of course, _bfd_write_merged_section would need two extra parameters,
>> > contents and offset, and write to "contents" if non-NULL rather than
>> > to the output file.
>>
>> Thanks for the suggestion.  I allocated the buffer in bfd_elf_final_link
>> instead without adding extra arguments to _bfd_write_merged_section.
>> Here is the updated patch. OK for master?
>
> I still think the extra arguments are better, but will OK this one
> with some fixes.
>
>> @@ -283,13 +284,15 @@ sec_merge_add (struct sec_merge_hash *tab, const char *str,
>>  }
>>
>>  static bfd_boolean
>> -sec_merge_emit (bfd *abfd, struct sec_merge_hash_entry *entry)
>> +sec_merge_emit (bfd *abfd, struct sec_merge_hash_entry *entry,
>> +             file_ptr offset)
>>  {
>>    struct sec_merge_sec_info *secinfo = entry->secinfo;
>>    asection *sec = secinfo->sec;
>>    char *pad = NULL;
>>    bfd_size_type off = 0;
>>    int alignment_power = sec->output_section->alignment_power;
>> +  unsigned char *contents = NULL;
>
> pass contents to sec_merge_emit, so that
>
>> @@ -298,6 +301,14 @@ sec_merge_emit (bfd *abfd, struct sec_merge_hash_entry *entry)
>>       return FALSE;
>>      }
>>
>> +  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
>> +    {
>> +      Elf_Internal_Shdr *hdr
>> +     = &elf_section_data (sec->output_section)->this_hdr;
>> +      if (hdr->sh_offset == (file_ptr) -1)
>> +     contents = hdr->contents;
>> +    }
>> +
>
> this hunk can disappear.
>
>> @@ -794,12 +820,33 @@ _bfd_write_merged_section (bfd *output_bfd, asection *sec, void *psecinfo)
>>    if (secinfo->first_str == NULL)
>>      return TRUE;
>>
>> +  contents = NULL;
>> +
>>    /* FIXME: octets_per_byte.  */
>> -  pos = sec->output_section->filepos + sec->output_offset;
>> -  if (bfd_seek (output_bfd, pos, SEEK_SET) != 0)
>> -    return FALSE;
>> +  if (bfd_get_flavour (output_bfd) == bfd_target_elf_flavour)
>
> Delete this unnecessary test.  merge.c is only used with ELF output.
>

This is what I checked in.

Thanks.


-- 
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Add-compress-debug-sections-none-zlib-zlib-gnu-zlib-.patch
Type: text/x-patch
Size: 33611 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20150415/f76d3f2a/attachment.bin>


More information about the Binutils mailing list