]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb/testsuite: make sure to consume the prompt in gdb.base/unwind-on-each-insn.exp
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 25 Oct 2022 13:50:56 +0000 (09:50 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 25 Oct 2022 14:36:23 +0000 (10:36 -0400)
This test fails quite reliably for me when ran as:

    $ taskset -c 1 make check TESTS="gdb.base/unwind-on-each-insn.exp" RUNTESTFLAGS="--target_board=native-gdbserver"

or more simply:

    $ make check-read1 TESTS="gdb.base/unwind-on-each-insn.exp"

The problem is that the gdb_test_multiple call that grabs the frame id
from "maint print frame-id" does not consume the prompt.  Well, it does
sometimes due to the trailing .*, but not always.  If the prompt is not
consumed, the tests that follow get confused:

    FAIL: gdb.base/unwind-on-each-insn.exp: gdb_breakpoint: set breakpoint at *foo
    FAIL: gdb.base/unwind-on-each-insn.exp: disassemble foo
    FAIL: gdb.base/unwind-on-each-insn.exp: get $sp and frame base in foo: get hexadecimal valueof "$sp"
    ... many more ...

Use -wrap to make gdb_test_multiple consume the prompt.

While at it, remove the bit that consumes the command name and do
exp_continue, it's not really necessary.  And for consistency, do the
same changes to the gdb_test_multiple that consumes the stack address,
although that one was fine, it did consume the prompt explicitly.

Change-Id: I2b7328c8844c7e98921ea494c4c05107162619fc
Reviewed-By: Bruno Larsen <blarsen@redhat.com>
gdb/testsuite/gdb.base/unwind-on-each-insn.exp

index faa6a1a3f064e22523cc0fd323b4dee04585d341..3b48805cff83e379ef8f1b1f26207c2b4366ca30 100644 (file)
@@ -44,11 +44,7 @@ proc get_sp_and_fba { testname } {
 
        set fba ""
        gdb_test_multiple "info frame" "" {
-           -re "^info frame\r\n" {
-               exp_continue
-           }
-
-           -re "^Stack level ${::decimal}, frame at ($::hex):\r\n.*$::gdb_prompt $" {
+           -re -wrap ".*Stack level ${::decimal}, frame at ($::hex):.*" {
                set fba $expect_out(1,string)
            }
        }
@@ -62,11 +58,7 @@ proc get_sp_and_fba { testname } {
 proc get_fid { } {
     set fid ""
     gdb_test_multiple "maint print frame-id" "" {
-       -re "^maint print frame-id\r\n" {
-           exp_continue
-       }
-
-       -re "^frame-id for frame #${::decimal}: (\[^\r\n\]+).*" {
+       -re -wrap ".*frame-id for frame #${::decimal}: (.*)" {
            set fid $expect_out(1,string)
        }
     }