public inbox for binutils-cvs@sourceware.org
 help / color / mirror / Atom feed
* [binutils-gdb] LoongArch: ld: Fix bug not generate plt when link a dso
@ 2022-08-24  6:27 liu & zhensong
  0 siblings, 0 replies; only message in thread
From: liu & zhensong @ 2022-08-24  6:27 UTC (permalink / raw)
  To: bfd-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=42bd5254fb5f52f045796e1d9cce07102881d3b1

commit 42bd5254fb5f52f045796e1d9cce07102881d3b1
Author: liuzhensong <liuzhensong@loongson.cn>
Date:   Fri Aug 19 15:04:45 2022 +0800

    LoongArch: ld: Fix bug not generate plt when link a dso
    
      Fix the bug that can not generate func@plt
      when linking a undefined function with cmodel=medium.
      Add testcase.
    
      bfd/
        * elfnn-loongarch.c
      ld/testsuite/ld-loongarch-elf/
        * cmodel-libjirl.dd
        * cmodel.exp
        * libjirl.s

Diff:
---
 bfd/elfnn-loongarch.c                           |  6 ++++
 ld/testsuite/ld-loongarch-elf/cmodel-libjirl.dd |  4 +++
 ld/testsuite/ld-loongarch-elf/cmodel.exp        | 37 +++++++++++++++++++++++++
 ld/testsuite/ld-loongarch-elf/libjirl.s         |  2 ++
 4 files changed, 49 insertions(+)

diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
index 8d0f66ea7c1..ed42b8b6770 100644
--- a/bfd/elfnn-loongarch.c
+++ b/bfd/elfnn-loongarch.c
@@ -746,6 +746,12 @@ loongarch_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	case R_LARCH_PCALA_HI20:
 	  if (h != NULL)
 	    {
+	      /* For pcalau12i + jirl.  */
+	      h->needs_plt = 1;
+	      if (h->plt.refcount < 0)
+		h->plt.refcount = 0;
+	      h->plt.refcount++;
+
 	      h->non_got_ref = 1;
 	      h->pointer_equality_needed = 1;
 	    }
diff --git a/ld/testsuite/ld-loongarch-elf/cmodel-libjirl.dd b/ld/testsuite/ld-loongarch-elf/cmodel-libjirl.dd
new file mode 100644
index 00000000000..52d3dca8443
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/cmodel-libjirl.dd
@@ -0,0 +1,4 @@
+.*file format.*loongarch
+#...
+[0-9a-f]+ <func@plt>:
+#pass
diff --git a/ld/testsuite/ld-loongarch-elf/cmodel.exp b/ld/testsuite/ld-loongarch-elf/cmodel.exp
new file mode 100644
index 00000000000..7ef972a44e5
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/cmodel.exp
@@ -0,0 +1,37 @@
+# Expect script for LoongArch ELF linker tests
+#   Copyright (C) 2022 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+if ![istarget loongarch*-*-*] {
+  return
+}
+
+run_ld_link_tests [list \
+		    [list \
+		    "medium jirl plt" \
+		    "-shared" "" \
+		    "" \
+		    {libjirl.s} \
+		    [list \
+			[list objdump -d cmodel-libjirl.dd] \
+		    ] \
+		    "libjirl.so" \
+		    ] \
+		  ]
diff --git a/ld/testsuite/ld-loongarch-elf/libjirl.s b/ld/testsuite/ld-loongarch-elf/libjirl.s
new file mode 100644
index 00000000000..4d963870df0
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/libjirl.s
@@ -0,0 +1,2 @@
+pcalau12i $r12, %pc_hi20(func)
+jirl $r1,$r12, %pc_lo12(func)

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-08-24  6:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-24  6:27 [binutils-gdb] LoongArch: ld: Fix bug not generate plt when link a dso liu & zhensong

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).