[committed,gdb/testsuite] Handle internal-error in gdb_run_cmd

Message ID 1e8a9ce0-649e-3fd4-fe13-29596583fc9a@suse.de
State New
Headers show
  • [committed,gdb/testsuite] Handle internal-error in gdb_run_cmd
Related show

Commit Message

Lancelot SIX via Gdb-patches Sept. 6, 2021, 11:28 p.m.
[ was: Re: [PATCH][gdb/testsuite] Simplify
gdb.dwarf2/locexpr-data-member-location.exp ]

On 9/5/21 8:39 AM, Tom de Vries wrote:
> The test-case gdb.dwarf2/locexpr-data-member-location.exp currently fails like

> this:

> ...

> ...

> and takes 1 minute to run.

I've fixed this in a separate patch.

- Tom


[gdb/testsuite] Handle internal-error in gdb_run_cmd

When reverting commit 5a20fadc841 the test-case
gdb.dwarf2/locexpr-data-member-location.exp fails like this:
FAIL: gdb.dwarf2/locexpr-data-member-location.exp: running to bar in runto \
  (GDB internal error)
ERROR: Could not resync from internal error (eof)
and takes 1 minute to run.

The long running time is caused by running into a timeout in gdb_run_cmd, at
this point:
(gdb) run ^M
The program being debugged has been started already.^M
Start it from the beginning? (y or n) y^M
/home/vries/gdb_versions/devel/src/gdb/gdbtypes.c:5583: internal-error: \
  Unexpected type field location kind: 4^M
A problem internal to GDB has been detected,^M
further debugging may prove unreliable.^M
Quit this debugging session? (y or n)

Fix this by detecting the internal-error in gdb_run_cmd.  We don't handle it
in gdb_run_cmd, but stash the gdb output back into the buffer using
-notransfer, and let the caller proc runto deal with it.

After the fix, the test-case just takes 2 seconds.

Tested on x86_64-linux.

 gdb/testsuite/lib/gdb.exp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index cdda51529fb..d99e8360808 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -408,6 +408,9 @@  proc gdb_run_cmd { {inferior_args {}} } {
 	-notransfer -re "$gdb_prompt $" {
 	    # There is no more input expected.
+	-notransfer -re "A problem internal to GDB has been detected" {
+	    # Let caller handle this.
+	}
     return 0