From patchwork Sat Dec 2 06:53:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: changjiachen X-Patchwork-Id: 172746 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp1619021vqy; Fri, 1 Dec 2023 22:55:22 -0800 (PST) X-Google-Smtp-Source: AGHT+IH8gODFDCHan+ZAmNnoFtlKjIpoCfSPGCvhiXxi9J6CGyQXeNyxb/c6Uy+d3l4DE2VAp+oc X-Received: by 2002:ac8:7f11:0:b0:425:4554:ee53 with SMTP id f17-20020ac87f11000000b004254554ee53mr225310qtk.64.1701500122264; Fri, 01 Dec 2023 22:55:22 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1701500122; cv=pass; d=google.com; s=arc-20160816; b=lkC4ZFvH4HzZPyQ2BlytmTNpc8U8ic6mAC//cQdum/NTruscubVbaQBnO2k3s8RP7J hhIyVqy10KrAi/YzIMV3xOPVxKpABS5XMomoqn1j3Q2G9o1r55dxWJHwbOHr8myqA/rW u/76KoExL3jkRYsXPVGWE9ujlrihrtlzE2GQS3djEeHLCTNC2ISZLqCVAaBupO1A2ksu 5AzwWqZwgSXrCVMIKZknOjd47Sc5djehn4NuUgvzjtC7wcMB6zpXn4HBVM7EcuuOJMpA YwiYG492MICgxHMDDViwtjSUA3X9blZKFc3+q5f5JKLyzhcDmQqh/XSXijlPcui5ykFw ZVDw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:arc-filter:dmarc-filter:delivered-to; bh=4eS8b/jgEjtXTc7J3HNOqPY7OMNsZPuu8JtZ9+8NLsI=; fh=uTF/VfpCAq2GtcL5NdCKul3VKQPlBSDYmUlZE/0CcYM=; b=PGwJYIMKap3QkCAKxvMNSqHQFrXIXBaU/DQakr+mtzaVPtDB5JF73Y5pbgeAnrJ5zz 2z7iszkEtY2ga568VviyJodPoDBZjhq5sACCmaQ+2X06AF62SnN4W1JeDHAy7Q/nLfff KEHLIGMevCpPwELtXPzktpnYX3AuJTkzJJ6jkifwAYQF7pPpTvZNUKFcav3dkLMwb04d H8dJwHs6siogtpfjHulD8vDIw6acLQFwzuU1wPVM/5UyMr3AIL44OV5oel9Oed+X9SCL Fp96x9qkx5SiGVgWLeyiq1gOJnvfQN+wgYKTJLQoPu0KUDMYJua8mhj1d9G6WfAFSj5g 7SLg== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=xupt.edu.cn Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id ca10-20020a05622a1f0a00b00423edbc9e4csi5603751qtb.609.2023.12.01.22.55.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Dec 2023 22:55:22 -0800 (PST) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; arc=pass (i=1); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=xupt.edu.cn Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 15B133861847 for ; Sat, 2 Dec 2023 06:55:12 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-m92251.xmail.ntesmail.com (mail-m92251.xmail.ntesmail.com [103.126.92.251]) by sourceware.org (Postfix) with ESMTPS id C275A3857C4B for ; Sat, 2 Dec 2023 06:54:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C275A3857C4B 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 C275A3857C4B Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=103.126.92.251 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701500044; cv=none; b=vdq1bkm2wTAJzCT7vi9c5hFigmdjdjKn6pgDw0hB91ehAmH4v8UUlyHux7v//tZ+hdNAV1b/d3YnKMqxEMtkcu8AkbJzjsZYLz9Pc5NAeBwB+YL/QXHi/wP/1ORFN2f2o6XdOVSH5R0KrV2X3aBYgf68RLjBE9YvLIkFqudh0R8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701500044; c=relaxed/simple; bh=uBPgK62wOJ/HfJEE7SmuLAk5RNcXcQlUr4zyJgDnnLs=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=aSK/QWetelpUSAdPMm/hJKhFUL5yQu9DWEO4sEGKJgXROAVhOtL6uqQuubM09kKLYsVuZMDhBJhtM743A5IRxPxOaSjk0GrF6Vxu5EDkDbOnbqyMBcXbfHNcN546ZiXEuJCrR2D0a/cvCemPl8j68v5RbhJayLLs5ChiCCsbkgc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from ubuntu.localdomain (unknown [223.104.204.129]) by mail-m121144.qiye.163.com (Hmail) with ESMTPA id 6F45AAC008D; Sat, 2 Dec 2023 14:53:55 +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, mengqinggang@loongson.cn, changjiachen Subject: [PATCH v2 5/5] LoongArch: ld: Add support for tls le relax. Date: Sat, 2 Dec 2023 14:53:34 +0800 Message-Id: <20231202065334.25904-6-changjiachen@stu.xupt.edu.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231202065334.25904-1-changjiachen@stu.xupt.edu.cn> References: <20231202065334.25904-1-changjiachen@stu.xupt.edu.cn> MIME-Version: 1.0 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWS1ZQUlXWQ8JGhUIEh9ZQVlDHR8YVh0eQkkZGR5DGUhISVUTARMWGhIXJBQOD1 lXWRgSC1lBWUlJSFVKS09VSUtPVUpJQllXWRYaDxIVHRRZQVlPS0hVSkpLSEpDVUpLS1VLWQY+ X-HM-Tid: 0a8c294e2453b039kuuu6f45aac008d X-HM-MType: 10 X-HM-Sender-Digest: e1kMHhlZQR0aFwgeV1kSHx4VD1lBWUc6MC46PAw6PjwyNAsdMBgUFxoJ Ix4aCgJVSlVKTEtKTktLS0hNQ05KVTMWGhIXVRgTGhUcERIaGBMeFTsIDw5VAw4LD1UeHw5VGBVF WVdZEgtZQVlJSUhVSktPVUlLT1VKSUJZV1kIAVlBSklNTko3Bg++ X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham 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+ouuuleilei=gmail.com@sourceware.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784152192170217947 X-GMAIL-MSGID: 1784152192170217947 Add tls le relax related testsuites in ld. The new test cases are mainly tested in three aspects: 1. tls le relax function correctness test. 2. tls le relax boundary check test. 3. tls le relax function compatibility test. ld/testsuite/ChangeLog: * ld/testsuite/ld-loongarch-elf/relax.exp: Modify test. * ld/testsuite/ld-loongarch-elf/old-tls-le.s: New test. * ld/testsuite/ld-loongarch-elf/relax-bound-check-tls-le.s: Likewise. * ld/testsuite/ld-loongarch-elf/relax-check-tls-le.s: Likewise. * ld/testsuite/ld-loongarch-elf/relax-tls-le.s: Likewise. * ld/testsuite/ld-loongarch-elf/tls-relax-compatible-check-old.s: Likewise. --- 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 +++++ 6 files changed, 311 insertions(+), 1 deletion(-) 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 diff --git a/ld/testsuite/ld-loongarch-elf/old-tls-le.s b/ld/testsuite/ld-loongarch-elf/old-tls-le.s new file mode 100644 index 00000000000..290c4c61c18 --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/old-tls-le.s @@ -0,0 +1,19 @@ + .text + .globl aa + .section .tbss,"awT",@nobits + .align 2 + .type aa, @object + .size aa, 4 +aa: + .space 4 + .text + .align 2 + .globl main + .type main, @function +main: + lu12i.w $r12,%le_hi20(aa) + ori $r12,$r12,%le_lo12(aa) + add.d $r12,$r12,$r2 + addi.w $r13,$r0,2 # 0x2 + stptr.w $r13,$r12,0 + diff --git a/ld/testsuite/ld-loongarch-elf/relax-bound-check-tls-le.s b/ld/testsuite/ld-loongarch-elf/relax-bound-check-tls-le.s new file mode 100644 index 00000000000..55e05fe12c2 --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/relax-bound-check-tls-le.s @@ -0,0 +1,48 @@ + .text + .globl count1 + .section .tbss,"awT",@nobits + .align 2 + .type count1, @object + .size count1, 4 +count1: + .space 0x400 + .globl count2 + .align 2 + .type count2, @object + .size count2, 4 +count2: + .space 0x400 + .globl count3 + .align 2 + .type count3, @object + .size count3, 4 +count3: + .space 0x400 + .globl count4 + .align 2 + .type count4, @object + .size count4, 4 +count4: + .space 4 + .text + .align 2 + .globl main + .type main, @function +main: + lu12i.w $r12,%tls_le_hi20(count1) + add.d $r12,$r12,$r2,%tprel_add(count1) + addi.w $r13,$r0,1 # 0x1 + st.w $r13,$r12,%tls_le_lo12(count1) + lu12i.w $r12,%tls_le_hi20(count2) + add.d $r12,$r12,$r2,%tprel_add(count2) + addi.w $r13,$r0,2 # 0x2 + st.w $r13,$r12,%tls_le_lo12(count2) + lu12i.w $r12,%tls_le_hi20(count3) + add.d $r12,$r12,$r2,%tprel_add(count3) + addi.w $r13,$r0,3 # 0x3 + st.w $r13,$r12,%tls_le_lo12(count3) + lu12i.w $r12,%tls_le_hi20(count4) + add.d $r12,$r12,$r2,%tprel_add(count4) + addi.w $r13,$r0,4 # 0x4 + st.w $r13,$r12,%tls_le_lo12(count4) + diff --git a/ld/testsuite/ld-loongarch-elf/relax-check-tls-le.s b/ld/testsuite/ld-loongarch-elf/relax-check-tls-le.s new file mode 100644 index 00000000000..fe564dd49e0 --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/relax-check-tls-le.s @@ -0,0 +1,43 @@ + .file "tls_relax_compatible_check_new.c" + .text + .globl new + .section .tbss,"awT",@nobits + .align 2 + .type new, @object + .size new, 4 +new: + .space 4 + .text + .align 2 + .globl main + .type main, @function +main: +.LFB0 = . + .cfi_startproc + addi.d $r3,$r3,-16 + .cfi_def_cfa_offset 16 + st.d $r1,$r3,8 + stptr.d $r22,$r3,0 + .cfi_offset 1, -8 + .cfi_offset 22, -16 + addi.d $r22,$r3,16 + .cfi_def_cfa 22, 0 + bl %plt(old) + lu12i.w $r12,%tls_le_hi20(new) + add.d $r12,$r12,$r2,%tprel_add(new) + addi.w $r13,$r0,2 # 0x2 + st.w $r13,$r12,%tls_le_lo12(new) + or $r12,$r0,$r0 + or $r4,$r12,$r0 + ld.d $r1,$r3,8 + .cfi_restore 1 + ldptr.d $r22,$r3,0 + .cfi_restore 22 + addi.d $r3,$r3,16 + .cfi_def_cfa_register 3 + jr $r1 + .cfi_endproc +.LFE0: + .size main, .-main + .ident "GCC: (GNU) 14.0.0 20230526 (experimental)" + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-loongarch-elf/relax-tls-le.s b/ld/testsuite/ld-loongarch-elf/relax-tls-le.s new file mode 100644 index 00000000000..1f8dcc3edda --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/relax-tls-le.s @@ -0,0 +1,17 @@ + .text + .globl a + .section .tbss,"awT",@nobits + .align 2 + .type a, @object + .size a, 4 +a: + .space 4 + .text + .align 2 + .globl main + .type main, @function +main: + lu12i.w $r12,%tls_le_hi20(a) + add.d $r12,$r12,$r2,%tprel_add(a) + addi.w $r13,$r0,1 # 0x1 + st.w $r13,$r12,%tls_le_lo12(a) diff --git a/ld/testsuite/ld-loongarch-elf/relax.exp b/ld/testsuite/ld-loongarch-elf/relax.exp index 7ff876d7914..1520cfc0dba 100644 --- a/ld/testsuite/ld-loongarch-elf/relax.exp +++ b/ld/testsuite/ld-loongarch-elf/relax.exp @@ -33,8 +33,90 @@ if [istarget loongarch64-*-*] { "relax" \ ] \ ] + set tls_relax_builds [list \ + [list \ + "tls_relax_builds" \ + "" \ + "" \ + {relax-tls-le.s} \ + {} \ + "relax-tls-le" \ + ] \ + ] + set tls_no_relax_builds [list \ + [list \ + "tls_no_relax_builds" \ + "-Wl,--no-relax" \ + "" \ + {relax-tls-le.s} \ + {} \ + "no-relax-tls-le" \ + ] \ + ] + + set relax_bound_check [list \ + [list \ + "relax_bound_check" \ + "" \ + "" \ + {relax-bound-check-tls-le.s} \ + {} \ + "relax-bound-check-tls-le" \ + ] \ + ] + set no_relax_bound_check [list \ + [list \ + "no_relax_bound_check" \ + "-Wl,--no-relax" \ + "" \ + {relax-bound-check-tls-le.s} \ + {} \ + "no-relax-bound-check-tls-le" \ + ] \ + ] + + set old_tls_le [list \ + [list \ + "old_tls_le" \ + "" \ + "" \ + {old-tls-le.s} \ + {} \ + "old-tls-le" \ + ] \ + ] + + set relax_compatible [list \ + [list \ + "relax_compatible" \ + "" \ + "" \ + {relax-check-tls-le.s tls-relax-compatible-check-old.s} \ + {} \ + "realx-compatible" \ + ] \ + ] + + set no_relax_compatible [list \ + [list \ + "no_relax_compatible" \ + "-Wl,--no-relax" \ + "" \ + {relax-check-tls-le.s tls-relax-compatible-check-old.s} \ + {} \ + "no-realx-compatible" \ + ] \ + ] + run_cc_link_tests $pre_builds + run_cc_link_tests $tls_relax_builds + run_cc_link_tests $tls_no_relax_builds + run_cc_link_tests $relax_bound_check + run_cc_link_tests $no_relax_bound_check + run_cc_link_tests $old_tls_le + run_cc_link_tests $relax_compatible + run_cc_link_tests $no_relax_compatible if [file exist "tmpdir/relax"] { set objdump_output [run_host_cmd "objdump" "-d tmpdir/relax"] @@ -44,8 +126,70 @@ if [istarget loongarch64-*-*] { fail "loongarch relax" } } - } + if [file exist "tmpdir/relax-tls-le"] { + set objdump_output1 [run_host_cmd "objdump" "-d tmpdir/relax-tls-le"] + if { [ regexp ".addi.*st.*" $objdump_output1] } { + pass "loongarch relax success" + } { + fail "loongarch relax fail" + } + } + if [file exist "tmpdir/no-relax-tls-le"] { + set objdump_output2 [run_host_cmd "objdump" "-d tmpdir/no-relax-tls-le"] + if { [ regexp ".*lu12i.*add.*addi.*st.*" $objdump_output2] } { + pass "loongarch no-relax success" + } { + fail "loongarch no-relax fail" + } + } + if [file exist "tmpdir/old-tls-le"] { + set objdump_output3 [run_host_cmd "objdump" "-d tmpdir/old-tls-le"] + if { [ regexp ".*lu12i.*ori.*add.*addi.*stptr.*" $objdump_output3] } { + pass "loongarch old tls le success" + } { + fail "loongarch old tls le fail" + } + + } + + if [file exist "tmpdir/realx-compatible"] { + if { [catch {exec tmpdir/realx-compatible} number]} { + fail "loongarch tls le relax compatible check fail" + } { + pass "loongarch tls le relax compatible check success" + } + } + + if [file exist "tmpdir/no-realx-compatible"] { + if { [catch {exec tmpdir/no-realx-compatible} number] } { + fail "loongarch tls le no-relax compatible check fail" + } { + pass "loongarch tls le no-relax compatible check success" + } + } + + + if [file exist "tmpdir/relax-bound-check-tls-le"] { + set objdump_output4 [run_host_cmd "objdump" "-d tmpdir/relax-bound-check-tls-le"] + if { [ regexp ".*lu12i.*add.*addi.*st.*" $objdump_output4] && \ + [ regexp ".addi.*st.*" $objdump_output4] } { + pass "loongarch no-relax success" + } { + fail "loongarch no-relax fail" + } + + } + if [file exist "tmpdir/no-relax-bound-check-tls-le"] { + set objdump_output5 [run_host_cmd "objdump" "-d tmpdir/no-relax-bound-check-tls-le"] + if { [ regexp ".*addi.*st.*" $objdump_output4] } { + pass "loongarch no-relax success" + } { + fail "loongarch no-relax fail" + } + } + + } run_ld_link_tests \ [list \ [list \ diff --git a/ld/testsuite/ld-loongarch-elf/tls-relax-compatible-check-old.s b/ld/testsuite/ld-loongarch-elf/tls-relax-compatible-check-old.s new file mode 100644 index 00000000000..9adb657a87d --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/tls-relax-compatible-check-old.s @@ -0,0 +1,39 @@ + .file "tls_relax_compatible_check_old.c" + .text + .globl older + .section .tbss,"awT",@nobits + .align 2 + .type older, @object + .size older, 4 +older: + .space 4 + .text + .align 2 + .globl old + .type old, @function +old: +.LFB0 = . + .cfi_startproc + addi.d $r3,$r3,-16 + .cfi_def_cfa_offset 16 + st.d $r22,$r3,8 + .cfi_offset 22, -8 + addi.d $r22,$r3,16 + .cfi_def_cfa 22, 0 + lu12i.w $r12,%le_hi20(older) + ori $r12,$r12,%le_lo12(older) + add.d $r12,$r12,$r2 + addi.w $r13,$r0,1 # 0x1 + stptr.w $r13,$r12,0 + nop + or $r4,$r12,$r0 + ld.d $r22,$r3,8 + .cfi_restore 22 + addi.d $r3,$r3,16 + .cfi_def_cfa_register 3 + jr $r1 + .cfi_endproc +.LFE0: + .size old, .-old + .ident "GCC: (GNU) 13.0.1 20230316 (experimental)" + .section .note.GNU-stack,"",@progbits