From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 56A063858409 for ; Thu, 16 Nov 2023 11:19:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 56A063858409 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 56A063858409 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700133568; cv=none; b=dNZZaDq24Up02aSLdg7otZed+mlHA7oghYYPzF/YuODHTwklrTGgGVs8kqSvQjR+iOharcggOEjBf7K0U2izLCnBLixftrm8Y42dcKVbfCG/hQmL4ZJgg6NU8almFgPaQOey/3aNL/GUXat9DBOgfO4Yduh7nlGY1HvufPCAX6w= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700133568; c=relaxed/simple; bh=HCaO7awimZ3bwchkBmyQoo8eo0AhRchF3mtG2A72ziU=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=HoASVxNbj/AXFnIlh288ryrgg4+GDm5UXebrgxcHlJJT2W4ZOFB7PXJ55Mt8UC0kJJvO5t3Bq/B8I5KepAfETcj5jJi/yygeyeIWC7uDOwOe0c4YMPGIVEGlov83aHmSLjYfzSOa2rXn19vCOhc9Tb7ZO2ukKIo/TsRSaNguOV0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from loongson.cn (unknown [10.2.6.5]) by gateway (Coremail) with SMTP id _____8Cx2eq8+lVlkYc6AA--.44484S3; Thu, 16 Nov 2023 19:19:24 +0800 (CST) Received: from 5.5.5 (unknown [10.2.6.5]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Ax3ty2+lVlTg5EAA--.17299S8; Thu, 16 Nov 2023 19:19:23 +0800 (CST) From: mengqinggang To: binutils@sourceware.org Cc: xuchenghua@loongson.cn, chenglulu@loongson.cn, liuzhensong@loongson.cn, xry111@xry111.site, i.swmail@xen0n.name, maskray@google.com, mengqinggang Subject: [PATCH v2 6/6] LoongArch: Add more relaxation testcases Date: Thu, 16 Nov 2023 19:19:16 +0800 Message-Id: <20231116111916.3648176-7-mengqinggang@loongson.cn> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231116111916.3648176-1-mengqinggang@loongson.cn> References: <20231116111916.3648176-1-mengqinggang@loongson.cn> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID:AQAAf8Ax3ty2+lVlTg5EAA--.17299S8 X-CM-SenderInfo: 5phqw15lqjwttqj6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBj93XoWxWw1rGrWkGrW3GF48Jr45twc_yoWruw13p3 43Zr4SkF48AF1DJr9xGay3Xas8Gan7Kryxuas7tr409Fs5WryxXF40yr9xXFnxJ3y5Wryj vF1Iq3W5WFs8XwcCm3ZEXasCq-sJn29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUUkab4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r1Y6r17M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Xr0_Ar1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AK xVW8Jr0_Cr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12xvs2x26I8E6xACxx 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1q6rW5McIj6I8E87Iv 67AKxVWxJVW8Jr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JMxAIw28Icx kI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2Iq xVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8ZwCIc40Y0x0EwIxGrwCI42 IY6xIIjxv20xvE14v26ryj6F1UMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwCI42IY 6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Cr0_Gr1UMIIF0xvEx4A2js IEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x07jUSdgUUUUU= X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,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 List-Id: 1. .so relaxation testcase 2. ld --no-relax testcase 3. segment alignment testcase --- .../ld-loongarch-elf/relax-segment-max.s | 12 +++ .../ld-loongarch-elf/relax-segment-min.s | 12 +++ ld/testsuite/ld-loongarch-elf/relax-so.s | 4 + ld/testsuite/ld-loongarch-elf/relax.exp | 80 +++++++++++++++++-- 4 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 ld/testsuite/ld-loongarch-elf/relax-segment-max.s create mode 100644 ld/testsuite/ld-loongarch-elf/relax-segment-min.s create mode 100644 ld/testsuite/ld-loongarch-elf/relax-so.s diff --git a/ld/testsuite/ld-loongarch-elf/relax-segment-max.s b/ld/testsuite/ld-loongarch-elf/relax-segment-max.s new file mode 100644 index 00000000000..df15d4cab09 --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/relax-segment-max.s @@ -0,0 +1,12 @@ +# The .align may cause overflow because deleting nops. + .text # 0x120004000 + .align 3 + la.local $r12, .L1 + +# .fill 0x1f7ffc # max fill without overflow, .data address is 0x120200000 +# .fill 0x1f8000 # min fill with overflow, .data address is 0x120204000 + .fill 0x1fbff4 # max fill with overflow, .data address is 0x120204000 + + .data +.L1: + .byte 2 diff --git a/ld/testsuite/ld-loongarch-elf/relax-segment-min.s b/ld/testsuite/ld-loongarch-elf/relax-segment-min.s new file mode 100644 index 00000000000..476b9fba78c --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/relax-segment-min.s @@ -0,0 +1,12 @@ +# The .align may cause overflow because deleting nops. + .text # 0x120004000 + .align 3 + la.local $r12, .L1 + +# .fill 0x1f7ffc # max fill without overflow, .data address is 0x120200000 + .fill 0x1f8000 # min fill with overflow, .data address is 0x120204000 +# .fill 0x1fbff4 # max fill with overflow, .data address is 0x120204000 + + .data +.L1: + .byte 2 diff --git a/ld/testsuite/ld-loongarch-elf/relax-so.s b/ld/testsuite/ld-loongarch-elf/relax-so.s new file mode 100644 index 00000000000..01a404a8b47 --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/relax-so.s @@ -0,0 +1,4 @@ +.text +.align 2 +.L1: + la.local $r12, .L1 diff --git a/ld/testsuite/ld-loongarch-elf/relax.exp b/ld/testsuite/ld-loongarch-elf/relax.exp index 7ff876d7914..24d79ed5c20 100644 --- a/ld/testsuite/ld-loongarch-elf/relax.exp +++ b/ld/testsuite/ld-loongarch-elf/relax.exp @@ -22,7 +22,7 @@ if [istarget loongarch64-*-*] { if [isbuild loongarch64-*-*] { - set testname "loongarch relax build" + set testname "loongarch relax .exe build" set pre_builds [list \ [list \ "$testname" \ @@ -39,17 +39,87 @@ if [istarget loongarch64-*-*] { if [file exist "tmpdir/relax"] { set objdump_output [run_host_cmd "objdump" "-d tmpdir/relax"] if { [ regexp ".*pcaddi.*pcaddi.*" $objdump_output] } { - pass "loongarch relax" + pass "loongarch relax .exe" } { - fail "loongarch relax" + fail "loongarch relax .exe" } } + + set testname "loongarch ld --no-relax build" + set pre_builds [list \ + [list \ + "$testname" \ + "-Wl,--no-relax" \ + "" \ + {relax.s} \ + {} \ + "norelax" \ + ] \ + ] + + run_cc_link_tests $pre_builds + + if [file exist "tmpdir/norelax"] { + set objdump_output [run_host_cmd "objdump" "-d tmpdir/norelax"] + if { [ regexp ".*pcaddi.*" $objdump_output] } { + fail "loongarch ld --no-relax" + } { + pass "loongarch ld --no-relax" + } + } + + run_ld_link_tests \ + [list \ + [list \ + "loongarch relax .so build" \ + "-shared -e 0x0" "" \ + "" \ + {relax-so.s} \ + {} \ + "relax-so" \ + ] \ + ] + + if [file exist "tmpdir/relax-so"] { + set objdump_output [run_host_cmd "objdump" "-d tmpdir/relax-so"] + if { [ regexp ".*pcaddi.*" $objdump_output] } { + pass "loongarch relax .so" + } { + fail "loongarch relax .so" + } + } + + # If symbol in data segment, offset need to sub segment align to prevent + # overflow. + run_ld_link_tests \ + [list \ + [list \ + "loongarch relax segment alignment min" \ + "-e0 -Ttext 0x120004000 -pie -z relro" "" \ + "" \ + {relax-segment-min.s} \ + {} \ + "relax-segment-min" \ + ] \ + ] + + run_ld_link_tests \ + [list \ + [list \ + "loongarch relax segment alignment max" \ + "-e0 -Ttext 0x120004000 -pie -z relro" "" \ + "" \ + {relax-segment-max.s} \ + {} \ + "relax-segment-max" \ + ] \ + ] } run_ld_link_tests \ [list \ [list \ - "relax-align" \ + "loongarch relax-align" \ "-e 0x0 -z relro" "" \ "" \ {relax-align.s} \ @@ -64,7 +134,7 @@ if [istarget loongarch64-*-*] { run_ld_link_tests \ [list \ [list \ - "uleb128" \ + "loongarch uleb128" \ "-e 0x0" "" \ "" \ {uleb128.s} \ -- 2.36.0