public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: "H.J. Lu" <hjl.tools@gmail.com>
To: binutils@sourceware.org
Subject: [PATCH] i386: Allow GOT32 relocations against ABS symbols
Date: Mon,  7 Feb 2022 16:03:22 -0800	[thread overview]
Message-ID: <20220208000322.4108601-1-hjl.tools@gmail.com> (raw)

I am checking this into master branch and backporting it to 2.37/2.38
branches.

H.J.
---
GOT32 relocations are allowed since absolute value + addend is stored in
the GOT slot.

Tested on glibc 2.35 build with GCC 11.2 and -Os.

bfd/

	PR ld/28870
	* elfxx-x86.c (_bfd_elf_x86_valid_reloc_p): Also allow GOT32
	relocations.

ld/

	PR ld/28870
	* testsuite/ld-i386/i386.exp: Run pr28870.
	* testsuite/ld-i386/pr28870.d: New file.
	* testsuite/ld-i386/pr28870.s: Likewise.
---
 bfd/elfxx-x86.c                | 10 ++++++----
 ld/testsuite/ld-i386/i386.exp  |  1 +
 ld/testsuite/ld-i386/pr28870.d | 10 ++++++++++
 ld/testsuite/ld-i386/pr28870.s |  6 ++++++
 4 files changed, 23 insertions(+), 4 deletions(-)
 create mode 100644 ld/testsuite/ld-i386/pr28870.d
 create mode 100644 ld/testsuite/ld-i386/pr28870.s

diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
index 7ac2411fc80..d00dc45677b 100644
--- a/bfd/elfxx-x86.c
+++ b/bfd/elfxx-x86.c
@@ -1942,9 +1942,9 @@ _bfd_elf_x86_valid_reloc_p (asection *input_section,
       irel = *rel;
 
       /* Only allow relocations against absolute symbol, which can be
-	 resolved as absolute value + addend.  GOTPCREL relocations
-	 are allowed since absolute value + addend is stored in the
-	 GOT slot.  */
+	 resolved as absolute value + addend.  GOTPCREL and GOT32
+	 relocations are allowed since absolute value + addend is
+	 stored in the GOT slot.  */
       if (bed->target_id == X86_64_ELF_DATA)
 	{
 	  r_type &= ~R_X86_64_converted_reloc_bit;
@@ -1965,7 +1965,9 @@ _bfd_elf_x86_valid_reloc_p (asection *input_section,
       else
 	valid_p = (r_type == R_386_32
 		   || r_type == R_386_16
-		   || r_type == R_386_8);
+		   || r_type == R_386_8
+		   || r_type == R_386_GOT32
+		   || r_type == R_386_GOT32X);
 
       if (valid_p)
 	*no_dynreloc_p = true;
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index fe36b0fb533..82e14ab38d0 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -509,6 +509,7 @@ run_dump_test "pr27491-3"
 run_dump_test "pr27491-4"
 run_dump_test "dt-relr-1a"
 run_dump_test "dt-relr-1b"
+run_dump_test "pr28870"
 
 if { !([istarget "i?86-*-linux*"]
        || [istarget "i?86-*-gnu*"]
diff --git a/ld/testsuite/ld-i386/pr28870.d b/ld/testsuite/ld-i386/pr28870.d
new file mode 100644
index 00000000000..8e9b9fb82eb
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr28870.d
@@ -0,0 +1,10 @@
+#as: --32
+#ld: --no-dynamic-linker -m elf_i386 -pie
+#readelf: -s --wide
+
+#...
+Symbol table '.symtab' contains [0-9]+ entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+#...
+ +[a-f0-9]+: 00000002     0 NOTYPE  LOCAL  DEFAULT  ABS foo
+#pass
diff --git a/ld/testsuite/ld-i386/pr28870.s b/ld/testsuite/ld-i386/pr28870.s
new file mode 100644
index 00000000000..8e320470e2d
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr28870.s
@@ -0,0 +1,6 @@
+	.text
+	.globl _start
+_start:
+	addl	foo@GOT(%ebx), %eax
+	cmpl	$0, foo@GOT(%ebx)
+foo = 2
-- 
2.34.1


             reply	other threads:[~2022-02-08  0:03 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-08  0:03 H.J. Lu [this message]
2022-02-08  8:37 ` Jan Beulich
2022-02-08 13:02   ` H.J. Lu
2022-02-08 13:10     ` Jan Beulich
2022-02-08 13:20       ` H.J. Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220208000322.4108601-1-hjl.tools@gmail.com \
    --to=hjl.tools@gmail.com \
    --cc=binutils@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).