aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2022-12-07 09:28:18 +1030
committerAlan Modra <amodra@gmail.com>2022-12-07 13:15:29 +1030
commitc3620d6d5639ab7a0b483030350e8f2929212ea7 (patch)
tree802bc807b5e2feb2f5f55ab54c8479cdd7c14529 /ld
parent9db0f1ae844614673957e48257aba137e3c41133 (diff)
downloadgdb-c3620d6d5639ab7a0b483030350e8f2929212ea7.zip
gdb-c3620d6d5639ab7a0b483030350e8f2929212ea7.tar.gz
gdb-c3620d6d5639ab7a0b483030350e8f2929212ea7.tar.bz2
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.
Diffstat (limited to 'ld')
-rw-r--r--ld/emultempl/elf.em6
-rw-r--r--ld/ld.h3
-rw-r--r--ld/ldmain.c25
-rw-r--r--ld/lexsup.c2
4 files changed, 23 insertions, 13 deletions
diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em
index 5dfc03a..5e96335 100644
--- a/ld/emultempl/elf.em
+++ b/ld/emultempl/elf.em
@@ -660,16 +660,16 @@ gld${EMULATION_NAME}_handle_option (int optc)
break;
case OPTION_COMPRESS_DEBUG:
- link_info.compress_debug = bfd_get_compression_algorithm (optarg);
+ config.compress_debug = bfd_get_compression_algorithm (optarg);
if (strcasecmp (optarg, "zstd") == 0)
{
#ifndef HAVE_ZSTD
- if (link_info.compress_debug == COMPRESS_DEBUG_ZSTD)
+ if (config.compress_debug == COMPRESS_DEBUG_ZSTD)
einfo (_ ("%F%P: --compress-debug-sections=zstd: ld is not built "
"with zstd support\n"));
#endif
}
- if (link_info.compress_debug == COMPRESS_UNKNOWN)
+ if (config.compress_debug == COMPRESS_UNKNOWN)
einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"),
optarg);
break;
diff --git a/ld/ld.h b/ld/ld.h
index 2a95e14..3c91eee 100644
--- a/ld/ld.h
+++ b/ld/ld.h
@@ -304,6 +304,9 @@ typedef struct
/* If set, share only duplicated types in CTF, rather than sharing
all types that are not in conflict. */
bool ctf_share_duplicated;
+
+ /* Compress DWARF debug sections. */
+ enum compressed_debug_section_type compress_debug;
} ld_config_type;
extern ld_config_type config;
diff --git a/ld/ldmain.c b/ld/ldmain.c
index 10f7a05..a28f341 100644
--- a/ld/ldmain.c
+++ b/ld/ldmain.c
@@ -352,7 +352,7 @@ main (int argc, char **argv)
link_info.spare_dynamic_tags = 5;
link_info.path_separator = ':';
#ifdef DEFAULT_FLAG_COMPRESS_DEBUG
- link_info.compress_debug = DEFAULT_COMPRESSED_DEBUG_ALGORITHM;
+ config.compress_debug = DEFAULT_COMPRESSED_DEBUG_ALGORITHM;
#endif
#ifdef DEFAULT_NEW_DTAGS
link_info.new_dtags = DEFAULT_NEW_DTAGS;
@@ -503,16 +503,23 @@ main (int argc, char **argv)
else
link_info.output_bfd->flags |= EXEC_P;
- if ((link_info.compress_debug & COMPRESS_DEBUG))
+ flagword flags = 0;
+ switch (config.compress_debug)
{
- link_info.output_bfd->flags |= BFD_COMPRESS;
- if (link_info.compress_debug != COMPRESS_DEBUG_GNU_ZLIB)
- {
- link_info.output_bfd->flags |= BFD_COMPRESS_GABI;
- if (link_info.compress_debug == COMPRESS_DEBUG_ZSTD)
- link_info.output_bfd->flags |= BFD_COMPRESS_ZSTD;
- }
+ case COMPRESS_DEBUG_GNU_ZLIB:
+ flags = BFD_COMPRESS;
+ break;
+ case COMPRESS_DEBUG_GABI_ZLIB:
+ flags = BFD_COMPRESS | BFD_COMPRESS_GABI;
+ break;
+ case COMPRESS_DEBUG_ZSTD:
+ flags = BFD_COMPRESS | BFD_COMPRESS_GABI | BFD_COMPRESS_ZSTD;
+ break;
+ default:
+ break;
}
+ link_info.output_bfd->flags
+ |= flags & bfd_applicable_file_flags (link_info.output_bfd);
ldwrite ();
diff --git a/ld/lexsup.c b/ld/lexsup.c
index d107bd7..673b62e 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -2163,7 +2163,7 @@ elf_static_list_options (FILE *file)
Compress DWARF debug sections\n"));
fprintf (file, _("\
Default: %s\n"),
- bfd_get_compression_algorithm_name (link_info.compress_debug));
+ bfd_get_compression_algorithm_name (config.compress_debug));
fprintf (file, _("\
-z common-page-size=SIZE Set common page size to SIZE\n"));
fprintf (file, _("\