This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
RFC: filter minsyms more aggressively in linespec
- From: Tom Tromey <tromey at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Fri, 16 Dec 2011 14:46:40 -0700
- Subject: RFC: filter minsyms more aggressively in linespec
I'd appreciate some comments on this.
On PPC I get a surprising number of extra locations, even after the
filtering that is being done now.
One idea I had is the appended: exclude "weird" minimal symbols from
consideration if we have already seen some normal debuginfo matches.
This filters out some ".data" symbols on PPC; e.g., dw2-ifort-parameter
before the patch has:
(gdb) info b
Num Type Disp Enb Address What
2 breakpoint keep y <MULTIPLE>
2.1 y 0x0000000010010ad8 <func>
2.2 y 0x0000000010000558 <.func+12>
But, I really don't know if this makes any sense.
I'll try to learn some more next week to see.
Meanwhile, your opinion is solicited.
With this patch I see no regressions on x86-64, and the PPC regressions
are down to 6 or so. So, progress, but not total victory.
Tom
2011-12-16 Tom Tromey <tromey@redhat.com>
* linespec.c (search_minsyms_for_name): Reject some minsyms if a
full symbol was already found.
>From ba8da5d27f6025d7d5a23efaafe11c2a1aff68d3 Mon Sep 17 00:00:00 2001
From: Tom Tromey <tromey@redhat.com>
Date: Fri, 16 Dec 2011 12:55:16 -0800
Subject: [PATCH 4/4] somewhat ill-advised linespec change reject some minsyms
if we already found debuginfo
---
gdb/ChangeLog | 5 +++++
gdb/linespec.c | 16 +++++++++++++++-
2 files changed, 20 insertions(+), 1 deletions(-)
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 4d44478..2abd117 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -2815,6 +2815,7 @@ search_minsyms_for_name (struct collect_info *info, const char *name,
int classification;
int ix;
minsym_and_objfile_d *item;
+ int found_already = info->result.nelts > 0;
qsort (VEC_address (minsym_and_objfile_d, local.msyms),
VEC_length (minsym_and_objfile_d, local.msyms),
@@ -2831,7 +2832,20 @@ search_minsyms_for_name (struct collect_info *info, const char *name,
VEC_iterate (minsym_and_objfile_d, local.msyms, ix, item);
++ix)
{
- if (classify_mtype (MSYMBOL_TYPE (item->minsym)) != classification)
+ enum minimal_symbol_type t = MSYMBOL_TYPE (item->minsym);
+
+ if (classify_mtype (t) != classification)
+ break;
+
+ /* If we are looking for functions, and if we already
+ found some in the debug info, then exclude some oddball
+ ones here. */
+ if (info->state->funfirstline
+ && found_already
+ && t != mst_text
+ && t != mst_text_gnu_ifunc
+ && t != mst_file_text
+ && t != mst_solib_trampoline)
break;
minsym_found (info->state, item->objfile, item->minsym,
--
1.7.6.4