From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 3FBC63893661 for ; Mon, 5 Dec 2022 08:05:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3FBC63893661 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.5]) by gateway (Coremail) with SMTP id _____8AxhfA5po1jyDkDAA--.7523S3; Mon, 05 Dec 2022 16:05:13 +0800 (CST) Received: from 5.5.5 (unknown [10.2.5.5]) by localhost.localdomain (Coremail) with SMTP id AQAAf8DxPuIzpo1jIdYlAA--.27857S2; Mon, 05 Dec 2022 16:05:13 +0800 (CST) From: mengqinggang To: binutils@sourceware.org Cc: xuchenghua@loongson.cn, liuzhensong@loongson.cn, chenglulu@loongson.cn, xry111@xry111.site, i.swmail@xen0n.name, maskray@google.com, mengqinggang Subject: [PATCH v1 0/6] LoongArch linker relaxation support. Date: Mon, 5 Dec 2022 16:04:47 +0800 Message-Id: <20221205080453.1352069-1-mengqinggang@loongson.cn> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID:AQAAf8DxPuIzpo1jIdYlAA--.27857S2 X-CM-SenderInfo: 5phqw15lqjwttqj6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjvJXoWxWrWxGr4xKrW3ur4UtFWDurg_yoWrWF13pa 4UZr1FyF48GFnrGrn8G3y5u3Z7Jan7Krya9a4ftFy2kr4Sqry0vw10yw43XFs8J3yjgw1f Zw10qw1ruFn8trJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj qI5I8CrVACY4xI64kE6c02F40Ex7xfYxn0WfASr-VFAUDa7-sFnT9fnUUIcSsGvfJTRUUU b7AYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s 1l1IIY67AEw4v_Jrv_JF1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xv wVC0I7IYx2IY67AKxVWUJVWUCwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwA2z4 x0Y4vEx4A2jsIE14v26r4UJVWxJr1l84ACjcxK6I8E87Iv6xkF7I0E14v26r4UJVWxJr1l e2I262IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2xF0cIa020Ex4CE44I27wAqx4xG64xvF2 IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_JrI_JrylYx0Ex4A2jsIE14v26r1j6r4U McvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvY0x0EwIxGrwCF04k20xvY0x0EwIxGrwCFx2 IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v2 6r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67 AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IY s7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr 0_GrUvcSsGvfC2KfnxnUUI43ZEXa7IU8j-e5UUUUU== X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,KAM_DMARC_STATUS,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: There are two instrunction sequence can be relaxed in LoongArch. The first one is "pcala12i + addi.d" which can be relaxed to pcaddi. Another one is "pcalau12i + ld.d" which can be relaxed to "pcalau12i + addi.d". And it can be relaxed to pcaddi one more time. Pcaddi instrunction can address a signed 22 bits 4-byte alinged offset relative to pc. Now, only the instrunctions expand from macro (la.local, la.got, etc.) at assembly time can be relaxed, because gcc instruction scheduling causes relax unable to handle some special cases. Gcc can add -mno-explicit-relocs option to generate macro instrunction. mengqinggang (6): LoongArch: include: Add support for linker relaxation. LoongArch: bfd: Add support for linker relaxation. LoongArch: opcodes: Add support for linker relaxation. LoongArch: binutils: Add support for linker relaxation. LoongArch: gas: Add support for linker relaxation. LoongArch: ld: Add support for linker relaxation. bfd/bfd-in2.h | 8 + bfd/elfnn-loongarch.c | 582 +++++++++++++-- bfd/elfxx-loongarch.c | 676 +++++++++++++----- bfd/elfxx-loongarch.h | 10 +- bfd/libbfd.h | 8 + bfd/reloc.c | 22 + binutils/readelf.c | 84 ++- binutils/testsuite/binutils-all/readelf.exp | 13 +- gas/config/tc-loongarch.c | 412 +++++++++-- gas/config/tc-loongarch.h | 45 +- gas/testsuite/gas/all/align.d | 5 +- gas/testsuite/gas/all/gas.exp | 10 +- gas/testsuite/gas/all/relax.d | 4 + gas/testsuite/gas/elf/dwarf-5-irp.d | 3 +- gas/testsuite/gas/elf/dwarf-5-loc0.d | 3 +- gas/testsuite/gas/elf/dwarf2-11.d | 3 +- gas/testsuite/gas/elf/dwarf2-15.d | 3 +- gas/testsuite/gas/elf/dwarf2-16.d | 3 +- gas/testsuite/gas/elf/dwarf2-17.d | 3 +- gas/testsuite/gas/elf/dwarf2-18.d | 3 +- gas/testsuite/gas/elf/dwarf2-19.d | 3 +- gas/testsuite/gas/elf/dwarf2-5.d | 3 +- gas/testsuite/gas/elf/ehopt0.d | 3 + gas/testsuite/gas/elf/elf.exp | 3 + gas/testsuite/gas/elf/section11.d | 4 +- gas/testsuite/gas/lns/lns.exp | 1 + gas/testsuite/gas/loongarch/jmp_op.d | 65 +- gas/testsuite/gas/loongarch/li.d | 9 +- gas/testsuite/gas/loongarch/macro_op.d | 69 +- .../gas/loongarch/macro_op_large_abs.d | 103 +-- .../gas/loongarch/macro_op_large_pc.d | 103 +-- gas/testsuite/gas/loongarch/relax_align.d | 25 + gas/testsuite/gas/loongarch/relax_align.s | 5 + gas/testsuite/gas/loongarch/uleb128.d | 35 + gas/testsuite/gas/loongarch/uleb128.s | 20 + include/elf/loongarch.h | 20 + include/opcode/loongarch.h | 3 + ld/emultempl/loongarchelf.em | 3 + ld/testsuite/ld-elf/compressed1d.d | 3 + ld/testsuite/ld-elf/pr26936.d | 4 +- ld/testsuite/ld-loongarch-elf/disas-jirl.d | 4 +- ld/testsuite/ld-loongarch-elf/jmp_op.d | 65 +- ld/testsuite/ld-loongarch-elf/macro_op.d | 138 ++-- ld/testsuite/ld-loongarch-elf/relax-align.dd | 7 + ld/testsuite/ld-loongarch-elf/relax-align.s | 9 + ld/testsuite/ld-loongarch-elf/relax.dd | 5 + ld/testsuite/ld-loongarch-elf/relax.exp | 65 ++ ld/testsuite/ld-loongarch-elf/relax.s | 50 ++ ld/testsuite/ld-loongarch-elf/uleb128.dd | 10 + ld/testsuite/ld-loongarch-elf/uleb128.s | 21 + opcodes/loongarch-opc.c | 5 +- 51 files changed, 2223 insertions(+), 540 deletions(-) create mode 100644 gas/testsuite/gas/loongarch/relax_align.d create mode 100644 gas/testsuite/gas/loongarch/relax_align.s create mode 100644 gas/testsuite/gas/loongarch/uleb128.d create mode 100644 gas/testsuite/gas/loongarch/uleb128.s create mode 100644 ld/testsuite/ld-loongarch-elf/relax-align.dd create mode 100644 ld/testsuite/ld-loongarch-elf/relax-align.s create mode 100644 ld/testsuite/ld-loongarch-elf/relax.dd create mode 100644 ld/testsuite/ld-loongarch-elf/relax.exp create mode 100644 ld/testsuite/ld-loongarch-elf/relax.s create mode 100644 ld/testsuite/ld-loongarch-elf/uleb128.dd create mode 100644 ld/testsuite/ld-loongarch-elf/uleb128.s -- 2.36.0