This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: PR gas/15019: [x86] "xtrn@got -1" doesn't work


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]