LoongArch: Add more relaxation testcases

1. .so relaxation testcase
2. ld --no-relax testcase
3. segment alignment testcase
This commit is contained in:
mengqinggang
2023-11-16 19:19:16 +08:00
committed by liuzhensong
parent 8338aecd23
commit 580a53dab4
4 changed files with 103 additions and 5 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,4 @@
.text
.align 2
.L1:
la.local $r12, .L1

View File

@@ -22,7 +22,7 @@
if [istarget loongarch64-*-*] { if [istarget loongarch64-*-*] {
if [isbuild loongarch64-*-*] { if [isbuild loongarch64-*-*] {
set testname "loongarch relax build" set testname "loongarch relax .exe build"
set pre_builds [list \ set pre_builds [list \
[list \ [list \
"$testname" \ "$testname" \
@@ -39,17 +39,87 @@ if [istarget loongarch64-*-*] {
if [file exist "tmpdir/relax"] { if [file exist "tmpdir/relax"] {
set objdump_output [run_host_cmd "objdump" "-d tmpdir/relax"] set objdump_output [run_host_cmd "objdump" "-d tmpdir/relax"]
if { [ regexp ".*pcaddi.*pcaddi.*" $objdump_output] } { 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 \ run_ld_link_tests \
[list \ [list \
[list \ [list \
"relax-align" \ "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 \
"loongarch relax-align" \
"-e 0x0 -z relro" "" \ "-e 0x0 -z relro" "" \
"" \ "" \
{relax-align.s} \ {relax-align.s} \
@@ -64,7 +134,7 @@ if [istarget loongarch64-*-*] {
run_ld_link_tests \ run_ld_link_tests \
[list \ [list \
[list \ [list \
"uleb128" \ "loongarch uleb128" \
"-e 0x0" "" \ "-e 0x0" "" \
"" \ "" \
{uleb128.s} \ {uleb128.s} \