From c3620d6d5639ab7a0b483030350e8f2929212ea7 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 7 Dec 2022 09:28:18 +1030 Subject: Compression tidy and fixes Tidies: - Move stuff from bfd-in.h and libbfd.c to compress.c - Delete COMPRESS_DEBUG from enum compressed_debug_section_type - Move compress_debug field out of link_info to ld_config. Fixes: - Correct test in bfd_convert_section_setup to use obfd flags, not ibfd. - Apply bfd_applicable_file_flags to compression bfd flags added by gas and ld to the output bfd. bfd/ * bfd-in.h (enum compressed_debug_section_type), (struct compressed_type_tuple), (bfd_get_compression_algorithm), (bfd_get_compression_algorithm_name), * libbfd.c (compressed_debug_section_names), (bfd_get_compression_algorithm), (bfd_get_compression_algorithm_name): Move.. * compress.c: ..to here, deleting COMPRESS_DEBUG from enum compressed_debug_section_type. (bfd_convert_section_setup): Test obfd flags not ibfd for compression flags. * elf.c (elf_fake_sections): Replace link_info->compress_debug test with abfd->flags test. * bfd-in2.h: Regenerate. binutils/ * objcopy.c (copy_file): Tidy setting of bfd compress flags. Expand comment. gas/ * write.c (compress_debug): Test bfd compress flags rather than flag_compress_debug. (write_object_file): Apply bfd_applicable_file_flags to compress debug flags added to output bfd. include/ * bfdlink.h (struct bfd_link_info): Delete compress_debug. ld/ * ld.h (ld_config_type): Add compress_debug. * emultempl/elf.em: Replace references to link_info.compress_debug with config.compress_debug. * lexsup.c (elf_static_list_options): Likewise. * ldmain.c (main): Likewise. Apply bfd_applicable_file_flags to compress debug flags added to output bfd. --- gas/write.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'gas') diff --git a/gas/write.c b/gas/write.c index fa748eb7c79..573e0244459 100644 --- a/gas/write.c +++ b/gas/write.c @@ -1490,7 +1490,7 @@ compress_debug (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED) if (ctx == NULL) return; - if (flag_compress_debug == COMPRESS_DEBUG_GNU_ZLIB) + if ((abfd->flags & BFD_COMPRESS_GABI) == 0) header_size = 12; else header_size = bfd_get_compression_header_size (stdoutput, NULL); @@ -1601,7 +1601,7 @@ compress_debug (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED) bfd_update_compression_header (abfd, (bfd_byte *) header, sec); x = bfd_set_section_size (sec, compressed_size); gas_assert (x); - if (flag_compress_debug == COMPRESS_DEBUG_GNU_ZLIB + if ((abfd->flags & BFD_COMPRESS_GABI) == 0 && section_name[1] == 'd') { compressed_name = concat (".z", section_name + 1, (char *) NULL); @@ -2531,15 +2531,16 @@ write_object_file (void) contents of the debug sections. This needs to be done before we start writing any sections, because it will affect the file layout, which is fixed once we start writing contents. */ - if (flag_compress_debug) + if (flag_compress_debug != COMPRESS_DEBUG_NONE) { + flagword flags = BFD_COMPRESS; if (flag_compress_debug == COMPRESS_DEBUG_GABI_ZLIB) - stdoutput->flags |= BFD_COMPRESS | BFD_COMPRESS_GABI; + flags = BFD_COMPRESS | BFD_COMPRESS_GABI; else if (flag_compress_debug == COMPRESS_DEBUG_ZSTD) - stdoutput->flags |= BFD_COMPRESS | BFD_COMPRESS_GABI | BFD_COMPRESS_ZSTD; - else - stdoutput->flags |= BFD_COMPRESS; - bfd_map_over_sections (stdoutput, compress_debug, (char *) 0); + flags = BFD_COMPRESS | BFD_COMPRESS_GABI | BFD_COMPRESS_ZSTD; + stdoutput->flags |= flags & bfd_applicable_file_flags (stdoutput); + if ((stdoutput->flags & BFD_COMPRESS) != 0) + bfd_map_over_sections (stdoutput, compress_debug, (char *) 0); } bfd_map_over_sections (stdoutput, write_contents, (char *) 0); -- cgit v1.2.1