public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: Doug Evans <xdje42@gmail.com>
Cc: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: ada symbol lookup cache: disable for 7.9?
Date: Mon, 19 Jan 2015 15:04:00 -0000	[thread overview]
Message-ID: <20150119150409.GE4041@adacore.com> (raw)
In-Reply-To: <CAP9bCMTo3kOehd0Mm1k26dRDJvLbfv1mTrQLhWo4cAjPxOoMoQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1460 bytes --]

> It turns out that ada-lang.c accidently never uses its symbol lookup
> cache (AFAICT!).
> Rather, it will create a new one for each lookup, not recording the
> cache in pspace_data,
> and leaking the memory.

Indeed!

Attached is a patch that fixes this issue. I've tested on x86_64-linux,
after having applied your testscase update
(https://www.sourceware.org/ml/gdb-patches/2015-01/msg00510.html),
as well as the fix you posted in PR 17855
(https://sourceware.org/bugzilla/show_bug.cgi?id=17855).
No regression.

As to whether we should deactivate it entirely for 7.9, I would
personally prefer we tried to fix the bug(s), and see where we get.
It used to work fine until I accidently botched the initialization
of that cache when I tried to make it per-program-space. That's
what I'll do anyway for AdaCore's version. However, if you think
it's better to disable it entirely for the FSF version, I will
accept that.

gdb/ChangeLog:

        PR gdb/17854:
        * ada-lang.c (ada_get_symbol_cache): Set pspace_data->sym_cache
        when allocating a new one.

We need your fix from PR 17855 before we can commit this one, because
your testcase update reveals a regression as soon as the cache gets
activated (I tested your patch on x86_64-linux as part of this testing).

I'll start looking at re-caching entries obtained from cache. It seems
that it's a real waste of memory, but not bad enough to actually cause
a functional issue?

Thanks,
-- 
Joel

[-- Attachment #2: 0001-Ada-pspace_data-sym_cache-is-always-NULL.patch --]
[-- Type: text/x-diff, Size: 1877 bytes --]

From 13e46b9a4e665ccc9ae6d99f63e240f98f67d184 Mon Sep 17 00:00:00 2001
From: Joel Brobecker <brobecker@adacore.com>
Date: Mon, 19 Jan 2015 12:57:44 +0100
Subject: [PATCH] [Ada] pspace_data->sym_cache is always NULL

The Ada symbol cache has been designed to have one instance of that
of that cache per program space, and for each instance to be created
on-demand. ada_get_symbol_cache is the function responsible for both
lookup and creation on demand.

Unfortunately, ada_get_symbol_cache forgot to store the reference
to newly created caches, thus causing it to:
  - Leak old caches;
  - Allocate a new cache each time the cache is being searched or
    a new entry is to be inserted.

This patch fixes the issue by avoiding the use of the local variable,
which indirectly allowed the bug to happen. We manipulate the reference
in the program-space data instead.

gdb/ChangeLog:

        PR gdb/17854:
        * ada-lang.c (ada_get_symbol_cache): Set pspace_data->sym_cache
        when allocating a new one.
---
 gdb/ada-lang.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index f5753f1..2c98191 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -4404,15 +4404,14 @@ static struct ada_symbol_cache *
 ada_get_symbol_cache (struct program_space *pspace)
 {
   struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
-  struct ada_symbol_cache *sym_cache = pspace_data->sym_cache;
 
-  if (sym_cache == NULL)
+  if (pspace_data->sym_cache == NULL)
     {
-      sym_cache = XCNEW (struct ada_symbol_cache);
-      ada_init_symbol_cache (sym_cache);
+      pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
+      ada_init_symbol_cache (pspace_data->sym_cache);
     }
 
-  return sym_cache;
+  return pspace_data->sym_cache;
 }
 
 /* Clear all entries from the symbol cache.  */
-- 
1.9.1


  reply	other threads:[~2015-01-19 15:04 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-18  5:25 Doug Evans
2015-01-19 15:04 ` Joel Brobecker [this message]
2015-01-20 22:00   ` Doug Evans
2015-02-02  3:33   ` pushed: [Ada] pspace_data->sym_cache is always NULL (was: "ada symbol lookup cache: disable for 7.9?") Joel Brobecker
2015-02-02  3:41     ` pushed/7.9: " Joel Brobecker
2015-01-19 17:22 ` [PATCH] [Ada] Do not re-cache symbol-lookup result found from cache lookup Joel Brobecker
2015-02-02  3:34   ` pushed: " Joel Brobecker
2015-02-02  3:41     ` pushed/7.9: " Joel Brobecker

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=20150119150409.GE4041@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=xdje42@gmail.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).