Make gdb.fortran/{array-slices,lbound-ubound} work against gdbserver
authorPedro Alves <pedro@palves.net>
Fri, 4 Mar 2022 17:34:18 +0000 (17:34 +0000)
committerPedro Alves <pedro@palves.net>
Wed, 16 Mar 2022 12:12:09 +0000 (12:12 +0000)
gdb.fortran/array-slices.exp and gdb.fortran/lbound-ubound.exp were
recently disabled unless testing with the native target, because they
rely on inferior I/O.  However, when testing against gdbserver using
the native-gdbserver/native-extended-gdbserver boards, we do have
access to inferior I/O.

The right way to check whether the board can do I/O, is via checking
the gdb,noinferiorio board variable.  Switch to using that.

And then, tweak the testcases to expect output to appear in
inferior_spawn_id, instead of gdb_spawn_id.  When testing against the
native target, inferior_spawn_id is the same as gdb_spawn_id.  When
testing against gdbserver, it maps to gdbserver_spawn_id.

This exposed a buglet in gdb.fortran/array-slices.f90's show_1d
subroutine -- it was missing printing newline at the end of the
"Expected GDB Output" text, leading to a test timeout.  All other
subroutines end with advance=yes, except this one.  Fix it by using
advance=yes here too.

Change-Id: I4640729f334431cfc24b0917e7d3977b677c6ca5

gdb/testsuite/gdb.fortran/array-slices.exp
gdb/testsuite/gdb.fortran/array-slices.f90
gdb/testsuite/gdb.fortran/lbound-ubound.exp

index 8f9c012e3991d15c8041cf6f8144d029c1d7a478..a38276c67e438970255d9730c7b7ebe5cc80c005 100644 (file)
 
 if {[skip_fortran_tests]} { return -1 }
 
+# This test relies on output from the inferior.
+if [target_info exists gdb,noinferiorio] {
+    return -1
+}
+
 standard_testfile ".f90"
 load_lib fortran.exp
 
@@ -62,12 +67,6 @@ proc run_test { repack } {
        return -1
     }
 
-    # This test relies on output from the inferior and is not supported on
-    # remote targets.
-    if {![gdb_is_target_native]} {
-       return 0
-    }
-
     # Avoid libc symbols, in particular the 'array' type.
     gdb_test_no_output "nosharedlibrary"
 
@@ -97,11 +96,19 @@ proc run_test { repack } {
            set found_final_breakpoint false
            set expected_result ""
            set func_name ""
+           set found_prompt false
            gdb_test_multiple "continue" "continue" {
+               -i $::inferior_spawn_id
+
                -re ".*GDB = (\[^\r\n\]+)\r\n" {
                    set expected_result $expect_out(1,string)
-                   exp_continue
+                   if {!$found_prompt} {
+                       exp_continue
+                   }
                }
+
+               -i $::gdb_spawn_id
+
                -re "! Display Element" {
                    set func_name "show_elem"
                    exp_continue
@@ -119,7 +126,14 @@ proc run_test { repack } {
                    exp_continue
                }
                -re "$gdb_prompt $" {
-                   # We're done.
+                   set found_prompt true
+
+                   if {$found_final_breakpoint
+                       || ($expected_result != "" && $func_name != "")} {
+                       # We're done.
+                   } else {
+                       exp_continue
+                   }
                }
            }
 
index ff3964ffb6b980d7a2c405d742ef58103c97fc99..1eaee82b7b700eed25757683ae8784c99616e4c0 100644 (file)
@@ -61,7 +61,7 @@ subroutine show_1d (array)
      end if
      write(*, fmt="(I0)", advance="no") array (i)
   end do
-  write(*, fmt="(A)", advance="no") ")"
+  write(*, fmt="(A)", advance="yes") ")"
 
   print *, ""  ! Display Array Slice 1D
 end subroutine show_1d
index 671b251c799ad6af9a9137975529c3a3a33a8937..709b74a69e80527eb072c3eb33316f5bca4a7757 100644 (file)
@@ -32,9 +32,8 @@ if ![fortran_runto_main] {
     return -1
 }
 
-# This test relies on output from the inferior and is not supported on
-# remote targets.
-if {![gdb_is_target_native]} {
+# This test relies on output from the inferior.
+if [target_info exists gdb,noinferiorio] {
    return 0
 }
 
@@ -55,15 +54,25 @@ while { $test_count < 500 } {
 
        set expected_lbound ""
        set expected_ubound ""
+       set found_prompt false
        gdb_test_multiple "continue" "continue" {
+           -i $::inferior_spawn_id
+
            -re ".*LBOUND = (\[^\r\n\]+)\r\n" {
                set expected_lbound $expect_out(1,string)
-               exp_continue
+               if {!$found_prompt} {
+                   exp_continue
+               }
            }
            -re ".*UBOUND = (\[^\r\n\]+)\r\n" {
                set expected_ubound $expect_out(1,string)
-               exp_continue
+               if {!$found_prompt} {
+                   exp_continue
+               }
            }
+
+           -i $::gdb_spawn_id
+
            -re "! Test Breakpoint" {
                set func_name "show_elem"
                exp_continue
@@ -73,7 +82,14 @@ while { $test_count < 500 } {
                exp_continue
            }
            -re "$gdb_prompt $" {
-               # We're done.
+               set found_prompt true
+
+               if {$found_final_breakpoint
+                   || ($expected_lbound != "" && $expected_ubound != "")} {
+                   # We're done.
+               } else {
+                   exp_continue
+               }
            }
        }