Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Luis Machado <lgustavo@codesourcery.com>
To: Pedro Alves <palves@redhat.com>, <gdb-patches@sourceware.org>
Cc: <simon.marchi@polymtl.ca>
Subject: Re: [PATCH,v2] Make language setting tests more robust
Date: Mon, 06 Feb 2017 14:54:00 -0000	[thread overview]
Message-ID: <22cf411e-ba69-723d-8289-71b636313c39@codesourcery.com> (raw)
In-Reply-To: <4423d3ac-814c-2d71-e5fd-ed27368f02e1@redhat.com>

On 02/02/2017 06:36 PM, Pedro Alves wrote:
> On 02/01/2017 08:21 PM, Luis Machado wrote:
>
>> One case of the warning being displayed happens when one has debug information
>> for glibc, which may cause GDB to identify the frame as having an "asm"
>> language. Therefore setting it to something else will get GDB's attention.
>>
>> This patch addresses the problem by creating a function in lib/gdb.exp to
>> set the language. That function will also handle potential warnings and check
>> to make sure the language was properly selected.
>
> Sorry to be a naysayer, but I'm not sure about this.  :-(  I recall fixing bugs
> related to gdb printing that warning when it really should not, or causing
> regressions locally due to breaking that logic, with the testsuite helping
> notice them.  I worry that this would be hiding such bugs going forward.
> Can you name the tests that where you saw the problem you mention?  Many of the tests
> you're touching are changing the language after starting gdb with no binary
> loaded, even.  Those definitely should not ever warn.  There are a few even that
> have "no prompt when changing language"-like messages.

Sounds reasonable. I think i was slightly surprised that the message is 
not coming from the command that sets the language 
(set_language_command), but from some frame manipulation function that 
gets called as part of determining the current language of the frame.

The story here is that i noticed 3 tests with such a problem:

FAIL: gdb.compile/compile-ifunc.exp: nodebug: set language c
FAIL: gdb.dwarf2/data-loc.exp: set language ada
FAIL: gdb.dwarf2/dynarr-ptr.exp: set language ada

And my build had a glibc with debugging symbols and sources, therefore 
GDB had set the initial language to asm before main.

I decided to expand the change to include an extra cleanup since i saw 
no clear purpose on having functions to set particular languages.

>
>> Also, i noticed most of the languages have their own set_lang_<language> proc,
>> and they are all the same.  Therefore i've removed those and switched to using
>> only the new set_language proc.
>>
>> I tried to confirm why set_lang_<language> was replicated, but my conclusion
>> was that it was just the way the code worked and people just copy/pasted from
>> an existing language .exp file.
>
> One small advantage I see is that set_lang_<language> is a tcl symbol, so
> if you typo it, you'll get a tcl error.  Kind of like avoiding sprinkling
> magic constants in C.  You could keep the wrapper procs but define them
> in terms of set_language, like:
>
> proc set_lang_objc {} {
>    set_language "objective-c"
> }
>
> But I won't insist.
>

I wonder if the benefit from doing that justifies having extra code 
lying around. I can certainly do it if people think it is a good way 
forward. Our set of supported languages is not that big.

Thoughts anyone?

>> +# Set the language and handle possible warnings output by GDB if
>> +# we select a language that differs from the current frame's language.
>> +#
>> +# The first argument is the language to be set.
>> +#
>> +# The second argument is an optional message to be output by the test.  If
>> +# the message is empty, the command to set the language will be used instead.
>> +
>> +proc set_language { language { message "" } } {
>> +    global gdb_prompt
>> +
>> +    set command "set language $language"
>> +    set lang_pattern [string_to_regexp $language]
>> +
>> +    if { $message == "" } {
>> +	set message $command
>> +    }
>> +
>> +    # Switch to the user-selected language.
>> +    gdb_test_multiple $command $message {
>> +	-re "Undefined item: \"$lang_pattern\"\.\[\r\n\]+$gdb_prompt" {
>> +	  fail $message
>> +	  return 0
>> +	}
>> +	-re "Warning: the current language does not match this frame.\[\r\n\]+$gdb_prompt $" {
>> +	}
>> +	-re "$gdb_prompt $" {}
>> +    }
>
> Writing this as:
>
>     set command_re [string_to_regexp $command]
>
>     # Switch to the user-selected language.
>     gdb_test_multiple $command $message {
> 	-re "Warning: the current language does not match this frame.\[\r\n\]+$gdb_prompt $" {
> 	}
> 	-re "^$command_re\r\n$gdb_prompt $" {
>         }
> 	-re "$gdb_prompt" {
> 	  fail $message
> 	  return 0
> 	}
>     }
>
> Would be more robust in case the "Undefined item" output ever changes.

Indeed. I'll address this.

Thanks,
Luis


  reply	other threads:[~2017-02-06 14:54 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-01 15:17 [PATCH] " Luis Machado
2017-02-01 18:38 ` Simon Marchi
2017-02-01 19:22   ` Luis Machado
2017-02-01 19:25     ` Simon Marchi
2017-02-01 21:50   ` Keith Seitz
2017-02-01 23:29     ` Luis Machado
2017-02-02  1:24     ` Simon Marchi
2017-02-01 20:21 ` [PATCH,v2] " Luis Machado
2017-02-02  1:33   ` Simon Marchi
2017-02-03  0:37   ` Pedro Alves
2017-02-06 14:54     ` Luis Machado [this message]
2017-02-06 15:09       ` Luis Machado
2017-02-06 16:51       ` Pedro Alves
2017-02-06 18:04         ` Luis Machado
2017-02-06 18:08           ` Pedro Alves
2017-02-06 18:22             ` Luis Machado
2017-02-06 18:24               ` Pedro Alves
2017-02-06 19:56                 ` Luis Machado

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=22cf411e-ba69-723d-8289-71b636313c39@codesourcery.com \
    --to=lgustavo@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@redhat.com \
    --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