]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86/Intel: don't accept memory operands with J*CXZ and LOOP*
authorJan Beulich <jbeulich@suse.com>
Mon, 6 Jan 2025 15:01:47 +0000 (16:01 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 6 Jan 2025 15:01:47 +0000 (16:01 +0100)
PR gas/31887

Like for, in particular, J<cc> such should be rejected. Simplify the
respective conditional in i386_intel_operand(), leveraging that
JumpAbsolute will never occur in the first template of a mnemonic-
specific group (thus making it unnecessary to exclude that one case).

At this occasion do the same simplification later in the function as
well: The resulting two operands will uniformly be invalid for all
mnemonics other than CALL and JMP (and their AT&T counterparts, which
we've been wrongly accepting in Intel syntax) anyway.

gas/config/tc-i386-intel.c

index 5b7de9c82728716bc0efcbbf9fd69dc421e13e6e..892513cbcf4e5b078df7cddab60391e67a21296c 100644 (file)
@@ -907,9 +907,7 @@ i386_intel_operand (char *operand_string, int got_a_float)
     }
 
   /* Operands for jump/call need special consideration.  */
-  if (current_templates.start->opcode_modifier.jump == JUMP
-      || current_templates.start->opcode_modifier.jump == JUMP_DWORD
-      || current_templates.start->opcode_modifier.jump == JUMP_INTERSEGMENT
+  if (current_templates.start->opcode_modifier.jump
       || current_templates.start->mnem_off == MN_jmpabs)
     {
       bool jumpabsolute = false;
@@ -1046,9 +1044,7 @@ i386_intel_operand (char *operand_string, int got_a_float)
             ljmp       0x9090,0x90909090
           */
 
-         if ((current_templates.start->opcode_modifier.jump == JUMP_INTERSEGMENT
-              || current_templates.start->opcode_modifier.jump == JUMP_DWORD
-              || current_templates.start->opcode_modifier.jump == JUMP)
+         if (current_templates.start->opcode_modifier.jump
              && this_operand == 1
              && intel_state.seg == NULL
              && i.mem_operands == 1