From patchwork Fri Dec 1 09:07:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: changjiachen X-Patchwork-Id: 56440 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2FD543861852 for ; Fri, 1 Dec 2023 09:08:34 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-m155101.qiye.163.com (mail-m155101.qiye.163.com [101.71.155.101]) by sourceware.org (Postfix) with ESMTPS id 907C73858415 for ; Fri, 1 Dec 2023 09:07:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 907C73858415 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=stu.xupt.edu.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=stu.xupt.edu.cn ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 907C73858415 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=101.71.155.101 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701421675; cv=none; b=u1mtZvGbPmLAUrB21MbN/T7OIkSqwK8FfIh7f92KFSTL828gpmATadpOReRp+OK5WPUaFIBlD/7oNN9oJTmGFfWDx/br8FGPSVNbsi+xNPgvFKqv1W5Kx9mNsdFIbF13pWzbj5g1nqOSlW3CxvSztNDQruX6JsGonzZ3iMUVmKw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701421675; c=relaxed/simple; bh=AD9HpujqdCpF5qjpZ+38DD/wH4NeQ1CF4JhAzw3SeWs=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=JKPe1vg7qqk2vgTqA5whSEwI4Y5eZF1zGuRV5Y8RAUbz7oKl+V8a2+7bLJRv0fqP4vd40JqNO7gP1QflUs+aDNS59z9kHudgJoVQL9+jJ/ulwYOzsvT2Mh9Me/tdHcPAlgAcViejbEp1wppJkWycdHTIEy5gtOWpaB7NXVqyMYw= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from ubuntu.localdomain (unknown [124.89.2.83]) by mail-m121144.qiye.163.com (Hmail) with ESMTPA id 43C76AC00A8; Fri, 1 Dec 2023 17:07:33 +0800 (CST) From: changjiachen To: binutils@sourceware.org Cc: xuchenghua@loongson.cn, chenglulu@loongson.cn, liuzhensong@loongson.cn, xry111@xry111.site, i.swmail@xen0n.name, maskray@google.com, cailulu@loongson.cn, luweining@loongson.cn, wanglei@loongson.cn, hejinyang@loongson.cn, Lazy_Linux@126.com, changjiachen Subject: [PATCH v1 0/5] LoongArch tls le model linker relaxation support. Date: Fri, 1 Dec 2023 17:07:25 +0800 Message-Id: <20231201090730.20521-1-changjiachen@stu.xupt.edu.cn> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWS1ZQUlXWQ8JGhUIEh9ZQVlCTx9OVkhLGhpJTkMYHUwYSlUTARMWGhIXJBQOD1 lXWRgSC1lBWUpJT1VDQlVJVUNIWVdZFhoPEhUdFFlBWU9LSFVKTEpMSEhVSktLVUpCS0tZBg++ X-HM-Tid: 0a8c24a21f32b039kuuu43c76ac00a8 X-HM-MType: 10 X-HM-Sender-Digest: e1kMHhlZQR0aFwgeV1kSHx4VD1lBWUc6MyI6Pgw4Azw9ChUBQksdIj4K SxIwFA5VSlVKTEtKT0lKTU5PT0JIVTMWGhIXVRgTGhUcERIaGBMeFTsIDw5VAw4LD1UeHw5VGBVF WVdZEgtZQVlKSU9VQ0JVSVVDSFlXWQgBWUFPSEJLNwY+ X-Spam-Status: No, score=0.9 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, RCVD_IN_BARRACUDACENTRAL, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces+patchwork=sourceware.org@sourceware.org This is the v1 version of patches to support loongarch linker tls le model relax. This support does three main things: 1. Modify LoongArch tls le model assembly instruction sequence. This change is mainly implemented in gcc. Due to the characteristics of st.w instruction in Loongarch and the unique addressing mode of tls le model, in order to implement tls le model linker relax, it is decided to change the tls le model instruction sequence. The specific changes are as follows: example: __thread int a = 1; old insn sequence: lu12i.w $r12,%le_hi20_r(a) ori $r12,$r12,%le_lo12_r(a) add.d $r12,$r12,$r2,%le_add_r(a) li.w $r13,$r0,1 stptr.w $r13,$r12,0 new insn sequence: lu12i.w $r12,%le_hi20_r(a) add.d $r12,$r12,$r2,%le_add_r(a) li.w $r13,$r0,1 st.w $r13,$r12,%le_lo12_r(a) 2. Added LoongArch three relocations related to tls le model relax. In order to ensure forward compatibility of binutils versions and implement tls le model relax, it was decided to add three relocation items. The relocation items are as follows: R_LARCH_TLS_LE_HI20_R R_LARCH_TLS_LE_LO12_R R_LARCH_TLS_LE_ADD_R 3. Implement Loongarch tls le model relax in ld. This change will add a loongarch_relax_tls_le function to relax tls le model. The instructions before and after relax change as follows: example: __thread int a = 1; before relax insn: lu12i.w $t0, 0 add.d $t0, $t0, $tp li.w $t1, 1 st.w $t1, $t0, 0 after relax insn: li.w $t1, 1 st.w $t1, $tp, 0 changjiachen (5): LoongArch: bfd: Add support for tls le relax. LoongArch: include: Add support for tls le relax. LoongArch: opcodes: Add support for tls le relax. LoongArch: gas: Add support for tls le relax. LoongArch: ld: Add support for tls le relax. bfd/bfd-in2.h | 4 + bfd/elfnn-loongarch.c | 74 +++++++++ bfd/elfxx-loongarch.c | 50 ++++++ bfd/libbfd.h | 3 + bfd/reloc.c | 6 + gas/config/tc-loongarch.c | 12 +- gas/testsuite/gas/loongarch/reloc.d | 18 +++ gas/testsuite/gas/loongarch/reloc.s | 11 ++ include/elf/loongarch.h | 13 ++ ld/testsuite/ld-loongarch-elf/old-tls-le.s | 19 +++ .../relax-bound-check-tls-le.s | 48 ++++++ .../ld-loongarch-elf/relax-check-tls-le.s | 43 ++++++ ld/testsuite/ld-loongarch-elf/relax-tls-le.s | 17 ++ ld/testsuite/ld-loongarch-elf/relax.exp | 146 +++++++++++++++++- .../tls-relax-compatible-check-old.s | 39 +++++ opcodes/loongarch-opc.c | 1 + 16 files changed, 501 insertions(+), 3 deletions(-) create mode 100644 ld/testsuite/ld-loongarch-elf/old-tls-le.s create mode 100644 ld/testsuite/ld-loongarch-elf/relax-bound-check-tls-le.s create mode 100644 ld/testsuite/ld-loongarch-elf/relax-check-tls-le.s create mode 100644 ld/testsuite/ld-loongarch-elf/relax-tls-le.s create mode 100644 ld/testsuite/ld-loongarch-elf/tls-relax-compatible-check-old.s