[commit] x86 indirect jump adjustments in gas' Intel mode

Jan Beulich JBeulich@novell.com
Mon Aug 29 06:22:00 GMT 2005


Supposed-to-be indirect branches didn't come out as such in a few cases
in
Intel Syntax.

Built and tested on i686-pc-linux-gnu and x86_64-unknown-linux-gnu.

Jan

gas/
2005-08-26  Jan Beulich  <jbeulich@novell.com>

	* config/tc-i386.c (intel_e09): Set JumpAbsolute when seeing a
PTR-
	qualified operand of a branch.
	(intel_bracket_expr): Set JumpAbsolute here...
	(intel_e11): ... rather than here.

gas/testsuite/
2005-08-26  Jan Beulich  <jbeulich@novell.com>

	* gas/i386/intel.s: Adjust.
	* gas/i386/intelok.s: Add two more insns.
	* gas/i386/intelok.d: Adjust.

---
/home/jbeulich/src/binutils/mainline/2005-08-23/gas/config/tc-i386.c	2005-08-22
14:30:46.000000000 +0200
+++ 2005-08-23/gas/config/tc-i386.c	2005-08-23 16:13:12.000000000
+0200
@@ -6159,7 +6192,7 @@ intel_e09 ()
 		suffix = WORD_MNEM_SUFFIX;
 	      else if (flag_code == CODE_16BIT
 		       && (current_templates->start->opcode_modifier
-			   & (Jump|JumpDword|JumpInterSegment)))
+			   & (Jump | JumpDword)))
 		suffix = LONG_DOUBLE_MNEM_SUFFIX;
 	      else if (intel_parser.got_a_float == 1)	/* "f..." */
 		suffix = SHORT_MNEM_SUFFIX;
@@ -6211,6 +6244,11 @@ intel_e09 ()
 	      return 0;
 	    }
 
+	  /* Operands for jump/call using 'ptr' notation denote
absolute
+	     addresses.  */
+	  if (current_templates->start->opcode_modifier & (Jump |
JumpDword))
+	    i.types[this_operand] |= JumpAbsolute;
+
 	  if (current_templates->start->base_opcode == 0x8d /* lea */)
 	    ;
 	  else if (!i.suffix)
@@ -6295,6 +6333,11 @@ intel_bracket_expr ()
   if (!intel_parser.in_offset)
     {
       ++intel_parser.in_bracket;
+
+      /* Operands for jump/call inside brackets denote absolute
addresses.  */
+      if (current_templates->start->opcode_modifier & (Jump |
JumpDword))
+	i.types[this_operand] |= JumpAbsolute;
+
       /* Unfortunately gas always diverged from MASM in a respect that
can't
 	 be easily fixed without risking to break code sequences likely
to be
 	 encountered (the testsuite even check for this): MASM doesn't
consider
@@ -6397,13 +6440,6 @@ intel_e11 ()
 
     /* e11  [ expr ] */
     case '[':
-      /* Operands for jump/call inside brackets denote absolute
addresses.
-	 XXX This shouldn't be needed anymore (or if it should rather
live
-	 in intel_bracket_expr).  */
-      if (current_templates->start->opcode_modifier
-	  & (Jump|JumpDword|JumpByte|JumpInterSegment))
-	i.types[this_operand] |= JumpAbsolute;
-
       return intel_bracket_expr ();
 
     /* e11  $
---
/home/jbeulich/src/binutils/mainline/2005-08-23/gas/testsuite/gas/i386/intel.s	2004-07-22
11:48:34.000000000 +0200
+++ 2005-08-23/gas/testsuite/gas/i386/intel.s	2005-08-24
08:57:12.000000000 +0200
@@ -520,7 +520,7 @@ foo:
  rcl    word ptr 0x90909090[eax], cl
  in     ax, 0x90
  out    0x90, ax
- call   word ptr .+3+0x9090
+ callw  .+3+0x9090
  jmpw   0x9090,0x9090
  in     ax, dx
  out    dx, ax
---
/home/jbeulich/src/binutils/mainline/2005-08-23/gas/testsuite/gas/i386/intelok.d	2005-05-24
10:55:14.000000000 +0200
+++ 2005-08-23/gas/testsuite/gas/i386/intelok.d	2005-08-24
08:57:12.000000000 +0200
@@ -171,4 +171,6 @@ Disassembly of section .text:
 [ 	]*[0-9a-f]+:	a1 08 00 00 00[ 	]+mov[ 	]+eax,ds:0x8
 [ 	]*[0-9a-f]+:	9a 05 00 00 00 03 00[ 	]+l?call[
	]+0x3[,:]0x5
 [ 	]*[0-9a-f]+:	ea 03 00 00 00 05 00[ 	]+l?jmp[
	]+0x5[,:]0x3
+[ 	]*[0-9a-f]+:	ff 15 00 00 00 00[ 	]+call[ 	]+(DWORD
PTR )?(ds:)?0x0
+[ 	]*[0-9a-f]+:	66 ff 25 00 00 00 00[ 	]+jmp[ 	]+(WORD PTR
)?(ds:)?0x0
 #pass
---
/home/jbeulich/src/binutils/mainline/2005-08-23/gas/testsuite/gas/i386/intelok.s	2005-03-14
11:22:05.000000000 +0100
+++ 2005-08-23/gas/testsuite/gas/i386/intelok.s	2005-08-24
08:57:12.000000000 +0200
@@ -187,6 +187,8 @@ start:
 	# other operands
 	call	3:5
 	jmp	5:3
+	call	dword ptr xtrn
+	jmp	word ptr xtrn
 
 	# Force a good alignment.
 	.p2align	4,0

-------------- next part --------------
A non-text attachment was scrubbed...
Name: binutils-mainline-x86-intel-jump-abs.patch
Type: application/octet-stream
Size: 3832 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20050829/9e28ee86/attachment.obj>


More information about the Binutils mailing list