aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/symtab.c40
2 files changed, 43 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f0b68ee..17704ab 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+Mon Jan 12 11:46:51 1998 Michael Snyder (msnyder@cleaver.cygnus.com)
+
+ * symtab.c: move rbreak_command from no_class to class_breakpoint
+ so it will be listed under "help breakpoints".
+
Sat Jan 10 14:58:04 1998 Stan Shebs <shebs@andros.cygnus.com>
* rdi-share/hostchan.c: Remove gettimeofday declaration.
diff --git a/gdb/symtab.c b/gdb/symtab.c
index c88d1b0..e79b9b5 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -93,6 +93,9 @@ lookup_symtab_1 PARAMS ((char *));
static void
cplusplus_hint PARAMS ((char *));
+static struct symbol *
+find_active_alias PARAMS ((struct symbol *sym, CORE_ADDR addr));
+
/* */
/* The single non-language-specific builtin type */
@@ -1025,7 +1028,7 @@ lookup_block_symbol (block, name, namespace)
?!? Is checking the current pc correct? Is this routine
ever called to look up a symbol from another context? */
if (SYMBOL_ALIASES (sym))
- sym = ref_search_val (sym, read_pc ());
+ sym = find_active_alias (sym, read_pc ());
sym_found = sym;
if (SYMBOL_CLASS (sym) != LOC_ARG &&
@@ -1044,6 +1047,39 @@ lookup_block_symbol (block, name, namespace)
return (sym_found); /* Will be NULL if not found. */
}
+/* Given a main symbol SYM and ADDR, search through the alias
+ list to determine if an alias is active at ADDR and return
+ the active alias.
+
+ If no alias is active, then return SYM. */
+
+static struct symbol *
+find_active_alias (sym, addr)
+ struct symbol *sym;
+ CORE_ADDR addr;
+{
+ struct range_list *r;
+ struct alias_list *aliases;
+
+ /* If we have aliases, check them first. */
+ aliases = SYMBOL_ALIASES (sym);
+
+ while (aliases)
+ {
+ if (!SYMBOL_RANGES (aliases->sym))
+ return aliases->sym;
+ for (r = SYMBOL_RANGES (aliases->sym); r; r = r->next)
+ {
+ if (r->start <= addr && r->end > addr)
+ return aliases->sym;
+ }
+ aliases = aliases->next;
+ }
+
+ /* Nothing found, return the main symbol. */
+ return sym;
+}
+
/* Return the symbol for the function which contains a specified
lexical block, described by a struct block BL. */
@@ -3512,7 +3548,7 @@ are listed.");
add_info ("sources", sources_info,
"Source files in the program.");
- add_com ("rbreak", no_class, rbreak_command,
+ add_com ("rbreak", class_breakpoint, rbreak_command,
"Set a breakpoint for all functions matching REGEXP.");
/* Initialize the one built-in type that isn't language dependent... */