From: Simon Marchi <simon.marchi@polymtl.ca>
To: Pedro Alves <palves@redhat.com>
Cc: Andrew Burgess <andrew.burgess@embecosm.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH] gdb/testsuite/sim: Remove redundant setting of timeout
Date: Tue, 04 Dec 2018 16:08:00 -0000 [thread overview]
Message-ID: <37e9f834bac94720a257148d45bd0325@polymtl.ca> (raw)
In-Reply-To: <07a27e33-ca57-f4be-a055-8d4070b03554@redhat.com>
On 2018-12-04 10:54, Pedro Alves wrote:
> 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
> ^^^^^^^^^^^^^^^^^^^^^^^
> ...
That's very confusing, to say the least.
Simon
next prev parent reply other threads:[~2018-12-04 16:08 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
2018-12-04 16:08 ` Simon Marchi [this message]
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=37e9f834bac94720a257148d45bd0325@polymtl.ca \
--to=simon.marchi@polymtl.ca \
--cc=andrew.burgess@embecosm.com \
--cc=gdb-patches@sourceware.org \
--cc=palves@redhat.com \
/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