public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdb/testsuite: fix mi-exec-run.exp with native-extended-gdbserver board
@ 2022-05-03  9:48 Andrew Burgess
  0 siblings, 0 replies; only message in thread
From: Andrew Burgess @ 2022-05-03  9:48 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=11039eff7166cf40d502c88e8b161dd7602120aa

commit 11039eff7166cf40d502c88e8b161dd7602120aa
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Fri Apr 29 18:16:21 2022 +0100

    gdb/testsuite: fix mi-exec-run.exp with native-extended-gdbserver board
    
    When running with the native-extended-gdbserver board, I currently see
    one failure in gdb.mi/mi-exec-run.exp:
    
        FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: force-fail=0: breakpoint hit reported on console (timeout)
    
    In this test the MI interface should be started in a separate tty,
    which means we should have a CLI tty and an MI tty, however, this is
    not happening.  Instead GDB is just started in MI mode and there is no
    CLI tty.
    
    The test script tries to switch between the CLI an MI terminals and
    look for some expected output on each, however, as there is no CLI
    terminal the expected output never arrives, and the test times out.
    
    It turns out that this is not a GDB problem, rather, this is an issue
    with argument passing within the test script.
    
    The proc default_mi_gdb_start expects to take a set of flags (strings)
    as arguments, each of flag is expected to be a separate argument.  The
    default_mi_gdb_start proc collects all its arguments into a list using
    the special 'args' parameter name, and then iterates over this list to
    see which flags were passed.
    
    In mi_gdb_start, which forwards to default_mi_gdb_start, the arguments
    are also gathered into the 'args' parameter list, but are then
    expanded back to be separate arguments using the eval trick, i.e.:
    
      proc mi_gdb_start { args } {
        return [eval default_mi_gdb_start $args]
      }
    
    This ensures that when we arrive in default_mi_gdb_start each flag is
    a separate argument, rather than appearing as a single list containing
    all arguments.
    
    When using the native-extended-gdbserver board however, the file
    boards/native-extended-gdbserver.exp is loaded, and this file replaces
    the default mi_gdb_start with its own version.
    
    This new mi_gdb_start also gathers the arguments into an 'args' list,
    but forgets to expand the arguments out using the eval trick.
    
    As a result, when using the native-extended-gdbserver board, by the
    time we get to default_mi_gdb_start, we end up with the args list
    containing a single item, which is a list containing all the arguments
    the user passed.
    
    What this means is that if the user passes two arguments, then, in
    default_mi_gdb_start, instead of seeing two separate arguments, we see
    a single argument made by concatenating the two arguments together.
    
    The only place this is a problem is in the test mi-exec-run.exp,
    which (as far as I can see) is the only test where we might try to
    pass both arguments at the same time.  Currently we think we passed
    both arguments to mi_gdb_start, but mi_gdb_start behaves as if no
    arguments were passed.
    
    This commit fixes the problem by making use of the eval trick within
    the native-extended-gdbserver version of mi_gdb_start.  After this,
    the FAIL listed at the top of this message is resolved.

Diff:
---
 gdb/testsuite/boards/native-extended-gdbserver.exp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/testsuite/boards/native-extended-gdbserver.exp b/gdb/testsuite/boards/native-extended-gdbserver.exp
index b925c364993..67acc6fea7c 100644
--- a/gdb/testsuite/boards/native-extended-gdbserver.exp
+++ b/gdb/testsuite/boards/native-extended-gdbserver.exp
@@ -58,7 +58,7 @@ proc mi_gdb_start { args } {
     global gdbserver_reconnect_p
 
     # Spawn GDB.
-    set res [extended_gdbserver_mi_gdb_start $args]
+    set res [eval extended_gdbserver_mi_gdb_start $args]
     if { $res } {
 	return $res
     }


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-03  9:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-03  9:48 [binutils-gdb] gdb/testsuite: fix mi-exec-run.exp with native-extended-gdbserver board Andrew Burgess

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).