aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2020-06-04 16:33:55 +0200
committerTom de Vries <tdevries@suse.de>2020-06-04 16:33:55 +0200
commit95146b5da22532c6688e457adb48fecbceb194b3 (patch)
treeddd3b08860a45acb805b33f9954c6e8f02524367
parentd8740be15930b820ab51d7a76695194022a83551 (diff)
downloadgdb-95146b5da22532c6688e457adb48fecbceb194b3.zip
gdb-95146b5da22532c6688e457adb48fecbceb194b3.tar.gz
gdb-95146b5da22532c6688e457adb48fecbceb194b3.tar.bz2
[gdb/testsuite] Fix error handling in gdb_file_cmd
Consider a gdb_load patch to call the gdb_file_cmd twice: ... proc gdb_load { arg } { if { $arg != "" } { + set res [gdb_file_cmd $arg] + if { $res != 0 } { + return $res + } return [gdb_file_cmd $arg] } return 0 } ... When running test-case gdb.base/index-cache.exp, we run into: ... ERROR: Couldn't load outputs/gdb.base/index-cache/index-cache, other program \ already loaded (timeout). FAIL: gdb.base/index-cache.exp: test_cache_enabled_miss: check index-cache \ stats (GDB internal error) ERROR: Couldn't load outputs/gdb.base/index-cache/index-cache, other program \ already loaded (timeout). ... The first timeout in more detail: ... (gdb) file outputs/gdb.base/index-cache/index-cache^M Load new symbol table from "index-cache"? (y or n) y^M Reading symbols from index-cache...^M src/gdb/dwarf2/read.c:2540: internal-error: \ void create_cus_from_index(dwarf2_per_bfd*, const gdb_byte*, offset_type, \ const gdb_byte*, offset_type): \ Assertion `per_bfd->all_comp_units.empty ()' failed.^M A problem internal to GDB has been detected,^M further debugging may prove unreliable.^M Quit this debugging session? (y or n) ERROR: Couldn't load index-cache, \ other program already loaded (timeout). ... Proc gdb_file_cmd has a gdb_expect handling the result of the file command, and if the result is a "Load new symbol table from index-cache? (y or n) " prompt, it sends a "y" and enters in a nested gdb_expect to handle the result. The first gdb_expect contains code to handle "A problem internal to GDB has been detected", but the second one doesn't, which causes the timeout. Fix this by removing the nested gdb_expect, and using exp_continue instead, such that we have instead: ... ERROR: Couldn't load outputs/gdb.base/index-cache/index-cache -- with new \ symbol table into gdb (GDB internal error). ERROR: Couldn't load outputs/gdb.base/index-cache/index-cache -- with new \ symbol table into gdb (GDB internal error). ... Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-06-04 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (gdb_file_cmd): Replace incomplete gdb_expect by exp_continue.
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/lib/gdb.exp23
2 files changed, 13 insertions, 15 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index ab9443e..9d97938 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2020-06-04 Tom de Vries <tdevries@suse.de>
+ * lib/gdb.exp (gdb_file_cmd): Replace incomplete gdb_expect by
+ exp_continue.
+
+2020-06-04 Tom de Vries <tdevries@suse.de>
+
* lib/gdb.exp (gdb_file_cmd): Use perror instead of fail.
2020-06-03 Tom de Vries <tdevries@suse.de>
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 63a9e3d..3cdaefa 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -1761,6 +1761,7 @@ proc gdb_file_cmd { arg } {
}
send_gdb "file $arg\n"
+ set new_symbol_table 0
gdb_expect 120 {
-re "Reading symbols from.*LZMA support was disabled.*$gdb_prompt $" {
verbose "\t\tLoaded $arg into $GDB; .gnu_debugdata found but no LZMA available"
@@ -1778,22 +1779,14 @@ proc gdb_file_cmd { arg } {
return 0
}
-re "Load new symbol table from \".*\".*y or n. $" {
+ if { $new_symbol_table > 0 } {
+ perror "Couldn't load $arg, interactive prompt loop detected."
+ return -1
+ }
send_gdb "y\n" answer
- gdb_expect 120 {
- -re "Reading symbols from.*$gdb_prompt $" {
- verbose "\t\tLoaded $arg with new symbol table into $GDB"
- set gdb_file_cmd_debug_info "debug"
- return 0
- }
- timeout {
- perror "Couldn't load $arg, other program already loaded (timeout)."
- return -1
- }
- eof {
- perror "Couldn't load $arg, other program already loaded (eof)."
- return -1
- }
- }
+ incr new_symbol_table
+ set arg "$arg -- with new symbol table"
+ exp_continue
}
-re "No such file or directory.*$gdb_prompt $" {
perror "($arg) No such file or directory"