[committed,gdb/testsuite] Handle missing gnatmake in gnat_runtime_has_debug_info

Message ID e5d1fcce-1d24-29cf-e7e2-6ea177092ab2@suse.de
State New, archived
Headers

Commit Message

Tom de Vries Feb. 18, 2020, 9:39 a.m. UTC
  [ was: Re: [PATCH][gdb/testsuite] Ignore pass/fail/unsupported in
gdb-caching-proc.exp ]

On 18-02-2020 00:58, Simon Marchi wrote:
>>  
>>      if { ! [runto "GNAT_Debug_Info_Test"] } {
>> -	fail "failed to run to GNAT_Debug_Info_Test"
>>  	return 0
>>      }
>>  
>> @@ -183,7 +190,6 @@ gdb_caching_proc gnat_runtime_has_debug_info {
>>  	}
>>  	default {
>>  	    # Some other unexpected output...
>> -	    fail $gdb_test_name
>>  	}
>>      }
>>  
> 
> I'd be tempted to keep these last two "fail"s.  They should not show up normally,
> regardless of whether gnatmake is installed.  But let's say:
> 
> - the Ada runtime ever changes (__gnat_debug_raise_exception is renamed), or
> - the output of the command "whatis __gnat_debug_raise_exception" changes
> 
> then they'll show up, which is desirable because it means we need to come
> and change something here.  If the output of
> "whatis __gnat_debug_raise_exception" changes in a way that it is not
> recognized anymore and there is no FAIL, then gnat_runtime_has_debug_info
> will just start returning false all the time and we might not notice it for a
> while.

Ack, committed as attached, keeping the last two fails.

FWIW, I scanned a bit other gdb_caching_procs and there seems to be an
idiom to handle hitting the default case of an expect using a warning,
f.i. in skip_aarch64_sve_tests:
...
        default {
          warning "\n$me: default case taken"
            set skip_sve_tests 1
        }
...
So we could use that at least for the last fail.

Also, here and there verbose seems to be used instead of fail.

The gdb_caching_procs seem to avoid explicitly calling pass and fail,
but usage of gdb_test_multiple does happen a couple of time, which might
result in fails etc (but then again, that might not have been
intentional, I'm not sure).

In any case, we could either:
- forbid calling pass in gdb_caching_proc, or
- more accommodatingly, ignore pass in gdb_caching_proc.
Both by renaming pass in gdb_do_cache.

Likewise, we could perhaps redirect fails to warnings.

Thanks,
- Tom
  

Patch

[gdb/testsuite] Handle missing gnatmake in gnat_runtime_has_debug_info

After de-installing gnatmake, I get on stdout/stderr:
...
Running src/gdb/testsuite/gdb.base/gdb-caching-proc.exp ...
FAIL: gdb-caching-proc.exp: failed to compile gnat-debug-info test binary
  ...
FAIL: gdb-caching-proc.exp: failed to compile gnat-debug-info test binary
...

In gdb.sum, we see these FAILs (each paired with an UNSUPPORTED as well)
followed by:
...
PASS: gdb-caching-proc.exp: gnat_runtime_has_debug_info consistency
...

Likewise, after re-installing gnatmake, I get a PASS for each of the
UNSUPPORTEDs, and the FAILs disappear.

The FAIL comes from gnat_runtime_has_debug_info, the PASS/UNSUPPORTED comes
from gdb_compile_ada.

Fix this by removing the corresponding fail call in
gnat_runtime_has_debug_info, as well as using a new variant gdb_compile_ada_1
that doesn't call pass/unsupported.

Tested on x86_64-linux, with gnatmake installed and de-installed.

gdb/testsuite/ChangeLog:

2020-02-18  Tom de Vries  <tdevries@suse.de>

	* lib/ada.exp (gdb_compile_ada_1): Factor out of ...
	(gdb_compile_ada): ... here.
	(gnat_runtime_has_debug_info): Remove fail call for gdb_compile_ada
	failure.  Use gdb_compile_ada_1 instead of gdb_compile_ada.

---
 gdb/testsuite/lib/ada.exp | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/gdb/testsuite/lib/ada.exp b/gdb/testsuite/lib/ada.exp
index 9933cc951e..6648566ec3 100644
--- a/gdb/testsuite/lib/ada.exp
+++ b/gdb/testsuite/lib/ada.exp
@@ -52,9 +52,9 @@  proc target_compile_ada_from_dir {builddir source dest type options} {
     return -options $options $result
 }
 
-# Compile some Ada code.
+# Compile some Ada code.  Return "" if the compile was successful.
 
-proc gdb_compile_ada {source dest type options} {
+proc gdb_compile_ada_1 {source dest type options} {
 
     set srcdir [file dirname $source]
     set gprdir [file dirname $srcdir]
@@ -80,6 +80,15 @@  proc gdb_compile_ada {source dest type options} {
     # We therefore simply check whether the dest file has been created
     # or not. Unless not present, the build has succeeded.
     if [file exists $dest] { set result "" }
+    return $result
+}
+
+# Compile some Ada code.  Generate "PASS: foo.exp: compilation SOURCE" if the
+# compile was successful.
+
+proc gdb_compile_ada {source dest type options} {
+    set result [gdb_compile_ada_1 $source $dest $type $options]
+
     gdb_compile_test $source $result
     return $result
 }
@@ -162,8 +171,7 @@  gdb_caching_proc gnat_runtime_has_debug_info {
     set src "$srcdir/lib/gnat_debug_info_test.adb"
     set dst [standard_output_file "gnat_debug_info_test"]
 
-    if { [gdb_compile_ada $src $dst executable {debug}] != "" } {
-	fail "failed to compile gnat-debug-info test binary"
+    if { [gdb_compile_ada_1 $src $dst executable {debug}] != "" } {
 	return 0
     }