forked from Imagelibrary/binutils-gdb
LoongArch: Add more relaxation testcases
1. .so relaxation testcase 2. ld --no-relax testcase 3. segment alignment testcase
This commit is contained in:
committed by
liuzhensong
parent
8338aecd23
commit
580a53dab4
12
ld/testsuite/ld-loongarch-elf/relax-segment-max.s
Normal file
12
ld/testsuite/ld-loongarch-elf/relax-segment-max.s
Normal 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
|
||||
12
ld/testsuite/ld-loongarch-elf/relax-segment-min.s
Normal file
12
ld/testsuite/ld-loongarch-elf/relax-segment-min.s
Normal 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
|
||||
4
ld/testsuite/ld-loongarch-elf/relax-so.s
Normal file
4
ld/testsuite/ld-loongarch-elf/relax-so.s
Normal file
@@ -0,0 +1,4 @@
|
||||
.text
|
||||
.align 2
|
||||
.L1:
|
||||
la.local $r12, .L1
|
||||
@@ -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} \
|
||||
|
||||
Reference in New Issue
Block a user