Index: gdb/dictionary.c |
diff --git a/gdb/dictionary.c b/gdb/dictionary.c |
index 00c72e8a8a5513dff761708acc891dde7cc389a1..62362c5c82e19def22def297b528f936f55cb51d 100644 |
--- a/gdb/dictionary.c |
+++ b/gdb/dictionary.c |
@@ -498,6 +498,22 @@ dict_add_symbol (struct dictionary *dict, struct symbol *sym) |
(DICT_VECTOR (dict))->add_symbol (dict, sym); |
} |
+/* Utility to add a list of symbols to a dictionary. |
+ DICT must be an expandable dictionary. */ |
+ |
+void |
+dict_add_pending (struct dictionary *dict, const struct pending *symbol_list) |
+{ |
+ const struct pending *list; |
+ int i; |
+ |
+ for (list = symbol_list; list != NULL; list = list->next) |
+ { |
+ for (i = 0; i < list->nsyms; ++i) |
+ dict_add_symbol (dict, list->symbol[i]); |
+ } |
+} |
+ |
/* Initialize ITERATOR to point at the first symbol in DICT, and |
return that first symbol, or NULL if DICT is empty. */ |
@@ -800,6 +816,17 @@ dict_hash (const char *string0) |
hash = 0; |
while (*string) |
{ |
+ /* Ignore "TKB" suffixes. |
+ |
+ These are used by Ada for subprograms implementing a task body. |
+ For instance for a task T inside package Pck, the name of the |
+ subprogram implementing T's body is `pck__tTKB'. We need to |
+ ignore the "TKB" suffix because searches for this task body |
+ subprogram are going to be performed using `pck__t' (the encoded |
+ version of the natural name `pck.t'). */ |
+ if (strcmp (string, "TKB") == 0) |
+ return hash; |
+ |
switch (*string) |
{ |
case '$': |