x86/AT&T: restrict recognition of the "absolute branch" prefix character
authorJan Beulich <jbeulich@suse.com>
Mon, 20 Mar 2023 15:57:42 +0000 (16:57 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 20 Mar 2023 15:57:42 +0000 (16:57 +0100)
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

index ebfcda4f364b4ffda0efdf7058388e001ebc5f7c..fb755943aea4a6035516db1cfbd8947f12227324 100644 (file)
@@ -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))