This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]