[prev in list] [next in list] [prev in thread] [next in thread]
List: binutils
Subject: [commit] x86 indirect jump adjustments in gas' Intel mode
From: "Jan Beulich" <JBeulich () novell ! com>
Date: 2005-08-29 6:23:08
Message-ID: 4312C5EC020000780002319C () emea1-mh ! id2 ! novell ! com
[Download RAW message or body]
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
["binutils-mainline-x86-intel-jump-abs.patch" (application/octet-stream)]
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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic