Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Simon Marchi <simon.marchi@polymtl.ca>,
	Andrew Burgess <andrew.burgess@embecosm.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] gdb/testsuite/sim: Remove redundant setting of timeout
Date: Tue, 04 Dec 2018 15:54:00 -0000	[thread overview]
Message-ID: <07a27e33-ca57-f4be-a055-8d4070b03554@redhat.com> (raw)
In-Reply-To: <d726c7a6b7d096aa23857995eee3de03@polymtl.ca>

On 12/04/2018 03:43 PM, Simon Marchi wrote:
> On 2018-12-04 06:33, Andrew Burgess wrote:
>> In the config/sim.exp file two functions are defined.  Both of these
>> functions define local timeout variables and then call gdb_expect,
>> which (through a call to get_largest_timeout) will find the local
>> definition of timeout.
>>
>> However, both of these functions set the local timeout to some
>> arbitrary value and print a log message for this "new" timeout just
>> before returning.
>>
>> As in both cases, the timeout is a local variable, this final setting
>> of the timeout has no effect and can be removed.
> 
> Hi Andrew,
> 
> Can you verify whether the remaining "set timeout" in those functions have any effect at all?  As you said, they are just local variables, so I don't expect them to influence the behavior of gdb_expect.  Either we need "global timeout", or we pass the timeout directly as an argument to gdb_expect (the latter sounds better).

Keep this in mind, from man expect:

       Expect  takes  a  rather  liberal view of scoping.  In particular, 
       variables read by commands specific to the Expect program will be sought
       first from the local scope, and if not found, in the global scope.  For
       example, this obviates the need to place "global timeout" in every procedure
       you write that uses expect.   On the  other hand, variables written are always
       in the local scope (unless a "global" command has been issued).  The most
       common problem this causes is when spawn is executed in a procedure.  Outside
       the procedure, spawn_id no longer exists, so the spawned process is no longer
       accessible simply because of scoping.  Add a "global spawn_id" to such a procedure.


Mimicking that behavior, gdb_test, gdb_test_multiple and gdb_expect pick the
local timeout variable in the caller via upvar.  E.g.:

proc gdb_test { args } {
    global gdb_prompt
    upvar timeout timeout

gdb_expect is a little more disguised, but it does the same, here,
in the get_largest_timeout path:

proc gdb_expect { args } {
...
    # A timeout argument takes precedence, otherwise of all the timeouts
    # select the largest.
    if [info exists atimeout] {
	set tmt $atimeout
    } else {
	set tmt [get_largest_timeout]
    }
...
}

and then get_largest_timeout does:

proc get_largest_timeout {} {
    upvar #0 timeout gtimeout
    upvar 2 timeout timeout
    ^^^^^^^^^^^^^^^^^^^^^^^
    ... 

Thanks,
Pedro Alves


  reply	other threads:[~2018-12-04 15:54 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-04 11:33 Andrew Burgess
2018-12-04 15:43 ` Simon Marchi
2018-12-04 15:54   ` Pedro Alves [this message]
2018-12-04 16:08     ` Simon Marchi
2018-12-04 16:11       ` Pedro Alves
2018-12-04 16:15         ` Simon Marchi
2018-12-04 16:33           ` Pedro Alves
2018-12-04 21:34             ` Andrew Burgess
2018-12-04 23:03               ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=07a27e33-ca57-f4be-a055-8d4070b03554@redhat.com \
    --to=palves@redhat.com \
    --cc=andrew.burgess@embecosm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@polymtl.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox