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: Wed, 28 Dec 2022 17:16:03 +0100	[thread overview]
Message-ID: <bf48ffc4-89ff-9063-cd47-6fbb59c0e3dc@foss.st.com> (raw)
In-Reply-To: <87ili5kcu6.fsf@tromey.com>


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:[~2022-12-28 16:16 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 [this message]
2023-01-05 20:53       ` Torbjorn SVENSSON
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=bf48ffc4-89ff-9063-cd47-6fbb59c0e3dc@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).