This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] [ARC] Fix handling of cpu=... disassembler option value
- From: Anton Kolesov <Anton dot Kolesov at synopsys dot com>
- To: binutils at sourceware dot org
- Cc: Anton Kolesov <Anton dot Kolesov at synopsys dot com>, Francois Bedard <Francois dot Bedard at synopsys dot com>, Claudiu Zissulescu <Claudiu dot Zissulescu at synopsys dot com>, Cupertino Miranda <Cupertino dot Miranda at synopsys dot com>
- Date: Thu, 15 Jun 2017 17:59:46 +0300
- Subject: [PATCH] [ARC] Fix handling of cpu=... disassembler option value
- Authentication-results: sourceware.org; auth=none
There is a bug in handling of cpu=... disassembler option in case there are
other options after it, for example, `cpu=EM,dsp'. In this case `EM,dsp' is
treated as an option value, and strcasecmp reports is as non-equal to "EM".
This could have been fixed by using strncasecmp and passing length of
cpu_types[i].name as size argument, or using strcasestr, but that would cause
another problem as value `em4,dsp' would be equal to `em' cpy_type.name in
those cases. Therefore the right solution is to extract value of cpu option
fully and pass it as an argument to parse_cpu_option.
opcodes/ChangeLog:
yyyy-mm-dd Anton Kolesov <Anton.Kolesov@synopsys.com>
* arc-dis.c (parse_disassembler_options): Properly handle cpu=...
option when there is an option after it.
---
opcodes/arc-dis.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/opcodes/arc-dis.c b/opcodes/arc-dis.c
index edd0c07..0121682 100644
--- a/opcodes/arc-dis.c
+++ b/opcodes/arc-dis.c
@@ -844,8 +844,12 @@ parse_disassembler_options (const char *options)
/* A CPU option? Cannot use STRING_COMMA_LEN because strncmp is also a
preprocessor macro. */
if (strncmp (options, "cpu=", 4) == 0)
- /* Strip leading `cpu=`. */
- enforced_isa_mask = parse_cpu_option (options + 4);
+ {
+ /* Strip leading `cpu=`. */
+ char *options_copy = strdup (options + 4);
+ enforced_isa_mask = parse_cpu_option (strtok (options_copy, ","));
+ free (options_copy);
+ }
else
parse_option (options);
--
2.8.3