From 857bddbe737bc963bd9e5a3b24743a9bba5d2d7b Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Mon, 3 Oct 2022 09:11:00 +0200 Subject: refactor usage of compressed_debug_section_type bfd/ChangeLog: * bfd-in.h (bfd_hash_set_default_size): Add COMPRESS_UNKNOWN enum value. (struct compressed_type_tuple): New. * bfd-in2.h (bfd_hash_set_default_size): Regenerate. (struct compressed_type_tuple): Likewise. * libbfd.c (ARRAY_SIZE): New macro. (bfd_get_compression_algorithm): New function. (bfd_get_compression_algorithm_name): Likewise. gas/ChangeLog: * as.c: Do not special-case, use the new functions. ld/ChangeLog: * emultempl/elf.em: Do not special-case, use the new functions. * lexsup.c (elf_static_list_options): Likewise. --- bfd/bfd-in.h | 20 +++++++++++++++++--- bfd/bfd-in2.h | 20 +++++++++++++++++--- bfd/libbfd.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 6 deletions(-) (limited to 'bfd') diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index 4765ea8..82e33d4 100644 --- a/bfd/bfd-in.h +++ b/bfd/bfd-in.h @@ -335,15 +335,23 @@ extern void bfd_hash_traverse this size. */ extern unsigned long bfd_hash_set_default_size (unsigned long); -/* Types of compressed DWARF debug sections. We currently support - zlib. */ +/* Types of compressed DWARF debug sections. */ enum compressed_debug_section_type { COMPRESS_DEBUG_NONE = 0, COMPRESS_DEBUG = 1 << 0, COMPRESS_DEBUG_GNU_ZLIB = COMPRESS_DEBUG | 1 << 1, COMPRESS_DEBUG_GABI_ZLIB = COMPRESS_DEBUG | 1 << 2, - COMPRESS_DEBUG_ZSTD = COMPRESS_DEBUG | 1 << 3 + COMPRESS_DEBUG_ZSTD = COMPRESS_DEBUG | 1 << 3, + COMPRESS_UNKNOWN = 1 << 4 +}; + +/* Tuple for compressed_debug_section_type and their name. */ + +struct compressed_type_tuple +{ + enum compressed_debug_section_type type; + const char *name; }; /* This structure is used to keep track of stabs in sections @@ -456,6 +464,12 @@ extern void bfd_free_window (bfd_window *); extern bool bfd_get_file_window (bfd *, file_ptr, bfd_size_type, bfd_window *, bool); + + +extern enum compressed_debug_section_type bfd_get_compression_algorithm + (const char *); +extern const char *bfd_get_compression_algorithm_name + (enum compressed_debug_section_type); /* Externally visible ELF routines. */ diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index d9b49a8..25e1806 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -342,15 +342,23 @@ extern void bfd_hash_traverse this size. */ extern unsigned long bfd_hash_set_default_size (unsigned long); -/* Types of compressed DWARF debug sections. We currently support - zlib. */ +/* Types of compressed DWARF debug sections. */ enum compressed_debug_section_type { COMPRESS_DEBUG_NONE = 0, COMPRESS_DEBUG = 1 << 0, COMPRESS_DEBUG_GNU_ZLIB = COMPRESS_DEBUG | 1 << 1, COMPRESS_DEBUG_GABI_ZLIB = COMPRESS_DEBUG | 1 << 2, - COMPRESS_DEBUG_ZSTD = COMPRESS_DEBUG | 1 << 3 + COMPRESS_DEBUG_ZSTD = COMPRESS_DEBUG | 1 << 3, + COMPRESS_UNKNOWN = 1 << 4 +}; + +/* Tuple for compressed_debug_section_type and their name. */ + +struct compressed_type_tuple +{ + enum compressed_debug_section_type type; + const char *name; }; /* This structure is used to keep track of stabs in sections @@ -463,6 +471,12 @@ extern void bfd_free_window (bfd_window *); extern bool bfd_get_file_window (bfd *, file_ptr, bfd_size_type, bfd_window *, bool); + + +extern enum compressed_debug_section_type bfd_get_compression_algorithm + (const char *); +extern const char *bfd_get_compression_algorithm_name + (enum compressed_debug_section_type); /* Externally visible ELF routines. */ diff --git a/bfd/libbfd.c b/bfd/libbfd.c index d33f341..14e7d8e 100644 --- a/bfd/libbfd.c +++ b/bfd/libbfd.c @@ -1244,3 +1244,39 @@ _bfd_generic_init_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED, { return true; } + +/* Display texts for type of compressed DWARF debug sections. */ +static const struct compressed_type_tuple compressed_debug_section_names[] = +{ + { COMPRESS_DEBUG_NONE, "none" }, + { COMPRESS_DEBUG, "zlib" }, + { COMPRESS_DEBUG_GNU_ZLIB, "zlib-gnu" }, + { COMPRESS_DEBUG_GABI_ZLIB, "zlib-gabi" }, + { COMPRESS_DEBUG_ZSTD, "zstd" }, +}; + +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) +#endif + +/* Return compressed_debug_section_type from a string representation. */ +enum compressed_debug_section_type +bfd_get_compression_algorithm (const char *name) +{ + for (unsigned i = 0; i < ARRAY_SIZE (compressed_debug_section_names); ++i) + if (strcasecmp (compressed_debug_section_names[i].name, name) == 0) + return compressed_debug_section_names[i].type; + + return COMPRESS_UNKNOWN; +} + +/* Return compression algorithm name based on the type. */ +const char * +bfd_get_compression_algorithm_name (enum compressed_debug_section_type type) +{ + for (unsigned i = 0; i < ARRAY_SIZE (compressed_debug_section_names); ++i) + if (type == compressed_debug_section_names[i].type) + return compressed_debug_section_names[i].name; + + return NULL; +} -- cgit v1.1