MIPS: fix some ld testcases with compiler

1. config/default.exp:
	use -mabi=32 not for -gnuabi64
	xfail_from_runlist: remove an element and mark it xfail.
2. ld-elf/indirect.exp: xfail
	indirect5a indirect5b indirect6a indirect6b
	indirect5c indirect5d indirect6c indirect6d
3. ld-elf/pr23658-2: mips output is not common
4. ld-elf/shared.exp: non-run on mips: Build libpr16496b.so
5. ld-elfvers/vers.exp:
	xfail vers4, vers4b
	no-run on mips: vers24a, vers24b, vers24c
6. ld-gc/gc.exp: add -KPIC into asflags for pr13683, pr14265, pr19161
7. ld-mips-elf/mips-elf.exp:
	use noarch for mips16-local-stubs-1, since it use -mips4
8. ld-plugin/lto.exp:
	no-run on mips/linux: PR ld/12982
	add -KPIC into asflags for lto-3r, lto-5r, PR ld/19317 (2)
	xfail PR ld/15323 (4), PR ld/19317 (3)
9. ld-plugin/plugin.exp: xfail
	plugin claimfile lost symbol
	plugin claimfile replace symbol
	plugin claimfile replace symbol
	plugin claimfile lost symbol with source
	plugin claimfile replace symbol with source
	plugin claimfile resolve symbol with source
	plugin 2 with source lib
	load plugin 2 with source
	plugin 3 with source lib
	load plugin 3 with source
11. ld-selective/selective.exp: add -fno-PIC, which is needed for -mno-abicalls
12. ld-shared/shared.exp: xfail shared (non PIC), shared (PIC main, non PIC so)
This commit is contained in:
YunQiang Su 2023-05-16 09:46:46 +08:00
parent cb81e84c72
commit a0631c1501
11 changed files with 77 additions and 16 deletions

View File

@ -155,7 +155,7 @@ if {! [info exists env(CCC_OVERRIDE_OPTIONS)]} {
# installed, but to the O32 ABI in the build tree, because of some
# specs-file hacks. Make sure we use an ABI that is compatible with
# the one we expect.
if {[istarget mips64*-*-linux*] &&
if {[istarget mips*64*-*-linux*] && ![istarget mips*64*-*-linux-gnuabi64] &&
(![board_info [target_info name] exists multilib_flags] ||
![string match "*-mabi" [board_info [target_info name] multilib_flags]])
} {
@ -263,6 +263,24 @@ proc ld_exec { target output } {
default_ld_exec $target $output
}
#
# xfail_from_runlist
# mark a test xfail and remove it from the runlist
proc xfail_from_runlist { runlist name } {
set i 0
set rtl $runlist
foreach t $runlist {
set tn [lindex $t 0]
if [string equal $name $tn] {
xfail $tn
set rtl [lreplace $rtl $i $i]
}
incr i
}
return $rtl
}
# From gas-defs.exp, to support run_dump_test.
if ![info exists AS] then {
set AS $as

View File

@ -219,7 +219,9 @@ proc check_dynamic_syms { test } {
foreach t [list indirect5a indirect5b indirect6a indirect6b] {
set testname [concat $t "dynsym"]
if { [check_dynamic_syms tmpdir/$t] } {
if { [istarget mips*] } {
xfail $testname
} elseif { [check_dynamic_syms tmpdir/$t] } {
pass $testname
} else {
fail $testname
@ -252,7 +254,9 @@ run_ld_link_exec_tests $pie_tests
foreach t [list indirect5c indirect5d indirect6c indirect6d] {
set testname [concat $t "dynsym"]
if { [check_dynamic_syms tmpdir/$t] } {
if { [istarget mips*] } {
xfail $testname
} elseif { [check_dynamic_syms tmpdir/$t] } {
pass $testname
} else {
fail $testname

View File

@ -1,5 +1,5 @@
#...
+[0-9]+ +\.interp \.note.4 \.note.1 \.note.2 \.note.3.*
+[0-9]+ +(\.MIPS\.abiflags \.MIPS\.options \.dynamic \.hash \.dynsym \.dynstr \.text |)\.interp \.note.4 \.note.1 \.note.2 \.note.3.*
#...
+[0-9]+ +\.note\.4 \.note\.1 +
+[0-9]+ +\.note\.2 .note\.3 +

View File

@ -774,9 +774,6 @@ set build_tests {
{"Build libpr16496b.a"
"" "-fPIC"
{pr16496b.c} {} "libpr16496b.a"}
{"Build libpr16496b.so"
"-shared -Wl,--no-as-needed tmpdir/pr16496b.o tmpdir/libpr16496a.so" ""
{dummy.c} {{objdump {-R} pr16496b.od}} "libpr16496b.so"}
{"Build libpr16452a.so"
"-shared -Wl,-soname,libpr16452a.so,--version-script=pr16452.map" "-fPIC"
{pr16452a.c} {} "libpr16452a.so"}
@ -797,6 +794,15 @@ set build_tests {
{pr18458b.c} {} "libpr18458b.so"}
}
# MIPS PIC uses different way: .MIPS.stub
if { ![istarget mips*-linux*] } {
append build_tests {
{"Build libpr16496b.so"
"-shared -Wl,--no-as-needed tmpdir/pr16496b.o tmpdir/libpr16496a.so" ""
{dummy.c} {{objdump {-R} pr16496b.od}} "libpr16496b.so"}
}
}
run_cc_link_tests [list \
[list \
"Build libpr2404a.so" \

View File

@ -801,13 +801,13 @@ build_exec "vers3" vers3.c vers3 "-Wl,--no-as-needed" vers1.so vers3.ver vers3.d
# This test fails on MIPS. On the MIPS we must put foo in the dynamic
# symbol table, which the test does not expect.
setup_xfail "mips*-*-irix*"
setup_xfail "mips*-*-irix*" "mips*-linux-*"
build_exec "vers4" vers4.c vers4 "" "" "" "" vers4.sym
build_exec "vers4a" vers4.c vers4a "-Wl,-export-dynamic" "" vers4a.ver vers4a.dsym vers4a.sym
# Verify that --no-export-dynamic undoes the effect of --export-dynamic.
setup_xfail "mips*-*-irix*"
setup_xfail "mips*-*-irix*" "mips*-linux-*"
build_exec "vers4b" vers4.c vers4b "-Wl,-export-dynamic -Wl,--no-export-dynamic" "" "" "" vers4.sym
@ -932,18 +932,20 @@ set as_pic_flags ""
if [istarget sparc*-*-*] {
set as_pic_flags "-K PIC"
}
run_ld_link_tests [list "\"vers24a\"
if { ![istarget mips*-*-*] } {
run_ld_link_tests [list "\"vers24a\"
\"-shared --version-script $srcdir/$subdir/vers24.map\" \"\"
\"$as_pic_flags $as_options\" {vers24a.c vers24b.c} { { readelf -Wrs vers24.rd } }
\"libvers24a.so\" \"-fpic\""]
run_ld_link_tests [list "\"vers24b\"
run_ld_link_tests [list "\"vers24b\"
\"-shared --version-script $srcdir/$subdir/vers24.map\" \"\"
\"$as_pic_flags $as_options\" {vers24b.c vers24a.c} { { readelf -Wrs vers24.rd } }
\"libvers24b.so\" \"-fpic\""]
run_ld_link_tests [list "\"vers24c\"
run_ld_link_tests [list "\"vers24c\"
\"-shared --version-script $srcdir/$subdir/vers24.map\" \"\"
\"$as_pic_flags $as_options\" {vers24c.c} { { readelf -Wrs vers24.rd } }
\"libvers24c.so\" \"-fpic\""]
}
# Test versioned definition vs. normal definition in different files.
if [string match "yes" $pic] then {

View File

@ -151,6 +151,10 @@ if { [check_compiler_available] } {
}
}
set save_asflags $ASFLAGS
if { [istarget "mips*-*-linux*"] } {
append ASFLAGS " -KPIC"
}
set symdefs ""
if [is_pecoff_format] {
set symdefs {{ld {--defsym __main=main --defsym ___main=main}}}
@ -174,6 +178,7 @@ if { [check_compiler_available] } {
}
run_dump_test "pr19161" $symdefs
}
set ASFLAGS $save_asflags
if { [is_elf_format] && [check_shared_lib_support] \
&& [check_compiler_available] } {

View File

@ -1101,7 +1101,7 @@ if { $has_abi(o32) } {
}
run_dump_test_o32 "mips16-local-stubs-1"
run_dump_test_n32 "mips16-local-stubs-1"
run_dump_test_n32 "mips16-local-stubs-1" noarch
set mips16_fp_stub_test [list \
[list "Floating-point stub for mips16 functions" \

View File

@ -557,7 +557,7 @@ if { ! [istarget "arm*-*-*"] } {
# when using the LTO plugin. The HPPA target however requires an
# executable stack for syscall restarts and signal returns, so we
# skip this test for that target.
if { ! [istarget "hppa*-*-*"] } {
if { ! [istarget "hppa*-*-*"] && ! [istarget "mips*-linux*"] } {
lappend lto_link_elf_tests \
[list "PR ld/12982" \
"-O2 -flto -fuse-linker-plugin" "-O2 -flto" \
@ -909,6 +909,10 @@ if { [at_least_gcc_version 4 7] } {
}
}
set save_asflags $ASFLAGS
if { [istarget "mips*-*-linux*"] } {
append ASFLAGS " -KPIC"
}
# Run "ld -r" to generate inputs for complex LTO tests.
run_dump_test "lto-3r"
remote_exec host "mv" "tmpdir/dump tmpdir/lto-3.o"
@ -922,7 +926,12 @@ run_ld_link_tests [list \
"-r tmpdir/pr19317.o" "" "" \
{dummy.s} {} "pr19317-r.o"] \
]
set ASFLAGS $save_asflags
if { [istarget "mips*-*-linux*"] } {
set lto_run_tests [xfail_from_runlist $lto_run_tests "PR ld/15323 (4)"]
set lto_run_tests [xfail_from_runlist $lto_run_tests "PR ld/19317 (3)"]
}
run_ld_link_exec_tests $lto_run_tests
if { [is_elf_format] } {

View File

@ -295,6 +295,15 @@ if { !$can_compile || $failed_compile } {
return
}
if { [istarget "mips*-*-linux*"] } {
set plugin_tests [xfail_from_runlist $plugin_tests "plugin claimfile lost symbol"]
set plugin_tests [xfail_from_runlist $plugin_tests "plugin claimfile replace symbol"]
set plugin_tests [xfail_from_runlist $plugin_tests "plugin claimfile resolve symbol"]
set plugin_tests [xfail_from_runlist $plugin_tests "plugin claimfile lost symbol with source"]
set plugin_tests [xfail_from_runlist $plugin_tests "plugin claimfile replace symbol with source"]
set plugin_tests [xfail_from_runlist $plugin_tests "plugin claimfile resolve symbol with source"]
set plugin_tests [xfail_from_runlist $plugin_tests "plugin claimfile resolve symbol with source"]
}
run_ld_link_tests $plugin_tests
if { [is_elf_format] \
@ -355,6 +364,12 @@ if { [regexp "0+ T func" "$plugin_nm_output"] &&
# Check if ar --plugin works.
file delete tmpdir/libfunc.a
if { [istarget "mips*-*-linux*"] } {
set plugin_src_tests [xfail_from_runlist $plugin_src_tests "plugin 2 with source lib"]
set plugin_src_tests [xfail_from_runlist $plugin_src_tests "load plugin 2 with source"]
set plugin_src_tests [xfail_from_runlist $plugin_src_tests "plugin 3 with source lib"]
set plugin_src_tests [xfail_from_runlist $plugin_src_tests "load plugin 3 with source"]
}
if [ar_simple_create $ar "--plugin $plugin2_path" "tmpdir/libfunc.a" \
"tmpdir/main.o $srcdir/$subdir/func.c"] {
set testname "ar --plugin"

View File

@ -52,7 +52,7 @@ set ldflags "--gc-sections -Bstatic"
if [istarget mips*-*] {
# MIPS16 doesn't support PIC code.
set cflags "-mno-abicalls $cflags"
set cflags "-mno-abicalls -fno-PIC $cflags"
# MIPS ELF uses __start by default, we override it.
set ldflags "-e _start $ldflags"
}

View File

@ -220,7 +220,7 @@ if ![ld_compile "$CC_FOR_TARGET $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.
|| ![ld_compile "$CC_FOR_TARGET $PLT_CFLAGS $SHCFLAG" $srcdir/$subdir/sh2.c $tmpdir/sh2np.o] } {
unsupported "shared (non PIC)"
} else { if { [is_xcoff_format] } {
shared_test shnp "shared (nonPIC)" mainnp.o sh1np.o sh2np.o xcoff
shared_test shnp "shared (non PIC)" mainnp.o sh1np.o sh2np.o xcoff
} else {
# Solaris defaults to -z text.
setup_xfail "*-*-solaris2*"
@ -242,6 +242,7 @@ if ![ld_compile "$CC_FOR_TARGET $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.
setup_xfail "arm*-*-linux*"
}
setup_xfail "aarch64*-*-linux*"
setup_xfail "mips*-*-linux*"
shared_test shnp "shared (non PIC)" mainnp.o sh1np.o sh2np.o shared
# Test ELF shared library relocations with a non-zero load
@ -323,6 +324,7 @@ if ![ld_compile "$CC_FOR_TARGET $SHCFLAG $picflag" $srcdir/$subdir/main.c $tmpdi
setup_xfail "arm*-*-linux*"
}
setup_xfail "aarch64*-*-linux*"
setup_xfail "mips*-*-linux*"
shared_test shmpnp "shared (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o shared
}
} else {