[RFC PATCH v2 1/2] gdb, opcodes: Add non-enum disassembler options
Tsukasa OI
research_trasio@irq.a4lg.com
Sun Feb 6 02:10:36 GMT 2022
This commit adds support for non-enum disassembler options that allow
arbitrary argument (not including ","). This is identified by `NULL'
value of disasm_option_arg_t.values.
gdb/ChangeLog:
* gdb/disasm.c (set_disassembler_options): Add support for
non-enum disassembler options.
(show_disassembler_options_sfunc): Likewise.
include/ChangeLog:
* dis-asm.h (disasm_option_arg_t): Update comment of `values'
to allow non-enum disassembler options.
opcodes/ChangeLog:
* riscv-dis.c (print_riscv_disassembler_options): Support
non-enum disassembler options on printing disassembler help.
* arc-dis.c (print_arc_disassembler_options): Likewise.
* mips-dis.c (print_mips_disassembler_options): Likewise.
---
gdb/disasm.c | 4 ++++
include/dis-asm.h | 3 ++-
opcodes/arc-dis.c | 2 ++
opcodes/mips-dis.c | 2 ++
opcodes/riscv-dis.c | 2 ++
5 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/gdb/disasm.c b/gdb/disasm.c
index 5cd1f5adbd2..eb7e2fec9fe 100644
--- a/gdb/disasm.c
+++ b/gdb/disasm.c
@@ -1009,6 +1009,8 @@ set_disassembler_options (const char *prospective_options)
if (memcmp (opt, valid_options->name[i], len) != 0)
continue;
arg = opt + len;
+ if (valid_options->arg[i]->values == NULL)
+ break;
for (j = 0; valid_options->arg[i]->values[j] != NULL; j++)
if (disassembler_options_cmp
(arg, valid_options->arg[i]->values[j]) == 0)
@@ -1130,6 +1132,8 @@ The following disassembler options are supported for use with the\n\
for (i = 0; valid_args[i].name != NULL; i++)
{
+ if (valid_args[i].values == NULL)
+ continue;
fprintf_filtered (file, _("\n\
For the options above, the following values are supported for \"%s\":\n "),
valid_args[i].name);
diff --git a/include/dis-asm.h b/include/dis-asm.h
index 317592448a2..1826fe97ba7 100644
--- a/include/dis-asm.h
+++ b/include/dis-asm.h
@@ -239,7 +239,8 @@ typedef struct
/* Option argument name to use in descriptions. */
const char *name;
- /* Vector of acceptable option argument values, NULL-terminated. */
+ /* Vector of acceptable option argument values, NULL-terminated.
+ NULL if any values are accepted. */
const char **values;
} disasm_option_arg_t;
diff --git a/opcodes/arc-dis.c b/opcodes/arc-dis.c
index 771f786d18e..41371967c3b 100644
--- a/opcodes/arc-dis.c
+++ b/opcodes/arc-dis.c
@@ -1555,6 +1555,8 @@ print_arc_disassembler_options (FILE *stream)
for (i = 0; args[i].name != NULL; ++i)
{
size_t len = 3;
+ if (args[i].values == NULL)
+ continue;
fprintf (stream, _("\n\
For the options above, the following values are supported for \"%s\":\n "),
args[i].name);
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
index 9db604ffb39..faeebccfc3b 100644
--- a/opcodes/mips-dis.c
+++ b/opcodes/mips-dis.c
@@ -2809,6 +2809,8 @@ with the -M switch (multiple options should be separated by commas):\n\n"));
for (i = 0; args[i].name != NULL; i++)
{
+ if (args[i].values == NULL)
+ continue;
fprintf (stream, _("\n\
For the options above, the following values are supported for \"%s\":\n "),
args[i].name);
diff --git a/opcodes/riscv-dis.c b/opcodes/riscv-dis.c
index 34724d4aec5..13ddff01c52 100644
--- a/opcodes/riscv-dis.c
+++ b/opcodes/riscv-dis.c
@@ -1132,6 +1132,8 @@ with the -M switch (multiple options should be separated by commas):\n"));
for (i = 0; args[i].name != NULL; i++)
{
+ if (args[i].values == NULL)
+ continue;
fprintf (stream, _("\n\
For the options above, the following values are supported for \"%s\":\n "),
args[i].name);
--
2.32.0
More information about the Binutils
mailing list