* Re: [RFA] Fix frame argument printing when using auto language mode
[not found] ` <CAH=s-PM+9dGs12pLNDZTcr69tdkTMDdyFhAwhHHL037vkvqCKQ@mail.gmail.com>
@ 2018-02-20 16:28 ` Xavier Roirand
2018-02-20 16:48 ` Yao Qi
0 siblings, 1 reply; 4+ messages in thread
From: Xavier Roirand @ 2018-02-20 16:28 UTC (permalink / raw)
To: Yao Qi; +Cc: GDB Patches, Joel Brobecker
Le 2/20/18 à 4:15 PM, Yao Qi a écrit :
> On Mon, Feb 19, 2018 at 12:52 PM, Xavier Roirand <roirand@adacore.com> wrote:
>>
>> The problem is that GDB prints the S parameter in the pck.call_me Ada
>> function using the current language, so the C one, because the program
>> is stopped in a C function, whereas it should use the pck.call_me frame
>> one. This behavior is ok when user manually changes the language but it's
>> not the right one when language is auto.
>
> Agreed, GDB should use per-frame language instead of global current
> language. However, instead of switching global variable current_language,
> why don't we pass the per-frame language down to la_val_print? In
> ada-valprint.c:ada_val_print,
>
> ada_val_print_1 (type, embedded_offset, address,
> stream, recurse, val, options,
> current_language);
> ^^^^^^^^^^^^^^^^^
>
> why don't pass language for ada here?
>
Hello Yao,
It was my first idea, but it would imply a consequent amount of work
because when ada_val_print_1 is called, the stack is the following one:
#0 ada_val_print_1
#1 ada_val_print
#2 val_print (got the language of the frame arg)
So if we want to pass the per-frame language down to ada_val_print_1
then in the generic val_print function, we have to change:
language->la_val_print (type, embedded_offset, address,
stream, recurse, val,
&local_opts);
to something like:
language->la_val_print (type, embedded_offset, address,
stream, recurse, val,
&local_opts, language);
^^^^^^^^
Fix me if I'm wrong but it means that <language>_val_print functions for
all the supported GDB languages have to be modified in order to support
the language parameter.
Regards.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFA] Fix frame argument printing when using auto language mode
2018-02-20 16:28 ` [RFA] Fix frame argument printing when using auto language mode Xavier Roirand
@ 2018-02-20 16:48 ` Yao Qi
2018-02-21 16:12 ` Xavier Roirand
2018-02-22 3:38 ` Joel Brobecker
0 siblings, 2 replies; 4+ messages in thread
From: Yao Qi @ 2018-02-20 16:48 UTC (permalink / raw)
To: Xavier Roirand; +Cc: GDB Patches, Joel Brobecker
On Tue, Feb 20, 2018 at 4:28 PM, Xavier Roirand <roirand@adacore.com> wrote:
>
> It was my first idea, but it would imply a consequent amount of work because
> when ada_val_print_1 is called, the stack is the following one:
>
> #0 ada_val_print_1
> #1 ada_val_print
> #2 val_print (got the language of the frame arg)
>
> So if we want to pass the per-frame language down to ada_val_print_1 then in
> the generic val_print function, we have to change:
>
> language->la_val_print (type, embedded_offset, address,
> stream, recurse, val,
> &local_opts);
> to something like:
>
> language->la_val_print (type, embedded_offset, address,
> stream, recurse, val,
> &local_opts, language);
> ^^^^^^^^
>
We don't have to do that. ada_val_print_1 is called in ada_val_print,
ada_val_print_1 (type, embedded_offset, address,
stream, recurse, val, options,
current_language);
and ada_val_print is language->la_val_print in effect, so "language"
is ada_language_defn, and we can rewrite the code above like this,
ada_val_print_1 (type, embedded_offset, address,
stream, recurse, val, options,
&ada_language_defn);
This change may break existing behaviour. Printing for ada (or other
languages) shouldn't depend on current_language, IMO.
> Fix me if I'm wrong but it means that <language>_val_print functions for all
> the supported GDB languages have to be modified in order to support the
> language parameter.
>
--
Yao (齐尧)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFA] Fix frame argument printing when using auto language mode
2018-02-20 16:48 ` Yao Qi
@ 2018-02-21 16:12 ` Xavier Roirand
2018-02-22 3:38 ` Joel Brobecker
1 sibling, 0 replies; 4+ messages in thread
From: Xavier Roirand @ 2018-02-21 16:12 UTC (permalink / raw)
To: gdb-patches
Hello,
This is a doable fix, I don't see any issue with it and hope that it
will not add any side effect. I'll propose an RFA soon. Thx
Regards
Le 2/20/18 à 5:48 PM, Yao Qi a écrit :
> On Tue, Feb 20, 2018 at 4:28 PM, Xavier Roirand <roirand@adacore.com> wrote:
>>
>> It was my first idea, but it would imply a consequent amount of work because
>> when ada_val_print_1 is called, the stack is the following one:
>>
>> #0 ada_val_print_1
>> #1 ada_val_print
>> #2 val_print (got the language of the frame arg)
>>
>> So if we want to pass the per-frame language down to ada_val_print_1 then in
>> the generic val_print function, we have to change:
>>
>> language->la_val_print (type, embedded_offset, address,
>> stream, recurse, val,
>> &local_opts);
>> to something like:
>>
>> language->la_val_print (type, embedded_offset, address,
>> stream, recurse, val,
>> &local_opts, language);
>> ^^^^^^^^
>>
>
> We don't have to do that. ada_val_print_1 is called in ada_val_print,
>
> ada_val_print_1 (type, embedded_offset, address,
> stream, recurse, val, options,
> current_language);
>
> and ada_val_print is language->la_val_print in effect, so "language"
> is ada_language_defn, and we can rewrite the code above like this,
>
> ada_val_print_1 (type, embedded_offset, address,
> stream, recurse, val, options,
> &ada_language_defn);
>
> This change may break existing behaviour. Printing for ada (or other
> languages) shouldn't depend on current_language, IMO.
>
>> Fix me if I'm wrong but it means that <language>_val_print functions for all
>> the supported GDB languages have to be modified in order to support the
>> language parameter.
>>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFA] Fix frame argument printing when using auto language mode
2018-02-20 16:48 ` Yao Qi
2018-02-21 16:12 ` Xavier Roirand
@ 2018-02-22 3:38 ` Joel Brobecker
1 sibling, 0 replies; 4+ messages in thread
From: Joel Brobecker @ 2018-02-22 3:38 UTC (permalink / raw)
To: Yao Qi; +Cc: Xavier Roirand, GDB Patches
Hi Yao,
> We don't have to do that. ada_val_print_1 is called in ada_val_print,
>
> ada_val_print_1 (type, embedded_offset, address,
> stream, recurse, val, options,
> current_language);
>
> and ada_val_print is language->la_val_print in effect, so "language"
> is ada_language_defn, and we can rewrite the code above like this,
>
> ada_val_print_1 (type, embedded_offset, address,
> stream, recurse, val, options,
> &ada_language_defn);
>
> This change may break existing behaviour. Printing for ada (or other
> languages) shouldn't depend on current_language, IMO.
Thanks for the extra pair of eyes, and the pertinent suggestions!
FWIW, I agree with you, your fix is much better.
--
Joel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-02-22 3:38 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <1519044767-8741-1-git-send-email-roirand@adacore.com>
[not found] ` <CAH=s-PM+9dGs12pLNDZTcr69tdkTMDdyFhAwhHHL037vkvqCKQ@mail.gmail.com>
2018-02-20 16:28 ` [RFA] Fix frame argument printing when using auto language mode Xavier Roirand
2018-02-20 16:48 ` Yao Qi
2018-02-21 16:12 ` Xavier Roirand
2018-02-22 3:38 ` Joel Brobecker
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox