From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7867) id 6A7123858C29; Fri, 17 Nov 2023 08:43:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6A7123858C29 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: liu & zhensong To: bfd-cvs@sourceware.org Subject: [binutils-gdb] LoongArch: Directly delete relaxed instuctions in first relaxation pass X-Act-Checkin: binutils-gdb X-Git-Author: mengqinggang X-Git-Refname: refs/heads/master X-Git-Oldrev: 363174776d13db9f35f2e54d8f7f5e34b64acbee X-Git-Newrev: 4e94082d95e046f357409cd689ffeedd60f6c673 Message-Id: <20231117084334.6A7123858C29@sourceware.org> Date: Fri, 17 Nov 2023 08:43:34 +0000 (GMT) X-BeenThere: binutils-cvs@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Nov 2023 08:43:34 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D4e94082d95e0= 46f357409cd689ffeedd60f6c673 commit 4e94082d95e046f357409cd689ffeedd60f6c673 Author: mengqinggang Date: Thu Nov 16 19:19:12 2023 +0800 LoongArch: Directly delete relaxed instuctions in first relaxation pass =20 Directly delete relaxed instuctions in first relaxation pass, not use R_LARCH_DELETE relocation. If not, the PC-relative offset may increase. Diff: --- bfd/elfnn-loongarch.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c index 1162cb35cd6..9d4ea7e4ae7 100644 --- a/bfd/elfnn-loongarch.c +++ b/bfd/elfnn-loongarch.c @@ -3739,7 +3739,8 @@ loongarch_relax_delete_bytes (bfd *abfd, /* Relax pcalau12i,addi.d =3D> pcaddi. */ static bool loongarch_relax_pcala_addi (bfd *abfd, asection *sec, - Elf_Internal_Rela *rel_hi, bfd_vma symval) + Elf_Internal_Rela *rel_hi, bfd_vma symval, + struct bfd_link_info *info) { bfd_byte *contents =3D elf_section_data (sec)->this_hdr.contents; Elf_Internal_Rela *rel_lo =3D rel_hi + 2; @@ -3771,8 +3772,9 @@ loongarch_relax_pcala_addi (bfd *abfd, asection *sec, /* Adjust relocations. */ rel_hi->r_info =3D ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info), R_LARCH_PCREL20_S2); - rel_lo->r_info =3D ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info), - R_LARCH_DELETE); + rel_lo->r_info =3D ELFNN_R_INFO (0, R_LARCH_NONE); + + loongarch_relax_delete_bytes (abfd, sec, rel_lo->r_offset, 4, info); =20 return true; } @@ -4004,14 +4006,14 @@ loongarch_elf_relax_section (bfd *abfd, asection *s= ec, break; case R_LARCH_PCALA_HI20: if (0 =3D=3D info->relax_pass && (i + 4) <=3D sec->reloc_count) - loongarch_relax_pcala_addi (abfd, sec, rel, symval); + loongarch_relax_pcala_addi (abfd, sec, rel, symval, info); break; case R_LARCH_GOT_PC_HI20: if (local_got && 0 =3D=3D info->relax_pass && (i + 4) <=3D sec->reloc_count) { if (loongarch_relax_pcala_ld (abfd, sec, rel)) - loongarch_relax_pcala_addi (abfd, sec, rel, symval); + loongarch_relax_pcala_addi (abfd, sec, rel, symval, info); } break; default: