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.
This commit is contained in:
parent
c6422d7be7
commit
857bddbe73
20
bfd/bfd-in.h
20
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. */
|
||||
|
||||
|
@ -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. */
|
||||
|
||||
|
36
bfd/libbfd.c
36
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;
|
||||
}
|
||||
|
34
gas/as.c
34
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, _("\
|
||||
Default: %s\n"),
|
||||
bfd_get_compression_algorithm_name (flag_compress_debug));
|
||||
|
||||
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"));
|
||||
fprintf (stream, _("\
|
||||
--nocompress-debug-sections\n\
|
||||
don't compress DWARF debug sections [default]\n"));
|
||||
#endif
|
||||
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
|
||||
|
@ -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;
|
||||
|
@ -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, _("\
|
||||
|
Loading…
x
Reference in New Issue
Block a user