. {* Set if this is the linker output BFD. *}
. unsigned int is_linker_output : 1;
.
+. {* Set if this is the linker input BFD. *}
+. unsigned int is_linker_input : 1;
+.
. {* If this is an input for a compiler plug-in library. *}
. ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2;
.
}
}
else
- /* Clear the SHF_COMPRESSED bit. */
- elf_section_flags (sec) &= ~SHF_COMPRESSED;
+ {
+ /* Clear the SHF_COMPRESSED bit. */
+ elf_section_flags (sec) &= ~SHF_COMPRESSED;
+
+ /* Write the zlib header. It should be "ZLIB" followed by
+ the uncompressed section size, 8 bytes in big-endian
+ order. */
+ memcpy (contents, "ZLIB", 4);
+ bfd_putb64 (sec->size, contents + 4);
+ }
}
}
else
SYNOPSIS
bfd_boolean bfd_check_compression_header
(bfd *abfd, bfd_byte *contents, asection *sec,
- bfd_size_type uncompressed_size);
+ bfd_size_type *uncompressed_size);
DESCRIPTION
- Check the compression header at CONTENTS of SEC in ABFD with
- the uncompressed size UNCOMPRESSED_SIZE.
+ Check the compression header at CONTENTS of SEC in ABFD and
+ store the uncompressed size in UNCOMPRESSED_SIZE if the
+ compression header is valid.
RETURNS
Return TRUE if the compression header is valid.
bfd_boolean
bfd_check_compression_header (bfd *abfd, bfd_byte *contents,
asection *sec,
- bfd_size_type uncompressed_size)
+ bfd_size_type *uncompressed_size)
{
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
&& (elf_section_flags (sec) & SHF_COMPRESSED) != 0)
chdr.ch_size = bfd_get_64 (abfd, &echdr->ch_size);
chdr.ch_addralign = bfd_get_64 (abfd, &echdr->ch_addralign);
}
- return (chdr.ch_type == ELFCOMPRESS_ZLIB
- && chdr.ch_size == uncompressed_size
- && chdr.ch_addralign == 1U << sec->alignment_power);
+ if (chdr.ch_type == ELFCOMPRESS_ZLIB
+ && chdr.ch_addralign == 1U << sec->alignment_power)
+ {
+ *uncompressed_size = chdr.ch_size;
+ return TRUE;
+ }
}
return FALSE;