RISC-V: Should reset `again' flag for _bfd_riscv_relax_pc.
authorNelson Chu <nelson@rivosinc.com>
Mon, 24 Oct 2022 10:26:36 +0000 (18:26 +0800)
committerNelson Chu <nelson@rivosinc.com>
Tue, 25 Oct 2022 01:20:39 +0000 (09:20 +0800)
The R_RISCV_DELETE relocations are no longer deleted at another relax pass,
so we should reset 'again' flag to true for _bfd_riscv_relax_pc, while the
deleted bytes are marked as R_RISCV_DELETE.

bfd/
    * elfnn-riscv.c (_bfd_riscv_relax_pc): Set `again' to true while the
    deleted bytes are marked as R_RISCV_DELETE.

bfd/elfnn-riscv.c

index e4064313724fce053ade73d033501d6c0311a54b..cf852636c9ccc50ac4de7587f4871672785d581d 100644 (file)
@@ -4586,7 +4586,7 @@ _bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED,
                     bfd_vma symval,
                     bfd_vma max_alignment,
                     bfd_vma reserve_size,
-                    bool *again ATTRIBUTE_UNUSED,
+                    bool *again,
                     riscv_pcgp_relocs *pcgp_relocs,
                     bool undefined_weak)
 {
@@ -4715,6 +4715,7 @@ _bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED,
                                      sym_sec,
                                      undefined_weak);
          /* Delete unnecessary AUIPC and reuse the reloc.  */
+         *again = true;
          riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4, link_info,
                                    pcgp_relocs, rel);
          return true;