Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Jan Kratochvil <jan.kratochvil@redhat.com>, gdb-patches@sourceware.org
Cc: Victor Leschuk <vleschuk@accesssoftek.com>
Subject: Re: [PATCH 3/8] Code cleanup: Split dwarf2_ranges_read to a callback
Date: Fri, 17 Feb 2017 01:19:00 -0000	[thread overview]
Message-ID: <7ffd29af-218a-32e3-ac6a-207f0bc8a382@redhat.com> (raw)
In-Reply-To: <148693098804.9024.9905586065345063380.stgit@host1.jankratochvil.net>

On 02/12/2017 08:23 PM, Jan Kratochvil wrote:

> -/* Get low and high pc attributes from DW_AT_ranges attribute value OFFSET.
> -   Return 1 if the attributes are present and valid, otherwise, return 0.
> -   If RANGES_PST is not NULL we should setup `objfile->psymtabs_addrmap'.  */
> +/* Call CALLBACK from DW_AT_ranges attribute value OFFSET.
> +   Return 1 if the attributes are present and valid, otherwise, return 0.  */
>  
>  static int
> -dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
> -		    CORE_ADDR *high_return, struct dwarf2_cu *cu,
> -		    struct partial_symtab *ranges_pst)
> +dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu,
> +		       std::function<void (CORE_ADDR range_beginning,
> +					   CORE_ADDR range_end)> callback)

std::function is a lot of unnecessary overhead here.  Unless you
manage to trigger to small-function optimization (which you won't here,
the callbacks are too big), this is forcing a heap allocation inside
std::function for every call to dwarf2_ranges_process.

Let's only use std::function for it's intended use-case of when the
design calls for taking, or more usually, storing, a callable whose
type is not knowable at compile type.  In this case, the type is
determinable at compile type, as everything is local to the same file
and the callees are always known.

So make dwarf2_ranges_process a template, and the overhead disappears,
like:

~~~~~~~~~~~~~~~~~~
diff --git c/gdb/dwarf2read.c w/gdb/dwarf2read.c
index 1137541..94d5de2 100644
--- c/gdb/dwarf2read.c
+++ w/gdb/dwarf2read.c
@@ -11877,10 +11877,13 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
 /* Call CALLBACK from DW_AT_ranges attribute value OFFSET.
    Return 1 if the attributes are present and valid, otherwise, return 0.  */
 
+/* Callback's type should be:
+    void (CORE_ADDR range_beginning, CORE_ADDR range_end)
+*/
+template <typename Callback>
 static int
 dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu,
-                      std::function<void (CORE_ADDR range_beginning,
-                                          CORE_ADDR range_end)> callback)
+                      Callback callback)
 {
~~~~~~~~~~~~~~~~~~

OK with that change.

Thanks,
Pedro Alves


  reply	other threads:[~2017-02-17  1:19 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-12 20:23 [PATCH 1/8] Rename read_unsigned_leb128 to gdb_read_unsigned_leb128 Jan Kratochvil
2017-02-12 20:23 ` [PATCH 6/8] DWARF-5: call sites Jan Kratochvil
2017-02-12 20:41   ` Eli Zaretskii
2017-02-17 11:57   ` Pedro Alves
2017-02-19 21:26     ` Jan Kratochvil
2017-02-12 20:23 ` [PATCH 8/8] DWARF-5: DW_FORM_data16 Jan Kratochvil
2017-02-17 12:09   ` Pedro Alves
2017-02-19 21:26     ` Jan Kratochvil
2017-02-20 11:44       ` Pedro Alves
2017-02-17 12:24   ` Pedro Alves
2017-02-12 20:23 ` [PATCH 7/8] DWARF-5: Macros Jan Kratochvil
2017-02-17 11:59   ` Pedro Alves
2017-02-12 20:23 ` [PATCH 3/8] Code cleanup: Split dwarf2_ranges_read to a callback Jan Kratochvil
2017-02-17  1:19   ` Pedro Alves [this message]
2017-02-19 21:26     ` Jan Kratochvil
2017-02-20 11:11       ` Pedro Alves
2017-02-12 20:23 ` [PATCH 5/8] DWARF-5 basic functionality Jan Kratochvil
2017-02-17 11:41   ` Pedro Alves
2017-02-19 21:26     ` Jan Kratochvil
     [not found]       ` <e23e71b0-3cf7-ca57-c4a7-932d4d2be6a3@redhat.com>
2017-02-20 19:52         ` Jan Kratochvil
2017-02-20 20:07           ` [commit] " Jan Kratochvil
2017-02-12 20:23 ` [PATCH 4/8] Code cleanup: Refactor abbrev_table_read_table cycle Jan Kratochvil
2017-02-17  1:21   ` Pedro Alves
2017-02-12 20:23 ` [PATCH 2/8] Code cleanup: Split create_debug_types_hash_table Jan Kratochvil
2017-02-16 19:33   ` Pedro Alves
2017-02-16 15:23 ` [PATCH 1/8] Rename read_unsigned_leb128 to gdb_read_unsigned_leb128 Pedro Alves
2017-02-16 19:40   ` Jan Kratochvil
2017-02-16 20:01     ` Pedro Alves
2017-02-16 22:54       ` Pedro Alves
2017-02-17  1:28         ` Pedro Alves
2017-02-19 21:25         ` Jan Kratochvil

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=7ffd29af-218a-32e3-ac6a-207f0bc8a382@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    --cc=vleschuk@accesssoftek.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