Add SHF_GNU_COMPRESSED
H.J. Lu
hjl.tools@gmail.com
Tue Jul 20 03:28:00 GMT 2010
On Mon, Jul 19, 2010 at 5:48 PM, Cary Coutant <ccoutant@google.com> wrote:
>> objcopy. --compress-debug-sections/--decompress-debug-sections
>>
>> works on hjl/gnu-compressed branch:
>>
>> [hjl@gnu-6 pr11819]$ ls -l ld-new
>> -rwxr-xr-x 1 hjl hjl 4524567 Jul 19 15:50 ld-new
>> [hjl@gnu-6 pr11819]$ ./objcopy --compress-debug-sections ld-new ld.gz
>> [hjl@gnu-6 pr11819]$ ls -l ld.gz
>> -rwxrwxr-x 1 hjl hjl 2862047 Jul 19 15:50 ld.gz
>> [hjl@gnu-6 pr11819]$ ./objcopy --decompress-debug-sections ld.gz ld-old
>> [hjl@gnu-6 pr11819]$ cmp ld-new ld-old
>> [hjl@gnu-6 pr11819]$
>>
>> Any comments?
>
> Very nice!
>
> I do have a few comments:
>
> In bfd/compress.c:
>
> + /* Write the zlib header. In this case, it should be "ZLIB" followed
> + by the uncompressed section size, 8 bytes in big-endian order. */
> + memcpy (compressed_buffer, "ZLIB", 4);
> + compressed_buffer[4] = uncompressed_size >> 56;
> + compressed_buffer[5] = uncompressed_size >> 48;
> + compressed_buffer[6] = uncompressed_size >> 40;
> + compressed_buffer[7] = uncompressed_size >> 32;
> + compressed_buffer[8] = uncompressed_size >> 24;
> + compressed_buffer[9] = uncompressed_size >> 16;
> + compressed_buffer[10] = uncompressed_size >> 8;
> + compressed_buffer[11] = uncompressed_size;
> + compressed_size += 12;
>
> It was pointed out to me when I submitted the assembler patch that
> this is going to produce warnings on 32-bit hosts. It's better to
> shift the value right 8 bits at a time and build the buffer up from
> right to left:
>
> compressed_buffer[11] = uncompressed_size; uncompressed_size >>= 8;
> compressed_buffer[10] = uncompressed_size; uncompressed_size >>= 8;
>
> (See compress_debug() in gas/write.c.)
>
I will fix it.
> +FUNCTION
> + bfd_init_section_decommpress_status
> +
> +SYNOPSIS
> + bfd_boolean bfd_init_section_decommpress_status
> + (bfd *abfd, asection *section);
>
> 1,$s/decommpress/decompress/g
I will fix it.
> In bfd/libbfd.c:
>
> + if (section->decompress_status)
>
> Compare to DECOMPRESS_SECTION_NONE; it's not clear here what testing
> for non-zero means when there are three enumerated values.
>
I will fix it.
I will update linker to read SHF_GNU_COMPRESSED. Writing will be tricky.
It will be done later.
Does gold support writing compressed debug sections?
Thanks.
--
H.J.
More information about the Binutils
mailing list