From ccb05c9c999f274c92b09f4b29c41d91cece88cf Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Mon, 20 Mar 2023 16:57:42 +0100 Subject: [PATCH] x86/AT&T: restrict recognition of the "absolute branch" prefix character While in principle merely rejecting this for .insn would be sufficient for the purposes there, be more generic and reject it for anything that isn't going to be a branch: All elements of same-mnemonic template groups either are branches, or are not, and the few cases possibly requiring a 2nd parsing pass aren't affected either. This then also improves diagnostics for misuses like inc *%eax incl %fs:*(%eax) add *$1, %eax --- gas/config/tc-i386.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index ebfcda4f364..fb755943aea 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -11423,7 +11423,8 @@ i386_att_operand (char *operand_string) /* We check for an absolute prefix (differentiating, for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */ - if (*op_string == ABSOLUTE_PREFIX) + if (*op_string == ABSOLUTE_PREFIX + && current_templates->start->opcode_modifier.jump) { ++op_string; if (is_space_char (*op_string)) @@ -11454,7 +11455,8 @@ i386_att_operand (char *operand_string) ++op_string; /* Handle case of %es:*foo. */ - if (!i.jumpabsolute && *op_string == ABSOLUTE_PREFIX) + if (!i.jumpabsolute && *op_string == ABSOLUTE_PREFIX + && current_templates->start->opcode_modifier.jump) { ++op_string; if (is_space_char (*op_string)) -- 2.30.2