From cbca4458154ce81b67b8636af0940c3f867de383 Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Fri, 17 Oct 2014 13:26:56 +0200 Subject: [PATCH] Backport "Fix sysroot-tests, adding --print-sysroot" from master --- ld/ChangeLog | 7 ++++++ ld/ldlex.h | 1 + ld/lexsup.c | 7 ++++++ ld/testsuite/ChangeLog | 13 +++++++++++ ld/testsuite/ld-scripts/sysroot-prefix.exp | 37 ++++++++++++++++++------------ ld/testsuite/lib/ld-lib.exp | 14 +++++------ 6 files changed, 56 insertions(+), 23 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index bf06b64..cae1729 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2014-10-17 Hans-Peter Nilsson + + Backport "implement --print-sysroot in ld" from master + * ldlex.h (enum option_values): Add entry OPTION_PRINT_SYSROOT. + * lexsup.c (ld_options): Add entry for --print-sysroot. + (parse_args) : Print sysroot and exit early. + 2014-10-15 Tristan Gingold * configure: Regenerate. diff --git a/ld/ldlex.h b/ld/ldlex.h index 56cd121..e3e9b24 100644 --- a/ld/ldlex.h +++ b/ld/ldlex.h @@ -136,6 +136,7 @@ enum option_values #endif /* ENABLE_PLUGINS */ OPTION_DEFAULT_SCRIPT, OPTION_PRINT_OUTPUT_FORMAT, + OPTION_PRINT_SYSROOT, OPTION_IGNORE_UNRESOLVED_SYMBOL, OPTION_PUSH_STATE, OPTION_POP_STATE, diff --git a/ld/lexsup.c b/ld/lexsup.c index 3a1ea9e..4812c97 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -379,6 +379,8 @@ static const struct ld_option ld_options[] = EXACTLY_TWO_DASHES }, { {"print-output-format", no_argument, NULL, OPTION_PRINT_OUTPUT_FORMAT}, '\0', NULL, N_("Print default output format"), TWO_DASHES }, + { {"print-sysroot", no_argument, NULL, OPTION_PRINT_SYSROOT}, + '\0', NULL, N_("Print current sysroot"), TWO_DASHES }, { {"qmagic", no_argument, NULL, OPTION_IGNORE}, '\0', NULL, N_("Ignored for Linux compatibility"), ONE_DASH }, { {"reduce-memory-overheads", no_argument, NULL, @@ -960,6 +962,11 @@ parse_args (unsigned argc, char **argv) case OPTION_OFORMAT: lang_add_output_format (optarg, NULL, NULL, 0); break; + case OPTION_PRINT_SYSROOT: + if (*ld_sysroot) + puts (ld_sysroot); + xexit (0); + break; case OPTION_PRINT_OUTPUT_FORMAT: command_line.print_output_format = TRUE; break; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index c01990c..bcba42a 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2014-10-17 Hans-Peter Nilsson + + Backport from master + * ld-scripts/sysroot-prefix.exp: Log $ld_sysroot. Handle sysroot + == "/" as a separate sysroot-configuration with separable + test-types. + (sysroot_prefix_tests): Include all existing sysroot tests in + sysroot == "/" tests except exclude those where a --sysroot option + is not specified. + * lib/ld-lib.exp (check_sysroot_available): Rewrite to use + --print-sysroot instead of relying on error code from using + --sysroot=... Also, set $ld_sysroot. + 2014-10-15 Hans-Peter Nilsson Backport "="-ldscript-path-prefix changes from master. diff --git a/ld/testsuite/ld-scripts/sysroot-prefix.exp b/ld/testsuite/ld-scripts/sysroot-prefix.exp index cf434df..65c9f70 100644 --- a/ld/testsuite/ld-scripts/sysroot-prefix.exp +++ b/ld/testsuite/ld-scripts/sysroot-prefix.exp @@ -27,14 +27,21 @@ # present or not, with different arguments. # Find out if the linker supports sysroot; if it was configured -# "--with-sysroot X". We ignore that X can actually be set to -# interfere with the tests, as that's unlikely to be useful, and -# assume that the build-directory (aka. $base_dir) does not contain X. +# "--with-sysroot X" where X is a non-empty string. set with_sysroot [check_sysroot_available] -verbose -log "Has (non-empty) sysroot support: $with_sysroot" +verbose -log "Has (non-empty) sysroot support: $with_sysroot; \"$ld_sysroot\"" + +# We also need to know if the sysroot is "/" (a common use) as some of +# the tests prepend sysroot to the current directory and on most +# common systems "//dir/path" is handled as "/dir/path". +if {$ld_sysroot == "/"} { + # Use a modified test-subset for testing. + set with_sysroot 3 +} # Entries in the array-tables: -# 0: Testtype (1: only non-sysroot, 2: only sysroot, 3: either). +# 0: Testtype; an inclusive bitmask indicating that the test should run on a +# build configured for: 1: non-sysroot, 2: sysroot != "/", 4: sysroot == "/". # 1: Description, forming part of the dejagnu test-name. # 2: Replacement for @p@. # 3: Option to pass to linker (usually something with --sysroot). @@ -47,16 +54,16 @@ verbose -log "Has (non-empty) sysroot support: $with_sysroot" # description contains @cwd@, that will be replaced by "". set sysroot_prefix_tests { - {3 "plain -Lpath" "sysroot/" {} ""} - {3 "root-anchored but -Lpath" "/sysroot/" {} "cannot find"} - {3 "full-path" "@cwd@/sysroot/" {} ""} - {3 "root-anchored =-prefixed -Lpath" "=/sysroot/" {} "cannot find"} - {3 "full-path =-prefixed with empty" "=@cwd@/sysroot/" "--sysroot=" ""} - {3 "plain =-prefixed with empty" "=sysroot/" "--sysroot=" ""} - {2 "root-anchored but script outside sysroot" "/" "--sysroot=@cwd@/sysroot" "cannot find"} - {2 "root-anchored and script inside sysroot" "/sysroot/" "--sysroot=@cwd@" ""} - {2 "root-anchored =-prefixed script outside" "=/" "--sysroot=@cwd@/sysroot" ""} - {2 "root-anchored =-prefixed script inside" "=/sysroot/" "--sysroot=@cwd@" ""} + {7 "plain -Lpath" "sysroot/" {} ""} + {7 "root-anchored but -Lpath" "/sysroot/" {} "cannot find"} + {7 "full-path" "@cwd@/sysroot/" {} ""} + {7 "root-anchored =-prefixed -Lpath" "=/sysroot/" {} "cannot find"} + {7 "full-path =-prefixed with empty" "=@cwd@/sysroot/" "--sysroot=" ""} + {7 "plain =-prefixed with empty" "=sysroot/" "--sysroot=" ""} + {6 "root-anchored but script outside sysroot" "/" "--sysroot=@cwd@/sysroot" "cannot find"} + {6 "root-anchored and script inside sysroot" "/sysroot/" "--sysroot=@cwd@" ""} + {6 "root-anchored =-prefixed script outside" "=/" "--sysroot=@cwd@/sysroot" ""} + {6 "root-anchored =-prefixed script inside" "=/sysroot/" "--sysroot=@cwd@" ""} {2 "plain =-prefixed without but -Lpath" "=sysroot/" {} "cannot find"} {2 "full-path =-prefixed without" "=@cwd@/sysroot/" {} "cannot find"} {1 "plain =-prefixed -Lpath" "=sysroot/" {} ""} diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index ffdf805..7d2df22 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -1669,16 +1669,14 @@ proc check_plugin_api_available { } { return $plugin_api_available_saved } -# Returns true if the target ld supports sysroot. +# Sets ld_sysroot to the current sysroot (empty if not supported) and +# returns true if the target ld supports sysroot. proc check_sysroot_available { } { - global ld_sysroot_available_saved - global ld + global ld_sysroot_available_saved ld ld_sysroot if {![info exists ld_sysroot_available_saved]} { - # Check if ld supports --sysroot *other* than empty - # (non-sysroot linkers don't emit errors for --sysroot=""). - # The help-text by itself is no indication as it always lists --sysroot. - set status [remote_exec host $ld "--sysroot=ldxyzzy --help >/dev/null"] - if { [lindex $status 0] != 0 } { + # Check if ld supports --sysroot *other* than empty. + set ld_sysroot [string trimright [lindex [remote_exec host $ld "--print-sysroot"] 1]] + if { $ld_sysroot == "" } { set ld_sysroot_available_saved 0 } else { set ld_sysroot_available_saved 1 -- 2.7.4