[binutils-gdb] x86/AT&T: restrict recognition of the "absolute branch" prefix character

Jan Beulich jbeulich@sourceware.org
Mon Mar 20 15:58:11 GMT 2023


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ccb05c9c999f274c92b09f4b29c41d91cece88cf

commit ccb05c9c999f274c92b09f4b29c41d91cece88cf
Author: Jan Beulich <jbeulich@suse.com>
Date:   Mon Mar 20 16:57:42 2023 +0100

    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

Diff:
---
 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))


More information about the Binutils-cvs mailing list