From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by sourceware.org (Postfix) with ESMTPS id 4E69F3858D38 for ; Mon, 3 Oct 2022 07:50:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4E69F3858D38 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=suse.cz Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 8B37021981; Mon, 3 Oct 2022 07:50:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1664783438; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=02lT3UbqqFIzMO3bDRuKXt7r3nC6kosZEOgFHxAO1SY=; b=DVIzIJuF57wAeK4Q6kxhjRbpRZnr0bSc06eUefmn2tQzLLOafB4k7DSibCI2BXfg7U+JAa zYERZ2PydajFjZSxTzNwxvCAQVXqoQneWFm5BWSXlpE3tvpUPeYHLYOl5muUrhiigiRKkZ 9EWRGKzqNd5oUgWIowDzsmgJqGPeAXU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1664783438; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=02lT3UbqqFIzMO3bDRuKXt7r3nC6kosZEOgFHxAO1SY=; b=ZzQ2hhpqanjUY9glRDZTsZbN2aVw8vk/mHyi9/gaMuY8KFhTBuYLhey9W6n6ZMnV5xEPG3 1u2E2cDAW7xRKYCQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 78BF01332F; Mon, 3 Oct 2022 07:50:38 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id rE+BHE6UOmMDUQAAMHmgww (envelope-from ); Mon, 03 Oct 2022 07:50:38 +0000 Message-ID: <597ed978-d121-220c-b56b-2ffb94bd091c@suse.cz> Date: Mon, 3 Oct 2022 09:50:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.0 From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Subject: [PATCH 1/2] refactor usage of compressed_debug_section_type To: binutils@sourceware.org References: <20ce4355-56ca-ad6f-d7de-4c1522d33b5d@suse.cz> Content-Language: en-US Cc: Fangrui Song In-Reply-To: <20ce4355-56ca-ad6f-d7de-4c1522d33b5d@suse.cz> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-29.4 required=5.0 tests=BAYES_00,DKIM_INVALID,DKIM_SIGNED,GIT_PATCH_0,KAM_DMARC_STATUS,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_SOFTFAIL,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: 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 ++++++++++++++++++++++++++++++++++++ gas/as.c | 34 +++++++++------------------------- ld/emultempl/elf.em | 22 +++++++--------------- ld/lexsup.c | 8 ++------ 6 files changed, 88 insertions(+), 52 deletions(-) diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index 4765ea80536..82e33d400f3 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 5c80956c79c..39f925362e0 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 d33f3416206..14e7d8ef34f 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; +} diff --git a/gas/as.c b/gas/as.c index 9ce3d622f95..a5c2d2459f7 100644 --- a/gas/as.c +++ b/gas/as.c @@ -250,21 +250,16 @@ Options:\n\ fprintf (stream, _("\ --alternate initially turn on alternate macro syntax\n")); -#ifdef DEFAULT_FLAG_COMPRESS_DEBUG fprintf (stream, _("\ --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi|zstd}]\n\ - compress DWARF debug sections using zlib [default]\n")); + compress DWARF debug sections\n")), fprintf (stream, _("\ - --nocompress-debug-sections\n\ - don't compress DWARF debug sections\n")); -#else - fprintf (stream, _("\ - --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi|zstd}]\n\ - compress DWARF debug sections using zlib\n")); + Default: %s\n"), + bfd_get_compression_algorithm_name (flag_compress_debug)); + fprintf (stream, _("\ --nocompress-debug-sections\n\ - don't compress DWARF debug sections [default]\n")); -#endif + don't compress DWARF debug sections\n")); fprintf (stream, _("\ -D produce assembler debugging messages\n")); fprintf (stream, _("\ @@ -741,24 +736,13 @@ This program has absolutely no warranty.\n")); if (optarg) { #if defined OBJ_ELF || defined OBJ_MAYBE_ELF - if (strcasecmp (optarg, "none") == 0) - flag_compress_debug = COMPRESS_DEBUG_NONE; - else if (strcasecmp (optarg, "zlib") == 0) - flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB; - else if (strcasecmp (optarg, "zlib-gnu") == 0) - flag_compress_debug = COMPRESS_DEBUG_GNU_ZLIB; - else if (strcasecmp (optarg, "zlib-gabi") == 0) - flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB; - else if (strcasecmp (optarg, "zstd") == 0) - { -#ifdef HAVE_ZSTD - flag_compress_debug = COMPRESS_DEBUG_ZSTD; -#else + flag_compress_debug = bfd_get_compression_algorithm (optarg); +#ifndef HAVE_ZSTD + if (flag_compress_debug == COMPRESS_DEBUG_ZSTD) as_fatal (_ ("--compress-debug-sections=zstd: gas is not " "built with zstd support")); #endif - } - else + if (flag_compress_debug == COMPRESS_UNKNOWN) as_fatal (_("Invalid --compress-debug-sections option: `%s'"), optarg); #else diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em index acd66f907d1..5dfc03a740c 100644 --- a/ld/emultempl/elf.em +++ b/ld/emultempl/elf.em @@ -660,24 +660,16 @@ gld${EMULATION_NAME}_handle_option (int optc) break; case OPTION_COMPRESS_DEBUG: - if (strcasecmp (optarg, "none") == 0) - link_info.compress_debug = COMPRESS_DEBUG_NONE; - else if (strcasecmp (optarg, "zlib") == 0) - link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB; - else if (strcasecmp (optarg, "zlib-gnu") == 0) - link_info.compress_debug = COMPRESS_DEBUG_GNU_ZLIB; - else if (strcasecmp (optarg, "zlib-gabi") == 0) - link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB; - else if (strcasecmp (optarg, "zstd") == 0) + link_info.compress_debug = bfd_get_compression_algorithm (optarg); + if (strcasecmp (optarg, "zstd") == 0) { -#ifdef HAVE_ZSTD - link_info.compress_debug = COMPRESS_DEBUG_ZSTD; -#else - einfo (_ ("%F%P: --compress-debug-sections=zstd: ld is not built " - "with zstd support\n")); +#ifndef HAVE_ZSTD + if (link_info.compress_debug == COMPRESS_DEBUG_ZSTD) + einfo (_ ("%F%P: --compress-debug-sections=zstd: ld is not built " + "with zstd support\n")); #endif } - else + if (link_info.compress_debug == COMPRESS_UNKNOWN) einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"), optarg); break; diff --git a/ld/lexsup.c b/ld/lexsup.c index 299371fb775..0c01c9966e0 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -2148,13 +2148,9 @@ elf_static_list_options (FILE *file) fprintf (file, _("\ --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi|zstd]\n\ Compress DWARF debug sections\n")); -#ifdef DEFAULT_FLAG_COMPRESS_DEBUG fprintf (file, _("\ - Default: zlib-gabi\n")); -#else - fprintf (file, _("\ - Default: none\n")); -#endif + Default: %s\n"), + bfd_get_compression_algorithm_name (link_info.compress_debug)); fprintf (file, _("\ -z common-page-size=SIZE Set common page size to SIZE\n")); fprintf (file, _("\ -- 2.37.3