This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[trunk + 7.4] filter duplicate results better
- From: Tom Tromey <tromey at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Fri, 16 Dec 2011 14:38:30 -0700
- Subject: [trunk + 7.4] filter duplicate results better
I'm checking this in on the trunk and the 7.4 branch.
On PPC I was seeing more duplicate locations; and debugging this I found
that the locations were the same after prologue skipping.
This changes linespec to do the filtering better: skip prologues before
checking for duplicates. It also makes the code a little cleaner.
Built and regtested on x86-64 F15 and the compile farm PPC box.
Tom
2011-12-16 Tom Tromey <tromey@redhat.com>
* linespec.c (collect_symbols): Call maybe_add_address after
calling symbol_to_sal.
(minsym_found): Call maybe_add_address here.
(search_minsyms_for_name): Don't call maybe_add_address.
>From 6461664c59122b659a7b133527be1b8a627afeff Mon Sep 17 00:00:00 2001
From: Tom Tromey <tromey@redhat.com>
Date: Fri, 16 Dec 2011 11:53:48 -0800
Subject: [PATCH 3/4] fix maybe_add_address stuff
---
gdb/ChangeLog | 7 +++++++
gdb/linespec.c | 27 ++++++++-------------------
2 files changed, 15 insertions(+), 19 deletions(-)
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 3d9c0c7..4d44478 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -2659,19 +2659,10 @@ collect_symbols (struct symbol *sym, void *data)
struct collect_info *info = data;
struct symtab_and_line sal;
- if ((SYMBOL_CLASS (sym) == LOC_STATIC
- && !info->state->funfirstline
- && !maybe_add_address (info->state->addr_set,
- SYMTAB_PSPACE (SYMBOL_SYMTAB (sym)),
- SYMBOL_VALUE_ADDRESS (sym)))
- || (SYMBOL_CLASS (sym) == LOC_BLOCK
- && !maybe_add_address (info->state->addr_set,
- SYMTAB_PSPACE (SYMBOL_SYMTAB (sym)),
- BLOCK_START (SYMBOL_BLOCK_VALUE (sym)))))
- {
- /* Nothing. */
- }
- else if (symbol_to_sal (&sal, info->state->funfirstline, sym))
+ if (symbol_to_sal (&sal, info->state->funfirstline, sym)
+ && maybe_add_address (info->state->addr_set,
+ SYMTAB_PSPACE (SYMBOL_SYMTAB (sym)),
+ sal.pc))
add_sal_to_sals (info->state, &info->result, &sal,
SYMBOL_NATURAL_NAME (sym));
@@ -2703,7 +2694,8 @@ minsym_found (struct linespec_state *self, struct objfile *objfile,
if (self->funfirstline)
skip_prologue_sal (&sal);
- add_sal_to_sals (self, result, &sal, SYMBOL_NATURAL_NAME (msymbol));
+ if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
+ add_sal_to_sals (self, result, &sal, SYMBOL_NATURAL_NAME (msymbol));
}
/* A helper struct which just holds a minimal symbol and the object
@@ -2842,11 +2834,8 @@ search_minsyms_for_name (struct collect_info *info, const char *name,
if (classify_mtype (MSYMBOL_TYPE (item->minsym)) != classification)
break;
- if (maybe_add_address (info->state->addr_set,
- item->objfile->pspace,
- SYMBOL_VALUE_ADDRESS (item->minsym)))
- minsym_found (info->state, item->objfile, item->minsym,
- &info->result);
+ minsym_found (info->state, item->objfile, item->minsym,
+ &info->result);
}
}
--
1.7.6.4