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
(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);
\f
/* Externally visible ELF routines. */
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
(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);
\f
/* Externally visible ELF routines. */
{
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;
+}
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, _("\
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
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;
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, _("\