This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
PATCH: Fix RIP handling for Intel mode
- From: "H.J. Lu" <hjl at lucon dot org>
- To: binutils at sources dot redhat dot com
- Date: Sat, 15 Sep 2007 15:04:17 -0700
- Subject: PATCH: Fix RIP handling for Intel mode
intel_e04 may be called recursively. We may see the end of input inside
the loop. I am checking in this patch to fix it.
H.J.
----
gas/
2007-09-15 H.J. Lu <hongjiu.lu@intel.com>
PR gas/5034
* config/tc-i386.c (intel_e04): Return 1 if cur_token.code is
T_NIL.
gas/testsuite/
2007-09-15 H.J. Lu <hongjiu.lu@intel.com>
PR gas/5034
* gas/i386/x86-64-rip.s: Add Intel mode testcases.
* gas/i386/x86-64-rip-intel.d: Updated.
* gas/i386/x86-64-rip.d: Likewise.
--- gas/config/tc-i386.c.rip 2007-09-14 18:58:16.000000000 -0700
+++ gas/config/tc-i386.c 2007-09-15 14:24:28.000000000 -0700
@@ -7913,6 +7913,9 @@ intel_e04 (void)
if (!intel_e05())
return 0;
+ if (cur_token.code == T_NIL)
+ return 1;
+
if (nregs >= 0 && NUM_ADDRESS_REGS > nregs)
i.base_reg = i386_regtab + REGNAM_AL; /* al is invalid as base */
--- gas/testsuite/gas/i386/x86-64-rip-intel.d.rip 2007-04-26 11:15:47.000000000 -0700
+++ gas/testsuite/gas/i386/x86-64-rip-intel.d 2007-09-15 14:50:59.000000000 -0700
@@ -7,9 +7,13 @@
Disassembly of section .text:
-0+000 <.text>:
-[ ]*0:[ ]+8d 05 00 00 00 00[ ]+lea[ ]+eax,\[rip\+0x0\][ ]*(#.*)?
-[ ]*6:[ ]+8d 05 11 11 11 11[ ]+lea[ ]+eax,\[rip\+0x11111111\][ ]*(#.*)?
-[ ]*c:[ ]+8d 05 01 00 00 00[ ]+lea[ ]+eax,\[rip\+0x1\][ ]*(#.*)?
-[ ]*12:[ ]+8d 05 00 00 00 00[ ]+lea[ ]+eax,\[rip\+0x0\][ ]*(#.*)?
+0+ <.text>:
+[ ]*[a-f0-9]+: 8d 05 00 00 00 00 lea eax,\[rip\+0x0\][ ]*#[ ]*0x[a-f0-9]+[ ]+[a-f0-9]+: R_X86_64_PC32 symbol-0x4
+[ ]*[a-f0-9]+: 8d 05 11 11 11 11 lea eax,\[rip\+0x11111111\] # 0x1111111d
+[ ]*[a-f0-9]+: 8d 05 01 00 00 00 lea eax,\[rip\+0x1\] # 0x13
+[ ]*[a-f0-9]+: 8d 05 00 00 00 00 lea eax,\[rip\+0x0\] # 0x18
+[ ]*[a-f0-9]+: 48 8b 05 00 00 00 00 mov rax,QWORD PTR \[rip\+0x0\][ ]*#[ ]*0x[a-f0-9]+[ ]+[a-f0-9]+: R_X86_64_PC32 __CTOR_END__-0xc
+[ ]*[a-f0-9]+: 48 8b 05 00 00 00 00 mov rax,QWORD PTR \[rip\+0x0\][ ]*#[ ]*0x[a-f0-9]+[ ]+[a-f0-9]+: R_X86_64_PC32 __CTOR_END__-0xc
+[ ]*[a-f0-9]+: 48 8b 05 00 00 00 00 mov rax,QWORD PTR \[rip\+0x0\][ ]*#[ ]*0x[a-f0-9]+[ ]+[a-f0-9]+: R_X86_64_PC32 __CTOR_END__-0xc
+[ ]*[a-f0-9]+: 48 8b 05 00 00 00 00 mov rax,QWORD PTR \[rip\+0x0\][ ]*#[ ]*0x[a-f0-9]+[ ]+[a-f0-9]+: R_X86_64_PC32 __CTOR_END__-0xc
#pass
--- gas/testsuite/gas/i386/x86-64-rip.d.rip 2007-04-26 22:54:10.000000000 -0700
+++ gas/testsuite/gas/i386/x86-64-rip.d 2007-09-15 14:51:12.000000000 -0700
@@ -6,9 +6,13 @@
Disassembly of section .text:
-0+000 <.text>:
-[ ]*0:[ ]+8d 05 00 00 00 00[ ]+lea[ ]+0x0\(%rip\),%eax[ ]*(#.*)?
-[ ]*6:[ ]+8d 05 11 11 11 11[ ]+lea[ ]+0x11111111\(%rip\),%eax[ ]*(#.*)?
-[ ]*c:[ ]+8d 05 01 00 00 00[ ]+lea[ ]+0x1\(%rip\),%eax[ ]*(#.*)?
-[ ]*12:[ ]+8d 05 00 00 00 00[ ]+lea[ ]+0x0\(%rip\),%eax[ ]*(#.*)?
+0+ <.text>:
+[ ]*[a-f0-9]+: 8d 05 00 00 00 00 lea 0x0\(%rip\),%eax[ ]*#[ ]*0x[a-f0-9]+[ ]+[a-f0-9]+: R_X86_64_PC32 symbol-0x4
+[ ]*[a-f0-9]+: 8d 05 11 11 11 11 lea 0x11111111\(%rip\),%eax # 0x1111111d
+[ ]*[a-f0-9]+: 8d 05 01 00 00 00 lea 0x1\(%rip\),%eax # 0x13
+[ ]*[a-f0-9]+: 8d 05 00 00 00 00 lea 0x0\(%rip\),%eax # 0x18
+[ ]*[a-f0-9]+: 48 8b 05 00 00 00 00 mov 0x0\(%rip\),%rax[ ]*#[ ]*0x[a-f0-9]+[ ]+[a-f0-9]+: R_X86_64_PC32 __CTOR_END__-0xc
+[ ]*[a-f0-9]+: 48 8b 05 00 00 00 00 mov 0x0\(%rip\),%rax[ ]*#[ ]*0x[a-f0-9]+[ ]+[a-f0-9]+: R_X86_64_PC32 __CTOR_END__-0xc
+[ ]*[a-f0-9]+: 48 8b 05 00 00 00 00 mov 0x0\(%rip\),%rax[ ]*#[ ]*0x[a-f0-9]+[ ]+[a-f0-9]+: R_X86_64_PC32 __CTOR_END__-0xc
+[ ]*[a-f0-9]+: 48 8b 05 00 00 00 00 mov 0x0\(%rip\),%rax[ ]*#[ ]*0x[a-f0-9]+[ ]+[a-f0-9]+: R_X86_64_PC32 __CTOR_END__-0xc
#pass
--- gas/testsuite/gas/i386/x86-64-rip.s.rip 2004-07-21 09:09:43.000000000 -0700
+++ gas/testsuite/gas/i386/x86-64-rip.s 2007-09-15 14:26:28.000000000 -0700
@@ -3,3 +3,8 @@
leal 0x11111111(%rip), %eax
leal 1(%rip), %eax
leal (%rip), %eax
+.intel_syntax noprefix
+mov rax, QWORD PTR __CTOR_END__-8[rip]
+mov rax, QWORD PTR __CTOR_END__+-8[rip]
+mov rax, QWORD PTR -8+__CTOR_END__[rip]
+mov rax, QWORD PTR __CTOR_END__[rip-8]