aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2021-02-18 14:43:14 +1030
committerAlan Modra <amodra@gmail.com>2021-02-19 13:49:15 +1030
commit2f973f134d7752cbc662ec65da8ad8bbe4c6fb8f (patch)
tree43eca27a7a11557b325be3d06291acb72fcf8fb1 /ld
parent0be51eb4c363bea9a550392bf58c0e497403fff2 (diff)
downloadgdb-2f973f134d7752cbc662ec65da8ad8bbe4c6fb8f.zip
gdb-2f973f134d7752cbc662ec65da8ad8bbe4c6fb8f.tar.gz
gdb-2f973f134d7752cbc662ec65da8ad8bbe4c6fb8f.tar.bz2
Wrong ELF class plugin vs. gcc ld version
When building 32-bit binutils with CC="gcc -m32" CXX="g++ -m32" we can fail the gcc ld version test due to an error attempting to load a 64-bit plugin into 32-bit ld-new. This results in bogus errors about "Your compiler driver ignores -B when choosing ld." * testsuite/lib/ld-lib.exp: Whitespace. (load_common_lib): Expand single use and delete this proc. (run_host_cmd): Use -fno-lto when getting gcc's ld version. Use -B for clang too.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog7
-rw-r--r--ld/testsuite/lib/ld-lib.exp144
2 files changed, 79 insertions, 72 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index b7c7bbb..9d16c30 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,10 @@
+2021-02-19 Alan Modra <amodra@gmail.com>
+
+ * testsuite/lib/ld-lib.exp: Whitespace.
+ (load_common_lib): Expand single use and delete this proc.
+ (run_host_cmd): Use -fno-lto when getting gcc's ld version.
+ Use -B for clang too.
+
2021-02-18 Andrew Burgess <andrew.burgess@embecosm.com>
* testplugin.c (record_read_length): Remove debug fprintf.
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index 4a08617..9febe28 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -18,12 +18,7 @@
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
-proc load_common_lib { name } {
- global srcdir
- load_file $srcdir/../../binutils/testsuite/lib/$name
-}
-
-load_common_lib binutils-common.exp
+load_file $srcdir/../../binutils/testsuite/lib/binutils-common.exp
# Returns 1 if the gcc for the target is at least version MAJOR.MINOR
# Returns 0 otherwise.
@@ -108,19 +103,24 @@ proc run_host_cmd { prog command } {
set prog $gccexe
}
set gccexe [string replace $gccexe 0 [string last "/" $gccexe] ""]
- if {[string match "*cc*" $gccexe] || [string match "*++*" $gccexe]} then {
+ if {[string match "*cc*" $gccexe] ||
+ [string match "*++*" $gccexe] ||
+ [string match "clang*" $gccexe]} then {
set gccflags "$gcc_B_opt $gccflags $ld_L_opt"
if {![info exists gcc_ld_B_opt_tested]} {
set gcc_ld_B_opt_tested 1
set ld_version_message [run_host_cmd "$ld" "--version"]
- set gcc_ld_version_message [run_host_cmd "$prog" "$gccflags -Wl,--version"]
+ set ver "-Wl,--version"
+ if [check_lto_available] {
+ set ver "-fno-lto $ver"
+ }
+ set gcc_ld_version_message [run_host_cmd "$prog" "$gccflags $ver"]
if {[string first $ld_version_message $gcc_ld_version_message] < 0} {
perror "************************************************************************"
perror "Your compiler driver ignores -B when choosing ld."
perror "You will not be testing the new ld in many of the following tests."
set gcc_ld_version [run_host_cmd "$prog" "$gccflags --print-prog-name=ld"]
if {![string match "" $gcc_ld_version] && ![string match "ld" $gcc_ld_version]} {
-
perror "It seems you will be testing $gcc_ld_version instead."
}
perror "************************************************************************"
@@ -175,13 +175,13 @@ proc default_ld_relocate { ld target objects } {
proc is_endian_output_format { object_flags } {
if {[string match "*-oformat binary*" $object_flags] || \
- [string match "*-oformat ieee*" $object_flags] || \
- [string match "*-oformat ihex*" $object_flags] || \
+ [string match "*-oformat ieee*" $object_flags] || \
+ [string match "*-oformat ihex*" $object_flags] || \
[string match "*-oformat netbsd-core*" $object_flags] || \
- [string match "*-oformat srec*" $object_flags] || \
+ [string match "*-oformat srec*" $object_flags] || \
[string match "*-oformat tekhex*" $object_flags] || \
[string match "*-oformat trad-core*" $object_flags] } then {
- return 0
+ return 0
} else {
return 1
}
@@ -254,7 +254,7 @@ proc default_ld_compile { cc source object } {
}
if [board_info [target_info name] exists cflags] {
- append flags " [board_info [target_info name] cflags]"
+ append flags " [board_info [target_info name] cflags]"
}
if [board_info [target_info name] exists multilib_flags] {
@@ -355,7 +355,7 @@ proc default_ld_nm { nm nmflags object } {
while { [gets $file line] != -1 } {
verbose "$line" 2
if [regexp "^(\[0-9a-fA-F\]+) \[a-zA-Z0-9\] \\.*(.+)$" $line whole value name] {
- set name [string trimleft $name "_"]
+ set name [string trimleft $name "_"]
verbose "Setting nm_output($name) to 0x$value" 2
set nm_output($name) 0x$value
}
@@ -376,12 +376,12 @@ proc ld_link_defsyms {} {
# ARM targets call __gccmain
if {[istarget arm*-*-*]} {
- append flags " --defsym __gccmain=0"
+ append flags " --defsym __gccmain=0"
}
# Windows targets need __main, some prefixed with underscore.
if {[istarget *-*-cygwin* ] || [istarget *-*-mingw*]} {
- append flags " --defsym __main=main --defsym ___main=main"
+ append flags " --defsym __main=main --defsym ___main=main"
}
# PowerPC EABI code calls __eabi.
@@ -579,13 +579,13 @@ proc run_ld_link_tests { ldtests args } {
set dump_prog ""
switch -- $action {
objdump
- { set dump_prog $objdump }
+ { set dump_prog $objdump }
nm
- { set dump_prog $nm }
+ { set dump_prog $nm }
readelf
- { set dump_prog $READELF }
+ { set dump_prog $READELF }
ld
- { set dump_prog "ld" }
+ { set dump_prog "ld" }
default
{
perror "Unrecognized action $action"
@@ -615,12 +615,12 @@ proc run_ld_link_tests { ldtests args } {
}
set env(LC_ALL) "C"
set cmd "$binary $progopts $binfile"
- set status [remote_exec host [concat sh -c [list "$cmd >dump.out 2>ld.stderr"]] "" "/dev/null"]
+ set status [remote_exec host [concat sh -c [list "$cmd >dump.out 2>ld.stderr"]] "" "/dev/null"]
send_log "$cmd\n"
- remote_upload host "ld.stderr"
- set comp_output [prune_warnings [file_contents "ld.stderr"]]
- remote_file host delete "ld.stderr"
- remote_file build delete "ld.stderr"
+ remote_upload host "ld.stderr"
+ set comp_output [prune_warnings [file_contents "ld.stderr"]]
+ remote_file host delete "ld.stderr"
+ remote_file build delete "ld.stderr"
if {[info exists old_lc_all]} {
set env(LC_ALL) $old_lc_all
@@ -639,8 +639,8 @@ proc run_ld_link_tests { ldtests args } {
if { [regexp_diff "dump.out" "$srcdir/$subdir/$dumpfile"] } then {
verbose "output is [file_contents "dump.out"]" 2
set failed 1
- remote_file build delete "dump.out"
- remote_file host delete "dump.out"
+ remote_file build delete "dump.out"
+ remote_file host delete "dump.out"
break
}
remote_file build delete "dump.out"
@@ -693,7 +693,7 @@ proc run_ld_link_exec_tests { ldtests args } {
# linker options are included in GCC spec files then we need the -specs
# option.
if [board_info [target_info name] exists cflags] {
- set board_cflags " [board_info [target_info name] cflags]"
+ set board_cflags " [board_info [target_info name] cflags]"
} else {
set board_cflags ""
}
@@ -857,7 +857,7 @@ proc run_cc_link_tests { ldtests } {
global STATIC_LDFLAGS
if [board_info [target_info name] exists cflags] {
- set board_cflags " [board_info [target_info name] cflags]"
+ set board_cflags " [board_info [target_info name] cflags]"
} else {
set board_cflags ""
}
@@ -900,28 +900,28 @@ proc run_cc_link_tests { ldtests } {
# Find actions related to error/warning processing.
switch -- $action {
- error
- {
- set check_ld(source) "regexp"
- set check_ld(regexp) $progopts
- set check_ld(terminal) 1
- }
- warning
- {
- set check_ld(source) "regexp"
- set check_ld(regexp) $progopts
- }
- error_output
- {
- set check_ld(source) "file"
- set check_ld(file) $progopts
- set check_ld(terminal) 1
- }
- warning_output
- {
- set check_ld(source) "file"
- set check_ld(file) $progopts
- }
+ error
+ {
+ set check_ld(source) "regexp"
+ set check_ld(regexp) $progopts
+ set check_ld(terminal) 1
+ }
+ warning
+ {
+ set check_ld(source) "regexp"
+ set check_ld(regexp) $progopts
+ }
+ error_output
+ {
+ set check_ld(source) "file"
+ set check_ld(file) $progopts
+ set check_ld(terminal) 1
+ }
+ warning_output
+ {
+ set check_ld(source) "file"
+ set check_ld(file) $progopts
+ }
}
}
@@ -988,15 +988,15 @@ proc run_cc_link_tests { ldtests } {
}
if { $check_ld(source) != "" } then {
- if { $ld_output == "" } then {
- verbose -log "Linker was expected to give error or warning"
- set failed 1
- }
+ if { $ld_output == "" } then {
+ verbose -log "Linker was expected to give error or warning"
+ set failed 1
+ }
} else {
- if { $ld_output != "" } then {
- verbose -log "Unexpected linker warning or error"
- set failed 1
- }
+ if { $ld_output != "" } then {
+ verbose -log "Unexpected linker warning or error"
+ set failed 1
+ }
}
}
@@ -1011,11 +1011,11 @@ proc run_cc_link_tests { ldtests } {
set dump_prog ""
switch -- $action {
objdump
- { set dump_prog $objdump }
+ { set dump_prog $objdump }
nm
- { set dump_prog $nm }
+ { set dump_prog $nm }
readelf
- { set dump_prog $READELF }
+ { set dump_prog $READELF }
error {}
warning {}
error_output {}
@@ -1082,7 +1082,7 @@ proc check_gc_sections_available { } {
# Some targets don't support gc-sections despite whatever's
# advertised by ld's options.
if { [istarget alpha-*-*]
- || [istarget bpf-*-*]
+ || [istarget bpf-*-*]
|| [istarget d30v-*-*]
|| [istarget dlx-*-*]
|| [istarget hppa*64-*-*]
@@ -1200,7 +1200,7 @@ proc check_compiler_available { } {
global CC
if {![info exists compiler_available_saved]} {
- if { [which $CC] == 0 } {
+ if { [which $CC] == 0 } {
set compiler_available_saved 0
return 0
}
@@ -1266,7 +1266,7 @@ proc check_lto_available { } {
global CC
if {![info exists lto_available_saved]} {
- if { ![check_gcc_plugin_enabled] } {
+ if { ![check_gcc_plugin_enabled] } {
set lto_available_saved 0
return 0
}
@@ -1309,7 +1309,7 @@ proc check_lto_fat_available { } {
global CC
if {![info exists lto_fat_available_saved]} {
- if { ![check_gcc_plugin_enabled] } {
+ if { ![check_gcc_plugin_enabled] } {
set lto_fat_available_saved 0
return 0
}
@@ -1352,7 +1352,7 @@ proc check_lto_shared_available { } {
global CC
if {![info exists lto_shared_available_saved]} {
- if { ![check_gcc_plugin_enabled] } {
+ if { ![check_gcc_plugin_enabled] } {
set lto_shared_available_saved 0
return 0
}
@@ -1418,7 +1418,7 @@ proc check_ifunc_available { } {
global CC
if {![info exists ifunc_available_saved]} {
- if { ![check_compiler_available] } {
+ if { ![check_compiler_available] } {
set ifunc_available_saved 0
return 0
}
@@ -1467,7 +1467,7 @@ proc check_ifunc_attribute_available { } {
global CC
if {![info exists ifunc_attribute_available_saved]} {
- if { ![check_compiler_available] } {
+ if { ![check_compiler_available] } {
set ifunc_attribute_available_saved 0
return 0
}
@@ -1514,7 +1514,7 @@ proc check_libdl_available { } {
global CC
if {![info exists libdl_available_saved]} {
- if { ![check_compiler_available] } {
+ if { ![check_compiler_available] } {
set libdl_available_saved 0
return 0
}
@@ -1550,7 +1550,7 @@ proc check_gnu2_tls_available { } {
global GNU2_CFLAGS
if {![info exists gnu2_tls_available_saved]} {
- if { ![check_compiler_available] || "$GNU2_CFLAGS" == "" } {
+ if { ![check_compiler_available] || "$GNU2_CFLAGS" == "" } {
set gnu2_tls_available_saved 0
return 0
}