This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: Add SHF_GNU_COMPRESSED
> 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.)
+FUNCTION
+ bfd_init_section_decommpress_status
+
+SYNOPSIS
+ bfd_boolean bfd_init_section_decommpress_status
+ (bfd *abfd, asection *section);
1,$s/decommpress/decompress/g
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.
-cary