From: Jan Beulich Date: Mon, 7 Jun 2021 10:02:15 +0000 (+0200) Subject: x86: correct absolute branch check with segment override X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c8d541e2e73493228f332f4bdc9ecc8164d3744f;p=binutils-gdb.git x86: correct absolute branch check with segment override This needs to happen before checking of what may legitimately start a memory operand (like is done when there's no segment override). Plus a second '*' shouldn't be permitted when one was already found before the segment override. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 66e040aaa14..008027b1fc1 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2021-06-07 Jan Beulich + + * config/tc-i386.c (i386_att_operand): Flip checking for '*' and + start-of-expression. Don't permit '*' when one was already seen. + 2021-06-07 Jan Beulich * config/tc-i386.c (parse_operands): Don't check for matched diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index a20aea28718..0fe439eddd5 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -11413,22 +11413,22 @@ i386_att_operand (char *operand_string) if (is_space_char (*op_string)) ++op_string; - if (!is_digit_char (*op_string) - && !is_identifier_char (*op_string) - && *op_string != '(' - && *op_string != ABSOLUTE_PREFIX) - { - as_bad (_("bad memory operand `%s'"), op_string); - return 0; - } /* Handle case of %es:*foo. */ - if (*op_string == ABSOLUTE_PREFIX) + if (!i.jumpabsolute && *op_string == ABSOLUTE_PREFIX) { ++op_string; if (is_space_char (*op_string)) ++op_string; i.jumpabsolute = true; } + + if (!is_digit_char (*op_string) + && !is_identifier_char (*op_string) + && *op_string != '(') + { + as_bad (_("bad memory operand `%s'"), op_string); + return 0; + } goto do_memory_reference; }