[binutils-gdb] x86/Intel: don't accept memory operands with J*CXZ and LOOP*

Jan Beulich jbeulich@sourceware.org
Mon Jan 6 15:02:44 GMT 2025


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

commit 9d02cb7fe0d636be390e43e06f39b30b834e89e4
Author: Jan Beulich <jbeulich@suse.com>
Date:   Mon Jan 6 16:01:47 2025 +0100

    x86/Intel: don't accept memory operands with J*CXZ and LOOP*
    
    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.

Diff:
---
 gas/config/tc-i386-intel.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/gas/config/tc-i386-intel.c b/gas/config/tc-i386-intel.c
index 5b7de9c8272..892513cbcf4 100644
--- a/gas/config/tc-i386-intel.c
+++ b/gas/config/tc-i386-intel.c
@@ -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


More information about the Binutils-cvs mailing list