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
next prev parent 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