]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
LoongArch: Add more relaxation testcases
authormengqinggang <mengqinggang@loongson.cn>
Thu, 16 Nov 2023 11:19:16 +0000 (19:19 +0800)
committerliuzhensong <liuzhensong@loongson.cn>
Fri, 17 Nov 2023 08:38:55 +0000 (16:38 +0800)
1. .so relaxation testcase
2. ld --no-relax testcase
3. segment alignment testcase

ld/testsuite/ld-loongarch-elf/relax-segment-max.s [new file with mode: 0644]
ld/testsuite/ld-loongarch-elf/relax-segment-min.s [new file with mode: 0644]
ld/testsuite/ld-loongarch-elf/relax-so.s [new file with mode: 0644]
ld/testsuite/ld-loongarch-elf/relax.exp

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 (file)
index 0000000..df15d4c
--- /dev/null
@@ -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 (file)
index 0000000..476b9fb
--- /dev/null
@@ -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 (file)
index 0000000..01a404a
--- /dev/null
@@ -0,0 +1,4 @@
+.text
+.align 2
+.L1:
+  la.local $r12, .L1
index 7ff876d7914a8b6e76b7a2e4e4de5b8b3ea00e1d..24d79ed5c20bb2953d656d8d57278891a032dcf6 100644 (file)
@@ -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} \