Still pending: libgomp-Testsuite patch 
https://gcc.gnu.org/ml/gcc-patches/2020-02/msg00207.html

This is the same fix – but for gcc/testsuite/.

To illustrate the problem again. Using remote testing
(here: modified target_compile, but DejaGNU's default_target_compile is 
likewise),
and using check_gc_sections_available, I get the following result without the 
fix:

call_remote  download <hostname> -print-prog-name=ld -print-prog-name=ld
Invoking the compiler as powerpc64le-none-linux-gnu-gcc … 
/scratch/…/default/gcc.d/-print-prog-name=ld
…
UNSUPPORTED: gcc.dg/special/gcsec-1.c

Which obvious fails both for uploading the flag as file and for compiling the
flag as filename.


WITH the patch, I get the expected:

Invoking the compiler as powerpc64le-none-linux-gnu-gcc … 
-fdiagnostics-urls=never  -print-prog-name=ld -I .
…
PASS: gcc.dg/special/gcsec-1.c (test for excess errors)
PASS: gcc.dg/special/gcsec-1.c execution test

I tested the attached patch for check_gc_sections_available thoroughly
– esp. via RUNTESTFLAGS="-v -v -v -v -v special.exp=gcsec-1.c"
w/ and w/o remote but also using, intermittently, some debugging "puts".

I also fixed check_effective_target_gld, check_effective_target_gas, 
check_runtime,
check_multi_dir, but tested them only lightly. (The first two are unused, the
others are only used by mips and arm.)
Regarding the '{ }' see below – or in the linked other patch. Without, only one
argument is actually passed.

OK for the trunk?

Tobias

On 2/4/20 4:49 PM, Tobias Burnus wrote:
DejaGNU uses in lib/target.exp's
   proc default_target_compile {source destfile type options}
uses the following.

When running locally, $source is simply used
as argument. However, when run remotely, it is tried to be uploaded
on the remote host – and otherwise skipped. That's fine if the
argument is an actual file – but not if it is a flag.

Hence, flags should be passed as $options not as $source.
Quoting now from DejaGNU's default_target_compile#:

    set sources ""
    if {[isremote host]} {
        foreach x $source {
            set file [remote_download host $x]
            if { $file eq "" } {
                warning "Unable to download $x to host."
                return "Unable to download $x to host."
            } else {
                append sources " $file"
            }
        }
    } else {
        set sources $source
    }

 * * *

FIRST, I think that affects the following calls, but I have not
checked. — I assume that moving it from the first to the last
argument should work and fix the "isremote" issue.

gcc/testsuite/gcc.target/arm/multilib.exp:    set gcc_output [${tool}_target_compile "--print-multi-directory $gcc_opts" "" "none" ""] gcc/testsuite/lib/target-supports.exp:    set gcc_output [${tool}_target_compile "-v" "" "none" ""] gcc/testsuite/lib/target-supports.exp:  set gcc_ld [lindex [${tool}_target_compile "-print-prog-name=ld" "" "none" ""] 0] gcc/testsuite/lib/target-supports.exp:  set gcc_as [lindex [${tool}_target_compile "-print-prog-name=as" "" "none" ""] 0] gcc/testsuite/lib/target-supports.exp:  set gcc_ld [lindex [${tool}_target_compile "-print-prog-name=ld" "" "none" ""] 0]

TODO: One should probably change this.


SECONDLY: I hit a very similar issue in libgomp, which I actually did debug.

In check_effective_target_offload_target_nvptx, one has something similar, namely:
  set gcc_output [libgomp_target_compile "-v $options" "" "none" ""]
This currently tries (w/o success) to upload the flags to the remote host and then
fails as the required "-v" flag fails (i.e. no input).

However, using "-v" as options argument does not work as seemingly only additional_flags= arguments are passed on. Additionally, if one does not only want to pass on the first
argument, curly braces are needed.

PATCH: The attached patch does this – and have successfully tested it both with local runs and with remote runs. (RUNTESTFLAGS="-v -v -v" did help a lot for studying the
behavior in both cases.)

OK for the trunk?

Cheers,

Tobias
	gcc/testsuite/
	* gcc.target/arm/multilib.exp (multilib_config): Pass flags to
	…_target_compile as (additional_flags=) option and not as source
	filename to make it work with remote execution.
	* lib/target-supports.exp (check_runtime, check_gc_sections_available,
	check_effective_target_gas, check_effective_target_gld): Likewise.

diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp b/gcc/testsuite/gcc.target/arm/multilib.exp
index 67d00266f6b..60b9edeebd0 100644
--- a/gcc/testsuite/gcc.target/arm/multilib.exp
+++ b/gcc/testsuite/gcc.target/arm/multilib.exp
@@ -40,7 +40,7 @@ proc multilib_config {profile} {
 proc check_multi_dir { gcc_opts multi_dir } {
     global tool
 
-    set gcc_output [${tool}_target_compile "--print-multi-directory $gcc_opts" "" "none" ""]
+    set gcc_output [${tool}_target_compile "" "" "none" "{additional_flags=--print-multi-directory $gcc_opts}"]
     if { [string match "$multi_dir\n" $gcc_output] } {
 	pass "multilibdir $gcc_opts $multi_dir"
     } else {
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 5377d7b11cb..5a18dbd85ea 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -260,7 +260,7 @@ proc check_runtime {prop args} {
 proc check_configured_with { pattern } {
     global tool
 
-    set gcc_output [${tool}_target_compile "-v" "" "none" ""]
+    set gcc_output [${tool}_target_compile "" "" "none" "additional_flags=-v"]
     if { [ regexp "Configured with: \[^\n\]*$pattern" $gcc_output ] } {
         verbose "Matched: $pattern" 2
         return 1
@@ -504,7 +504,7 @@ proc check_gc_sections_available { } {
 	}
 
 	# Check if the ld used by gcc supports --gc-sections.
-	set gcc_ld [lindex [${tool}_target_compile "-print-prog-name=ld" "" "none" ""] 0]
+	set gcc_ld [lindex [${tool}_target_compile "" "" "none" "additional_flags=-print-prog-name=ld"] 0]
 	set ld_output [remote_exec host "$gcc_ld" "--help"]
 	if { [ string first "--gc-sections" $ld_output ] >= 0 } {
 	    return 1
@@ -8566,7 +8566,7 @@ proc check_effective_target_gas { } {
 
     if {![info exists use_gas_saved]} {
 	# Check if the as used by gcc is GNU as.
-	set gcc_as [lindex [${tool}_target_compile "-print-prog-name=as" "" "none" ""] 0]
+	set gcc_as [lindex [${tool}_target_compile "" "" "none" "additional_flags=-print-prog-name=as"] 0]
 	# Provide /dev/null as input, otherwise gas times out reading from
 	# stdin.
 	set status [remote_exec host "$gcc_as" "-v /dev/null"]
@@ -8588,7 +8588,7 @@ proc check_effective_target_gld { } {
 
     if {![info exists use_gld_saved]} {
 	# Check if the ld used by gcc is GNU ld.
-	set gcc_ld [lindex [${tool}_target_compile "-print-prog-name=ld" "" "none" ""] 0]
+	set gcc_ld [lindex [${tool}_target_compile "" "" "none" "additional_flags=-print-prog-name=ld"] 0]
 	set status [remote_exec host "$gcc_ld" "--version"]
 	set ld_output [lindex $status 1]
 	if { [ string first "GNU" $ld_output ] >= 0 } {

Reply via email to