[gdb/testsuite] Fix corefile-buildid.exp with check-read1
authorTom de Vries <tdevries@suse.de>
Wed, 19 Feb 2020 20:33:39 +0000 (21:33 +0100)
committerTom de Vries <tdevries@suse.de>
Wed, 19 Feb 2020 20:33:39 +0000 (21:33 +0100)
When running gdb.base/corefile-buildid.exp using check-read1, I run into:
...
FAIL: gdb.base/corefile-buildid.exp: shared: info files (timeout)
FAIL: gdb.base/corefile-buildid.exp: symlink shared: info files (timeout)
FAIL: gdb.base/corefile-buildid.exp: shared sepdebug: info files (timeout)
FAIL: gdb.base/corefile-buildid.exp: symlink shared sepdebug: info files \
  (timeout)
...

This is caused by attempting to match the output of an "info files" command
using a single gdb_test in check_exec_file.

Fix this by doing line-by-line matching in check_exec_file.

Tested on x86_64-linux, using make targets check and check-read1.

gdb/testsuite/ChangeLog:

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

* gdb.base/corefile-buildid.exp (check_exec_file): Match info files
output line-by-line.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/corefile-buildid.exp

index b2f20fe38b1adacb99919c46ed8a3427c2e65fc8..e599791f58aa51730fb4fdd89e880a99a605b566 100644 (file)
@@ -1,3 +1,8 @@
+2020-02-19  Tom de Vries  <tdevries@suse.de>
+
+       * gdb.base/corefile-buildid.exp (check_exec_file): Match info files
+       output line-by-line.
+
 2020-02-19  Tom de Vries  <tdevries@suse.de>
 
        * gdb.cp/cpexprs.exp: Remove c++/14186 kfail.
index 158cbb6dc6d362e4e9a28fc35b7d437e5b10c012..b9844ee3548787cf03431a818c651a25159c976b 100644 (file)
@@ -108,8 +108,55 @@ proc append_debug_dir {debugdir} {
 # FILE.
 
 proc check_exec_file {file} {
+    global gdb_prompt
     send_log "expecting exec file \"$file\"\n"
-    gdb_test "info files" "Local exec file:\[\r\n\t\ \]+`[string_to_regexp $file]'.*"
+
+    # Get line with "Local exec file:".
+    set ok 0
+    gdb_test_multiple "info files" "" {
+       -re "^Local exec file:\r\n" {
+           set test_name $gdb_test_name
+           set ok 1
+       }
+       -re "^$gdb_prompt $" {
+           fail $gdb_test_name
+       }
+       -re "^\[^\r\n\]*\r\n" {
+           exp_continue
+       }
+    }
+
+    if { $ok == 0 } {
+       return
+    }
+
+    # Get subsequent line with $file.
+    set ok 0
+    gdb_test_multiple "" $test_name {
+       -re "^\[\t\ \]+`[string_to_regexp $file]'\[^\r\n\]*\r\n" {
+           set ok 1
+       }
+       -re "^$gdb_prompt $" {
+           fail $gdb_test_name
+       }
+       -re "^\[^\r\n\]*\r\n" {
+           exp_continue
+       }
+    }
+
+    if { $ok == 0 } {
+       return
+    }
+
+    # Skip till prompt.
+    gdb_test_multiple "" $test_name {
+       -re "^$gdb_prompt $" {
+           pass $gdb_test_name
+       }
+       -re "^\[^\r\n\]*\r\n" {
+           exp_continue
+       }
+    }
 }
 
 # Test whether gdb can find an exec file from a core file's build-id.