+2020-01-06 Jim Wilson <jimw@sifive.com>
+
+ PR 25205
+ * elfnn-riscv.c (riscv_elf_relocate_section) <R_RISCV_CALL>: Add
+ check for !bfd_link_pic (info).
+ <R_RISCV_CALL_PLT>: Move next to R_RISCV_CALL.
+ <R_RISCV_JAL>: Add comment.
+ (_bfd_riscv_relax_section): For plt.offset check, add check for
+ bfd_link_pic (info). Add comment.
+
2020-01-06 Alan Modra <amodra@gmail.com>
* format.c (bfd_check_format_matches): Ignore bfd_error on target
break;
case R_RISCV_CALL:
+ case R_RISCV_CALL_PLT:
/* Handle a call to an undefined weak function. This won't be
relaxed, so we have to handle it here. */
if (h != NULL && h->root.type == bfd_link_hash_undefweak
- && h->plt.offset == MINUS_ONE)
+ && (!bfd_link_pic (info) || h->plt.offset == MINUS_ONE))
{
/* We can use x0 as the base register. */
bfd_vma insn = bfd_get_32 (input_bfd,
}
/* Fall through. */
- case R_RISCV_CALL_PLT:
case R_RISCV_JAL:
case R_RISCV_RVC_JUMP:
+ /* This line has to match the check in _bfd_riscv_relax_section. */
if (bfd_link_pic (info) && h != NULL && h->plt.offset != MINUS_ONE)
{
/* Refer to the PLT entry. */
undefined_weak = TRUE;
}
- if (h->plt.offset != MINUS_ONE)
+ /* This line has to match the check in riscv_elf_relocate_section
+ in the R_RISCV_CALL[_PLT] case. */
+ if (bfd_link_pic (info) && h->plt.offset != MINUS_ONE)
{
sym_sec = htab->elf.splt;
symval = h->plt.offset;