diff options
author | Pedro Alves <pedro@palves.net> | 2022-03-04 17:34:18 +0000 |
---|---|---|
committer | Pedro Alves <pedro@palves.net> | 2022-03-16 12:12:09 +0000 |
commit | 9bde221fecaa58b1be8e8288f5ec5c202a61d23f (patch) | |
tree | 43915d95b05d04d63424546c13bf31d632799a69 | |
parent | 22546800ad34a5ac6bc90e6701de3e74bad75551 (diff) | |
download | fsf-binutils-gdb-9bde221fecaa58b1be8e8288f5ec5c202a61d23f.zip fsf-binutils-gdb-9bde221fecaa58b1be8e8288f5ec5c202a61d23f.tar.gz fsf-binutils-gdb-9bde221fecaa58b1be8e8288f5ec5c202a61d23f.tar.bz2 |
Make gdb.fortran/{array-slices,lbound-ubound} work against gdbserver
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
-rw-r--r-- | gdb/testsuite/gdb.fortran/array-slices.exp | 30 | ||||
-rw-r--r-- | gdb/testsuite/gdb.fortran/array-slices.f90 | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.fortran/lbound-ubound.exp | 28 |
3 files changed, 45 insertions, 15 deletions
diff --git a/gdb/testsuite/gdb.fortran/array-slices.exp b/gdb/testsuite/gdb.fortran/array-slices.exp index 8f9c012..a38276c 100644 --- a/gdb/testsuite/gdb.fortran/array-slices.exp +++ b/gdb/testsuite/gdb.fortran/array-slices.exp @@ -35,6 +35,11 @@ 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 + } } } diff --git a/gdb/testsuite/gdb.fortran/array-slices.f90 b/gdb/testsuite/gdb.fortran/array-slices.f90 index ff3964f..1eaee82 100644 --- a/gdb/testsuite/gdb.fortran/array-slices.f90 +++ b/gdb/testsuite/gdb.fortran/array-slices.f90 @@ -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 diff --git a/gdb/testsuite/gdb.fortran/lbound-ubound.exp b/gdb/testsuite/gdb.fortran/lbound-ubound.exp index 671b251..709b74a 100644 --- a/gdb/testsuite/gdb.fortran/lbound-ubound.exp +++ b/gdb/testsuite/gdb.fortran/lbound-ubound.exp @@ -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 + } } } |