Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Doug Evans <dje@google.com>
To: Sergio Durigan Junior <sergiodj@redhat.com>
Cc: Yao Qi <qiyaoltc@gmail.com>, gdb-patches <gdb-patches@sourceware.org>
Subject: Re: [RFC] Unset tcl variable addr to avoid clashing
Date: Sun, 12 Apr 2015 17:22:00 -0000	[thread overview]
Message-ID: <CADPb22QcfoJqK15FjHSbownWbT-0FpJ3KLQWdOCe7Ud7B_0oAQ@mail.gmail.com> (raw)
In-Reply-To: <87r3rqppgq.fsf@redhat.com>

On Sat, Apr 11, 2015 at 10:03 AM, Sergio Durigan Junior
<sergiodj@redhat.com> wrote:
> On Friday, April 10 2015, Yao Qi wrote:
>
>> From: Yao Qi <yao.qi@linaro.org>
>>
>> Hi,
>> I see some tcl ERRORs in gdb.sum recently:
>>
>> ERROR: tcl error sourcing ../../../../../binutils-gdb/gdb/testsuite/gdb.base/dmsym.exp.
>> ERROR: can't set "addr": variable is array
>>     while executing
>> "set addr "0x\[0-9a-zA-Z\]+""
>>     (file "../../../../../binutils-gdb/gdb/testsuite/gdb.base/dmsym.exp" line 45)
>>     invoked from within
>> "source ../../../../../binutils-gdb/gdb/testsuite/gdb.base/dmsym.exp"
>>     ("uplevel" body line 1)
>>     invoked from within
>> "uplevel #0 source ../../../../../binutils-gdb/gdb/testsuite/gdb.base/dmsym.exp"
>>     invoked from within
>> "catch "uplevel #0 source $test_file_name""
>>
>> It is OK to run single dmsym.exp.  This error is caused by the name
>> clashing with coredump-filter.exp, and it can be reproduced,
>
> It seems that coredump-filter.exp is causing lots of headaches
> lately...  Sorry about that.
>
>>  $ make check RUNTESTFLAGS='coredump-filter.exp dmsym.exp exception.exp stepi-random-signal.exp'
>>
>> as variable addr is used in all of them.  This patch is to unset array
>> addr, but manually unset variables isn't good to me.  Is there any
>> approaches we can do to avoid name clashing?
>
> FWIW, there is not strong reason to keep the variable name as "addr" in
> the testcase.  So, an easier solution would be to rename the variable to
> something else, like "coredump_var_addr" (I think this name is unique
> enough).  The patch below does that.
>
> WDYT?
>
> --
> Sergio
> GPG key ID: 237A 54B1 0287 28BF 00EF  31F4 D0EB 7628 65FC 5E36
> Please send encrypted e-mail if possible
> http://sergiodj.net/
>
> gdb/testsuite/ChangeLog:
> 2015-04-11  Sergio Durigan Junior  <sergiodj@redhat.com>
>
>         * gdb.base/coredump-filter.exp: Rename variable "addr" to
>         "coredump_var_addr" to avoid naming conflict with other
>         testcases.

Ok by me with one nit.
There's an issue here that still needs to be documented so it becomes
part of the collective lore.
Can this include a note about the need to give global array variables
unique names to either testsuite/README or
https://sourceware.org/gdb/wiki/Internals%20GDB-Testsuite-Coding-Standards

>
> diff --git a/gdb/testsuite/gdb.base/coredump-filter.exp b/gdb/testsuite/gdb.base/coredump-filter.exp
> index f3203be..8c94e94 100644
> --- a/gdb/testsuite/gdb.base/coredump-filter.exp
> +++ b/gdb/testsuite/gdb.base/coredump-filter.exp
> @@ -38,7 +38,7 @@ proc do_save_core { filter_flag core ipid } {
>  }
>
>  proc do_load_and_test_core { core var working_var working_value } {
> -    global hex decimal addr
> +    global hex decimal coredump_var_addr
>
>      set core_loaded [gdb_core_cmd "$core" "load core"]
>      if { $core_loaded == -1 } {
> @@ -47,9 +47,9 @@ proc do_load_and_test_core { core var working_var working_value } {
>      }
>
>      # Access the memory the addresses point to.
> -    gdb_test "print/x *(char *) $addr($var)" "\(\\\$$decimal = <error: \)?Cannot access memory at address $hex\(>\)?" \
> +    gdb_test "print/x *(char *) $coredump_var_addr($var)" "\(\\\$$decimal = <error: \)?Cannot access memory at address $hex\(>\)?" \
>         "printing $var when core is loaded (should not work)"
> -    gdb_test "print/x *(char *) $addr($working_var)" " = $working_value.*" \
> +    gdb_test "print/x *(char *) $coredump_var_addr($working_var)" " = $working_value.*" \
>         "print/x *$working_var ( = $working_value)"
>  }
>
> @@ -163,7 +163,7 @@ foreach item $all_anon_corefiles {
>         set test "print/x $name"
>         gdb_test_multiple $test $test {
>             -re " = \($hex\)\r\n$gdb_prompt $" {
> -               set addr($name) $expect_out(1,string)
> +               set coredump_var_addr($name) $expect_out(1,string)
>             }
>         }
>      }


  reply	other threads:[~2015-04-12 17:22 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-10 11:51 Yao Qi
2015-04-10 16:53 ` Doug Evans
2015-04-10 17:55   ` Keith Seitz
2015-04-10 18:08     ` Doug Evans
2015-04-11 17:03 ` Sergio Durigan Junior
2015-04-12 17:22   ` Doug Evans [this message]
2015-04-13  6:47     ` Sergio Durigan Junior
2015-04-13  8:26     ` Pedro Alves
2015-04-14 19:12       ` Sergio Durigan Junior
2015-04-26 19:44         ` Sergio Durigan Junior

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=CADPb22QcfoJqK15FjHSbownWbT-0FpJ3KLQWdOCe7Ud7B_0oAQ@mail.gmail.com \
    --to=dje@google.com \
    --cc=gdb-patches@sourceware.org \
    --cc=qiyaoltc@gmail.com \
    --cc=sergiodj@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