This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
PATCH: PR gas/15019: [x86] "xtrn@got -1" doesn't work
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: binutils at sourceware dot org
- Date: Tue, 15 Jan 2013 12:41:39 -0800
- Subject: PATCH: PR gas/15019: [x86] "xtrn@got -1" doesn't work
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Hi,
For "xtrn@got -1" input, space after @got isn't removed and @got isn't
replaced by a space. In this case, we should increment adjust by one.
I checked in this patch to fix it.
H.J.
--
gas/
PR gas/15019
* config/tc-i386.c (lex_got): Increment length by 1 if the
relocation token is removed.
gas/testsuite/
PR gas/15019
* gas/i386/reloc32.s: Add tests for "xtrn@got -/+ 4".
* gas/i386/reloc64.s: Likewise.
* gas/i386/ilp32/reloc64.s: Likewise.
* gas/i386/reloc32.d: Updated.
* gas/i386/reloc64.d: Likewise.
* gas/i386/ilp32/reloc64.d: Likewise.
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 56c0600..641af39 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -6783,8 +6783,6 @@ lex_got (enum bfd_reloc_code_real *rel,
char *tmpbuf, *past_reloc;
*rel = gotrel[j].rel[object_64bit];
- if (adjust)
- *adjust = len;
if (types)
{
@@ -6819,6 +6817,12 @@ lex_got (enum bfd_reloc_code_real *rel,
/* Replace the relocation token with ' ', so that
errors like foo@GOTOFF1 will be detected. */
tmpbuf[first++] = ' ';
+ else
+ /* Increment length by 1 if the relocation token is
+ removed. */
+ len++;
+ if (adjust)
+ *adjust = len;
memcpy (tmpbuf + first, past_reloc, second);
tmpbuf[first + second] = '\0';
return tmpbuf;
diff --git a/gas/testsuite/gas/i386/ilp32/reloc64.d b/gas/testsuite/gas/i386/ilp32/reloc64.d
index 5d3df9a..53083f3 100644
--- a/gas/testsuite/gas/i386/ilp32/reloc64.d
+++ b/gas/testsuite/gas/i386/ilp32/reloc64.d
@@ -94,3 +94,5 @@ Disassembly of section \.data:
.*[ ]+R_X86_64_64[ ]+xtrn
.*[ ]+R_X86_64_64[ ]+xtrn\+0x7fffffff
.*[ ]+R_X86_64_64[ ]+xtrn\-0x80000000
+.*[ ]+R_X86_64_GOT32[ ]+xtrn-0x4
+.*[ ]+R_X86_64_GOT32[ ]+xtrn\+0x4
diff --git a/gas/testsuite/gas/i386/ilp32/reloc64.s b/gas/testsuite/gas/i386/ilp32/reloc64.s
index 4149ec2..77764b3 100644
--- a/gas/testsuite/gas/i386/ilp32/reloc64.s
+++ b/gas/testsuite/gas/i386/ilp32/reloc64.s
@@ -184,3 +184,5 @@ bad .byte xtrn@tpoff
.quad xtrn
.quad xtrn + 0x7fffffff
.quad xtrn - 0x80000000
+ .long xtrn@got - 4
+ .long xtrn@got + 4
diff --git a/gas/testsuite/gas/i386/reloc32.d b/gas/testsuite/gas/i386/reloc32.d
index b2cd29c..cbd71d6 100644
--- a/gas/testsuite/gas/i386/reloc32.d
+++ b/gas/testsuite/gas/i386/reloc32.d
@@ -65,3 +65,6 @@ Disassembly of section \.data:
.*[ ]+R_386_PC16[ ]+xtrn
.*[ ]+R_386_8[ ]+xtrn
.*[ ]+R_386_PC8[ ]+xtrn
+#...
+.*[ ]+R_386_GOT32[ ]+xtrn
+.*[ ]+R_386_GOT32[ ]+xtrn
diff --git a/gas/testsuite/gas/i386/reloc32.s b/gas/testsuite/gas/i386/reloc32.s
index 1a893ff..855dcf5 100644
--- a/gas/testsuite/gas/i386/reloc32.s
+++ b/gas/testsuite/gas/i386/reloc32.s
@@ -159,3 +159,5 @@ bad .byte xtrn@tlsldm
bad .byte xtrn@dtpoff
bad .byte xtrn@ntpoff
bad .byte xtrn@tpoff
+ .long xtrn@got + 4
+ .long xtrn@got - 4
diff --git a/gas/testsuite/gas/i386/reloc64.d b/gas/testsuite/gas/i386/reloc64.d
index b4780d4..4491982 100644
--- a/gas/testsuite/gas/i386/reloc64.d
+++ b/gas/testsuite/gas/i386/reloc64.d
@@ -87,3 +87,5 @@ Disassembly of section \.data:
.*[ ]+R_X86_64_PC16[ ]+xtrn
.*[ ]+R_X86_64_8[ ]+xtrn
.*[ ]+R_X86_64_PC8[ ]+xtrn
+.*[ ]+R_X86_64_GOT32[ ]+xtrn-0x4
+.*[ ]+R_X86_64_GOT32[ ]+xtrn\+0x4
diff --git a/gas/testsuite/gas/i386/reloc64.s b/gas/testsuite/gas/i386/reloc64.s
index f12271d..7b35a02 100644
--- a/gas/testsuite/gas/i386/reloc64.s
+++ b/gas/testsuite/gas/i386/reloc64.s
@@ -198,3 +198,7 @@ bad .byte xtrn@tpoff
.text
mov xtrn@tpoff (%rbx), %eax
+
+ .data
+ .long xtrn@got - 4
+ .long xtrn@got + 4