This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]