public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Torbjorn SVENSSON <torbjorn.svensson@foss.st.com>
To: "Tom Tromey" <tom@tromey.com>,
	"Torbjörn SVENSSON via Gdb-patches" <gdb-patches@sourceware.org>
Cc: <luis.machado@arm.com>, <vanekt@volny.cz>,
	Yvan Roux <yvan.roux@foss.st.com>
Subject: Re: [PATCH v2 3/4] gdb: dwarf2 generic implementation for caching function data
Date: Thu, 5 Jan 2023 21:53:02 +0100	[thread overview]
Message-ID: <e5843c69-8b6d-4898-a5ae-b888172adacb@foss.st.com> (raw)
In-Reply-To: <bf48ffc4-89ff-9063-cd47-6fbb59c0e3dc@foss.st.com>

Hi,

Any comments on my last reply?

Kind regards,
Torbjörn

On 2022-12-28 17:16, Torbjorn SVENSSON wrote:
> 
> On 2022-12-20 22:02, Tom Tromey wrote:
>>>>>>> Torbjörn SVENSSON via Gdb-patches <gdb-patches@sourceware.org> 
>>>>>>> writes:
>>
>>> When there is no dwarf2 data for a register, a function can be called
>>> to provide the value of this register.  In some situations, it might
>>> not be trivial to determine the value to return and it would cause a
>>> performance bottleneck to do the computation each time.
>>
>> Thanks for the patch.
>>
>>> This patch allows the called function to have a "cache" object that it
>>> can use to store some metadata between calls to reduce the performance
>>> impact of the complex logic.
>>
>>> The cache object is unique for each function and frame, so if there are
>>> more than one function pointer stored in the dwarf2_frame_cache->reg
>>> array, then the appropriate pointer will be supplied (the type is not
>>> known by the dwarf2 implementation).
>>
>> Does this ever happen?  If not perhaps a simpler approach would be
>> better.
> 
> Right now; I don't know, but as the fn member in the 
> dwarf2_frame_state_reg struct contains one function pointer per 
> register, the architecture allows more than one function pointer per frame.
> If we went with a simpler solution, to only have one data block per 
> frame, regardless of what function that is "owning" the data, then it 
> could lead to nasty surprises if there is some unwinder that expects to 
> be able to use more than data type...
> If we move the function pointer from the register scope to the frame 
> scope, then I agree that only one data object would be needed.
> If we stick to having the function pointer per register, I could accept 
> to have one data block, but somewhere, an assert should added so that 
> the wrongful assumption mentioned above would be caught early rather 
> than leading to strange bugs. This would mean that the type needs to be 
> stored in the dwarf2_frame_cache struct somehow, but the type is 
> currently internal to another compile unit.
> This is basically the reason why I went with the decoupled solution that 
> is provided in this patch.
> 
>>
>>> +struct dwarf2_frame_fn_data
>>> +{
>>
>> New type should have a comment.
> 
> Okay, I'll add comments, but I would like to know if this is the way to 
> go or if there should be some alternative implementation before spending 
> more time on this.
> 
>>
>>> +  struct value *(*fn) (frame_info_ptr this_frame, void **this_cache,
>>> +               int regnum);
>>
>> Shouldn't this use the fn_prev_register typedef?
> 
> Indeed.
> 
>>
>>> +  void *data;
>>> +  struct dwarf2_frame_fn_data* next;
>>
>> Wrong placement of the "*", but really a lot of the code isn't following
>> the GNU / gdb style.
> 
> Don't know why the contrib/check_GNU_style.py in the GCC source tree did 
> not flag this. Anyway, will be fixed in v3.
> 
>>> +void *dwarf2_frame_get_fn_data (frame_info_ptr this_frame, void 
>>> **this_cache,
>>> +                fn_prev_register fn)
>>
>> Normally new functions get a comment referring to the header where they
>> are declared.
> 
> Can you point me to an example and I will do something similar for these 
> new functions if we decide to go this way.
> 
>>> +
>>> +/* Allocate a new instance of the function unique data.  */
>>> +
>>> +extern void *dwarf2_frame_allocate_fn_data (frame_info_ptr this_frame,
>>> +                        void **this_cache,
>>> +                        fn_prev_register fn,
>>> +                        unsigned long size);
>>> +
>>> +/* Retrieve the function unique data for this frame.  */
>>> +
>>> +extern void *dwarf2_frame_get_fn_data (frame_info_ptr this_frame,
>>
>> I think these comments could perhaps be expanded a bit.
> 
> What more detail would you like to include?
> 
>>
>> Tom
> 
> Kind regards,
> Torbjörn

  reply	other threads:[~2023-01-05 20:53 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-18 15:52 [PATCH 0/4] v2 gdb/arm: Fixes for Cortex-M stack unwinding Torbjörn SVENSSON
2022-11-18 15:52 ` [PATCH v2 1/4] gdb/arm: Update active msp/psp when switching stack Torbjörn SVENSSON
2022-11-21 14:04   ` Luis Machado
2022-11-18 15:52 ` [PATCH v2 2/4] gdb/arm: Ensure that stack pointers are in sync Torbjörn SVENSSON
2022-11-21 14:04   ` Luis Machado
2022-11-18 15:52 ` [PATCH v2 3/4] gdb: dwarf2 generic implementation for caching function data Torbjörn SVENSSON
2022-11-18 16:01   ` Torbjorn SVENSSON
2022-12-20 21:04     ` Tom Tromey
2022-11-21 21:16   ` Luis Machado
2022-11-29 15:19     ` Torbjorn SVENSSON
2022-11-29 16:24       ` Tomas Vanek
2022-11-30 10:16         ` Torbjorn SVENSSON
2022-11-30 10:19           ` Luis Machado
2022-12-08  1:11           ` Luis Machado
2022-12-19 19:28     ` [PING] " Torbjorn SVENSSON
2022-12-20 21:02   ` Tom Tromey
2022-12-28 16:16     ` Torbjorn SVENSSON
2023-01-05 20:53       ` Torbjorn SVENSSON [this message]
2023-01-14  6:54       ` Joel Brobecker
2023-01-18 18:47   ` Tom Tromey
2023-01-19 10:31     ` Torbjorn SVENSSON
2022-11-18 15:52 ` [PATCH v2 4/4] gdb/arm: Use new dwarf2 function cache Torbjörn SVENSSON
2022-11-21 21:04   ` Luis Machado
2022-11-29 15:19     ` Torbjorn SVENSSON

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=e5843c69-8b6d-4898-a5ae-b888172adacb@foss.st.com \
    --to=torbjorn.svensson@foss.st.com \
    --cc=gdb-patches@sourceware.org \
    --cc=luis.machado@arm.com \
    --cc=tom@tromey.com \
    --cc=vanekt@volny.cz \
    --cc=yvan.roux@foss.st.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).