public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Nelson Chu <nelson@rivosinc.com>
To: binutils@sourceware.org
Cc: kito.cheng@gmail.com, jrtc27@jrtc27.com, i@maskray.me,
	nelson@rivosinc.com
Subject: [PATCH] RISC-V: Always generate R_RISCV_CALL_PLT reloc for call in assembler.
Date: Wed, 14 Sep 2022 11:22:02 +0800	[thread overview]
Message-ID: <20220914032202.23984-1-nelson@rivosinc.com> (raw)

Since we have the same behaviors of CALL and CALL_PLT relocs in linker for now,
https://github.com/bminor/binutils-gdb/commit/3b1450b38c644f99aa2e211747b428b9f8d15cca

And the psabi already deprecate the CALL reloc,
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/commit/a0dced85018d7a0ec17023c9389cbd70b1dbc1b0

Therefore, we should always generate R_RISCV_CALL_PLT reloc for call, even if
it has @plt postfix.  I believe LLVM (https://reviews.llvm.org/D132530) already
support this, so GNU as should do the same thing.

gas/
	* config/tc-riscv.c (riscv_ip): Always generate CALL_PLT reloc for
	call, even if it has @plt postfix.
	* testsuite/gas/riscv/no-relax-reloc.d: Updated CALL to CALL_PLT.
	* testsuite/gas/riscv/relax-reloc.d: Likewise.
ld/
	* testsuite/ld-riscv-elf/variant_cc-r.d: Updated CALL to CALL_PLT.
---
 gas/config/tc-riscv.c                    |  8 +---
 gas/testsuite/gas/riscv/no-relax-reloc.d |  2 +-
 gas/testsuite/gas/riscv/relax-reloc.d    |  2 +-
 ld/testsuite/ld-riscv-elf/variant_cc-r.d | 56 ++++++++++++------------
 4 files changed, 32 insertions(+), 36 deletions(-)

diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
index df2e201fb74..ad51560a670 100644
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -3116,12 +3116,8 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,
 	      my_getExpression (imm_expr, asarg);
 	      asarg = expr_end;
 	      if (strcmp (asarg, "@plt") == 0)
-		{
-		  *imm_reloc = BFD_RELOC_RISCV_CALL_PLT;
-		  asarg += 4;
-		}
-	      else
-		*imm_reloc = BFD_RELOC_RISCV_CALL;
+		asarg += 4;
+	      *imm_reloc = BFD_RELOC_RISCV_CALL_PLT;
 	      continue;
 
 	    case 'O':
diff --git a/gas/testsuite/gas/riscv/no-relax-reloc.d b/gas/testsuite/gas/riscv/no-relax-reloc.d
index c2ca1aa6e72..d7269a71037 100644
--- a/gas/testsuite/gas/riscv/no-relax-reloc.d
+++ b/gas/testsuite/gas/riscv/no-relax-reloc.d
@@ -11,4 +11,4 @@ RELOCATION RECORDS FOR .*
 0+c R_RISCV_PCREL_LO12_I.*
 0+10 R_RISCV_GOT_HI20.*
 0+14 R_RISCV_PCREL_LO12_I.*
-0+18 R_RISCV_CALL.*
+0+18 R_RISCV_CALL_PLT.*
diff --git a/gas/testsuite/gas/riscv/relax-reloc.d b/gas/testsuite/gas/riscv/relax-reloc.d
index 623218ec5d1..4a368806066 100644
--- a/gas/testsuite/gas/riscv/relax-reloc.d
+++ b/gas/testsuite/gas/riscv/relax-reloc.d
@@ -16,5 +16,5 @@ RELOCATION RECORDS FOR .*
 0+10 R_RISCV_GOT_HI20.*
 0+14 R_RISCV_PCREL_LO12_I.*
 0+14 R_RISCV_RELAX.*
-0+18 R_RISCV_CALL.*
+0+18 R_RISCV_CALL_PLT.*
 0+18 R_RISCV_RELAX.*
diff --git a/ld/testsuite/ld-riscv-elf/variant_cc-r.d b/ld/testsuite/ld-riscv-elf/variant_cc-r.d
index 5235b8e90d7..7df449bfd2a 100644
--- a/ld/testsuite/ld-riscv-elf/variant_cc-r.d
+++ b/ld/testsuite/ld-riscv-elf/variant_cc-r.d
@@ -6,34 +6,34 @@
 
 Relocation section '.rela.text' at .*
 #...
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+cc_global_default_def \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+cc_global_default_undef \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+cc_global_hidden_def \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+cc_global_default_ifunc\(\)[ 	]+cc_global_default_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+cc_global_hidden_ifunc\(\)[ 	]+cc_global_hidden_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+cc_local \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+cc_local_ifunc\(\)[ 	]+cc_local_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+nocc_global_default_def \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+nocc_global_default_undef \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+nocc_global_hidden_def \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+nocc_global_default_ifunc\(\)[ 	]+nocc_global_default_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+nocc_global_hidden_ifunc\(\)[ 	]+nocc_global_hidden_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+nocc_local \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+nocc_local_ifunc\(\)[ 	]+nocc_local_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+cc_global_default_def \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+cc_global_default_undef \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+cc_global_hidden_def \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+cc_global_default_ifunc\(\)[ 	]+cc_global_default_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+cc_global_hidden_ifunc\(\)[ 	]+cc_global_hidden_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0070[ 	]+cc_local2 \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+cc_local2_ifunc\(\)[ 	]+cc_local2_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+nocc_global_default_def \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+nocc_global_default_undef \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0000[ 	]+nocc_global_hidden_def \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+nocc_global_default_ifunc\(\)[ 	]+nocc_global_default_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+nocc_global_hidden_ifunc\(\)[ 	]+nocc_global_hidden_ifunc \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+0+0070[ 	]+nocc_local2 \+ 0
-[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL[ 	]+nocc_local2_ifunc\(\)[ 	]+nocc_local2_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+cc_global_default_def \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+cc_global_default_undef \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+cc_global_hidden_def \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+cc_global_default_ifunc\(\)[ 	]+cc_global_default_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+cc_global_hidden_ifunc\(\)[ 	]+cc_global_hidden_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+cc_local \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+cc_local_ifunc\(\)[ 	]+cc_local_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+nocc_global_default_def \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+nocc_global_default_undef \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+nocc_global_hidden_def \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+nocc_global_default_ifunc\(\)[ 	]+nocc_global_default_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+nocc_global_hidden_ifunc\(\)[ 	]+nocc_global_hidden_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+nocc_local \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+nocc_local_ifunc\(\)[ 	]+nocc_local_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+cc_global_default_def \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+cc_global_default_undef \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+cc_global_hidden_def \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+cc_global_default_ifunc\(\)[ 	]+cc_global_default_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+cc_global_hidden_ifunc\(\)[ 	]+cc_global_hidden_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0070[ 	]+cc_local2 \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+cc_local2_ifunc\(\)[ 	]+cc_local2_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+nocc_global_default_def \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+nocc_global_default_undef \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0000[ 	]+nocc_global_hidden_def \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+nocc_global_default_ifunc\(\)[ 	]+nocc_global_default_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+nocc_global_hidden_ifunc\(\)[ 	]+nocc_global_hidden_ifunc \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+0+0070[ 	]+nocc_local2 \+ 0
+[0-9a-f]+[ 	]+[0-9a-f]+[ 	]+R_RISCV_CALL_PLT[ 	]+nocc_local2_ifunc\(\)[ 	]+nocc_local2_ifunc \+ 0
 #...
 Symbol table '.symtab' contains .*
 .*
-- 
2.32.1 (Apple Git-133)


             reply	other threads:[~2022-09-14  3:22 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-14  3:22 Nelson Chu [this message]
2022-09-21  3:48 ` Nelson Chu

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=20220914032202.23984-1-nelson@rivosinc.com \
    --to=nelson@rivosinc.com \
    --cc=binutils@sourceware.org \
    --cc=i@maskray.me \
    --cc=jrtc27@jrtc27.com \
    --cc=kito.cheng@gmail.com \
    /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).