xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/symtab.c (revision a8c74629f602faa0ccf8a463757d7baf858bbf3a)
1 /* Symbol table lookup for the GNU debugger, GDB.
2 
3    Copyright (C) 1986-2019 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "symtab.h"
22 #include "gdbtypes.h"
23 #include "gdbcore.h"
24 #include "frame.h"
25 #include "target.h"
26 #include "value.h"
27 #include "symfile.h"
28 #include "objfiles.h"
29 #include "gdbcmd.h"
30 #include "gdb_regex.h"
31 #include "expression.h"
32 #include "language.h"
33 #include "demangle.h"
34 #include "inferior.h"
35 #include "source.h"
36 #include "filenames.h"		/* for FILENAME_CMP */
37 #include "objc-lang.h"
38 #include "d-lang.h"
39 #include "ada-lang.h"
40 #include "go-lang.h"
41 #include "p-lang.h"
42 #include "addrmap.h"
43 #include "cli/cli-utils.h"
44 #include "cli/cli-style.h"
45 #include "fnmatch.h"
46 #include "hashtab.h"
47 #include "typeprint.h"
48 
49 #include "gdb_obstack.h"
50 #include "block.h"
51 #include "dictionary.h"
52 
53 #include <sys/types.h>
54 #include <fcntl.h>
55 #include <sys/stat.h>
56 #include <ctype.h>
57 #include "cp-abi.h"
58 #include "cp-support.h"
59 #include "observable.h"
60 #include "solist.h"
61 #include "macrotab.h"
62 #include "macroscope.h"
63 
64 #include "parser-defs.h"
65 #include "completer.h"
66 #include "progspace-and-thread.h"
67 #include "common/gdb_optional.h"
68 #include "filename-seen-cache.h"
69 #include "arch-utils.h"
70 #include <algorithm>
71 #include "common/pathstuff.h"
72 
73 /* Forward declarations for local functions.  */
74 
75 static void rbreak_command (const char *, int);
76 
77 static int find_line_common (struct linetable *, int, int *, int);
78 
79 static struct block_symbol
80   lookup_symbol_aux (const char *name,
81 		     symbol_name_match_type match_type,
82 		     const struct block *block,
83 		     const domain_enum domain,
84 		     enum language language,
85 		     struct field_of_this_result *);
86 
87 static
88 struct block_symbol lookup_local_symbol (const char *name,
89 					 symbol_name_match_type match_type,
90 					 const struct block *block,
91 					 const domain_enum domain,
92 					 enum language language);
93 
94 static struct block_symbol
95   lookup_symbol_in_objfile (struct objfile *objfile, int block_index,
96 			    const char *name, const domain_enum domain);
97 
98 /* See symtab.h.  */
99 const struct block_symbol null_block_symbol = { NULL, NULL };
100 
101 /* Program space key for finding name and language of "main".  */
102 
103 static const struct program_space_data *main_progspace_key;
104 
105 /* Type of the data stored on the program space.  */
106 
107 struct main_info
108 {
109   /* Name of "main".  */
110 
111   char *name_of_main;
112 
113   /* Language of "main".  */
114 
115   enum language language_of_main;
116 };
117 
118 /* Program space key for finding its symbol cache.  */
119 
120 static const struct program_space_data *symbol_cache_key;
121 
122 /* The default symbol cache size.
123    There is no extra cpu cost for large N (except when flushing the cache,
124    which is rare).  The value here is just a first attempt.  A better default
125    value may be higher or lower.  A prime number can make up for a bad hash
126    computation, so that's why the number is what it is.  */
127 #define DEFAULT_SYMBOL_CACHE_SIZE 1021
128 
129 /* The maximum symbol cache size.
130    There's no method to the decision of what value to use here, other than
131    there's no point in allowing a user typo to make gdb consume all memory.  */
132 #define MAX_SYMBOL_CACHE_SIZE (1024*1024)
133 
134 /* symbol_cache_lookup returns this if a previous lookup failed to find the
135    symbol in any objfile.  */
136 #define SYMBOL_LOOKUP_FAILED \
137  ((struct block_symbol) {(struct symbol *) 1, NULL})
138 #define SYMBOL_LOOKUP_FAILED_P(SIB) (SIB.symbol == (struct symbol *) 1)
139 
140 /* Recording lookups that don't find the symbol is just as important, if not
141    more so, than recording found symbols.  */
142 
143 enum symbol_cache_slot_state
144 {
145   SYMBOL_SLOT_UNUSED,
146   SYMBOL_SLOT_NOT_FOUND,
147   SYMBOL_SLOT_FOUND
148 };
149 
150 struct symbol_cache_slot
151 {
152   enum symbol_cache_slot_state state;
153 
154   /* The objfile that was current when the symbol was looked up.
155      This is only needed for global blocks, but for simplicity's sake
156      we allocate the space for both.  If data shows the extra space used
157      for static blocks is a problem, we can split things up then.
158 
159      Global blocks need cache lookup to include the objfile context because
160      we need to account for gdbarch_iterate_over_objfiles_in_search_order
161      which can traverse objfiles in, effectively, any order, depending on
162      the current objfile, thus affecting which symbol is found.  Normally,
163      only the current objfile is searched first, and then the rest are
164      searched in recorded order; but putting cache lookup inside
165      gdbarch_iterate_over_objfiles_in_search_order would be awkward.
166      Instead we just make the current objfile part of the context of
167      cache lookup.  This means we can record the same symbol multiple times,
168      each with a different "current objfile" that was in effect when the
169      lookup was saved in the cache, but cache space is pretty cheap.  */
170   const struct objfile *objfile_context;
171 
172   union
173   {
174     struct block_symbol found;
175     struct
176     {
177       char *name;
178       domain_enum domain;
179     } not_found;
180   } value;
181 };
182 
183 /* Symbols don't specify global vs static block.
184    So keep them in separate caches.  */
185 
186 struct block_symbol_cache
187 {
188   unsigned int hits;
189   unsigned int misses;
190   unsigned int collisions;
191 
192   /* SYMBOLS is a variable length array of this size.
193      One can imagine that in general one cache (global/static) should be a
194      fraction of the size of the other, but there's no data at the moment
195      on which to decide.  */
196   unsigned int size;
197 
198   struct symbol_cache_slot symbols[1];
199 };
200 
201 /* The symbol cache.
202 
203    Searching for symbols in the static and global blocks over multiple objfiles
204    again and again can be slow, as can searching very big objfiles.  This is a
205    simple cache to improve symbol lookup performance, which is critical to
206    overall gdb performance.
207 
208    Symbols are hashed on the name, its domain, and block.
209    They are also hashed on their objfile for objfile-specific lookups.  */
210 
211 struct symbol_cache
212 {
213   struct block_symbol_cache *global_symbols;
214   struct block_symbol_cache *static_symbols;
215 };
216 
217 /* When non-zero, print debugging messages related to symtab creation.  */
218 unsigned int symtab_create_debug = 0;
219 
220 /* When non-zero, print debugging messages related to symbol lookup.  */
221 unsigned int symbol_lookup_debug = 0;
222 
223 /* The size of the cache is staged here.  */
224 static unsigned int new_symbol_cache_size = DEFAULT_SYMBOL_CACHE_SIZE;
225 
226 /* The current value of the symbol cache size.
227    This is saved so that if the user enters a value too big we can restore
228    the original value from here.  */
229 static unsigned int symbol_cache_size = DEFAULT_SYMBOL_CACHE_SIZE;
230 
231 /* Non-zero if a file may be known by two different basenames.
232    This is the uncommon case, and significantly slows down gdb.
233    Default set to "off" to not slow down the common case.  */
234 int basenames_may_differ = 0;
235 
236 /* Allow the user to configure the debugger behavior with respect
237    to multiple-choice menus when more than one symbol matches during
238    a symbol lookup.  */
239 
240 const char multiple_symbols_ask[] = "ask";
241 const char multiple_symbols_all[] = "all";
242 const char multiple_symbols_cancel[] = "cancel";
243 static const char *const multiple_symbols_modes[] =
244 {
245   multiple_symbols_ask,
246   multiple_symbols_all,
247   multiple_symbols_cancel,
248   NULL
249 };
250 static const char *multiple_symbols_mode = multiple_symbols_all;
251 
252 /* Read-only accessor to AUTO_SELECT_MODE.  */
253 
254 const char *
255 multiple_symbols_select_mode (void)
256 {
257   return multiple_symbols_mode;
258 }
259 
260 /* Return the name of a domain_enum.  */
261 
262 const char *
263 domain_name (domain_enum e)
264 {
265   switch (e)
266     {
267     case UNDEF_DOMAIN: return "UNDEF_DOMAIN";
268     case VAR_DOMAIN: return "VAR_DOMAIN";
269     case STRUCT_DOMAIN: return "STRUCT_DOMAIN";
270     case MODULE_DOMAIN: return "MODULE_DOMAIN";
271     case LABEL_DOMAIN: return "LABEL_DOMAIN";
272     case COMMON_BLOCK_DOMAIN: return "COMMON_BLOCK_DOMAIN";
273     default: gdb_assert_not_reached ("bad domain_enum");
274     }
275 }
276 
277 /* Return the name of a search_domain .  */
278 
279 const char *
280 search_domain_name (enum search_domain e)
281 {
282   switch (e)
283     {
284     case VARIABLES_DOMAIN: return "VARIABLES_DOMAIN";
285     case FUNCTIONS_DOMAIN: return "FUNCTIONS_DOMAIN";
286     case TYPES_DOMAIN: return "TYPES_DOMAIN";
287     case ALL_DOMAIN: return "ALL_DOMAIN";
288     default: gdb_assert_not_reached ("bad search_domain");
289     }
290 }
291 
292 /* See symtab.h.  */
293 
294 struct symtab *
295 compunit_primary_filetab (const struct compunit_symtab *cust)
296 {
297   gdb_assert (COMPUNIT_FILETABS (cust) != NULL);
298 
299   /* The primary file symtab is the first one in the list.  */
300   return COMPUNIT_FILETABS (cust);
301 }
302 
303 /* See symtab.h.  */
304 
305 enum language
306 compunit_language (const struct compunit_symtab *cust)
307 {
308   struct symtab *symtab = compunit_primary_filetab (cust);
309 
310 /* The language of the compunit symtab is the language of its primary
311    source file.  */
312   return SYMTAB_LANGUAGE (symtab);
313 }
314 
315 /* See symtab.h.  */
316 
317 bool
318 minimal_symbol::data_p () const
319 {
320   return type == mst_data
321     || type == mst_bss
322     || type == mst_abs
323     || type == mst_file_data
324     || type == mst_file_bss;
325 }
326 
327 /* See symtab.h.  */
328 
329 bool
330 minimal_symbol::text_p () const
331 {
332   return type == mst_text
333     || type == mst_text_gnu_ifunc
334     || type == mst_data_gnu_ifunc
335     || type == mst_slot_got_plt
336     || type == mst_solib_trampoline
337     || type == mst_file_text;
338 }
339 
340 /* See whether FILENAME matches SEARCH_NAME using the rule that we
341    advertise to the user.  (The manual's description of linespecs
342    describes what we advertise).  Returns true if they match, false
343    otherwise.  */
344 
345 int
346 compare_filenames_for_search (const char *filename, const char *search_name)
347 {
348   int len = strlen (filename);
349   size_t search_len = strlen (search_name);
350 
351   if (len < search_len)
352     return 0;
353 
354   /* The tail of FILENAME must match.  */
355   if (FILENAME_CMP (filename + len - search_len, search_name) != 0)
356     return 0;
357 
358   /* Either the names must completely match, or the character
359      preceding the trailing SEARCH_NAME segment of FILENAME must be a
360      directory separator.
361 
362      The check !IS_ABSOLUTE_PATH ensures SEARCH_NAME "/dir/file.c"
363      cannot match FILENAME "/path//dir/file.c" - as user has requested
364      absolute path.  The sama applies for "c:\file.c" possibly
365      incorrectly hypothetically matching "d:\dir\c:\file.c".
366 
367      The HAS_DRIVE_SPEC purpose is to make FILENAME "c:file.c"
368      compatible with SEARCH_NAME "file.c".  In such case a compiler had
369      to put the "c:file.c" name into debug info.  Such compatibility
370      works only on GDB built for DOS host.  */
371   return (len == search_len
372 	  || (!IS_ABSOLUTE_PATH (search_name)
373 	      && IS_DIR_SEPARATOR (filename[len - search_len - 1]))
374 	  || (HAS_DRIVE_SPEC (filename)
375 	      && STRIP_DRIVE_SPEC (filename) == &filename[len - search_len]));
376 }
377 
378 /* Same as compare_filenames_for_search, but for glob-style patterns.
379    Heads up on the order of the arguments.  They match the order of
380    compare_filenames_for_search, but it's the opposite of the order of
381    arguments to gdb_filename_fnmatch.  */
382 
383 int
384 compare_glob_filenames_for_search (const char *filename,
385 				   const char *search_name)
386 {
387   /* We rely on the property of glob-style patterns with FNM_FILE_NAME that
388      all /s have to be explicitly specified.  */
389   int file_path_elements = count_path_elements (filename);
390   int search_path_elements = count_path_elements (search_name);
391 
392   if (search_path_elements > file_path_elements)
393     return 0;
394 
395   if (IS_ABSOLUTE_PATH (search_name))
396     {
397       return (search_path_elements == file_path_elements
398 	      && gdb_filename_fnmatch (search_name, filename,
399 				       FNM_FILE_NAME | FNM_NOESCAPE) == 0);
400     }
401 
402   {
403     const char *file_to_compare
404       = strip_leading_path_elements (filename,
405 				     file_path_elements - search_path_elements);
406 
407     return gdb_filename_fnmatch (search_name, file_to_compare,
408 				 FNM_FILE_NAME | FNM_NOESCAPE) == 0;
409   }
410 }
411 
412 /* Check for a symtab of a specific name by searching some symtabs.
413    This is a helper function for callbacks of iterate_over_symtabs.
414 
415    If NAME is not absolute, then REAL_PATH is NULL
416    If NAME is absolute, then REAL_PATH is the gdb_realpath form of NAME.
417 
418    The return value, NAME, REAL_PATH and CALLBACK are identical to the
419    `map_symtabs_matching_filename' method of quick_symbol_functions.
420 
421    FIRST and AFTER_LAST indicate the range of compunit symtabs to search.
422    Each symtab within the specified compunit symtab is also searched.
423    AFTER_LAST is one past the last compunit symtab to search; NULL means to
424    search until the end of the list.  */
425 
426 bool
427 iterate_over_some_symtabs (const char *name,
428 			   const char *real_path,
429 			   struct compunit_symtab *first,
430 			   struct compunit_symtab *after_last,
431 			   gdb::function_view<bool (symtab *)> callback)
432 {
433   struct compunit_symtab *cust;
434   const char* base_name = lbasename (name);
435 
436   for (cust = first; cust != NULL && cust != after_last; cust = cust->next)
437     {
438       for (symtab *s : compunit_filetabs (cust))
439 	{
440 	  if (compare_filenames_for_search (s->filename, name))
441 	    {
442 	      if (callback (s))
443 		return true;
444 	      continue;
445 	    }
446 
447 	  /* Before we invoke realpath, which can get expensive when many
448 	     files are involved, do a quick comparison of the basenames.  */
449 	  if (! basenames_may_differ
450 	      && FILENAME_CMP (base_name, lbasename (s->filename)) != 0)
451 	    continue;
452 
453 	  if (compare_filenames_for_search (symtab_to_fullname (s), name))
454 	    {
455 	      if (callback (s))
456 		return true;
457 	      continue;
458 	    }
459 
460 	  /* If the user gave us an absolute path, try to find the file in
461 	     this symtab and use its absolute path.  */
462 	  if (real_path != NULL)
463 	    {
464 	      const char *fullname = symtab_to_fullname (s);
465 
466 	      gdb_assert (IS_ABSOLUTE_PATH (real_path));
467 	      gdb_assert (IS_ABSOLUTE_PATH (name));
468 	      if (FILENAME_CMP (real_path, fullname) == 0)
469 		{
470 		  if (callback (s))
471 		    return true;
472 		  continue;
473 		}
474 	    }
475 	}
476     }
477 
478   return false;
479 }
480 
481 /* Check for a symtab of a specific name; first in symtabs, then in
482    psymtabs.  *If* there is no '/' in the name, a match after a '/'
483    in the symtab filename will also work.
484 
485    Calls CALLBACK with each symtab that is found.  If CALLBACK returns
486    true, the search stops.  */
487 
488 void
489 iterate_over_symtabs (const char *name,
490 		      gdb::function_view<bool (symtab *)> callback)
491 {
492   gdb::unique_xmalloc_ptr<char> real_path;
493 
494   /* Here we are interested in canonicalizing an absolute path, not
495      absolutizing a relative path.  */
496   if (IS_ABSOLUTE_PATH (name))
497     {
498       real_path = gdb_realpath (name);
499       gdb_assert (IS_ABSOLUTE_PATH (real_path.get ()));
500     }
501 
502   for (objfile *objfile : current_program_space->objfiles ())
503     {
504       if (iterate_over_some_symtabs (name, real_path.get (),
505 				     objfile->compunit_symtabs, NULL,
506 				     callback))
507 	return;
508     }
509 
510   /* Same search rules as above apply here, but now we look thru the
511      psymtabs.  */
512 
513   for (objfile *objfile : current_program_space->objfiles ())
514     {
515       if (objfile->sf
516 	  && objfile->sf->qf->map_symtabs_matching_filename (objfile,
517 							     name,
518 							     real_path.get (),
519 							     callback))
520 	return;
521     }
522 }
523 
524 /* A wrapper for iterate_over_symtabs that returns the first matching
525    symtab, or NULL.  */
526 
527 struct symtab *
528 lookup_symtab (const char *name)
529 {
530   struct symtab *result = NULL;
531 
532   iterate_over_symtabs (name, [&] (symtab *symtab)
533     {
534       result = symtab;
535       return true;
536     });
537 
538   return result;
539 }
540 
541 
542 /* Mangle a GDB method stub type.  This actually reassembles the pieces of the
543    full method name, which consist of the class name (from T), the unadorned
544    method name from METHOD_ID, and the signature for the specific overload,
545    specified by SIGNATURE_ID.  Note that this function is g++ specific.  */
546 
547 char *
548 gdb_mangle_name (struct type *type, int method_id, int signature_id)
549 {
550   int mangled_name_len;
551   char *mangled_name;
552   struct fn_field *f = TYPE_FN_FIELDLIST1 (type, method_id);
553   struct fn_field *method = &f[signature_id];
554   const char *field_name = TYPE_FN_FIELDLIST_NAME (type, method_id);
555   const char *physname = TYPE_FN_FIELD_PHYSNAME (f, signature_id);
556   const char *newname = TYPE_NAME (type);
557 
558   /* Does the form of physname indicate that it is the full mangled name
559      of a constructor (not just the args)?  */
560   int is_full_physname_constructor;
561 
562   int is_constructor;
563   int is_destructor = is_destructor_name (physname);
564   /* Need a new type prefix.  */
565   const char *const_prefix = method->is_const ? "C" : "";
566   const char *volatile_prefix = method->is_volatile ? "V" : "";
567   char buf[20];
568   int len = (newname == NULL ? 0 : strlen (newname));
569 
570   /* Nothing to do if physname already contains a fully mangled v3 abi name
571      or an operator name.  */
572   if ((physname[0] == '_' && physname[1] == 'Z')
573       || is_operator_name (field_name))
574     return xstrdup (physname);
575 
576   is_full_physname_constructor = is_constructor_name (physname);
577 
578   is_constructor = is_full_physname_constructor
579     || (newname && strcmp (field_name, newname) == 0);
580 
581   if (!is_destructor)
582     is_destructor = (startswith (physname, "__dt"));
583 
584   if (is_destructor || is_full_physname_constructor)
585     {
586       mangled_name = (char *) xmalloc (strlen (physname) + 1);
587       strcpy (mangled_name, physname);
588       return mangled_name;
589     }
590 
591   if (len == 0)
592     {
593       xsnprintf (buf, sizeof (buf), "__%s%s", const_prefix, volatile_prefix);
594     }
595   else if (physname[0] == 't' || physname[0] == 'Q')
596     {
597       /* The physname for template and qualified methods already includes
598          the class name.  */
599       xsnprintf (buf, sizeof (buf), "__%s%s", const_prefix, volatile_prefix);
600       newname = NULL;
601       len = 0;
602     }
603   else
604     {
605       xsnprintf (buf, sizeof (buf), "__%s%s%d", const_prefix,
606 		 volatile_prefix, len);
607     }
608   mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
609 		      + strlen (buf) + len + strlen (physname) + 1);
610 
611   mangled_name = (char *) xmalloc (mangled_name_len);
612   if (is_constructor)
613     mangled_name[0] = '\0';
614   else
615     strcpy (mangled_name, field_name);
616 
617   strcat (mangled_name, buf);
618   /* If the class doesn't have a name, i.e. newname NULL, then we just
619      mangle it using 0 for the length of the class.  Thus it gets mangled
620      as something starting with `::' rather than `classname::'.  */
621   if (newname != NULL)
622     strcat (mangled_name, newname);
623 
624   strcat (mangled_name, physname);
625   return (mangled_name);
626 }
627 
628 /* Set the demangled name of GSYMBOL to NAME.  NAME must be already
629    correctly allocated.  */
630 
631 void
632 symbol_set_demangled_name (struct general_symbol_info *gsymbol,
633                            const char *name,
634                            struct obstack *obstack)
635 {
636   if (gsymbol->language == language_ada)
637     {
638       if (name == NULL)
639 	{
640 	  gsymbol->ada_mangled = 0;
641 	  gsymbol->language_specific.obstack = obstack;
642 	}
643       else
644 	{
645 	  gsymbol->ada_mangled = 1;
646 	  gsymbol->language_specific.demangled_name = name;
647 	}
648     }
649   else
650     gsymbol->language_specific.demangled_name = name;
651 }
652 
653 /* Return the demangled name of GSYMBOL.  */
654 
655 const char *
656 symbol_get_demangled_name (const struct general_symbol_info *gsymbol)
657 {
658   if (gsymbol->language == language_ada)
659     {
660       if (!gsymbol->ada_mangled)
661 	return NULL;
662       /* Fall through.  */
663     }
664 
665   return gsymbol->language_specific.demangled_name;
666 }
667 
668 
669 /* Initialize the language dependent portion of a symbol
670    depending upon the language for the symbol.  */
671 
672 void
673 symbol_set_language (struct general_symbol_info *gsymbol,
674                      enum language language,
675 		     struct obstack *obstack)
676 {
677   gsymbol->language = language;
678   if (gsymbol->language == language_cplus
679       || gsymbol->language == language_d
680       || gsymbol->language == language_go
681       || gsymbol->language == language_objc
682       || gsymbol->language == language_fortran)
683     {
684       symbol_set_demangled_name (gsymbol, NULL, obstack);
685     }
686   else if (gsymbol->language == language_ada)
687     {
688       gdb_assert (gsymbol->ada_mangled == 0);
689       gsymbol->language_specific.obstack = obstack;
690     }
691   else
692     {
693       memset (&gsymbol->language_specific, 0,
694 	      sizeof (gsymbol->language_specific));
695     }
696 }
697 
698 /* Functions to initialize a symbol's mangled name.  */
699 
700 /* Objects of this type are stored in the demangled name hash table.  */
701 struct demangled_name_entry
702 {
703   const char *mangled;
704   char demangled[1];
705 };
706 
707 /* Hash function for the demangled name hash.  */
708 
709 static hashval_t
710 hash_demangled_name_entry (const void *data)
711 {
712   const struct demangled_name_entry *e
713     = (const struct demangled_name_entry *) data;
714 
715   return htab_hash_string (e->mangled);
716 }
717 
718 /* Equality function for the demangled name hash.  */
719 
720 static int
721 eq_demangled_name_entry (const void *a, const void *b)
722 {
723   const struct demangled_name_entry *da
724     = (const struct demangled_name_entry *) a;
725   const struct demangled_name_entry *db
726     = (const struct demangled_name_entry *) b;
727 
728   return strcmp (da->mangled, db->mangled) == 0;
729 }
730 
731 /* Create the hash table used for demangled names.  Each hash entry is
732    a pair of strings; one for the mangled name and one for the demangled
733    name.  The entry is hashed via just the mangled name.  */
734 
735 static void
736 create_demangled_names_hash (struct objfile_per_bfd_storage *per_bfd)
737 {
738   /* Choose 256 as the starting size of the hash table, somewhat arbitrarily.
739      The hash table code will round this up to the next prime number.
740      Choosing a much larger table size wastes memory, and saves only about
741      1% in symbol reading.  */
742 
743   per_bfd->demangled_names_hash = htab_create_alloc
744     (256, hash_demangled_name_entry, eq_demangled_name_entry,
745      NULL, xcalloc, xfree);
746 }
747 
748 /* Try to determine the demangled name for a symbol, based on the
749    language of that symbol.  If the language is set to language_auto,
750    it will attempt to find any demangling algorithm that works and
751    then set the language appropriately.  The returned name is allocated
752    by the demangler and should be xfree'd.  */
753 
754 static char *
755 symbol_find_demangled_name (struct general_symbol_info *gsymbol,
756 			    const char *mangled)
757 {
758   char *demangled = NULL;
759   int i;
760 
761   if (gsymbol->language == language_unknown)
762     gsymbol->language = language_auto;
763 
764   if (gsymbol->language != language_auto)
765     {
766       const struct language_defn *lang = language_def (gsymbol->language);
767 
768       language_sniff_from_mangled_name (lang, mangled, &demangled);
769       return demangled;
770     }
771 
772   for (i = language_unknown; i < nr_languages; ++i)
773     {
774       enum language l = (enum language) i;
775       const struct language_defn *lang = language_def (l);
776 
777       if (language_sniff_from_mangled_name (lang, mangled, &demangled))
778 	{
779 	  gsymbol->language = l;
780 	  return demangled;
781 	}
782     }
783 
784   return NULL;
785 }
786 
787 /* Set both the mangled and demangled (if any) names for GSYMBOL based
788    on LINKAGE_NAME and LEN.  Ordinarily, NAME is copied onto the
789    objfile's obstack; but if COPY_NAME is 0 and if NAME is
790    NUL-terminated, then this function assumes that NAME is already
791    correctly saved (either permanently or with a lifetime tied to the
792    objfile), and it will not be copied.
793 
794    The hash table corresponding to OBJFILE is used, and the memory
795    comes from the per-BFD storage_obstack.  LINKAGE_NAME is copied,
796    so the pointer can be discarded after calling this function.  */
797 
798 void
799 symbol_set_names (struct general_symbol_info *gsymbol,
800 		  const char *linkage_name, int len, int copy_name,
801 		  struct objfile_per_bfd_storage *per_bfd)
802 {
803   struct demangled_name_entry **slot;
804   /* A 0-terminated copy of the linkage name.  */
805   const char *linkage_name_copy;
806   struct demangled_name_entry entry;
807 
808   if (gsymbol->language == language_ada)
809     {
810       /* In Ada, we do the symbol lookups using the mangled name, so
811          we can save some space by not storing the demangled name.  */
812       if (!copy_name)
813 	gsymbol->name = linkage_name;
814       else
815 	{
816 	  char *name = (char *) obstack_alloc (&per_bfd->storage_obstack,
817 					       len + 1);
818 
819 	  memcpy (name, linkage_name, len);
820 	  name[len] = '\0';
821 	  gsymbol->name = name;
822 	}
823       symbol_set_demangled_name (gsymbol, NULL, &per_bfd->storage_obstack);
824 
825       return;
826     }
827 
828   if (per_bfd->demangled_names_hash == NULL)
829     create_demangled_names_hash (per_bfd);
830 
831   if (linkage_name[len] != '\0')
832     {
833       char *alloc_name;
834 
835       alloc_name = (char *) alloca (len + 1);
836       memcpy (alloc_name, linkage_name, len);
837       alloc_name[len] = '\0';
838 
839       linkage_name_copy = alloc_name;
840     }
841   else
842     linkage_name_copy = linkage_name;
843 
844   /* Set the symbol language.  */
845   char *demangled_name_ptr
846     = symbol_find_demangled_name (gsymbol, linkage_name_copy);
847   gdb::unique_xmalloc_ptr<char> demangled_name (demangled_name_ptr);
848 
849   entry.mangled = linkage_name_copy;
850   slot = ((struct demangled_name_entry **)
851 	  htab_find_slot (per_bfd->demangled_names_hash,
852 			  &entry, INSERT));
853 
854   /* If this name is not in the hash table, add it.  */
855   if (*slot == NULL
856       /* A C version of the symbol may have already snuck into the table.
857 	 This happens to, e.g., main.init (__go_init_main).  Cope.  */
858       || (gsymbol->language == language_go
859 	  && (*slot)->demangled[0] == '\0'))
860     {
861       int demangled_len = demangled_name ? strlen (demangled_name.get ()) : 0;
862 
863       /* Suppose we have demangled_name==NULL, copy_name==0, and
864 	 linkage_name_copy==linkage_name.  In this case, we already have the
865 	 mangled name saved, and we don't have a demangled name.  So,
866 	 you might think we could save a little space by not recording
867 	 this in the hash table at all.
868 
869 	 It turns out that it is actually important to still save such
870 	 an entry in the hash table, because storing this name gives
871 	 us better bcache hit rates for partial symbols.  */
872       if (!copy_name && linkage_name_copy == linkage_name)
873 	{
874 	  *slot
875 	    = ((struct demangled_name_entry *)
876 	       obstack_alloc (&per_bfd->storage_obstack,
877 			      offsetof (struct demangled_name_entry, demangled)
878 			      + demangled_len + 1));
879 	  (*slot)->mangled = linkage_name;
880 	}
881       else
882 	{
883 	  char *mangled_ptr;
884 
885 	  /* If we must copy the mangled name, put it directly after
886 	     the demangled name so we can have a single
887 	     allocation.  */
888 	  *slot
889 	    = ((struct demangled_name_entry *)
890 	       obstack_alloc (&per_bfd->storage_obstack,
891 			      offsetof (struct demangled_name_entry, demangled)
892 			      + len + demangled_len + 2));
893 	  mangled_ptr = &((*slot)->demangled[demangled_len + 1]);
894 	  strcpy (mangled_ptr, linkage_name_copy);
895 	  (*slot)->mangled = mangled_ptr;
896 	}
897 
898       if (demangled_name != NULL)
899 	strcpy ((*slot)->demangled, demangled_name.get());
900       else
901 	(*slot)->demangled[0] = '\0';
902     }
903 
904   gsymbol->name = (*slot)->mangled;
905   if ((*slot)->demangled[0] != '\0')
906     symbol_set_demangled_name (gsymbol, (*slot)->demangled,
907 			       &per_bfd->storage_obstack);
908   else
909     symbol_set_demangled_name (gsymbol, NULL, &per_bfd->storage_obstack);
910 }
911 
912 /* Return the source code name of a symbol.  In languages where
913    demangling is necessary, this is the demangled name.  */
914 
915 const char *
916 symbol_natural_name (const struct general_symbol_info *gsymbol)
917 {
918   switch (gsymbol->language)
919     {
920     case language_cplus:
921     case language_d:
922     case language_go:
923     case language_objc:
924     case language_fortran:
925       if (symbol_get_demangled_name (gsymbol) != NULL)
926 	return symbol_get_demangled_name (gsymbol);
927       break;
928     case language_ada:
929       return ada_decode_symbol (gsymbol);
930     default:
931       break;
932     }
933   return gsymbol->name;
934 }
935 
936 /* Return the demangled name for a symbol based on the language for
937    that symbol.  If no demangled name exists, return NULL.  */
938 
939 const char *
940 symbol_demangled_name (const struct general_symbol_info *gsymbol)
941 {
942   const char *dem_name = NULL;
943 
944   switch (gsymbol->language)
945     {
946     case language_cplus:
947     case language_d:
948     case language_go:
949     case language_objc:
950     case language_fortran:
951       dem_name = symbol_get_demangled_name (gsymbol);
952       break;
953     case language_ada:
954       dem_name = ada_decode_symbol (gsymbol);
955       break;
956     default:
957       break;
958     }
959   return dem_name;
960 }
961 
962 /* Return the search name of a symbol---generally the demangled or
963    linkage name of the symbol, depending on how it will be searched for.
964    If there is no distinct demangled name, then returns the same value
965    (same pointer) as SYMBOL_LINKAGE_NAME.  */
966 
967 const char *
968 symbol_search_name (const struct general_symbol_info *gsymbol)
969 {
970   if (gsymbol->language == language_ada)
971     return gsymbol->name;
972   else
973     return symbol_natural_name (gsymbol);
974 }
975 
976 /* See symtab.h.  */
977 
978 bool
979 symbol_matches_search_name (const struct general_symbol_info *gsymbol,
980 			    const lookup_name_info &name)
981 {
982   symbol_name_matcher_ftype *name_match
983     = get_symbol_name_matcher (language_def (gsymbol->language), name);
984   return name_match (symbol_search_name (gsymbol), name, NULL);
985 }
986 
987 
988 
989 /* Return 1 if the two sections are the same, or if they could
990    plausibly be copies of each other, one in an original object
991    file and another in a separated debug file.  */
992 
993 int
994 matching_obj_sections (struct obj_section *obj_first,
995 		       struct obj_section *obj_second)
996 {
997   asection *first = obj_first? obj_first->the_bfd_section : NULL;
998   asection *second = obj_second? obj_second->the_bfd_section : NULL;
999 
1000   /* If they're the same section, then they match.  */
1001   if (first == second)
1002     return 1;
1003 
1004   /* If either is NULL, give up.  */
1005   if (first == NULL || second == NULL)
1006     return 0;
1007 
1008   /* This doesn't apply to absolute symbols.  */
1009   if (first->owner == NULL || second->owner == NULL)
1010     return 0;
1011 
1012   /* If they're in the same object file, they must be different sections.  */
1013   if (first->owner == second->owner)
1014     return 0;
1015 
1016   /* Check whether the two sections are potentially corresponding.  They must
1017      have the same size, address, and name.  We can't compare section indexes,
1018      which would be more reliable, because some sections may have been
1019      stripped.  */
1020   if (bfd_get_section_size (first) != bfd_get_section_size (second))
1021     return 0;
1022 
1023   /* In-memory addresses may start at a different offset, relativize them.  */
1024   if (bfd_get_section_vma (first->owner, first)
1025       - bfd_get_start_address (first->owner)
1026       != bfd_get_section_vma (second->owner, second)
1027 	 - bfd_get_start_address (second->owner))
1028     return 0;
1029 
1030   if (bfd_get_section_name (first->owner, first) == NULL
1031       || bfd_get_section_name (second->owner, second) == NULL
1032       || strcmp (bfd_get_section_name (first->owner, first),
1033 		 bfd_get_section_name (second->owner, second)) != 0)
1034     return 0;
1035 
1036   /* Otherwise check that they are in corresponding objfiles.  */
1037 
1038   struct objfile *obj = NULL;
1039   for (objfile *objfile : current_program_space->objfiles ())
1040     if (objfile->obfd == first->owner)
1041       {
1042 	obj = objfile;
1043 	break;
1044       }
1045   gdb_assert (obj != NULL);
1046 
1047   if (obj->separate_debug_objfile != NULL
1048       && obj->separate_debug_objfile->obfd == second->owner)
1049     return 1;
1050   if (obj->separate_debug_objfile_backlink != NULL
1051       && obj->separate_debug_objfile_backlink->obfd == second->owner)
1052     return 1;
1053 
1054   return 0;
1055 }
1056 
1057 /* See symtab.h.  */
1058 
1059 void
1060 expand_symtab_containing_pc (CORE_ADDR pc, struct obj_section *section)
1061 {
1062   struct bound_minimal_symbol msymbol;
1063 
1064   /* If we know that this is not a text address, return failure.  This is
1065      necessary because we loop based on texthigh and textlow, which do
1066      not include the data ranges.  */
1067   msymbol = lookup_minimal_symbol_by_pc_section (pc, section);
1068   if (msymbol.minsym && msymbol.minsym->data_p ())
1069     return;
1070 
1071   for (objfile *objfile : current_program_space->objfiles ())
1072     {
1073       struct compunit_symtab *cust = NULL;
1074 
1075       if (objfile->sf)
1076 	cust = objfile->sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol,
1077 							      pc, section, 0);
1078       if (cust)
1079 	return;
1080     }
1081 }
1082 
1083 /* Hash function for the symbol cache.  */
1084 
1085 static unsigned int
1086 hash_symbol_entry (const struct objfile *objfile_context,
1087 		   const char *name, domain_enum domain)
1088 {
1089   unsigned int hash = (uintptr_t) objfile_context;
1090 
1091   if (name != NULL)
1092     hash += htab_hash_string (name);
1093 
1094   /* Because of symbol_matches_domain we need VAR_DOMAIN and STRUCT_DOMAIN
1095      to map to the same slot.  */
1096   if (domain == STRUCT_DOMAIN)
1097     hash += VAR_DOMAIN * 7;
1098   else
1099     hash += domain * 7;
1100 
1101   return hash;
1102 }
1103 
1104 /* Equality function for the symbol cache.  */
1105 
1106 static int
1107 eq_symbol_entry (const struct symbol_cache_slot *slot,
1108 		 const struct objfile *objfile_context,
1109 		 const char *name, domain_enum domain)
1110 {
1111   const char *slot_name;
1112   domain_enum slot_domain;
1113 
1114   if (slot->state == SYMBOL_SLOT_UNUSED)
1115     return 0;
1116 
1117   if (slot->objfile_context != objfile_context)
1118     return 0;
1119 
1120   if (slot->state == SYMBOL_SLOT_NOT_FOUND)
1121     {
1122       slot_name = slot->value.not_found.name;
1123       slot_domain = slot->value.not_found.domain;
1124     }
1125   else
1126     {
1127       slot_name = SYMBOL_SEARCH_NAME (slot->value.found.symbol);
1128       slot_domain = SYMBOL_DOMAIN (slot->value.found.symbol);
1129     }
1130 
1131   /* NULL names match.  */
1132   if (slot_name == NULL && name == NULL)
1133     {
1134       /* But there's no point in calling symbol_matches_domain in the
1135 	 SYMBOL_SLOT_FOUND case.  */
1136       if (slot_domain != domain)
1137 	return 0;
1138     }
1139   else if (slot_name != NULL && name != NULL)
1140     {
1141       /* It's important that we use the same comparison that was done
1142 	 the first time through.  If the slot records a found symbol,
1143 	 then this means using the symbol name comparison function of
1144 	 the symbol's language with SYMBOL_SEARCH_NAME.  See
1145 	 dictionary.c.  It also means using symbol_matches_domain for
1146 	 found symbols.  See block.c.
1147 
1148 	 If the slot records a not-found symbol, then require a precise match.
1149 	 We could still be lax with whitespace like strcmp_iw though.  */
1150 
1151       if (slot->state == SYMBOL_SLOT_NOT_FOUND)
1152 	{
1153 	  if (strcmp (slot_name, name) != 0)
1154 	    return 0;
1155 	  if (slot_domain != domain)
1156 	    return 0;
1157 	}
1158       else
1159 	{
1160 	  struct symbol *sym = slot->value.found.symbol;
1161 	  lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
1162 
1163 	  if (!SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name))
1164 	    return 0;
1165 
1166 	  if (!symbol_matches_domain (SYMBOL_LANGUAGE (sym),
1167 				      slot_domain, domain))
1168 	    return 0;
1169 	}
1170     }
1171   else
1172     {
1173       /* Only one name is NULL.  */
1174       return 0;
1175     }
1176 
1177   return 1;
1178 }
1179 
1180 /* Given a cache of size SIZE, return the size of the struct (with variable
1181    length array) in bytes.  */
1182 
1183 static size_t
1184 symbol_cache_byte_size (unsigned int size)
1185 {
1186   return (sizeof (struct block_symbol_cache)
1187 	  + ((size - 1) * sizeof (struct symbol_cache_slot)));
1188 }
1189 
1190 /* Resize CACHE.  */
1191 
1192 static void
1193 resize_symbol_cache (struct symbol_cache *cache, unsigned int new_size)
1194 {
1195   /* If there's no change in size, don't do anything.
1196      All caches have the same size, so we can just compare with the size
1197      of the global symbols cache.  */
1198   if ((cache->global_symbols != NULL
1199        && cache->global_symbols->size == new_size)
1200       || (cache->global_symbols == NULL
1201 	  && new_size == 0))
1202     return;
1203 
1204   xfree (cache->global_symbols);
1205   xfree (cache->static_symbols);
1206 
1207   if (new_size == 0)
1208     {
1209       cache->global_symbols = NULL;
1210       cache->static_symbols = NULL;
1211     }
1212   else
1213     {
1214       size_t total_size = symbol_cache_byte_size (new_size);
1215 
1216       cache->global_symbols
1217 	= (struct block_symbol_cache *) xcalloc (1, total_size);
1218       cache->static_symbols
1219 	= (struct block_symbol_cache *) xcalloc (1, total_size);
1220       cache->global_symbols->size = new_size;
1221       cache->static_symbols->size = new_size;
1222     }
1223 }
1224 
1225 /* Make a symbol cache of size SIZE.  */
1226 
1227 static struct symbol_cache *
1228 make_symbol_cache (unsigned int size)
1229 {
1230   struct symbol_cache *cache;
1231 
1232   cache = XCNEW (struct symbol_cache);
1233   resize_symbol_cache (cache, symbol_cache_size);
1234   return cache;
1235 }
1236 
1237 /* Free the space used by CACHE.  */
1238 
1239 static void
1240 free_symbol_cache (struct symbol_cache *cache)
1241 {
1242   xfree (cache->global_symbols);
1243   xfree (cache->static_symbols);
1244   xfree (cache);
1245 }
1246 
1247 /* Return the symbol cache of PSPACE.
1248    Create one if it doesn't exist yet.  */
1249 
1250 static struct symbol_cache *
1251 get_symbol_cache (struct program_space *pspace)
1252 {
1253   struct symbol_cache *cache
1254     = (struct symbol_cache *) program_space_data (pspace, symbol_cache_key);
1255 
1256   if (cache == NULL)
1257     {
1258       cache = make_symbol_cache (symbol_cache_size);
1259       set_program_space_data (pspace, symbol_cache_key, cache);
1260     }
1261 
1262   return cache;
1263 }
1264 
1265 /* Delete the symbol cache of PSPACE.
1266    Called when PSPACE is destroyed.  */
1267 
1268 static void
1269 symbol_cache_cleanup (struct program_space *pspace, void *data)
1270 {
1271   struct symbol_cache *cache = (struct symbol_cache *) data;
1272 
1273   free_symbol_cache (cache);
1274 }
1275 
1276 /* Set the size of the symbol cache in all program spaces.  */
1277 
1278 static void
1279 set_symbol_cache_size (unsigned int new_size)
1280 {
1281   struct program_space *pspace;
1282 
1283   ALL_PSPACES (pspace)
1284     {
1285       struct symbol_cache *cache
1286 	= (struct symbol_cache *) program_space_data (pspace, symbol_cache_key);
1287 
1288       /* The pspace could have been created but not have a cache yet.  */
1289       if (cache != NULL)
1290 	resize_symbol_cache (cache, new_size);
1291     }
1292 }
1293 
1294 /* Called when symbol-cache-size is set.  */
1295 
1296 static void
1297 set_symbol_cache_size_handler (const char *args, int from_tty,
1298 			       struct cmd_list_element *c)
1299 {
1300   if (new_symbol_cache_size > MAX_SYMBOL_CACHE_SIZE)
1301     {
1302       /* Restore the previous value.
1303 	 This is the value the "show" command prints.  */
1304       new_symbol_cache_size = symbol_cache_size;
1305 
1306       error (_("Symbol cache size is too large, max is %u."),
1307 	     MAX_SYMBOL_CACHE_SIZE);
1308     }
1309   symbol_cache_size = new_symbol_cache_size;
1310 
1311   set_symbol_cache_size (symbol_cache_size);
1312 }
1313 
1314 /* Lookup symbol NAME,DOMAIN in BLOCK in the symbol cache of PSPACE.
1315    OBJFILE_CONTEXT is the current objfile, which may be NULL.
1316    The result is the symbol if found, SYMBOL_LOOKUP_FAILED if a previous lookup
1317    failed (and thus this one will too), or NULL if the symbol is not present
1318    in the cache.
1319    If the symbol is not present in the cache, then *BSC_PTR and *SLOT_PTR are
1320    set to the cache and slot of the symbol to save the result of a full lookup
1321    attempt.  */
1322 
1323 static struct block_symbol
1324 symbol_cache_lookup (struct symbol_cache *cache,
1325 		     struct objfile *objfile_context, int block,
1326 		     const char *name, domain_enum domain,
1327 		     struct block_symbol_cache **bsc_ptr,
1328 		     struct symbol_cache_slot **slot_ptr)
1329 {
1330   struct block_symbol_cache *bsc;
1331   unsigned int hash;
1332   struct symbol_cache_slot *slot;
1333 
1334   if (block == GLOBAL_BLOCK)
1335     bsc = cache->global_symbols;
1336   else
1337     bsc = cache->static_symbols;
1338   if (bsc == NULL)
1339     {
1340       *bsc_ptr = NULL;
1341       *slot_ptr = NULL;
1342       return (struct block_symbol) {NULL, NULL};
1343     }
1344 
1345   hash = hash_symbol_entry (objfile_context, name, domain);
1346   slot = bsc->symbols + hash % bsc->size;
1347 
1348   if (eq_symbol_entry (slot, objfile_context, name, domain))
1349     {
1350       if (symbol_lookup_debug)
1351 	fprintf_unfiltered (gdb_stdlog,
1352 			    "%s block symbol cache hit%s for %s, %s\n",
1353 			    block == GLOBAL_BLOCK ? "Global" : "Static",
1354 			    slot->state == SYMBOL_SLOT_NOT_FOUND
1355 			    ? " (not found)" : "",
1356 			    name, domain_name (domain));
1357       ++bsc->hits;
1358       if (slot->state == SYMBOL_SLOT_NOT_FOUND)
1359 	return SYMBOL_LOOKUP_FAILED;
1360       return slot->value.found;
1361     }
1362 
1363   /* Symbol is not present in the cache.  */
1364 
1365   *bsc_ptr = bsc;
1366   *slot_ptr = slot;
1367 
1368   if (symbol_lookup_debug)
1369     {
1370       fprintf_unfiltered (gdb_stdlog,
1371 			  "%s block symbol cache miss for %s, %s\n",
1372 			  block == GLOBAL_BLOCK ? "Global" : "Static",
1373 			  name, domain_name (domain));
1374     }
1375   ++bsc->misses;
1376   return (struct block_symbol) {NULL, NULL};
1377 }
1378 
1379 /* Clear out SLOT.  */
1380 
1381 static void
1382 symbol_cache_clear_slot (struct symbol_cache_slot *slot)
1383 {
1384   if (slot->state == SYMBOL_SLOT_NOT_FOUND)
1385     xfree (slot->value.not_found.name);
1386   slot->state = SYMBOL_SLOT_UNUSED;
1387 }
1388 
1389 /* Mark SYMBOL as found in SLOT.
1390    OBJFILE_CONTEXT is the current objfile when the lookup was done, or NULL
1391    if it's not needed to distinguish lookups (STATIC_BLOCK).  It is *not*
1392    necessarily the objfile the symbol was found in.  */
1393 
1394 static void
1395 symbol_cache_mark_found (struct block_symbol_cache *bsc,
1396 			 struct symbol_cache_slot *slot,
1397 			 struct objfile *objfile_context,
1398 			 struct symbol *symbol,
1399 			 const struct block *block)
1400 {
1401   if (bsc == NULL)
1402     return;
1403   if (slot->state != SYMBOL_SLOT_UNUSED)
1404     {
1405       ++bsc->collisions;
1406       symbol_cache_clear_slot (slot);
1407     }
1408   slot->state = SYMBOL_SLOT_FOUND;
1409   slot->objfile_context = objfile_context;
1410   slot->value.found.symbol = symbol;
1411   slot->value.found.block = block;
1412 }
1413 
1414 /* Mark symbol NAME, DOMAIN as not found in SLOT.
1415    OBJFILE_CONTEXT is the current objfile when the lookup was done, or NULL
1416    if it's not needed to distinguish lookups (STATIC_BLOCK).  */
1417 
1418 static void
1419 symbol_cache_mark_not_found (struct block_symbol_cache *bsc,
1420 			     struct symbol_cache_slot *slot,
1421 			     struct objfile *objfile_context,
1422 			     const char *name, domain_enum domain)
1423 {
1424   if (bsc == NULL)
1425     return;
1426   if (slot->state != SYMBOL_SLOT_UNUSED)
1427     {
1428       ++bsc->collisions;
1429       symbol_cache_clear_slot (slot);
1430     }
1431   slot->state = SYMBOL_SLOT_NOT_FOUND;
1432   slot->objfile_context = objfile_context;
1433   slot->value.not_found.name = xstrdup (name);
1434   slot->value.not_found.domain = domain;
1435 }
1436 
1437 /* Flush the symbol cache of PSPACE.  */
1438 
1439 static void
1440 symbol_cache_flush (struct program_space *pspace)
1441 {
1442   struct symbol_cache *cache
1443     = (struct symbol_cache *) program_space_data (pspace, symbol_cache_key);
1444   int pass;
1445 
1446   if (cache == NULL)
1447     return;
1448   if (cache->global_symbols == NULL)
1449     {
1450       gdb_assert (symbol_cache_size == 0);
1451       gdb_assert (cache->static_symbols == NULL);
1452       return;
1453     }
1454 
1455   /* If the cache is untouched since the last flush, early exit.
1456      This is important for performance during the startup of a program linked
1457      with 100s (or 1000s) of shared libraries.  */
1458   if (cache->global_symbols->misses == 0
1459       && cache->static_symbols->misses == 0)
1460     return;
1461 
1462   gdb_assert (cache->global_symbols->size == symbol_cache_size);
1463   gdb_assert (cache->static_symbols->size == symbol_cache_size);
1464 
1465   for (pass = 0; pass < 2; ++pass)
1466     {
1467       struct block_symbol_cache *bsc
1468 	= pass == 0 ? cache->global_symbols : cache->static_symbols;
1469       unsigned int i;
1470 
1471       for (i = 0; i < bsc->size; ++i)
1472 	symbol_cache_clear_slot (&bsc->symbols[i]);
1473     }
1474 
1475   cache->global_symbols->hits = 0;
1476   cache->global_symbols->misses = 0;
1477   cache->global_symbols->collisions = 0;
1478   cache->static_symbols->hits = 0;
1479   cache->static_symbols->misses = 0;
1480   cache->static_symbols->collisions = 0;
1481 }
1482 
1483 /* Dump CACHE.  */
1484 
1485 static void
1486 symbol_cache_dump (const struct symbol_cache *cache)
1487 {
1488   int pass;
1489 
1490   if (cache->global_symbols == NULL)
1491     {
1492       printf_filtered ("  <disabled>\n");
1493       return;
1494     }
1495 
1496   for (pass = 0; pass < 2; ++pass)
1497     {
1498       const struct block_symbol_cache *bsc
1499 	= pass == 0 ? cache->global_symbols : cache->static_symbols;
1500       unsigned int i;
1501 
1502       if (pass == 0)
1503 	printf_filtered ("Global symbols:\n");
1504       else
1505 	printf_filtered ("Static symbols:\n");
1506 
1507       for (i = 0; i < bsc->size; ++i)
1508 	{
1509 	  const struct symbol_cache_slot *slot = &bsc->symbols[i];
1510 
1511 	  QUIT;
1512 
1513 	  switch (slot->state)
1514 	    {
1515 	    case SYMBOL_SLOT_UNUSED:
1516 	      break;
1517 	    case SYMBOL_SLOT_NOT_FOUND:
1518 	      printf_filtered ("  [%4u] = %s, %s %s (not found)\n", i,
1519 			       host_address_to_string (slot->objfile_context),
1520 			       slot->value.not_found.name,
1521 			       domain_name (slot->value.not_found.domain));
1522 	      break;
1523 	    case SYMBOL_SLOT_FOUND:
1524 	      {
1525 		struct symbol *found = slot->value.found.symbol;
1526 		const struct objfile *context = slot->objfile_context;
1527 
1528 		printf_filtered ("  [%4u] = %s, %s %s\n", i,
1529 				 host_address_to_string (context),
1530 				 SYMBOL_PRINT_NAME (found),
1531 				 domain_name (SYMBOL_DOMAIN (found)));
1532 		break;
1533 	      }
1534 	    }
1535 	}
1536     }
1537 }
1538 
1539 /* The "mt print symbol-cache" command.  */
1540 
1541 static void
1542 maintenance_print_symbol_cache (const char *args, int from_tty)
1543 {
1544   struct program_space *pspace;
1545 
1546   ALL_PSPACES (pspace)
1547     {
1548       struct symbol_cache *cache;
1549 
1550       printf_filtered (_("Symbol cache for pspace %d\n%s:\n"),
1551 		       pspace->num,
1552 		       pspace->symfile_object_file != NULL
1553 		       ? objfile_name (pspace->symfile_object_file)
1554 		       : "(no object file)");
1555 
1556       /* If the cache hasn't been created yet, avoid creating one.  */
1557       cache
1558 	= (struct symbol_cache *) program_space_data (pspace, symbol_cache_key);
1559       if (cache == NULL)
1560 	printf_filtered ("  <empty>\n");
1561       else
1562 	symbol_cache_dump (cache);
1563     }
1564 }
1565 
1566 /* The "mt flush-symbol-cache" command.  */
1567 
1568 static void
1569 maintenance_flush_symbol_cache (const char *args, int from_tty)
1570 {
1571   struct program_space *pspace;
1572 
1573   ALL_PSPACES (pspace)
1574     {
1575       symbol_cache_flush (pspace);
1576     }
1577 }
1578 
1579 /* Print usage statistics of CACHE.  */
1580 
1581 static void
1582 symbol_cache_stats (struct symbol_cache *cache)
1583 {
1584   int pass;
1585 
1586   if (cache->global_symbols == NULL)
1587     {
1588       printf_filtered ("  <disabled>\n");
1589       return;
1590     }
1591 
1592   for (pass = 0; pass < 2; ++pass)
1593     {
1594       const struct block_symbol_cache *bsc
1595 	= pass == 0 ? cache->global_symbols : cache->static_symbols;
1596 
1597       QUIT;
1598 
1599       if (pass == 0)
1600 	printf_filtered ("Global block cache stats:\n");
1601       else
1602 	printf_filtered ("Static block cache stats:\n");
1603 
1604       printf_filtered ("  size:       %u\n", bsc->size);
1605       printf_filtered ("  hits:       %u\n", bsc->hits);
1606       printf_filtered ("  misses:     %u\n", bsc->misses);
1607       printf_filtered ("  collisions: %u\n", bsc->collisions);
1608     }
1609 }
1610 
1611 /* The "mt print symbol-cache-statistics" command.  */
1612 
1613 static void
1614 maintenance_print_symbol_cache_statistics (const char *args, int from_tty)
1615 {
1616   struct program_space *pspace;
1617 
1618   ALL_PSPACES (pspace)
1619     {
1620       struct symbol_cache *cache;
1621 
1622       printf_filtered (_("Symbol cache statistics for pspace %d\n%s:\n"),
1623 		       pspace->num,
1624 		       pspace->symfile_object_file != NULL
1625 		       ? objfile_name (pspace->symfile_object_file)
1626 		       : "(no object file)");
1627 
1628       /* If the cache hasn't been created yet, avoid creating one.  */
1629       cache
1630 	= (struct symbol_cache *) program_space_data (pspace, symbol_cache_key);
1631       if (cache == NULL)
1632  	printf_filtered ("  empty, no stats available\n");
1633       else
1634 	symbol_cache_stats (cache);
1635     }
1636 }
1637 
1638 /* This module's 'new_objfile' observer.  */
1639 
1640 static void
1641 symtab_new_objfile_observer (struct objfile *objfile)
1642 {
1643   /* Ideally we'd use OBJFILE->pspace, but OBJFILE may be NULL.  */
1644   symbol_cache_flush (current_program_space);
1645 }
1646 
1647 /* This module's 'free_objfile' observer.  */
1648 
1649 static void
1650 symtab_free_objfile_observer (struct objfile *objfile)
1651 {
1652   symbol_cache_flush (objfile->pspace);
1653 }
1654 
1655 /* Debug symbols usually don't have section information.  We need to dig that
1656    out of the minimal symbols and stash that in the debug symbol.  */
1657 
1658 void
1659 fixup_section (struct general_symbol_info *ginfo,
1660 	       CORE_ADDR addr, struct objfile *objfile)
1661 {
1662   struct minimal_symbol *msym;
1663 
1664   /* First, check whether a minimal symbol with the same name exists
1665      and points to the same address.  The address check is required
1666      e.g. on PowerPC64, where the minimal symbol for a function will
1667      point to the function descriptor, while the debug symbol will
1668      point to the actual function code.  */
1669   msym = lookup_minimal_symbol_by_pc_name (addr, ginfo->name, objfile);
1670   if (msym)
1671     ginfo->section = MSYMBOL_SECTION (msym);
1672   else
1673     {
1674       /* Static, function-local variables do appear in the linker
1675 	 (minimal) symbols, but are frequently given names that won't
1676 	 be found via lookup_minimal_symbol().  E.g., it has been
1677 	 observed in frv-uclinux (ELF) executables that a static,
1678 	 function-local variable named "foo" might appear in the
1679 	 linker symbols as "foo.6" or "foo.3".  Thus, there is no
1680 	 point in attempting to extend the lookup-by-name mechanism to
1681 	 handle this case due to the fact that there can be multiple
1682 	 names.
1683 
1684 	 So, instead, search the section table when lookup by name has
1685 	 failed.  The ``addr'' and ``endaddr'' fields may have already
1686 	 been relocated.  If so, the relocation offset (i.e. the
1687 	 ANOFFSET value) needs to be subtracted from these values when
1688 	 performing the comparison.  We unconditionally subtract it,
1689 	 because, when no relocation has been performed, the ANOFFSET
1690 	 value will simply be zero.
1691 
1692 	 The address of the symbol whose section we're fixing up HAS
1693 	 NOT BEEN adjusted (relocated) yet.  It can't have been since
1694 	 the section isn't yet known and knowing the section is
1695 	 necessary in order to add the correct relocation value.  In
1696 	 other words, we wouldn't even be in this function (attempting
1697 	 to compute the section) if it were already known.
1698 
1699 	 Note that it is possible to search the minimal symbols
1700 	 (subtracting the relocation value if necessary) to find the
1701 	 matching minimal symbol, but this is overkill and much less
1702 	 efficient.  It is not necessary to find the matching minimal
1703 	 symbol, only its section.
1704 
1705 	 Note that this technique (of doing a section table search)
1706 	 can fail when unrelocated section addresses overlap.  For
1707 	 this reason, we still attempt a lookup by name prior to doing
1708 	 a search of the section table.  */
1709 
1710       struct obj_section *s;
1711       int fallback = -1;
1712 
1713       ALL_OBJFILE_OSECTIONS (objfile, s)
1714 	{
1715 	  int idx = s - objfile->sections;
1716 	  CORE_ADDR offset = ANOFFSET (objfile->section_offsets, idx);
1717 
1718 	  if (fallback == -1)
1719 	    fallback = idx;
1720 
1721 	  if (obj_section_addr (s) - offset <= addr
1722 	      && addr < obj_section_endaddr (s) - offset)
1723 	    {
1724 	      ginfo->section = idx;
1725 	      return;
1726 	    }
1727 	}
1728 
1729       /* If we didn't find the section, assume it is in the first
1730 	 section.  If there is no allocated section, then it hardly
1731 	 matters what we pick, so just pick zero.  */
1732       if (fallback == -1)
1733 	ginfo->section = 0;
1734       else
1735 	ginfo->section = fallback;
1736     }
1737 }
1738 
1739 struct symbol *
1740 fixup_symbol_section (struct symbol *sym, struct objfile *objfile)
1741 {
1742   CORE_ADDR addr;
1743 
1744   if (!sym)
1745     return NULL;
1746 
1747   if (!SYMBOL_OBJFILE_OWNED (sym))
1748     return sym;
1749 
1750   /* We either have an OBJFILE, or we can get at it from the sym's
1751      symtab.  Anything else is a bug.  */
1752   gdb_assert (objfile || symbol_symtab (sym));
1753 
1754   if (objfile == NULL)
1755     objfile = symbol_objfile (sym);
1756 
1757   if (SYMBOL_OBJ_SECTION (objfile, sym))
1758     return sym;
1759 
1760   /* We should have an objfile by now.  */
1761   gdb_assert (objfile);
1762 
1763   switch (SYMBOL_CLASS (sym))
1764     {
1765     case LOC_STATIC:
1766     case LOC_LABEL:
1767       addr = SYMBOL_VALUE_ADDRESS (sym);
1768       break;
1769     case LOC_BLOCK:
1770       addr = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
1771       break;
1772 
1773     default:
1774       /* Nothing else will be listed in the minsyms -- no use looking
1775 	 it up.  */
1776       return sym;
1777     }
1778 
1779   fixup_section (&sym->ginfo, addr, objfile);
1780 
1781   return sym;
1782 }
1783 
1784 /* See symtab.h.  */
1785 
1786 demangle_for_lookup_info::demangle_for_lookup_info
1787   (const lookup_name_info &lookup_name, language lang)
1788 {
1789   demangle_result_storage storage;
1790 
1791   if (lookup_name.ignore_parameters () && lang == language_cplus)
1792     {
1793       gdb::unique_xmalloc_ptr<char> without_params
1794 	= cp_remove_params_if_any (lookup_name.name ().c_str (),
1795 				   lookup_name.completion_mode ());
1796 
1797       if (without_params != NULL)
1798 	{
1799 	  if (lookup_name.match_type () != symbol_name_match_type::SEARCH_NAME)
1800 	    m_demangled_name = demangle_for_lookup (without_params.get (),
1801 						    lang, storage);
1802 	  return;
1803 	}
1804     }
1805 
1806   if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
1807     m_demangled_name = lookup_name.name ();
1808   else
1809     m_demangled_name = demangle_for_lookup (lookup_name.name ().c_str (),
1810 					    lang, storage);
1811 }
1812 
1813 /* See symtab.h.  */
1814 
1815 const lookup_name_info &
1816 lookup_name_info::match_any ()
1817 {
1818   /* Lookup any symbol that "" would complete.  I.e., this matches all
1819      symbol names.  */
1820   static const lookup_name_info lookup_name ({}, symbol_name_match_type::FULL,
1821 					     true);
1822 
1823   return lookup_name;
1824 }
1825 
1826 /* Compute the demangled form of NAME as used by the various symbol
1827    lookup functions.  The result can either be the input NAME
1828    directly, or a pointer to a buffer owned by the STORAGE object.
1829 
1830    For Ada, this function just returns NAME, unmodified.
1831    Normally, Ada symbol lookups are performed using the encoded name
1832    rather than the demangled name, and so it might seem to make sense
1833    for this function to return an encoded version of NAME.
1834    Unfortunately, we cannot do this, because this function is used in
1835    circumstances where it is not appropriate to try to encode NAME.
1836    For instance, when displaying the frame info, we demangle the name
1837    of each parameter, and then perform a symbol lookup inside our
1838    function using that demangled name.  In Ada, certain functions
1839    have internally-generated parameters whose name contain uppercase
1840    characters.  Encoding those name would result in those uppercase
1841    characters to become lowercase, and thus cause the symbol lookup
1842    to fail.  */
1843 
1844 const char *
1845 demangle_for_lookup (const char *name, enum language lang,
1846 		     demangle_result_storage &storage)
1847 {
1848   /* If we are using C++, D, or Go, demangle the name before doing a
1849      lookup, so we can always binary search.  */
1850   if (lang == language_cplus)
1851     {
1852       char *demangled_name = gdb_demangle (name, DMGL_ANSI | DMGL_PARAMS);
1853       if (demangled_name != NULL)
1854 	return storage.set_malloc_ptr (demangled_name);
1855 
1856       /* If we were given a non-mangled name, canonicalize it
1857 	 according to the language (so far only for C++).  */
1858       std::string canon = cp_canonicalize_string (name);
1859       if (!canon.empty ())
1860 	return storage.swap_string (canon);
1861     }
1862   else if (lang == language_d)
1863     {
1864       char *demangled_name = d_demangle (name, 0);
1865       if (demangled_name != NULL)
1866 	return storage.set_malloc_ptr (demangled_name);
1867     }
1868   else if (lang == language_go)
1869     {
1870       char *demangled_name = go_demangle (name, 0);
1871       if (demangled_name != NULL)
1872 	return storage.set_malloc_ptr (demangled_name);
1873     }
1874 
1875   return name;
1876 }
1877 
1878 /* See symtab.h.  */
1879 
1880 unsigned int
1881 search_name_hash (enum language language, const char *search_name)
1882 {
1883   return language_def (language)->la_search_name_hash (search_name);
1884 }
1885 
1886 /* See symtab.h.
1887 
1888    This function (or rather its subordinates) have a bunch of loops and
1889    it would seem to be attractive to put in some QUIT's (though I'm not really
1890    sure whether it can run long enough to be really important).  But there
1891    are a few calls for which it would appear to be bad news to quit
1892    out of here: e.g., find_proc_desc in alpha-mdebug-tdep.c.  (Note
1893    that there is C++ code below which can error(), but that probably
1894    doesn't affect these calls since they are looking for a known
1895    variable and thus can probably assume it will never hit the C++
1896    code).  */
1897 
1898 struct block_symbol
1899 lookup_symbol_in_language (const char *name, const struct block *block,
1900 			   const domain_enum domain, enum language lang,
1901 			   struct field_of_this_result *is_a_field_of_this)
1902 {
1903   demangle_result_storage storage;
1904   const char *modified_name = demangle_for_lookup (name, lang, storage);
1905 
1906   return lookup_symbol_aux (modified_name,
1907 			    symbol_name_match_type::FULL,
1908 			    block, domain, lang,
1909 			    is_a_field_of_this);
1910 }
1911 
1912 /* See symtab.h.  */
1913 
1914 struct block_symbol
1915 lookup_symbol (const char *name, const struct block *block,
1916 	       domain_enum domain,
1917 	       struct field_of_this_result *is_a_field_of_this)
1918 {
1919   return lookup_symbol_in_language (name, block, domain,
1920 				    current_language->la_language,
1921 				    is_a_field_of_this);
1922 }
1923 
1924 /* See symtab.h.  */
1925 
1926 struct block_symbol
1927 lookup_symbol_search_name (const char *search_name, const struct block *block,
1928 			   domain_enum domain)
1929 {
1930   return lookup_symbol_aux (search_name, symbol_name_match_type::SEARCH_NAME,
1931 			    block, domain, language_asm, NULL);
1932 }
1933 
1934 /* See symtab.h.  */
1935 
1936 struct block_symbol
1937 lookup_language_this (const struct language_defn *lang,
1938 		      const struct block *block)
1939 {
1940   if (lang->la_name_of_this == NULL || block == NULL)
1941     return (struct block_symbol) {NULL, NULL};
1942 
1943   if (symbol_lookup_debug > 1)
1944     {
1945       struct objfile *objfile = lookup_objfile_from_block (block);
1946 
1947       fprintf_unfiltered (gdb_stdlog,
1948 			  "lookup_language_this (%s, %s (objfile %s))",
1949 			  lang->la_name, host_address_to_string (block),
1950 			  objfile_debug_name (objfile));
1951     }
1952 
1953   while (block)
1954     {
1955       struct symbol *sym;
1956 
1957       sym = block_lookup_symbol (block, lang->la_name_of_this,
1958 				 symbol_name_match_type::SEARCH_NAME,
1959 				 VAR_DOMAIN);
1960       if (sym != NULL)
1961 	{
1962 	  if (symbol_lookup_debug > 1)
1963 	    {
1964 	      fprintf_unfiltered (gdb_stdlog, " = %s (%s, block %s)\n",
1965 				  SYMBOL_PRINT_NAME (sym),
1966 				  host_address_to_string (sym),
1967 				  host_address_to_string (block));
1968 	    }
1969 	  return (struct block_symbol) {sym, block};
1970 	}
1971       if (BLOCK_FUNCTION (block))
1972 	break;
1973       block = BLOCK_SUPERBLOCK (block);
1974     }
1975 
1976   if (symbol_lookup_debug > 1)
1977     fprintf_unfiltered (gdb_stdlog, " = NULL\n");
1978   return (struct block_symbol) {NULL, NULL};
1979 }
1980 
1981 /* Given TYPE, a structure/union,
1982    return 1 if the component named NAME from the ultimate target
1983    structure/union is defined, otherwise, return 0.  */
1984 
1985 static int
1986 check_field (struct type *type, const char *name,
1987 	     struct field_of_this_result *is_a_field_of_this)
1988 {
1989   int i;
1990 
1991   /* The type may be a stub.  */
1992   type = check_typedef (type);
1993 
1994   for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
1995     {
1996       const char *t_field_name = TYPE_FIELD_NAME (type, i);
1997 
1998       if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
1999 	{
2000 	  is_a_field_of_this->type = type;
2001 	  is_a_field_of_this->field = &TYPE_FIELD (type, i);
2002 	  return 1;
2003 	}
2004     }
2005 
2006   /* C++: If it was not found as a data field, then try to return it
2007      as a pointer to a method.  */
2008 
2009   for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
2010     {
2011       if (strcmp_iw (TYPE_FN_FIELDLIST_NAME (type, i), name) == 0)
2012 	{
2013 	  is_a_field_of_this->type = type;
2014 	  is_a_field_of_this->fn_field = &TYPE_FN_FIELDLIST (type, i);
2015 	  return 1;
2016 	}
2017     }
2018 
2019   for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
2020     if (check_field (TYPE_BASECLASS (type, i), name, is_a_field_of_this))
2021       return 1;
2022 
2023   return 0;
2024 }
2025 
2026 /* Behave like lookup_symbol except that NAME is the natural name
2027    (e.g., demangled name) of the symbol that we're looking for.  */
2028 
2029 static struct block_symbol
2030 lookup_symbol_aux (const char *name, symbol_name_match_type match_type,
2031 		   const struct block *block,
2032 		   const domain_enum domain, enum language language,
2033 		   struct field_of_this_result *is_a_field_of_this)
2034 {
2035   struct block_symbol result;
2036   const struct language_defn *langdef;
2037 
2038   if (symbol_lookup_debug)
2039     {
2040       struct objfile *objfile = lookup_objfile_from_block (block);
2041 
2042       fprintf_unfiltered (gdb_stdlog,
2043 			  "lookup_symbol_aux (%s, %s (objfile %s), %s, %s)\n",
2044 			  name, host_address_to_string (block),
2045 			  objfile != NULL
2046 			  ? objfile_debug_name (objfile) : "NULL",
2047 			  domain_name (domain), language_str (language));
2048     }
2049 
2050   /* Make sure we do something sensible with is_a_field_of_this, since
2051      the callers that set this parameter to some non-null value will
2052      certainly use it later.  If we don't set it, the contents of
2053      is_a_field_of_this are undefined.  */
2054   if (is_a_field_of_this != NULL)
2055     memset (is_a_field_of_this, 0, sizeof (*is_a_field_of_this));
2056 
2057   /* Search specified block and its superiors.  Don't search
2058      STATIC_BLOCK or GLOBAL_BLOCK.  */
2059 
2060   result = lookup_local_symbol (name, match_type, block, domain, language);
2061   if (result.symbol != NULL)
2062     {
2063       if (symbol_lookup_debug)
2064 	{
2065 	  fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
2066 			      host_address_to_string (result.symbol));
2067 	}
2068       return result;
2069     }
2070 
2071   /* If requested to do so by the caller and if appropriate for LANGUAGE,
2072      check to see if NAME is a field of `this'.  */
2073 
2074   langdef = language_def (language);
2075 
2076   /* Don't do this check if we are searching for a struct.  It will
2077      not be found by check_field, but will be found by other
2078      means.  */
2079   if (is_a_field_of_this != NULL && domain != STRUCT_DOMAIN)
2080     {
2081       result = lookup_language_this (langdef, block);
2082 
2083       if (result.symbol)
2084 	{
2085 	  struct type *t = result.symbol->type;
2086 
2087 	  /* I'm not really sure that type of this can ever
2088 	     be typedefed; just be safe.  */
2089 	  t = check_typedef (t);
2090 	  if (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (t))
2091 	    t = TYPE_TARGET_TYPE (t);
2092 
2093 	  if (TYPE_CODE (t) != TYPE_CODE_STRUCT
2094 	      && TYPE_CODE (t) != TYPE_CODE_UNION)
2095 	    error (_("Internal error: `%s' is not an aggregate"),
2096 		   langdef->la_name_of_this);
2097 
2098 	  if (check_field (t, name, is_a_field_of_this))
2099 	    {
2100 	      if (symbol_lookup_debug)
2101 		{
2102 		  fprintf_unfiltered (gdb_stdlog,
2103 				      "lookup_symbol_aux (...) = NULL\n");
2104 		}
2105 	      return (struct block_symbol) {NULL, NULL};
2106 	    }
2107 	}
2108     }
2109 
2110   /* Now do whatever is appropriate for LANGUAGE to look
2111      up static and global variables.  */
2112 
2113   result = langdef->la_lookup_symbol_nonlocal (langdef, name, block, domain);
2114   if (result.symbol != NULL)
2115     {
2116       if (symbol_lookup_debug)
2117 	{
2118 	  fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
2119 			      host_address_to_string (result.symbol));
2120 	}
2121       return result;
2122     }
2123 
2124   /* Now search all static file-level symbols.  Not strictly correct,
2125      but more useful than an error.  */
2126 
2127   result = lookup_static_symbol (name, domain);
2128   if (symbol_lookup_debug)
2129     {
2130       fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
2131 			  result.symbol != NULL
2132 			    ? host_address_to_string (result.symbol)
2133 			    : "NULL");
2134     }
2135   return result;
2136 }
2137 
2138 /* Check to see if the symbol is defined in BLOCK or its superiors.
2139    Don't search STATIC_BLOCK or GLOBAL_BLOCK.  */
2140 
2141 static struct block_symbol
2142 lookup_local_symbol (const char *name,
2143 		     symbol_name_match_type match_type,
2144 		     const struct block *block,
2145 		     const domain_enum domain,
2146 		     enum language language)
2147 {
2148   struct symbol *sym;
2149   const struct block *static_block = block_static_block (block);
2150   const char *scope = block_scope (block);
2151 
2152   /* Check if either no block is specified or it's a global block.  */
2153 
2154   if (static_block == NULL)
2155     return (struct block_symbol) {NULL, NULL};
2156 
2157   while (block != static_block)
2158     {
2159       sym = lookup_symbol_in_block (name, match_type, block, domain);
2160       if (sym != NULL)
2161 	return (struct block_symbol) {sym, block};
2162 
2163       if (language == language_cplus || language == language_fortran)
2164         {
2165           struct block_symbol blocksym
2166 	    = cp_lookup_symbol_imports_or_template (scope, name, block,
2167 						    domain);
2168 
2169           if (blocksym.symbol != NULL)
2170             return blocksym;
2171         }
2172 
2173       if (BLOCK_FUNCTION (block) != NULL && block_inlined_p (block))
2174 	break;
2175       block = BLOCK_SUPERBLOCK (block);
2176     }
2177 
2178   /* We've reached the end of the function without finding a result.  */
2179 
2180   return (struct block_symbol) {NULL, NULL};
2181 }
2182 
2183 /* See symtab.h.  */
2184 
2185 struct objfile *
2186 lookup_objfile_from_block (const struct block *block)
2187 {
2188   if (block == NULL)
2189     return NULL;
2190 
2191   block = block_global_block (block);
2192   /* Look through all blockvectors.  */
2193   for (objfile *obj : current_program_space->objfiles ())
2194     {
2195       for (compunit_symtab *cust : obj->compunits ())
2196 	if (block == BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust),
2197 					GLOBAL_BLOCK))
2198 	  {
2199 	    if (obj->separate_debug_objfile_backlink)
2200 	      obj = obj->separate_debug_objfile_backlink;
2201 
2202 	    return obj;
2203 	  }
2204     }
2205 
2206   return NULL;
2207 }
2208 
2209 /* See symtab.h.  */
2210 
2211 struct symbol *
2212 lookup_symbol_in_block (const char *name, symbol_name_match_type match_type,
2213 			const struct block *block,
2214 			const domain_enum domain)
2215 {
2216   struct symbol *sym;
2217 
2218   if (symbol_lookup_debug > 1)
2219     {
2220       struct objfile *objfile = lookup_objfile_from_block (block);
2221 
2222       fprintf_unfiltered (gdb_stdlog,
2223 			  "lookup_symbol_in_block (%s, %s (objfile %s), %s)",
2224 			  name, host_address_to_string (block),
2225 			  objfile_debug_name (objfile),
2226 			  domain_name (domain));
2227     }
2228 
2229   sym = block_lookup_symbol (block, name, match_type, domain);
2230   if (sym)
2231     {
2232       if (symbol_lookup_debug > 1)
2233 	{
2234 	  fprintf_unfiltered (gdb_stdlog, " = %s\n",
2235 			      host_address_to_string (sym));
2236 	}
2237       return fixup_symbol_section (sym, NULL);
2238     }
2239 
2240   if (symbol_lookup_debug > 1)
2241     fprintf_unfiltered (gdb_stdlog, " = NULL\n");
2242   return NULL;
2243 }
2244 
2245 /* See symtab.h.  */
2246 
2247 struct block_symbol
2248 lookup_global_symbol_from_objfile (struct objfile *main_objfile,
2249 				   const char *name,
2250 				   const domain_enum domain)
2251 {
2252   struct objfile *objfile;
2253 
2254   for (objfile = main_objfile;
2255        objfile;
2256        objfile = objfile_separate_debug_iterate (main_objfile, objfile))
2257     {
2258       struct block_symbol result
2259         = lookup_symbol_in_objfile (objfile, GLOBAL_BLOCK, name, domain);
2260 
2261       if (result.symbol != NULL)
2262 	return result;
2263     }
2264 
2265   return (struct block_symbol) {NULL, NULL};
2266 }
2267 
2268 /* Check to see if the symbol is defined in one of the OBJFILE's
2269    symtabs.  BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK,
2270    depending on whether or not we want to search global symbols or
2271    static symbols.  */
2272 
2273 static struct block_symbol
2274 lookup_symbol_in_objfile_symtabs (struct objfile *objfile, int block_index,
2275 				  const char *name, const domain_enum domain)
2276 {
2277   gdb_assert (block_index == GLOBAL_BLOCK || block_index == STATIC_BLOCK);
2278 
2279   if (symbol_lookup_debug > 1)
2280     {
2281       fprintf_unfiltered (gdb_stdlog,
2282 			  "lookup_symbol_in_objfile_symtabs (%s, %s, %s, %s)",
2283 			  objfile_debug_name (objfile),
2284 			  block_index == GLOBAL_BLOCK
2285 			  ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
2286 			  name, domain_name (domain));
2287     }
2288 
2289   for (compunit_symtab *cust : objfile->compunits ())
2290     {
2291       const struct blockvector *bv;
2292       const struct block *block;
2293       struct block_symbol result;
2294 
2295       bv = COMPUNIT_BLOCKVECTOR (cust);
2296       block = BLOCKVECTOR_BLOCK (bv, block_index);
2297       result.symbol = block_lookup_symbol_primary (block, name, domain);
2298       result.block = block;
2299       if (result.symbol != NULL)
2300 	{
2301 	  if (symbol_lookup_debug > 1)
2302 	    {
2303 	      fprintf_unfiltered (gdb_stdlog, " = %s (block %s)\n",
2304 				  host_address_to_string (result.symbol),
2305 				  host_address_to_string (block));
2306 	    }
2307 	  result.symbol = fixup_symbol_section (result.symbol, objfile);
2308 	  return result;
2309 
2310 	}
2311     }
2312 
2313   if (symbol_lookup_debug > 1)
2314     fprintf_unfiltered (gdb_stdlog, " = NULL\n");
2315   return (struct block_symbol) {NULL, NULL};
2316 }
2317 
2318 /* Wrapper around lookup_symbol_in_objfile_symtabs for search_symbols.
2319    Look up LINKAGE_NAME in DOMAIN in the global and static blocks of OBJFILE
2320    and all associated separate debug objfiles.
2321 
2322    Normally we only look in OBJFILE, and not any separate debug objfiles
2323    because the outer loop will cause them to be searched too.  This case is
2324    different.  Here we're called from search_symbols where it will only
2325    call us for the objfile that contains a matching minsym.  */
2326 
2327 static struct block_symbol
2328 lookup_symbol_in_objfile_from_linkage_name (struct objfile *objfile,
2329 					    const char *linkage_name,
2330 					    domain_enum domain)
2331 {
2332   enum language lang = current_language->la_language;
2333   struct objfile *main_objfile, *cur_objfile;
2334 
2335   demangle_result_storage storage;
2336   const char *modified_name = demangle_for_lookup (linkage_name, lang, storage);
2337 
2338   if (objfile->separate_debug_objfile_backlink)
2339     main_objfile = objfile->separate_debug_objfile_backlink;
2340   else
2341     main_objfile = objfile;
2342 
2343   for (cur_objfile = main_objfile;
2344        cur_objfile;
2345        cur_objfile = objfile_separate_debug_iterate (main_objfile, cur_objfile))
2346     {
2347       struct block_symbol result;
2348 
2349       result = lookup_symbol_in_objfile_symtabs (cur_objfile, GLOBAL_BLOCK,
2350 						 modified_name, domain);
2351       if (result.symbol == NULL)
2352 	result = lookup_symbol_in_objfile_symtabs (cur_objfile, STATIC_BLOCK,
2353 						   modified_name, domain);
2354       if (result.symbol != NULL)
2355 	return result;
2356     }
2357 
2358   return (struct block_symbol) {NULL, NULL};
2359 }
2360 
2361 /* A helper function that throws an exception when a symbol was found
2362    in a psymtab but not in a symtab.  */
2363 
2364 static void ATTRIBUTE_NORETURN
2365 error_in_psymtab_expansion (int block_index, const char *name,
2366 			    struct compunit_symtab *cust)
2367 {
2368   error (_("\
2369 Internal: %s symbol `%s' found in %s psymtab but not in symtab.\n\
2370 %s may be an inlined function, or may be a template function\n	 \
2371 (if a template, try specifying an instantiation: %s<type>)."),
2372 	 block_index == GLOBAL_BLOCK ? "global" : "static",
2373 	 name,
2374 	 symtab_to_filename_for_display (compunit_primary_filetab (cust)),
2375 	 name, name);
2376 }
2377 
2378 /* A helper function for various lookup routines that interfaces with
2379    the "quick" symbol table functions.  */
2380 
2381 static struct block_symbol
2382 lookup_symbol_via_quick_fns (struct objfile *objfile, int block_index,
2383 			     const char *name, const domain_enum domain)
2384 {
2385   struct compunit_symtab *cust;
2386   const struct blockvector *bv;
2387   const struct block *block;
2388   struct block_symbol result;
2389 
2390   if (!objfile->sf)
2391     return (struct block_symbol) {NULL, NULL};
2392 
2393   if (symbol_lookup_debug > 1)
2394     {
2395       fprintf_unfiltered (gdb_stdlog,
2396 			  "lookup_symbol_via_quick_fns (%s, %s, %s, %s)\n",
2397 			  objfile_debug_name (objfile),
2398 			  block_index == GLOBAL_BLOCK
2399 			  ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
2400 			  name, domain_name (domain));
2401     }
2402 
2403   cust = objfile->sf->qf->lookup_symbol (objfile, block_index, name, domain);
2404   if (cust == NULL)
2405     {
2406       if (symbol_lookup_debug > 1)
2407 	{
2408 	  fprintf_unfiltered (gdb_stdlog,
2409 			      "lookup_symbol_via_quick_fns (...) = NULL\n");
2410 	}
2411       return (struct block_symbol) {NULL, NULL};
2412     }
2413 
2414   bv = COMPUNIT_BLOCKVECTOR (cust);
2415   block = BLOCKVECTOR_BLOCK (bv, block_index);
2416   result.symbol = block_lookup_symbol (block, name,
2417 				       symbol_name_match_type::FULL, domain);
2418   if (result.symbol == NULL)
2419     error_in_psymtab_expansion (block_index, name, cust);
2420 
2421   if (symbol_lookup_debug > 1)
2422     {
2423       fprintf_unfiltered (gdb_stdlog,
2424 			  "lookup_symbol_via_quick_fns (...) = %s (block %s)\n",
2425 			  host_address_to_string (result.symbol),
2426 			  host_address_to_string (block));
2427     }
2428 
2429   result.symbol = fixup_symbol_section (result.symbol, objfile);
2430   result.block = block;
2431   return result;
2432 }
2433 
2434 /* See symtab.h.  */
2435 
2436 struct block_symbol
2437 basic_lookup_symbol_nonlocal (const struct language_defn *langdef,
2438 			      const char *name,
2439 			      const struct block *block,
2440 			      const domain_enum domain)
2441 {
2442   struct block_symbol result;
2443 
2444   /* NOTE: carlton/2003-05-19: The comments below were written when
2445      this (or what turned into this) was part of lookup_symbol_aux;
2446      I'm much less worried about these questions now, since these
2447      decisions have turned out well, but I leave these comments here
2448      for posterity.  */
2449 
2450   /* NOTE: carlton/2002-12-05: There is a question as to whether or
2451      not it would be appropriate to search the current global block
2452      here as well.  (That's what this code used to do before the
2453      is_a_field_of_this check was moved up.)  On the one hand, it's
2454      redundant with the lookup in all objfiles search that happens
2455      next.  On the other hand, if decode_line_1 is passed an argument
2456      like filename:var, then the user presumably wants 'var' to be
2457      searched for in filename.  On the third hand, there shouldn't be
2458      multiple global variables all of which are named 'var', and it's
2459      not like decode_line_1 has ever restricted its search to only
2460      global variables in a single filename.  All in all, only
2461      searching the static block here seems best: it's correct and it's
2462      cleanest.  */
2463 
2464   /* NOTE: carlton/2002-12-05: There's also a possible performance
2465      issue here: if you usually search for global symbols in the
2466      current file, then it would be slightly better to search the
2467      current global block before searching all the symtabs.  But there
2468      are other factors that have a much greater effect on performance
2469      than that one, so I don't think we should worry about that for
2470      now.  */
2471 
2472   /* NOTE: dje/2014-10-26: The lookup in all objfiles search could skip
2473      the current objfile.  Searching the current objfile first is useful
2474      for both matching user expectations as well as performance.  */
2475 
2476   result = lookup_symbol_in_static_block (name, block, domain);
2477   if (result.symbol != NULL)
2478     return result;
2479 
2480   /* If we didn't find a definition for a builtin type in the static block,
2481      search for it now.  This is actually the right thing to do and can be
2482      a massive performance win.  E.g., when debugging a program with lots of
2483      shared libraries we could search all of them only to find out the
2484      builtin type isn't defined in any of them.  This is common for types
2485      like "void".  */
2486   if (domain == VAR_DOMAIN)
2487     {
2488       struct gdbarch *gdbarch;
2489 
2490       if (block == NULL)
2491 	gdbarch = target_gdbarch ();
2492       else
2493 	gdbarch = block_gdbarch (block);
2494       result.symbol = language_lookup_primitive_type_as_symbol (langdef,
2495 								gdbarch, name);
2496       result.block = NULL;
2497       if (result.symbol != NULL)
2498 	return result;
2499     }
2500 
2501   return lookup_global_symbol (name, block, domain);
2502 }
2503 
2504 /* See symtab.h.  */
2505 
2506 struct block_symbol
2507 lookup_symbol_in_static_block (const char *name,
2508 			       const struct block *block,
2509 			       const domain_enum domain)
2510 {
2511   const struct block *static_block = block_static_block (block);
2512   struct symbol *sym;
2513 
2514   if (static_block == NULL)
2515     return (struct block_symbol) {NULL, NULL};
2516 
2517   if (symbol_lookup_debug)
2518     {
2519       struct objfile *objfile = lookup_objfile_from_block (static_block);
2520 
2521       fprintf_unfiltered (gdb_stdlog,
2522 			  "lookup_symbol_in_static_block (%s, %s (objfile %s),"
2523 			  " %s)\n",
2524 			  name,
2525 			  host_address_to_string (block),
2526 			  objfile_debug_name (objfile),
2527 			  domain_name (domain));
2528     }
2529 
2530   sym = lookup_symbol_in_block (name,
2531 				symbol_name_match_type::FULL,
2532 				static_block, domain);
2533   if (symbol_lookup_debug)
2534     {
2535       fprintf_unfiltered (gdb_stdlog,
2536 			  "lookup_symbol_in_static_block (...) = %s\n",
2537 			  sym != NULL ? host_address_to_string (sym) : "NULL");
2538     }
2539   return (struct block_symbol) {sym, static_block};
2540 }
2541 
2542 /* Perform the standard symbol lookup of NAME in OBJFILE:
2543    1) First search expanded symtabs, and if not found
2544    2) Search the "quick" symtabs (partial or .gdb_index).
2545    BLOCK_INDEX is one of GLOBAL_BLOCK or STATIC_BLOCK.  */
2546 
2547 static struct block_symbol
2548 lookup_symbol_in_objfile (struct objfile *objfile, int block_index,
2549 			  const char *name, const domain_enum domain)
2550 {
2551   struct block_symbol result;
2552 
2553   if (symbol_lookup_debug)
2554     {
2555       fprintf_unfiltered (gdb_stdlog,
2556 			  "lookup_symbol_in_objfile (%s, %s, %s, %s)\n",
2557 			  objfile_debug_name (objfile),
2558 			  block_index == GLOBAL_BLOCK
2559 			  ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
2560 			  name, domain_name (domain));
2561     }
2562 
2563   result = lookup_symbol_in_objfile_symtabs (objfile, block_index,
2564 					     name, domain);
2565   if (result.symbol != NULL)
2566     {
2567       if (symbol_lookup_debug)
2568 	{
2569 	  fprintf_unfiltered (gdb_stdlog,
2570 			      "lookup_symbol_in_objfile (...) = %s"
2571 			      " (in symtabs)\n",
2572 			      host_address_to_string (result.symbol));
2573 	}
2574       return result;
2575     }
2576 
2577   result = lookup_symbol_via_quick_fns (objfile, block_index,
2578 					name, domain);
2579   if (symbol_lookup_debug)
2580     {
2581       fprintf_unfiltered (gdb_stdlog,
2582 			  "lookup_symbol_in_objfile (...) = %s%s\n",
2583 			  result.symbol != NULL
2584 			  ? host_address_to_string (result.symbol)
2585 			  : "NULL",
2586 			  result.symbol != NULL ? " (via quick fns)" : "");
2587     }
2588   return result;
2589 }
2590 
2591 /* See symtab.h.  */
2592 
2593 struct block_symbol
2594 lookup_static_symbol (const char *name, const domain_enum domain)
2595 {
2596   struct symbol_cache *cache = get_symbol_cache (current_program_space);
2597   struct block_symbol result;
2598   struct block_symbol_cache *bsc;
2599   struct symbol_cache_slot *slot;
2600 
2601   /* Lookup in STATIC_BLOCK is not current-objfile-dependent, so just pass
2602      NULL for OBJFILE_CONTEXT.  */
2603   result = symbol_cache_lookup (cache, NULL, STATIC_BLOCK, name, domain,
2604 				&bsc, &slot);
2605   if (result.symbol != NULL)
2606     {
2607       if (SYMBOL_LOOKUP_FAILED_P (result))
2608 	return (struct block_symbol) {NULL, NULL};
2609       return result;
2610     }
2611 
2612   for (objfile *objfile : current_program_space->objfiles ())
2613     {
2614       result = lookup_symbol_in_objfile (objfile, STATIC_BLOCK, name, domain);
2615       if (result.symbol != NULL)
2616 	{
2617 	  /* Still pass NULL for OBJFILE_CONTEXT here.  */
2618 	  symbol_cache_mark_found (bsc, slot, NULL, result.symbol,
2619 				   result.block);
2620 	  return result;
2621 	}
2622     }
2623 
2624   /* Still pass NULL for OBJFILE_CONTEXT here.  */
2625   symbol_cache_mark_not_found (bsc, slot, NULL, name, domain);
2626   return (struct block_symbol) {NULL, NULL};
2627 }
2628 
2629 /* Private data to be used with lookup_symbol_global_iterator_cb.  */
2630 
2631 struct global_sym_lookup_data
2632 {
2633   /* The name of the symbol we are searching for.  */
2634   const char *name;
2635 
2636   /* The domain to use for our search.  */
2637   domain_enum domain;
2638 
2639   /* The field where the callback should store the symbol if found.
2640      It should be initialized to {NULL, NULL} before the search is started.  */
2641   struct block_symbol result;
2642 };
2643 
2644 /* A callback function for gdbarch_iterate_over_objfiles_in_search_order.
2645    It searches by name for a symbol in the GLOBAL_BLOCK of the given
2646    OBJFILE.  The arguments for the search are passed via CB_DATA,
2647    which in reality is a pointer to struct global_sym_lookup_data.  */
2648 
2649 static int
2650 lookup_symbol_global_iterator_cb (struct objfile *objfile,
2651 				  void *cb_data)
2652 {
2653   struct global_sym_lookup_data *data =
2654     (struct global_sym_lookup_data *) cb_data;
2655 
2656   gdb_assert (data->result.symbol == NULL
2657 	      && data->result.block == NULL);
2658 
2659   data->result = lookup_symbol_in_objfile (objfile, GLOBAL_BLOCK,
2660 					   data->name, data->domain);
2661 
2662   /* If we found a match, tell the iterator to stop.  Otherwise,
2663      keep going.  */
2664   return (data->result.symbol != NULL);
2665 }
2666 
2667 /* See symtab.h.  */
2668 
2669 struct block_symbol
2670 lookup_global_symbol (const char *name,
2671 		      const struct block *block,
2672 		      const domain_enum domain)
2673 {
2674   struct symbol_cache *cache = get_symbol_cache (current_program_space);
2675   struct block_symbol result;
2676   struct objfile *objfile;
2677   struct global_sym_lookup_data lookup_data;
2678   struct block_symbol_cache *bsc;
2679   struct symbol_cache_slot *slot;
2680 
2681   objfile = lookup_objfile_from_block (block);
2682 
2683   /* First see if we can find the symbol in the cache.
2684      This works because we use the current objfile to qualify the lookup.  */
2685   result = symbol_cache_lookup (cache, objfile, GLOBAL_BLOCK, name, domain,
2686 				&bsc, &slot);
2687   if (result.symbol != NULL)
2688     {
2689       if (SYMBOL_LOOKUP_FAILED_P (result))
2690 	return (struct block_symbol) {NULL, NULL};
2691       return result;
2692     }
2693 
2694   /* Call library-specific lookup procedure.  */
2695   if (objfile != NULL)
2696     result = solib_global_lookup (objfile, name, domain);
2697 
2698   /* If that didn't work go a global search (of global blocks, heh).  */
2699   if (result.symbol == NULL)
2700     {
2701       memset (&lookup_data, 0, sizeof (lookup_data));
2702       lookup_data.name = name;
2703       lookup_data.domain = domain;
2704       gdbarch_iterate_over_objfiles_in_search_order
2705 	(objfile != NULL ? get_objfile_arch (objfile) : target_gdbarch (),
2706 	 lookup_symbol_global_iterator_cb, &lookup_data, objfile);
2707       result = lookup_data.result;
2708     }
2709 
2710   if (result.symbol != NULL)
2711     symbol_cache_mark_found (bsc, slot, objfile, result.symbol, result.block);
2712   else
2713     symbol_cache_mark_not_found (bsc, slot, objfile, name, domain);
2714 
2715   return result;
2716 }
2717 
2718 int
2719 symbol_matches_domain (enum language symbol_language,
2720 		       domain_enum symbol_domain,
2721 		       domain_enum domain)
2722 {
2723   /* For C++ "struct foo { ... }" also defines a typedef for "foo".
2724      Similarly, any Ada type declaration implicitly defines a typedef.  */
2725   if (symbol_language == language_cplus
2726       || symbol_language == language_d
2727       || symbol_language == language_ada
2728       || symbol_language == language_rust)
2729     {
2730       if ((domain == VAR_DOMAIN || domain == STRUCT_DOMAIN)
2731 	  && symbol_domain == STRUCT_DOMAIN)
2732 	return 1;
2733     }
2734   /* For all other languages, strict match is required.  */
2735   return (symbol_domain == domain);
2736 }
2737 
2738 /* See symtab.h.  */
2739 
2740 struct type *
2741 lookup_transparent_type (const char *name)
2742 {
2743   return current_language->la_lookup_transparent_type (name);
2744 }
2745 
2746 /* A helper for basic_lookup_transparent_type that interfaces with the
2747    "quick" symbol table functions.  */
2748 
2749 static struct type *
2750 basic_lookup_transparent_type_quick (struct objfile *objfile, int block_index,
2751 				     const char *name)
2752 {
2753   struct compunit_symtab *cust;
2754   const struct blockvector *bv;
2755   struct block *block;
2756   struct symbol *sym;
2757 
2758   if (!objfile->sf)
2759     return NULL;
2760   cust = objfile->sf->qf->lookup_symbol (objfile, block_index, name,
2761 					 STRUCT_DOMAIN);
2762   if (cust == NULL)
2763     return NULL;
2764 
2765   bv = COMPUNIT_BLOCKVECTOR (cust);
2766   block = BLOCKVECTOR_BLOCK (bv, block_index);
2767   sym = block_find_symbol (block, name, STRUCT_DOMAIN,
2768 			   block_find_non_opaque_type, NULL);
2769   if (sym == NULL)
2770     error_in_psymtab_expansion (block_index, name, cust);
2771   gdb_assert (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)));
2772   return SYMBOL_TYPE (sym);
2773 }
2774 
2775 /* Subroutine of basic_lookup_transparent_type to simplify it.
2776    Look up the non-opaque definition of NAME in BLOCK_INDEX of OBJFILE.
2777    BLOCK_INDEX is either GLOBAL_BLOCK or STATIC_BLOCK.  */
2778 
2779 static struct type *
2780 basic_lookup_transparent_type_1 (struct objfile *objfile, int block_index,
2781 				 const char *name)
2782 {
2783   const struct blockvector *bv;
2784   const struct block *block;
2785   const struct symbol *sym;
2786 
2787   for (compunit_symtab *cust : objfile->compunits ())
2788     {
2789       bv = COMPUNIT_BLOCKVECTOR (cust);
2790       block = BLOCKVECTOR_BLOCK (bv, block_index);
2791       sym = block_find_symbol (block, name, STRUCT_DOMAIN,
2792 			       block_find_non_opaque_type, NULL);
2793       if (sym != NULL)
2794 	{
2795 	  gdb_assert (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)));
2796 	  return SYMBOL_TYPE (sym);
2797 	}
2798     }
2799 
2800   return NULL;
2801 }
2802 
2803 /* The standard implementation of lookup_transparent_type.  This code
2804    was modeled on lookup_symbol -- the parts not relevant to looking
2805    up types were just left out.  In particular it's assumed here that
2806    types are available in STRUCT_DOMAIN and only in file-static or
2807    global blocks.  */
2808 
2809 struct type *
2810 basic_lookup_transparent_type (const char *name)
2811 {
2812   struct type *t;
2813 
2814   /* Now search all the global symbols.  Do the symtab's first, then
2815      check the psymtab's.  If a psymtab indicates the existence
2816      of the desired name as a global, then do psymtab-to-symtab
2817      conversion on the fly and return the found symbol.  */
2818 
2819   for (objfile *objfile : current_program_space->objfiles ())
2820     {
2821       t = basic_lookup_transparent_type_1 (objfile, GLOBAL_BLOCK, name);
2822       if (t)
2823 	return t;
2824     }
2825 
2826   for (objfile *objfile : current_program_space->objfiles ())
2827     {
2828       t = basic_lookup_transparent_type_quick (objfile, GLOBAL_BLOCK, name);
2829       if (t)
2830 	return t;
2831     }
2832 
2833   /* Now search the static file-level symbols.
2834      Not strictly correct, but more useful than an error.
2835      Do the symtab's first, then
2836      check the psymtab's.  If a psymtab indicates the existence
2837      of the desired name as a file-level static, then do psymtab-to-symtab
2838      conversion on the fly and return the found symbol.  */
2839 
2840   for (objfile *objfile : current_program_space->objfiles ())
2841     {
2842       t = basic_lookup_transparent_type_1 (objfile, STATIC_BLOCK, name);
2843       if (t)
2844 	return t;
2845     }
2846 
2847   for (objfile *objfile : current_program_space->objfiles ())
2848     {
2849       t = basic_lookup_transparent_type_quick (objfile, STATIC_BLOCK, name);
2850       if (t)
2851 	return t;
2852     }
2853 
2854   return (struct type *) 0;
2855 }
2856 
2857 /* Iterate over the symbols named NAME, matching DOMAIN, in BLOCK.
2858 
2859    For each symbol that matches, CALLBACK is called.  The symbol is
2860    passed to the callback.
2861 
2862    If CALLBACK returns false, the iteration ends.  Otherwise, the
2863    search continues.  */
2864 
2865 void
2866 iterate_over_symbols (const struct block *block,
2867 		      const lookup_name_info &name,
2868 		      const domain_enum domain,
2869 		      gdb::function_view<symbol_found_callback_ftype> callback)
2870 {
2871   struct block_iterator iter;
2872   struct symbol *sym;
2873 
2874   ALL_BLOCK_SYMBOLS_WITH_NAME (block, name, iter, sym)
2875     {
2876       if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
2877 				 SYMBOL_DOMAIN (sym), domain))
2878 	{
2879 	  struct block_symbol block_sym = {sym, block};
2880 
2881 	  if (!callback (&block_sym))
2882 	    return;
2883 	}
2884     }
2885 }
2886 
2887 /* Find the compunit symtab associated with PC and SECTION.
2888    This will read in debug info as necessary.  */
2889 
2890 struct compunit_symtab *
2891 find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section)
2892 {
2893   struct compunit_symtab *best_cust = NULL;
2894   CORE_ADDR distance = 0;
2895   struct bound_minimal_symbol msymbol;
2896 
2897   /* If we know that this is not a text address, return failure.  This is
2898      necessary because we loop based on the block's high and low code
2899      addresses, which do not include the data ranges, and because
2900      we call find_pc_sect_psymtab which has a similar restriction based
2901      on the partial_symtab's texthigh and textlow.  */
2902   msymbol = lookup_minimal_symbol_by_pc_section (pc, section);
2903   if (msymbol.minsym && msymbol.minsym->data_p ())
2904     return NULL;
2905 
2906   /* Search all symtabs for the one whose file contains our address, and which
2907      is the smallest of all the ones containing the address.  This is designed
2908      to deal with a case like symtab a is at 0x1000-0x2000 and 0x3000-0x4000
2909      and symtab b is at 0x2000-0x3000.  So the GLOBAL_BLOCK for a is from
2910      0x1000-0x4000, but for address 0x2345 we want to return symtab b.
2911 
2912      This happens for native ecoff format, where code from included files
2913      gets its own symtab.  The symtab for the included file should have
2914      been read in already via the dependency mechanism.
2915      It might be swifter to create several symtabs with the same name
2916      like xcoff does (I'm not sure).
2917 
2918      It also happens for objfiles that have their functions reordered.
2919      For these, the symtab we are looking for is not necessarily read in.  */
2920 
2921   for (objfile *obj_file : current_program_space->objfiles ())
2922     {
2923       for (compunit_symtab *cust : obj_file->compunits ())
2924 	{
2925 	  struct block *b;
2926 	  const struct blockvector *bv;
2927 
2928 	  bv = COMPUNIT_BLOCKVECTOR (cust);
2929 	  b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
2930 
2931 	  if (BLOCK_START (b) <= pc
2932 	      && BLOCK_END (b) > pc
2933 	      && (distance == 0
2934 		  || BLOCK_END (b) - BLOCK_START (b) < distance))
2935 	    {
2936 	      /* For an objfile that has its functions reordered,
2937 		 find_pc_psymtab will find the proper partial symbol table
2938 		 and we simply return its corresponding symtab.  */
2939 	      /* In order to better support objfiles that contain both
2940 		 stabs and coff debugging info, we continue on if a psymtab
2941 		 can't be found.  */
2942 	      if ((obj_file->flags & OBJF_REORDERED) && obj_file->sf)
2943 		{
2944 		  struct compunit_symtab *result;
2945 
2946 		  result
2947 		    = obj_file->sf->qf->find_pc_sect_compunit_symtab (obj_file,
2948 								      msymbol,
2949 								      pc,
2950 								      section,
2951 								      0);
2952 		  if (result != NULL)
2953 		    return result;
2954 		}
2955 	      if (section != 0)
2956 		{
2957 		  struct block_iterator iter;
2958 		  struct symbol *sym = NULL;
2959 
2960 		  ALL_BLOCK_SYMBOLS (b, iter, sym)
2961 		    {
2962 		      fixup_symbol_section (sym, obj_file);
2963 		      if (matching_obj_sections (SYMBOL_OBJ_SECTION (obj_file,
2964 								     sym),
2965 						 section))
2966 			break;
2967 		    }
2968 		  if (sym == NULL)
2969 		    continue;		/* No symbol in this symtab matches
2970 					   section.  */
2971 		}
2972 	      distance = BLOCK_END (b) - BLOCK_START (b);
2973 	      best_cust = cust;
2974 	    }
2975 	}
2976     }
2977 
2978   if (best_cust != NULL)
2979     return best_cust;
2980 
2981   /* Not found in symtabs, search the "quick" symtabs (e.g. psymtabs).  */
2982 
2983   for (objfile *objf : current_program_space->objfiles ())
2984     {
2985       struct compunit_symtab *result;
2986 
2987       if (!objf->sf)
2988 	continue;
2989       result = objf->sf->qf->find_pc_sect_compunit_symtab (objf,
2990 							   msymbol,
2991 							   pc, section,
2992 							   1);
2993       if (result != NULL)
2994 	return result;
2995     }
2996 
2997   return NULL;
2998 }
2999 
3000 /* Find the compunit symtab associated with PC.
3001    This will read in debug info as necessary.
3002    Backward compatibility, no section.  */
3003 
3004 struct compunit_symtab *
3005 find_pc_compunit_symtab (CORE_ADDR pc)
3006 {
3007   return find_pc_sect_compunit_symtab (pc, find_pc_mapped_section (pc));
3008 }
3009 
3010 /* See symtab.h.  */
3011 
3012 struct symbol *
3013 find_symbol_at_address (CORE_ADDR address)
3014 {
3015   for (objfile *objfile : current_program_space->objfiles ())
3016     {
3017       if (objfile->sf == NULL
3018 	  || objfile->sf->qf->find_compunit_symtab_by_address == NULL)
3019 	continue;
3020 
3021       struct compunit_symtab *symtab
3022 	= objfile->sf->qf->find_compunit_symtab_by_address (objfile, address);
3023       if (symtab != NULL)
3024 	{
3025 	  const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (symtab);
3026 
3027 	  for (int i = GLOBAL_BLOCK; i <= STATIC_BLOCK; ++i)
3028 	    {
3029 	      struct block *b = BLOCKVECTOR_BLOCK (bv, i);
3030 	      struct block_iterator iter;
3031 	      struct symbol *sym;
3032 
3033 	      ALL_BLOCK_SYMBOLS (b, iter, sym)
3034 		{
3035 		  if (SYMBOL_CLASS (sym) == LOC_STATIC
3036 		      && SYMBOL_VALUE_ADDRESS (sym) == address)
3037 		    return sym;
3038 		}
3039 	    }
3040 	}
3041     }
3042 
3043   return NULL;
3044 }
3045 
3046 
3047 
3048 /* Find the source file and line number for a given PC value and SECTION.
3049    Return a structure containing a symtab pointer, a line number,
3050    and a pc range for the entire source line.
3051    The value's .pc field is NOT the specified pc.
3052    NOTCURRENT nonzero means, if specified pc is on a line boundary,
3053    use the line that ends there.  Otherwise, in that case, the line
3054    that begins there is used.  */
3055 
3056 /* The big complication here is that a line may start in one file, and end just
3057    before the start of another file.  This usually occurs when you #include
3058    code in the middle of a subroutine.  To properly find the end of a line's PC
3059    range, we must search all symtabs associated with this compilation unit, and
3060    find the one whose first PC is closer than that of the next line in this
3061    symtab.  */
3062 
3063 struct symtab_and_line
3064 find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
3065 {
3066   struct compunit_symtab *cust;
3067   struct linetable *l;
3068   int len;
3069   struct linetable_entry *item;
3070   const struct blockvector *bv;
3071   struct bound_minimal_symbol msymbol;
3072 
3073   /* Info on best line seen so far, and where it starts, and its file.  */
3074 
3075   struct linetable_entry *best = NULL;
3076   CORE_ADDR best_end = 0;
3077   struct symtab *best_symtab = 0;
3078 
3079   /* Store here the first line number
3080      of a file which contains the line at the smallest pc after PC.
3081      If we don't find a line whose range contains PC,
3082      we will use a line one less than this,
3083      with a range from the start of that file to the first line's pc.  */
3084   struct linetable_entry *alt = NULL;
3085 
3086   /* Info on best line seen in this file.  */
3087 
3088   struct linetable_entry *prev;
3089 
3090   /* If this pc is not from the current frame,
3091      it is the address of the end of a call instruction.
3092      Quite likely that is the start of the following statement.
3093      But what we want is the statement containing the instruction.
3094      Fudge the pc to make sure we get that.  */
3095 
3096   /* It's tempting to assume that, if we can't find debugging info for
3097      any function enclosing PC, that we shouldn't search for line
3098      number info, either.  However, GAS can emit line number info for
3099      assembly files --- very helpful when debugging hand-written
3100      assembly code.  In such a case, we'd have no debug info for the
3101      function, but we would have line info.  */
3102 
3103   if (notcurrent)
3104     pc -= 1;
3105 
3106   /* elz: added this because this function returned the wrong
3107      information if the pc belongs to a stub (import/export)
3108      to call a shlib function.  This stub would be anywhere between
3109      two functions in the target, and the line info was erroneously
3110      taken to be the one of the line before the pc.  */
3111 
3112   /* RT: Further explanation:
3113 
3114    * We have stubs (trampolines) inserted between procedures.
3115    *
3116    * Example: "shr1" exists in a shared library, and a "shr1" stub also
3117    * exists in the main image.
3118    *
3119    * In the minimal symbol table, we have a bunch of symbols
3120    * sorted by start address.  The stubs are marked as "trampoline",
3121    * the others appear as text. E.g.:
3122    *
3123    *  Minimal symbol table for main image
3124    *     main:  code for main (text symbol)
3125    *     shr1: stub  (trampoline symbol)
3126    *     foo:   code for foo (text symbol)
3127    *     ...
3128    *  Minimal symbol table for "shr1" image:
3129    *     ...
3130    *     shr1: code for shr1 (text symbol)
3131    *     ...
3132    *
3133    * So the code below is trying to detect if we are in the stub
3134    * ("shr1" stub), and if so, find the real code ("shr1" trampoline),
3135    * and if found,  do the symbolization from the real-code address
3136    * rather than the stub address.
3137    *
3138    * Assumptions being made about the minimal symbol table:
3139    *   1. lookup_minimal_symbol_by_pc() will return a trampoline only
3140    *      if we're really in the trampoline.s If we're beyond it (say
3141    *      we're in "foo" in the above example), it'll have a closer
3142    *      symbol (the "foo" text symbol for example) and will not
3143    *      return the trampoline.
3144    *   2. lookup_minimal_symbol_text() will find a real text symbol
3145    *      corresponding to the trampoline, and whose address will
3146    *      be different than the trampoline address.  I put in a sanity
3147    *      check for the address being the same, to avoid an
3148    *      infinite recursion.
3149    */
3150   msymbol = lookup_minimal_symbol_by_pc (pc);
3151   if (msymbol.minsym != NULL)
3152     if (MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline)
3153       {
3154 	struct bound_minimal_symbol mfunsym
3155 	  = lookup_minimal_symbol_text (MSYMBOL_LINKAGE_NAME (msymbol.minsym),
3156 					NULL);
3157 
3158 	if (mfunsym.minsym == NULL)
3159 	  /* I eliminated this warning since it is coming out
3160 	   * in the following situation:
3161 	   * gdb shmain // test program with shared libraries
3162 	   * (gdb) break shr1  // function in shared lib
3163 	   * Warning: In stub for ...
3164 	   * In the above situation, the shared lib is not loaded yet,
3165 	   * so of course we can't find the real func/line info,
3166 	   * but the "break" still works, and the warning is annoying.
3167 	   * So I commented out the warning.  RT */
3168 	  /* warning ("In stub for %s; unable to find real function/line info",
3169 	     SYMBOL_LINKAGE_NAME (msymbol)); */
3170 	  ;
3171 	/* fall through */
3172 	else if (BMSYMBOL_VALUE_ADDRESS (mfunsym)
3173 		 == BMSYMBOL_VALUE_ADDRESS (msymbol))
3174 	  /* Avoid infinite recursion */
3175 	  /* See above comment about why warning is commented out.  */
3176 	  /* warning ("In stub for %s; unable to find real function/line info",
3177 	     SYMBOL_LINKAGE_NAME (msymbol)); */
3178 	  ;
3179 	/* fall through */
3180 	else
3181 	  return find_pc_line (BMSYMBOL_VALUE_ADDRESS (mfunsym), 0);
3182       }
3183 
3184   symtab_and_line val;
3185   val.pspace = current_program_space;
3186 
3187   cust = find_pc_sect_compunit_symtab (pc, section);
3188   if (cust == NULL)
3189     {
3190       /* If no symbol information, return previous pc.  */
3191       if (notcurrent)
3192 	pc++;
3193       val.pc = pc;
3194       return val;
3195     }
3196 
3197   bv = COMPUNIT_BLOCKVECTOR (cust);
3198 
3199   /* Look at all the symtabs that share this blockvector.
3200      They all have the same apriori range, that we found was right;
3201      but they have different line tables.  */
3202 
3203   for (symtab *iter_s : compunit_filetabs (cust))
3204     {
3205       /* Find the best line in this symtab.  */
3206       l = SYMTAB_LINETABLE (iter_s);
3207       if (!l)
3208 	continue;
3209       len = l->nitems;
3210       if (len <= 0)
3211 	{
3212 	  /* I think len can be zero if the symtab lacks line numbers
3213 	     (e.g. gcc -g1).  (Either that or the LINETABLE is NULL;
3214 	     I'm not sure which, and maybe it depends on the symbol
3215 	     reader).  */
3216 	  continue;
3217 	}
3218 
3219       prev = NULL;
3220       item = l->item;		/* Get first line info.  */
3221 
3222       /* Is this file's first line closer than the first lines of other files?
3223          If so, record this file, and its first line, as best alternate.  */
3224       if (item->pc > pc && (!alt || item->pc < alt->pc))
3225 	alt = item;
3226 
3227       auto pc_compare = [](const CORE_ADDR & comp_pc,
3228 			   const struct linetable_entry & lhs)->bool
3229       {
3230 	return comp_pc < lhs.pc;
3231       };
3232 
3233       struct linetable_entry *first = item;
3234       struct linetable_entry *last = item + len;
3235       item = std::upper_bound (first, last, pc, pc_compare);
3236       if (item != first)
3237 	prev = item - 1;		/* Found a matching item.  */
3238 
3239       /* At this point, prev points at the line whose start addr is <= pc, and
3240          item points at the next line.  If we ran off the end of the linetable
3241          (pc >= start of the last line), then prev == item.  If pc < start of
3242          the first line, prev will not be set.  */
3243 
3244       /* Is this file's best line closer than the best in the other files?
3245          If so, record this file, and its best line, as best so far.  Don't
3246          save prev if it represents the end of a function (i.e. line number
3247          0) instead of a real line.  */
3248 
3249       if (prev && prev->line && (!best || prev->pc > best->pc))
3250 	{
3251 	  best = prev;
3252 	  best_symtab = iter_s;
3253 
3254 	  /* Discard BEST_END if it's before the PC of the current BEST.  */
3255 	  if (best_end <= best->pc)
3256 	    best_end = 0;
3257 	}
3258 
3259       /* If another line (denoted by ITEM) is in the linetable and its
3260 	 PC is after BEST's PC, but before the current BEST_END, then
3261 	 use ITEM's PC as the new best_end.  */
3262       if (best && item < last && item->pc > best->pc
3263 	  && (best_end == 0 || best_end > item->pc))
3264 	best_end = item->pc;
3265     }
3266 
3267   if (!best_symtab)
3268     {
3269       /* If we didn't find any line number info, just return zeros.
3270 	 We used to return alt->line - 1 here, but that could be
3271 	 anywhere; if we don't have line number info for this PC,
3272 	 don't make some up.  */
3273       val.pc = pc;
3274     }
3275   else if (best->line == 0)
3276     {
3277       /* If our best fit is in a range of PC's for which no line
3278 	 number info is available (line number is zero) then we didn't
3279 	 find any valid line information.  */
3280       val.pc = pc;
3281     }
3282   else
3283     {
3284       val.symtab = best_symtab;
3285       val.line = best->line;
3286       val.pc = best->pc;
3287       if (best_end && (!alt || best_end < alt->pc))
3288 	val.end = best_end;
3289       else if (alt)
3290 	val.end = alt->pc;
3291       else
3292 	val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
3293     }
3294   val.section = section;
3295   return val;
3296 }
3297 
3298 /* Backward compatibility (no section).  */
3299 
3300 struct symtab_and_line
3301 find_pc_line (CORE_ADDR pc, int notcurrent)
3302 {
3303   struct obj_section *section;
3304 
3305   section = find_pc_overlay (pc);
3306   if (pc_in_unmapped_range (pc, section))
3307     pc = overlay_mapped_address (pc, section);
3308   return find_pc_sect_line (pc, section, notcurrent);
3309 }
3310 
3311 /* See symtab.h.  */
3312 
3313 struct symtab *
3314 find_pc_line_symtab (CORE_ADDR pc)
3315 {
3316   struct symtab_and_line sal;
3317 
3318   /* This always passes zero for NOTCURRENT to find_pc_line.
3319      There are currently no callers that ever pass non-zero.  */
3320   sal = find_pc_line (pc, 0);
3321   return sal.symtab;
3322 }
3323 
3324 /* Find line number LINE in any symtab whose name is the same as
3325    SYMTAB.
3326 
3327    If found, return the symtab that contains the linetable in which it was
3328    found, set *INDEX to the index in the linetable of the best entry
3329    found, and set *EXACT_MATCH nonzero if the value returned is an
3330    exact match.
3331 
3332    If not found, return NULL.  */
3333 
3334 struct symtab *
3335 find_line_symtab (struct symtab *sym_tab, int line,
3336 		  int *index, int *exact_match)
3337 {
3338   int exact = 0;  /* Initialized here to avoid a compiler warning.  */
3339 
3340   /* BEST_INDEX and BEST_LINETABLE identify the smallest linenumber > LINE
3341      so far seen.  */
3342 
3343   int best_index;
3344   struct linetable *best_linetable;
3345   struct symtab *best_symtab;
3346 
3347   /* First try looking it up in the given symtab.  */
3348   best_linetable = SYMTAB_LINETABLE (sym_tab);
3349   best_symtab = sym_tab;
3350   best_index = find_line_common (best_linetable, line, &exact, 0);
3351   if (best_index < 0 || !exact)
3352     {
3353       /* Didn't find an exact match.  So we better keep looking for
3354          another symtab with the same name.  In the case of xcoff,
3355          multiple csects for one source file (produced by IBM's FORTRAN
3356          compiler) produce multiple symtabs (this is unavoidable
3357          assuming csects can be at arbitrary places in memory and that
3358          the GLOBAL_BLOCK of a symtab has a begin and end address).  */
3359 
3360       /* BEST is the smallest linenumber > LINE so far seen,
3361          or 0 if none has been seen so far.
3362          BEST_INDEX and BEST_LINETABLE identify the item for it.  */
3363       int best;
3364 
3365       if (best_index >= 0)
3366 	best = best_linetable->item[best_index].line;
3367       else
3368 	best = 0;
3369 
3370       for (objfile *objfile : current_program_space->objfiles ())
3371 	{
3372 	  if (objfile->sf)
3373 	    objfile->sf->qf->expand_symtabs_with_fullname
3374 	      (objfile, symtab_to_fullname (sym_tab));
3375 	}
3376 
3377       for (objfile *objfile : current_program_space->objfiles ())
3378 	{
3379 	  for (compunit_symtab *cu : objfile->compunits ())
3380 	    {
3381 	      for (symtab *s : compunit_filetabs (cu))
3382 		{
3383 		  struct linetable *l;
3384 		  int ind;
3385 
3386 		  if (FILENAME_CMP (sym_tab->filename, s->filename) != 0)
3387 		    continue;
3388 		  if (FILENAME_CMP (symtab_to_fullname (sym_tab),
3389 				    symtab_to_fullname (s)) != 0)
3390 		    continue;
3391 		  l = SYMTAB_LINETABLE (s);
3392 		  ind = find_line_common (l, line, &exact, 0);
3393 		  if (ind >= 0)
3394 		    {
3395 		      if (exact)
3396 			{
3397 			  best_index = ind;
3398 			  best_linetable = l;
3399 			  best_symtab = s;
3400 			  goto done;
3401 			}
3402 		      if (best == 0 || l->item[ind].line < best)
3403 			{
3404 			  best = l->item[ind].line;
3405 			  best_index = ind;
3406 			  best_linetable = l;
3407 			  best_symtab = s;
3408 			}
3409 		    }
3410 		}
3411 	    }
3412 	}
3413     }
3414 done:
3415   if (best_index < 0)
3416     return NULL;
3417 
3418   if (index)
3419     *index = best_index;
3420   if (exact_match)
3421     *exact_match = exact;
3422 
3423   return best_symtab;
3424 }
3425 
3426 /* Given SYMTAB, returns all the PCs function in the symtab that
3427    exactly match LINE.  Returns an empty vector if there are no exact
3428    matches, but updates BEST_ITEM in this case.  */
3429 
3430 std::vector<CORE_ADDR>
3431 find_pcs_for_symtab_line (struct symtab *symtab, int line,
3432 			  struct linetable_entry **best_item)
3433 {
3434   int start = 0;
3435   std::vector<CORE_ADDR> result;
3436 
3437   /* First, collect all the PCs that are at this line.  */
3438   while (1)
3439     {
3440       int was_exact;
3441       int idx;
3442 
3443       idx = find_line_common (SYMTAB_LINETABLE (symtab), line, &was_exact,
3444 			      start);
3445       if (idx < 0)
3446 	break;
3447 
3448       if (!was_exact)
3449 	{
3450 	  struct linetable_entry *item = &SYMTAB_LINETABLE (symtab)->item[idx];
3451 
3452 	  if (*best_item == NULL || item->line < (*best_item)->line)
3453 	    *best_item = item;
3454 
3455 	  break;
3456 	}
3457 
3458       result.push_back (SYMTAB_LINETABLE (symtab)->item[idx].pc);
3459       start = idx + 1;
3460     }
3461 
3462   return result;
3463 }
3464 
3465 
3466 /* Set the PC value for a given source file and line number and return true.
3467    Returns zero for invalid line number (and sets the PC to 0).
3468    The source file is specified with a struct symtab.  */
3469 
3470 int
3471 find_line_pc (struct symtab *symtab, int line, CORE_ADDR *pc)
3472 {
3473   struct linetable *l;
3474   int ind;
3475 
3476   *pc = 0;
3477   if (symtab == 0)
3478     return 0;
3479 
3480   symtab = find_line_symtab (symtab, line, &ind, NULL);
3481   if (symtab != NULL)
3482     {
3483       l = SYMTAB_LINETABLE (symtab);
3484       *pc = l->item[ind].pc;
3485       return 1;
3486     }
3487   else
3488     return 0;
3489 }
3490 
3491 /* Find the range of pc values in a line.
3492    Store the starting pc of the line into *STARTPTR
3493    and the ending pc (start of next line) into *ENDPTR.
3494    Returns 1 to indicate success.
3495    Returns 0 if could not find the specified line.  */
3496 
3497 int
3498 find_line_pc_range (struct symtab_and_line sal, CORE_ADDR *startptr,
3499 		    CORE_ADDR *endptr)
3500 {
3501   CORE_ADDR startaddr;
3502   struct symtab_and_line found_sal;
3503 
3504   startaddr = sal.pc;
3505   if (startaddr == 0 && !find_line_pc (sal.symtab, sal.line, &startaddr))
3506     return 0;
3507 
3508   /* This whole function is based on address.  For example, if line 10 has
3509      two parts, one from 0x100 to 0x200 and one from 0x300 to 0x400, then
3510      "info line *0x123" should say the line goes from 0x100 to 0x200
3511      and "info line *0x355" should say the line goes from 0x300 to 0x400.
3512      This also insures that we never give a range like "starts at 0x134
3513      and ends at 0x12c".  */
3514 
3515   found_sal = find_pc_sect_line (startaddr, sal.section, 0);
3516   if (found_sal.line != sal.line)
3517     {
3518       /* The specified line (sal) has zero bytes.  */
3519       *startptr = found_sal.pc;
3520       *endptr = found_sal.pc;
3521     }
3522   else
3523     {
3524       *startptr = found_sal.pc;
3525       *endptr = found_sal.end;
3526     }
3527   return 1;
3528 }
3529 
3530 /* Given a line table and a line number, return the index into the line
3531    table for the pc of the nearest line whose number is >= the specified one.
3532    Return -1 if none is found.  The value is >= 0 if it is an index.
3533    START is the index at which to start searching the line table.
3534 
3535    Set *EXACT_MATCH nonzero if the value returned is an exact match.  */
3536 
3537 static int
3538 find_line_common (struct linetable *l, int lineno,
3539 		  int *exact_match, int start)
3540 {
3541   int i;
3542   int len;
3543 
3544   /* BEST is the smallest linenumber > LINENO so far seen,
3545      or 0 if none has been seen so far.
3546      BEST_INDEX identifies the item for it.  */
3547 
3548   int best_index = -1;
3549   int best = 0;
3550 
3551   *exact_match = 0;
3552 
3553   if (lineno <= 0)
3554     return -1;
3555   if (l == 0)
3556     return -1;
3557 
3558   len = l->nitems;
3559   for (i = start; i < len; i++)
3560     {
3561       struct linetable_entry *item = &(l->item[i]);
3562 
3563       if (item->line == lineno)
3564 	{
3565 	  /* Return the first (lowest address) entry which matches.  */
3566 	  *exact_match = 1;
3567 	  return i;
3568 	}
3569 
3570       if (item->line > lineno && (best == 0 || item->line < best))
3571 	{
3572 	  best = item->line;
3573 	  best_index = i;
3574 	}
3575     }
3576 
3577   /* If we got here, we didn't get an exact match.  */
3578   return best_index;
3579 }
3580 
3581 int
3582 find_pc_line_pc_range (CORE_ADDR pc, CORE_ADDR *startptr, CORE_ADDR *endptr)
3583 {
3584   struct symtab_and_line sal;
3585 
3586   sal = find_pc_line (pc, 0);
3587   *startptr = sal.pc;
3588   *endptr = sal.end;
3589   return sal.symtab != 0;
3590 }
3591 
3592 /* Helper for find_function_start_sal.  Does most of the work, except
3593    setting the sal's symbol.  */
3594 
3595 static symtab_and_line
3596 find_function_start_sal_1 (CORE_ADDR func_addr, obj_section *section,
3597 			   bool funfirstline)
3598 {
3599   symtab_and_line sal = find_pc_sect_line (func_addr, section, 0);
3600 
3601   if (funfirstline && sal.symtab != NULL
3602       && (COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (sal.symtab))
3603 	  || SYMTAB_LANGUAGE (sal.symtab) == language_asm))
3604     {
3605       struct gdbarch *gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab));
3606 
3607       sal.pc = func_addr;
3608       if (gdbarch_skip_entrypoint_p (gdbarch))
3609 	sal.pc = gdbarch_skip_entrypoint (gdbarch, sal.pc);
3610       return sal;
3611     }
3612 
3613   /* We always should have a line for the function start address.
3614      If we don't, something is odd.  Create a plain SAL referring
3615      just the PC and hope that skip_prologue_sal (if requested)
3616      can find a line number for after the prologue.  */
3617   if (sal.pc < func_addr)
3618     {
3619       sal = {};
3620       sal.pspace = current_program_space;
3621       sal.pc = func_addr;
3622       sal.section = section;
3623     }
3624 
3625   if (funfirstline)
3626     skip_prologue_sal (&sal);
3627 
3628   return sal;
3629 }
3630 
3631 /* See symtab.h.  */
3632 
3633 symtab_and_line
3634 find_function_start_sal (CORE_ADDR func_addr, obj_section *section,
3635 			 bool funfirstline)
3636 {
3637   symtab_and_line sal
3638     = find_function_start_sal_1 (func_addr, section, funfirstline);
3639 
3640   /* find_function_start_sal_1 does a linetable search, so it finds
3641      the symtab and linenumber, but not a symbol.  Fill in the
3642      function symbol too.  */
3643   sal.symbol = find_pc_sect_containing_function (sal.pc, sal.section);
3644 
3645   return sal;
3646 }
3647 
3648 /* See symtab.h.  */
3649 
3650 symtab_and_line
3651 find_function_start_sal (symbol *sym, bool funfirstline)
3652 {
3653   fixup_symbol_section (sym, NULL);
3654   symtab_and_line sal
3655     = find_function_start_sal_1 (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)),
3656 				 SYMBOL_OBJ_SECTION (symbol_objfile (sym), sym),
3657 				 funfirstline);
3658   sal.symbol = sym;
3659   return sal;
3660 }
3661 
3662 
3663 /* Given a function start address FUNC_ADDR and SYMTAB, find the first
3664    address for that function that has an entry in SYMTAB's line info
3665    table.  If such an entry cannot be found, return FUNC_ADDR
3666    unaltered.  */
3667 
3668 static CORE_ADDR
3669 skip_prologue_using_lineinfo (CORE_ADDR func_addr, struct symtab *symtab)
3670 {
3671   CORE_ADDR func_start, func_end;
3672   struct linetable *l;
3673   int i;
3674 
3675   /* Give up if this symbol has no lineinfo table.  */
3676   l = SYMTAB_LINETABLE (symtab);
3677   if (l == NULL)
3678     return func_addr;
3679 
3680   /* Get the range for the function's PC values, or give up if we
3681      cannot, for some reason.  */
3682   if (!find_pc_partial_function (func_addr, NULL, &func_start, &func_end))
3683     return func_addr;
3684 
3685   /* Linetable entries are ordered by PC values, see the commentary in
3686      symtab.h where `struct linetable' is defined.  Thus, the first
3687      entry whose PC is in the range [FUNC_START..FUNC_END[ is the
3688      address we are looking for.  */
3689   for (i = 0; i < l->nitems; i++)
3690     {
3691       struct linetable_entry *item = &(l->item[i]);
3692 
3693       /* Don't use line numbers of zero, they mark special entries in
3694 	 the table.  See the commentary on symtab.h before the
3695 	 definition of struct linetable.  */
3696       if (item->line > 0 && func_start <= item->pc && item->pc < func_end)
3697 	return item->pc;
3698     }
3699 
3700   return func_addr;
3701 }
3702 
3703 /* Adjust SAL to the first instruction past the function prologue.
3704    If the PC was explicitly specified, the SAL is not changed.
3705    If the line number was explicitly specified, at most the SAL's PC
3706    is updated.  If SAL is already past the prologue, then do nothing.  */
3707 
3708 void
3709 skip_prologue_sal (struct symtab_and_line *sal)
3710 {
3711   struct symbol *sym;
3712   struct symtab_and_line start_sal;
3713   CORE_ADDR pc, saved_pc;
3714   struct obj_section *section;
3715   const char *name;
3716   struct objfile *objfile;
3717   struct gdbarch *gdbarch;
3718   const struct block *b, *function_block;
3719   int force_skip, skip;
3720 
3721   /* Do not change the SAL if PC was specified explicitly.  */
3722   if (sal->explicit_pc)
3723     return;
3724 
3725   scoped_restore_current_pspace_and_thread restore_pspace_thread;
3726 
3727   switch_to_program_space_and_thread (sal->pspace);
3728 
3729   sym = find_pc_sect_function (sal->pc, sal->section);
3730   if (sym != NULL)
3731     {
3732       fixup_symbol_section (sym, NULL);
3733 
3734       objfile = symbol_objfile (sym);
3735       pc = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
3736       section = SYMBOL_OBJ_SECTION (objfile, sym);
3737       name = SYMBOL_LINKAGE_NAME (sym);
3738     }
3739   else
3740     {
3741       struct bound_minimal_symbol msymbol
3742         = lookup_minimal_symbol_by_pc_section (sal->pc, sal->section);
3743 
3744       if (msymbol.minsym == NULL)
3745 	return;
3746 
3747       objfile = msymbol.objfile;
3748       pc = BMSYMBOL_VALUE_ADDRESS (msymbol);
3749       section = MSYMBOL_OBJ_SECTION (objfile, msymbol.minsym);
3750       name = MSYMBOL_LINKAGE_NAME (msymbol.minsym);
3751     }
3752 
3753   gdbarch = get_objfile_arch (objfile);
3754 
3755   /* Process the prologue in two passes.  In the first pass try to skip the
3756      prologue (SKIP is true) and verify there is a real need for it (indicated
3757      by FORCE_SKIP).  If no such reason was found run a second pass where the
3758      prologue is not skipped (SKIP is false).  */
3759 
3760   skip = 1;
3761   force_skip = 1;
3762 
3763   /* Be conservative - allow direct PC (without skipping prologue) only if we
3764      have proven the CU (Compilation Unit) supports it.  sal->SYMTAB does not
3765      have to be set by the caller so we use SYM instead.  */
3766   if (sym != NULL
3767       && COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (symbol_symtab (sym))))
3768     force_skip = 0;
3769 
3770   saved_pc = pc;
3771   do
3772     {
3773       pc = saved_pc;
3774 
3775       /* If the function is in an unmapped overlay, use its unmapped LMA address,
3776 	 so that gdbarch_skip_prologue has something unique to work on.  */
3777       if (section_is_overlay (section) && !section_is_mapped (section))
3778 	pc = overlay_unmapped_address (pc, section);
3779 
3780       /* Skip "first line" of function (which is actually its prologue).  */
3781       pc += gdbarch_deprecated_function_start_offset (gdbarch);
3782       if (gdbarch_skip_entrypoint_p (gdbarch))
3783         pc = gdbarch_skip_entrypoint (gdbarch, pc);
3784       if (skip)
3785 	pc = gdbarch_skip_prologue_noexcept (gdbarch, pc);
3786 
3787       /* For overlays, map pc back into its mapped VMA range.  */
3788       pc = overlay_mapped_address (pc, section);
3789 
3790       /* Calculate line number.  */
3791       start_sal = find_pc_sect_line (pc, section, 0);
3792 
3793       /* Check if gdbarch_skip_prologue left us in mid-line, and the next
3794 	 line is still part of the same function.  */
3795       if (skip && start_sal.pc != pc
3796 	  && (sym ? (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) <= start_sal.end
3797 		     && start_sal.end < BLOCK_END (SYMBOL_BLOCK_VALUE (sym)))
3798 	      : (lookup_minimal_symbol_by_pc_section (start_sal.end, section).minsym
3799 		 == lookup_minimal_symbol_by_pc_section (pc, section).minsym)))
3800 	{
3801 	  /* First pc of next line */
3802 	  pc = start_sal.end;
3803 	  /* Recalculate the line number (might not be N+1).  */
3804 	  start_sal = find_pc_sect_line (pc, section, 0);
3805 	}
3806 
3807       /* On targets with executable formats that don't have a concept of
3808 	 constructors (ELF with .init has, PE doesn't), gcc emits a call
3809 	 to `__main' in `main' between the prologue and before user
3810 	 code.  */
3811       if (gdbarch_skip_main_prologue_p (gdbarch)
3812 	  && name && strcmp_iw (name, "main") == 0)
3813 	{
3814 	  pc = gdbarch_skip_main_prologue (gdbarch, pc);
3815 	  /* Recalculate the line number (might not be N+1).  */
3816 	  start_sal = find_pc_sect_line (pc, section, 0);
3817 	  force_skip = 1;
3818 	}
3819     }
3820   while (!force_skip && skip--);
3821 
3822   /* If we still don't have a valid source line, try to find the first
3823      PC in the lineinfo table that belongs to the same function.  This
3824      happens with COFF debug info, which does not seem to have an
3825      entry in lineinfo table for the code after the prologue which has
3826      no direct relation to source.  For example, this was found to be
3827      the case with the DJGPP target using "gcc -gcoff" when the
3828      compiler inserted code after the prologue to make sure the stack
3829      is aligned.  */
3830   if (!force_skip && sym && start_sal.symtab == NULL)
3831     {
3832       pc = skip_prologue_using_lineinfo (pc, symbol_symtab (sym));
3833       /* Recalculate the line number.  */
3834       start_sal = find_pc_sect_line (pc, section, 0);
3835     }
3836 
3837   /* If we're already past the prologue, leave SAL unchanged.  Otherwise
3838      forward SAL to the end of the prologue.  */
3839   if (sal->pc >= pc)
3840     return;
3841 
3842   sal->pc = pc;
3843   sal->section = section;
3844 
3845   /* Unless the explicit_line flag was set, update the SAL line
3846      and symtab to correspond to the modified PC location.  */
3847   if (sal->explicit_line)
3848     return;
3849 
3850   sal->symtab = start_sal.symtab;
3851   sal->line = start_sal.line;
3852   sal->end = start_sal.end;
3853 
3854   /* Check if we are now inside an inlined function.  If we can,
3855      use the call site of the function instead.  */
3856   b = block_for_pc_sect (sal->pc, sal->section);
3857   function_block = NULL;
3858   while (b != NULL)
3859     {
3860       if (BLOCK_FUNCTION (b) != NULL && block_inlined_p (b))
3861 	function_block = b;
3862       else if (BLOCK_FUNCTION (b) != NULL)
3863 	break;
3864       b = BLOCK_SUPERBLOCK (b);
3865     }
3866   if (function_block != NULL
3867       && SYMBOL_LINE (BLOCK_FUNCTION (function_block)) != 0)
3868     {
3869       sal->line = SYMBOL_LINE (BLOCK_FUNCTION (function_block));
3870       sal->symtab = symbol_symtab (BLOCK_FUNCTION (function_block));
3871     }
3872 }
3873 
3874 /* Given PC at the function's start address, attempt to find the
3875    prologue end using SAL information.  Return zero if the skip fails.
3876 
3877    A non-optimized prologue traditionally has one SAL for the function
3878    and a second for the function body.  A single line function has
3879    them both pointing at the same line.
3880 
3881    An optimized prologue is similar but the prologue may contain
3882    instructions (SALs) from the instruction body.  Need to skip those
3883    while not getting into the function body.
3884 
3885    The functions end point and an increasing SAL line are used as
3886    indicators of the prologue's endpoint.
3887 
3888    This code is based on the function refine_prologue_limit
3889    (found in ia64).  */
3890 
3891 CORE_ADDR
3892 skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
3893 {
3894   struct symtab_and_line prologue_sal;
3895   CORE_ADDR start_pc;
3896   CORE_ADDR end_pc;
3897   const struct block *bl;
3898 
3899   /* Get an initial range for the function.  */
3900   find_pc_partial_function (func_addr, NULL, &start_pc, &end_pc);
3901   start_pc += gdbarch_deprecated_function_start_offset (gdbarch);
3902 
3903   prologue_sal = find_pc_line (start_pc, 0);
3904   if (prologue_sal.line != 0)
3905     {
3906       /* For languages other than assembly, treat two consecutive line
3907 	 entries at the same address as a zero-instruction prologue.
3908 	 The GNU assembler emits separate line notes for each instruction
3909 	 in a multi-instruction macro, but compilers generally will not
3910 	 do this.  */
3911       if (prologue_sal.symtab->language != language_asm)
3912 	{
3913 	  struct linetable *linetable = SYMTAB_LINETABLE (prologue_sal.symtab);
3914 	  int idx = 0;
3915 
3916 	  /* Skip any earlier lines, and any end-of-sequence marker
3917 	     from a previous function.  */
3918 	  while (linetable->item[idx].pc != prologue_sal.pc
3919 		 || linetable->item[idx].line == 0)
3920 	    idx++;
3921 
3922 	  if (idx+1 < linetable->nitems
3923 	      && linetable->item[idx+1].line != 0
3924 	      && linetable->item[idx+1].pc == start_pc)
3925 	    return start_pc;
3926 	}
3927 
3928       /* If there is only one sal that covers the entire function,
3929 	 then it is probably a single line function, like
3930 	 "foo(){}".  */
3931       if (prologue_sal.end >= end_pc)
3932 	return 0;
3933 
3934       while (prologue_sal.end < end_pc)
3935 	{
3936 	  struct symtab_and_line sal;
3937 
3938 	  sal = find_pc_line (prologue_sal.end, 0);
3939 	  if (sal.line == 0)
3940 	    break;
3941 	  /* Assume that a consecutive SAL for the same (or larger)
3942 	     line mark the prologue -> body transition.  */
3943 	  if (sal.line >= prologue_sal.line)
3944 	    break;
3945 	  /* Likewise if we are in a different symtab altogether
3946 	     (e.g. within a file included via #include).  */
3947 	  if (sal.symtab != prologue_sal.symtab)
3948 	    break;
3949 
3950 	  /* The line number is smaller.  Check that it's from the
3951 	     same function, not something inlined.  If it's inlined,
3952 	     then there is no point comparing the line numbers.  */
3953 	  bl = block_for_pc (prologue_sal.end);
3954 	  while (bl)
3955 	    {
3956 	      if (block_inlined_p (bl))
3957 		break;
3958 	      if (BLOCK_FUNCTION (bl))
3959 		{
3960 		  bl = NULL;
3961 		  break;
3962 		}
3963 	      bl = BLOCK_SUPERBLOCK (bl);
3964 	    }
3965 	  if (bl != NULL)
3966 	    break;
3967 
3968 	  /* The case in which compiler's optimizer/scheduler has
3969 	     moved instructions into the prologue.  We look ahead in
3970 	     the function looking for address ranges whose
3971 	     corresponding line number is less the first one that we
3972 	     found for the function.  This is more conservative then
3973 	     refine_prologue_limit which scans a large number of SALs
3974 	     looking for any in the prologue.  */
3975 	  prologue_sal = sal;
3976 	}
3977     }
3978 
3979   if (prologue_sal.end < end_pc)
3980     /* Return the end of this line, or zero if we could not find a
3981        line.  */
3982     return prologue_sal.end;
3983   else
3984     /* Don't return END_PC, which is past the end of the function.  */
3985     return prologue_sal.pc;
3986 }
3987 
3988 /* See symtab.h.  */
3989 
3990 symbol *
3991 find_function_alias_target (bound_minimal_symbol msymbol)
3992 {
3993   CORE_ADDR func_addr;
3994   if (!msymbol_is_function (msymbol.objfile, msymbol.minsym, &func_addr))
3995     return NULL;
3996 
3997   symbol *sym = find_pc_function (func_addr);
3998   if (sym != NULL
3999       && SYMBOL_CLASS (sym) == LOC_BLOCK
4000       && BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) == func_addr)
4001     return sym;
4002 
4003   return NULL;
4004 }
4005 
4006 
4007 /* If P is of the form "operator[ \t]+..." where `...' is
4008    some legitimate operator text, return a pointer to the
4009    beginning of the substring of the operator text.
4010    Otherwise, return "".  */
4011 
4012 static const char *
4013 operator_chars (const char *p, const char **end)
4014 {
4015   *end = "";
4016   if (!startswith (p, CP_OPERATOR_STR))
4017     return *end;
4018   p += CP_OPERATOR_LEN;
4019 
4020   /* Don't get faked out by `operator' being part of a longer
4021      identifier.  */
4022   if (isalpha (*p) || *p == '_' || *p == '$' || *p == '\0')
4023     return *end;
4024 
4025   /* Allow some whitespace between `operator' and the operator symbol.  */
4026   while (*p == ' ' || *p == '\t')
4027     p++;
4028 
4029   /* Recognize 'operator TYPENAME'.  */
4030 
4031   if (isalpha (*p) || *p == '_' || *p == '$')
4032     {
4033       const char *q = p + 1;
4034 
4035       while (isalnum (*q) || *q == '_' || *q == '$')
4036 	q++;
4037       *end = q;
4038       return p;
4039     }
4040 
4041   while (*p)
4042     switch (*p)
4043       {
4044       case '\\':			/* regexp quoting */
4045 	if (p[1] == '*')
4046 	  {
4047 	    if (p[2] == '=')		/* 'operator\*=' */
4048 	      *end = p + 3;
4049 	    else			/* 'operator\*'  */
4050 	      *end = p + 2;
4051 	    return p;
4052 	  }
4053 	else if (p[1] == '[')
4054 	  {
4055 	    if (p[2] == ']')
4056 	      error (_("mismatched quoting on brackets, "
4057 		       "try 'operator\\[\\]'"));
4058 	    else if (p[2] == '\\' && p[3] == ']')
4059 	      {
4060 		*end = p + 4;	/* 'operator\[\]' */
4061 		return p;
4062 	      }
4063 	    else
4064 	      error (_("nothing is allowed between '[' and ']'"));
4065 	  }
4066 	else
4067 	  {
4068 	    /* Gratuitous qoute: skip it and move on.  */
4069 	    p++;
4070 	    continue;
4071 	  }
4072 	break;
4073       case '!':
4074       case '=':
4075       case '*':
4076       case '/':
4077       case '%':
4078       case '^':
4079 	if (p[1] == '=')
4080 	  *end = p + 2;
4081 	else
4082 	  *end = p + 1;
4083 	return p;
4084       case '<':
4085       case '>':
4086       case '+':
4087       case '-':
4088       case '&':
4089       case '|':
4090 	if (p[0] == '-' && p[1] == '>')
4091 	  {
4092 	    /* Struct pointer member operator 'operator->'.  */
4093 	    if (p[2] == '*')
4094 	      {
4095 		*end = p + 3;	/* 'operator->*' */
4096 		return p;
4097 	      }
4098 	    else if (p[2] == '\\')
4099 	      {
4100 		*end = p + 4;	/* Hopefully 'operator->\*' */
4101 		return p;
4102 	      }
4103 	    else
4104 	      {
4105 		*end = p + 2;	/* 'operator->' */
4106 		return p;
4107 	      }
4108 	  }
4109 	if (p[1] == '=' || p[1] == p[0])
4110 	  *end = p + 2;
4111 	else
4112 	  *end = p + 1;
4113 	return p;
4114       case '~':
4115       case ',':
4116 	*end = p + 1;
4117 	return p;
4118       case '(':
4119 	if (p[1] != ')')
4120 	  error (_("`operator ()' must be specified "
4121 		   "without whitespace in `()'"));
4122 	*end = p + 2;
4123 	return p;
4124       case '?':
4125 	if (p[1] != ':')
4126 	  error (_("`operator ?:' must be specified "
4127 		   "without whitespace in `?:'"));
4128 	*end = p + 2;
4129 	return p;
4130       case '[':
4131 	if (p[1] != ']')
4132 	  error (_("`operator []' must be specified "
4133 		   "without whitespace in `[]'"));
4134 	*end = p + 2;
4135 	return p;
4136       default:
4137 	error (_("`operator %s' not supported"), p);
4138 	break;
4139       }
4140 
4141   *end = "";
4142   return *end;
4143 }
4144 
4145 
4146 /* Data structure to maintain printing state for output_source_filename.  */
4147 
4148 struct output_source_filename_data
4149 {
4150   /* Cache of what we've seen so far.  */
4151   struct filename_seen_cache *filename_seen_cache;
4152 
4153   /* Flag of whether we're printing the first one.  */
4154   int first;
4155 };
4156 
4157 /* Slave routine for sources_info.  Force line breaks at ,'s.
4158    NAME is the name to print.
4159    DATA contains the state for printing and watching for duplicates.  */
4160 
4161 static void
4162 output_source_filename (const char *name,
4163 			struct output_source_filename_data *data)
4164 {
4165   /* Since a single source file can result in several partial symbol
4166      tables, we need to avoid printing it more than once.  Note: if
4167      some of the psymtabs are read in and some are not, it gets
4168      printed both under "Source files for which symbols have been
4169      read" and "Source files for which symbols will be read in on
4170      demand".  I consider this a reasonable way to deal with the
4171      situation.  I'm not sure whether this can also happen for
4172      symtabs; it doesn't hurt to check.  */
4173 
4174   /* Was NAME already seen?  */
4175   if (data->filename_seen_cache->seen (name))
4176     {
4177       /* Yes; don't print it again.  */
4178       return;
4179     }
4180 
4181   /* No; print it and reset *FIRST.  */
4182   if (! data->first)
4183     printf_filtered (", ");
4184   data->first = 0;
4185 
4186   wrap_here ("");
4187   fputs_styled (name, file_name_style.style (), gdb_stdout);
4188 }
4189 
4190 /* A callback for map_partial_symbol_filenames.  */
4191 
4192 static void
4193 output_partial_symbol_filename (const char *filename, const char *fullname,
4194 				void *data)
4195 {
4196   output_source_filename (fullname ? fullname : filename,
4197 			  (struct output_source_filename_data *) data);
4198 }
4199 
4200 static void
4201 info_sources_command (const char *ignore, int from_tty)
4202 {
4203   struct output_source_filename_data data;
4204 
4205   if (!have_full_symbols () && !have_partial_symbols ())
4206     {
4207       error (_("No symbol table is loaded.  Use the \"file\" command."));
4208     }
4209 
4210   filename_seen_cache filenames_seen;
4211 
4212   data.filename_seen_cache = &filenames_seen;
4213 
4214   printf_filtered ("Source files for which symbols have been read in:\n\n");
4215 
4216   data.first = 1;
4217   for (objfile *objfile : current_program_space->objfiles ())
4218     {
4219       for (compunit_symtab *cu : objfile->compunits ())
4220 	{
4221 	  for (symtab *s : compunit_filetabs (cu))
4222 	    {
4223 	      const char *fullname = symtab_to_fullname (s);
4224 
4225 	      output_source_filename (fullname, &data);
4226 	    }
4227 	}
4228     }
4229   printf_filtered ("\n\n");
4230 
4231   printf_filtered ("Source files for which symbols "
4232 		   "will be read in on demand:\n\n");
4233 
4234   filenames_seen.clear ();
4235   data.first = 1;
4236   map_symbol_filenames (output_partial_symbol_filename, &data,
4237 			1 /*need_fullname*/);
4238   printf_filtered ("\n");
4239 }
4240 
4241 /* Compare FILE against all the NFILES entries of FILES.  If BASENAMES is
4242    non-zero compare only lbasename of FILES.  */
4243 
4244 static int
4245 file_matches (const char *file, const char *files[], int nfiles, int basenames)
4246 {
4247   int i;
4248 
4249   if (file != NULL && nfiles != 0)
4250     {
4251       for (i = 0; i < nfiles; i++)
4252 	{
4253 	  if (compare_filenames_for_search (file, (basenames
4254 						   ? lbasename (files[i])
4255 						   : files[i])))
4256 	    return 1;
4257 	}
4258     }
4259   else if (nfiles == 0)
4260     return 1;
4261   return 0;
4262 }
4263 
4264 /* Helper function for sort_search_symbols_remove_dups and qsort.  Can only
4265    sort symbols, not minimal symbols.  */
4266 
4267 int
4268 symbol_search::compare_search_syms (const symbol_search &sym_a,
4269 				    const symbol_search &sym_b)
4270 {
4271   int c;
4272 
4273   c = FILENAME_CMP (symbol_symtab (sym_a.symbol)->filename,
4274 		    symbol_symtab (sym_b.symbol)->filename);
4275   if (c != 0)
4276     return c;
4277 
4278   if (sym_a.block != sym_b.block)
4279     return sym_a.block - sym_b.block;
4280 
4281   return strcmp (SYMBOL_PRINT_NAME (sym_a.symbol),
4282 		 SYMBOL_PRINT_NAME (sym_b.symbol));
4283 }
4284 
4285 /* Returns true if the type_name of symbol_type of SYM matches TREG.
4286    If SYM has no symbol_type or symbol_name, returns false.  */
4287 
4288 bool
4289 treg_matches_sym_type_name (const compiled_regex &treg,
4290 			    const struct symbol *sym)
4291 {
4292   struct type *sym_type;
4293   std::string printed_sym_type_name;
4294 
4295   if (symbol_lookup_debug > 1)
4296     {
4297       fprintf_unfiltered (gdb_stdlog,
4298 			  "treg_matches_sym_type_name\n     sym %s\n",
4299 			  SYMBOL_NATURAL_NAME (sym));
4300     }
4301 
4302   sym_type = SYMBOL_TYPE (sym);
4303   if (sym_type == NULL)
4304     return false;
4305 
4306   {
4307     scoped_switch_to_sym_language_if_auto l (sym);
4308 
4309     printed_sym_type_name = type_to_string (sym_type);
4310   }
4311 
4312 
4313   if (symbol_lookup_debug > 1)
4314     {
4315       fprintf_unfiltered (gdb_stdlog,
4316 			  "     sym_type_name %s\n",
4317 			  printed_sym_type_name.c_str ());
4318     }
4319 
4320 
4321   if (printed_sym_type_name.empty ())
4322     return false;
4323 
4324   return treg.exec (printed_sym_type_name.c_str (), 0, NULL, 0) == 0;
4325 }
4326 
4327 
4328 /* Sort the symbols in RESULT and remove duplicates.  */
4329 
4330 static void
4331 sort_search_symbols_remove_dups (std::vector<symbol_search> *result)
4332 {
4333   std::sort (result->begin (), result->end ());
4334   result->erase (std::unique (result->begin (), result->end ()),
4335 		 result->end ());
4336 }
4337 
4338 /* Search the symbol table for matches to the regular expression REGEXP,
4339    returning the results.
4340 
4341    Only symbols of KIND are searched:
4342    VARIABLES_DOMAIN - search all symbols, excluding functions, type names,
4343                       and constants (enums).
4344 		      if T_REGEXP is not NULL, only returns var that have
4345 		      a type matching regular expression T_REGEXP.
4346    FUNCTIONS_DOMAIN - search all functions
4347    TYPES_DOMAIN     - search all type names
4348    ALL_DOMAIN       - an internal error for this function
4349 
4350    Within each file the results are sorted locally; each symtab's global and
4351    static blocks are separately alphabetized.
4352    Duplicate entries are removed.  */
4353 
4354 std::vector<symbol_search>
4355 search_symbols (const char *regexp, enum search_domain kind,
4356 		const char *t_regexp,
4357 		int nfiles, const char *files[])
4358 {
4359   const struct blockvector *bv;
4360   struct block *b;
4361   int i = 0;
4362   struct block_iterator iter;
4363   struct symbol *sym;
4364   int found_misc = 0;
4365   static const enum minimal_symbol_type types[]
4366     = {mst_data, mst_text, mst_abs};
4367   static const enum minimal_symbol_type types2[]
4368     = {mst_bss, mst_file_text, mst_abs};
4369   static const enum minimal_symbol_type types3[]
4370     = {mst_file_data, mst_solib_trampoline, mst_abs};
4371   static const enum minimal_symbol_type types4[]
4372     = {mst_file_bss, mst_text_gnu_ifunc, mst_abs};
4373   enum minimal_symbol_type ourtype;
4374   enum minimal_symbol_type ourtype2;
4375   enum minimal_symbol_type ourtype3;
4376   enum minimal_symbol_type ourtype4;
4377   std::vector<symbol_search> result;
4378   gdb::optional<compiled_regex> preg;
4379   gdb::optional<compiled_regex> treg;
4380 
4381   gdb_assert (kind <= TYPES_DOMAIN);
4382 
4383   ourtype = types[kind];
4384   ourtype2 = types2[kind];
4385   ourtype3 = types3[kind];
4386   ourtype4 = types4[kind];
4387 
4388   if (regexp != NULL)
4389     {
4390       /* Make sure spacing is right for C++ operators.
4391          This is just a courtesy to make the matching less sensitive
4392          to how many spaces the user leaves between 'operator'
4393          and <TYPENAME> or <OPERATOR>.  */
4394       const char *opend;
4395       const char *opname = operator_chars (regexp, &opend);
4396 
4397       if (*opname)
4398 	{
4399 	  int fix = -1;		/* -1 means ok; otherwise number of
4400                                     spaces needed.  */
4401 
4402 	  if (isalpha (*opname) || *opname == '_' || *opname == '$')
4403 	    {
4404 	      /* There should 1 space between 'operator' and 'TYPENAME'.  */
4405 	      if (opname[-1] != ' ' || opname[-2] == ' ')
4406 		fix = 1;
4407 	    }
4408 	  else
4409 	    {
4410 	      /* There should 0 spaces between 'operator' and 'OPERATOR'.  */
4411 	      if (opname[-1] == ' ')
4412 		fix = 0;
4413 	    }
4414 	  /* If wrong number of spaces, fix it.  */
4415 	  if (fix >= 0)
4416 	    {
4417 	      char *tmp = (char *) alloca (8 + fix + strlen (opname) + 1);
4418 
4419 	      sprintf (tmp, "operator%.*s%s", fix, " ", opname);
4420 	      regexp = tmp;
4421 	    }
4422 	}
4423 
4424       int cflags = REG_NOSUB | (case_sensitivity == case_sensitive_off
4425 				? REG_ICASE : 0);
4426       preg.emplace (regexp, cflags, _("Invalid regexp"));
4427     }
4428 
4429   if (t_regexp != NULL)
4430     {
4431       int cflags = REG_NOSUB | (case_sensitivity == case_sensitive_off
4432 				? REG_ICASE : 0);
4433       treg.emplace (t_regexp, cflags, _("Invalid regexp"));
4434     }
4435 
4436   /* Search through the partial symtabs *first* for all symbols
4437      matching the regexp.  That way we don't have to reproduce all of
4438      the machinery below.  */
4439   expand_symtabs_matching ([&] (const char *filename, bool basenames)
4440 			   {
4441 			     return file_matches (filename, files, nfiles,
4442 						  basenames);
4443 			   },
4444 			   lookup_name_info::match_any (),
4445 			   [&] (const char *symname)
4446 			   {
4447 			     return (!preg.has_value ()
4448 				     || preg->exec (symname,
4449 						    0, NULL, 0) == 0);
4450 			   },
4451 			   NULL,
4452 			   kind);
4453 
4454   /* Here, we search through the minimal symbol tables for functions
4455      and variables that match, and force their symbols to be read.
4456      This is in particular necessary for demangled variable names,
4457      which are no longer put into the partial symbol tables.
4458      The symbol will then be found during the scan of symtabs below.
4459 
4460      For functions, find_pc_symtab should succeed if we have debug info
4461      for the function, for variables we have to call
4462      lookup_symbol_in_objfile_from_linkage_name to determine if the variable
4463      has debug info.
4464      If the lookup fails, set found_misc so that we will rescan to print
4465      any matching symbols without debug info.
4466      We only search the objfile the msymbol came from, we no longer search
4467      all objfiles.  In large programs (1000s of shared libs) searching all
4468      objfiles is not worth the pain.  */
4469 
4470   if (nfiles == 0 && (kind == VARIABLES_DOMAIN || kind == FUNCTIONS_DOMAIN))
4471     {
4472       for (objfile *objfile : current_program_space->objfiles ())
4473 	{
4474 	  for (minimal_symbol *msymbol : objfile->msymbols ())
4475 	    {
4476 	      QUIT;
4477 
4478 	      if (msymbol->created_by_gdb)
4479 		continue;
4480 
4481 	      if (MSYMBOL_TYPE (msymbol) == ourtype
4482 		  || MSYMBOL_TYPE (msymbol) == ourtype2
4483 		  || MSYMBOL_TYPE (msymbol) == ourtype3
4484 		  || MSYMBOL_TYPE (msymbol) == ourtype4)
4485 		{
4486 		  if (!preg.has_value ()
4487 		      || preg->exec (MSYMBOL_NATURAL_NAME (msymbol), 0,
4488 				     NULL, 0) == 0)
4489 		    {
4490 		      /* Note: An important side-effect of these
4491 			 lookup functions is to expand the symbol
4492 			 table if msymbol is found, for the benefit of
4493 			 the next loop on compunits.  */
4494 		      if (kind == FUNCTIONS_DOMAIN
4495 			  ? (find_pc_compunit_symtab
4496 			     (MSYMBOL_VALUE_ADDRESS (objfile, msymbol))
4497 			     == NULL)
4498 			  : (lookup_symbol_in_objfile_from_linkage_name
4499 			     (objfile, MSYMBOL_LINKAGE_NAME (msymbol),
4500 			      VAR_DOMAIN)
4501 			     .symbol == NULL))
4502 			found_misc = 1;
4503 		    }
4504 		}
4505 	    }
4506 	}
4507     }
4508 
4509   for (objfile *objfile : current_program_space->objfiles ())
4510     {
4511       for (compunit_symtab *cust : objfile->compunits ())
4512 	{
4513 	  bv = COMPUNIT_BLOCKVECTOR (cust);
4514 	  for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
4515 	    {
4516 	      b = BLOCKVECTOR_BLOCK (bv, i);
4517 	      ALL_BLOCK_SYMBOLS (b, iter, sym)
4518 		{
4519 		  struct symtab *real_symtab = symbol_symtab (sym);
4520 
4521 		  QUIT;
4522 
4523 		  /* Check first sole REAL_SYMTAB->FILENAME.  It does
4524 		     not need to be a substring of symtab_to_fullname as
4525 		     it may contain "./" etc.  */
4526 		  if ((file_matches (real_symtab->filename, files, nfiles, 0)
4527 		       || ((basenames_may_differ
4528 			    || file_matches (lbasename (real_symtab->filename),
4529 					     files, nfiles, 1))
4530 			   && file_matches (symtab_to_fullname (real_symtab),
4531 					    files, nfiles, 0)))
4532 		      && ((!preg.has_value ()
4533 			   || preg->exec (SYMBOL_NATURAL_NAME (sym), 0,
4534 					  NULL, 0) == 0)
4535 			  && ((kind == VARIABLES_DOMAIN
4536 			       && SYMBOL_CLASS (sym) != LOC_TYPEDEF
4537 			       && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
4538 			       && SYMBOL_CLASS (sym) != LOC_BLOCK
4539 			       /* LOC_CONST can be used for more than
4540 				  just enums, e.g., c++ static const
4541 				  members.  We only want to skip enums
4542 				  here.  */
4543 			       && !(SYMBOL_CLASS (sym) == LOC_CONST
4544 				    && (TYPE_CODE (SYMBOL_TYPE (sym))
4545 					== TYPE_CODE_ENUM))
4546 			       && (!treg.has_value ()
4547 				   || treg_matches_sym_type_name (*treg, sym)))
4548 			      || (kind == FUNCTIONS_DOMAIN
4549 				  && SYMBOL_CLASS (sym) == LOC_BLOCK
4550 				  && (!treg.has_value ()
4551 				      || treg_matches_sym_type_name (*treg,
4552 								     sym)))
4553 			      || (kind == TYPES_DOMAIN
4554 				  && SYMBOL_CLASS (sym) == LOC_TYPEDEF))))
4555 		    {
4556 		      /* match */
4557 		      result.emplace_back (i, sym);
4558 		    }
4559 		}
4560 	    }
4561 	}
4562     }
4563 
4564   if (!result.empty ())
4565     sort_search_symbols_remove_dups (&result);
4566 
4567   /* If there are no eyes, avoid all contact.  I mean, if there are
4568      no debug symbols, then add matching minsyms.  But if the user wants
4569      to see symbols matching a type regexp, then never give a minimal symbol,
4570      as we assume that a minimal symbol does not have a type.  */
4571 
4572   if ((found_misc || (nfiles == 0 && kind != FUNCTIONS_DOMAIN))
4573       && !treg.has_value ())
4574     {
4575       for (objfile *objfile : current_program_space->objfiles ())
4576 	{
4577 	  for (minimal_symbol *msymbol : objfile->msymbols ())
4578 	    {
4579 	      QUIT;
4580 
4581 	      if (msymbol->created_by_gdb)
4582 		continue;
4583 
4584 	      if (MSYMBOL_TYPE (msymbol) == ourtype
4585 		  || MSYMBOL_TYPE (msymbol) == ourtype2
4586 		  || MSYMBOL_TYPE (msymbol) == ourtype3
4587 		  || MSYMBOL_TYPE (msymbol) == ourtype4)
4588 		{
4589 		  if (!preg.has_value ()
4590 		      || preg->exec (MSYMBOL_NATURAL_NAME (msymbol), 0,
4591 				     NULL, 0) == 0)
4592 		    {
4593 		      /* For functions we can do a quick check of whether the
4594 			 symbol might be found via find_pc_symtab.  */
4595 		      if (kind != FUNCTIONS_DOMAIN
4596 			  || (find_pc_compunit_symtab
4597 			      (MSYMBOL_VALUE_ADDRESS (objfile, msymbol))
4598 			      == NULL))
4599 			{
4600 			  if (lookup_symbol_in_objfile_from_linkage_name
4601 			      (objfile, MSYMBOL_LINKAGE_NAME (msymbol),
4602 			       VAR_DOMAIN)
4603 			      .symbol == NULL)
4604 			    {
4605 			      /* match */
4606 			      result.emplace_back (i, msymbol, objfile);
4607 			    }
4608 			}
4609 		    }
4610 		}
4611 	    }
4612 	}
4613     }
4614 
4615   return result;
4616 }
4617 
4618 /* Helper function for symtab_symbol_info, this function uses
4619    the data returned from search_symbols() to print information
4620    regarding the match to gdb_stdout.  If LAST is not NULL,
4621    print file and line number information for the symbol as
4622    well.  Skip printing the filename if it matches LAST.  */
4623 
4624 static void
4625 print_symbol_info (enum search_domain kind,
4626 		   struct symbol *sym,
4627 		   int block, const char *last)
4628 {
4629   scoped_switch_to_sym_language_if_auto l (sym);
4630   struct symtab *s = symbol_symtab (sym);
4631 
4632   if (last != NULL)
4633     {
4634       const char *s_filename = symtab_to_filename_for_display (s);
4635 
4636       if (filename_cmp (last, s_filename) != 0)
4637 	{
4638 	  fputs_filtered ("\nFile ", gdb_stdout);
4639 	  fputs_styled (s_filename, file_name_style.style (), gdb_stdout);
4640 	  fputs_filtered (":\n", gdb_stdout);
4641 	}
4642 
4643       if (SYMBOL_LINE (sym) != 0)
4644 	printf_filtered ("%d:\t", SYMBOL_LINE (sym));
4645       else
4646 	puts_filtered ("\t");
4647     }
4648 
4649   if (kind != TYPES_DOMAIN && block == STATIC_BLOCK)
4650     printf_filtered ("static ");
4651 
4652   /* Typedef that is not a C++ class.  */
4653   if (kind == TYPES_DOMAIN
4654       && SYMBOL_DOMAIN (sym) != STRUCT_DOMAIN)
4655     typedef_print (SYMBOL_TYPE (sym), sym, gdb_stdout);
4656   /* variable, func, or typedef-that-is-c++-class.  */
4657   else if (kind < TYPES_DOMAIN
4658 	   || (kind == TYPES_DOMAIN
4659 	       && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN))
4660     {
4661       type_print (SYMBOL_TYPE (sym),
4662 		  (SYMBOL_CLASS (sym) == LOC_TYPEDEF
4663 		   ? "" : SYMBOL_PRINT_NAME (sym)),
4664 		  gdb_stdout, 0);
4665 
4666       printf_filtered (";\n");
4667     }
4668 }
4669 
4670 /* This help function for symtab_symbol_info() prints information
4671    for non-debugging symbols to gdb_stdout.  */
4672 
4673 static void
4674 print_msymbol_info (struct bound_minimal_symbol msymbol)
4675 {
4676   struct gdbarch *gdbarch = get_objfile_arch (msymbol.objfile);
4677   char *tmp;
4678 
4679   if (gdbarch_addr_bit (gdbarch) <= 32)
4680     tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol)
4681 			     & (CORE_ADDR) 0xffffffff,
4682 			     8);
4683   else
4684     tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol),
4685 			     16);
4686   fputs_styled (tmp, address_style.style (), gdb_stdout);
4687   fputs_filtered ("  ", gdb_stdout);
4688   if (msymbol.minsym->text_p ())
4689     fputs_styled (MSYMBOL_PRINT_NAME (msymbol.minsym),
4690 		  function_name_style.style (),
4691 		  gdb_stdout);
4692   else
4693     fputs_filtered (MSYMBOL_PRINT_NAME (msymbol.minsym), gdb_stdout);
4694   fputs_filtered ("\n", gdb_stdout);
4695 }
4696 
4697 /* This is the guts of the commands "info functions", "info types", and
4698    "info variables".  It calls search_symbols to find all matches and then
4699    print_[m]symbol_info to print out some useful information about the
4700    matches.  */
4701 
4702 static void
4703 symtab_symbol_info (bool quiet,
4704 		    const char *regexp, enum search_domain kind,
4705 		    const char *t_regexp, int from_tty)
4706 {
4707   static const char * const classnames[] =
4708     {"variable", "function", "type"};
4709   const char *last_filename = "";
4710   int first = 1;
4711 
4712   gdb_assert (kind <= TYPES_DOMAIN);
4713 
4714   /* Must make sure that if we're interrupted, symbols gets freed.  */
4715   std::vector<symbol_search> symbols = search_symbols (regexp, kind,
4716 						       t_regexp, 0, NULL);
4717 
4718   if (!quiet)
4719     {
4720       if (regexp != NULL)
4721 	{
4722 	  if (t_regexp != NULL)
4723 	    printf_filtered
4724 	      (_("All %ss matching regular expression \"%s\""
4725 		 " with type matching regular expression \"%s\":\n"),
4726 	       classnames[kind], regexp, t_regexp);
4727 	  else
4728 	    printf_filtered (_("All %ss matching regular expression \"%s\":\n"),
4729 			     classnames[kind], regexp);
4730 	}
4731       else
4732 	{
4733 	  if (t_regexp != NULL)
4734 	    printf_filtered
4735 	      (_("All defined %ss"
4736 		 " with type matching regular expression \"%s\" :\n"),
4737 	       classnames[kind], t_regexp);
4738 	  else
4739 	    printf_filtered (_("All defined %ss:\n"), classnames[kind]);
4740 	}
4741     }
4742 
4743   for (const symbol_search &p : symbols)
4744     {
4745       QUIT;
4746 
4747       if (p.msymbol.minsym != NULL)
4748 	{
4749 	  if (first)
4750 	    {
4751 	      if (!quiet)
4752 		printf_filtered (_("\nNon-debugging symbols:\n"));
4753 	      first = 0;
4754 	    }
4755 	  print_msymbol_info (p.msymbol);
4756 	}
4757       else
4758 	{
4759 	  print_symbol_info (kind,
4760 			     p.symbol,
4761 			     p.block,
4762 			     last_filename);
4763 	  last_filename
4764 	    = symtab_to_filename_for_display (symbol_symtab (p.symbol));
4765 	}
4766     }
4767 }
4768 
4769 static void
4770 info_variables_command (const char *args, int from_tty)
4771 {
4772   std::string regexp;
4773   std::string t_regexp;
4774   bool quiet = false;
4775 
4776   while (args != NULL
4777 	 && extract_info_print_args (&args, &quiet, &regexp, &t_regexp))
4778     ;
4779 
4780   if (args != NULL)
4781     report_unrecognized_option_error ("info variables", args);
4782 
4783   symtab_symbol_info (quiet,
4784 		      regexp.empty () ? NULL : regexp.c_str (),
4785 		      VARIABLES_DOMAIN,
4786 		      t_regexp.empty () ? NULL : t_regexp.c_str (),
4787 		      from_tty);
4788 }
4789 
4790 
4791 static void
4792 info_functions_command (const char *args, int from_tty)
4793 {
4794   std::string regexp;
4795   std::string t_regexp;
4796   bool quiet = false;
4797 
4798   while (args != NULL
4799 	 && extract_info_print_args (&args, &quiet, &regexp, &t_regexp))
4800     ;
4801 
4802   if (args != NULL)
4803     report_unrecognized_option_error ("info functions", args);
4804 
4805   symtab_symbol_info (quiet,
4806 		      regexp.empty () ? NULL : regexp.c_str (),
4807 		      FUNCTIONS_DOMAIN,
4808 		      t_regexp.empty () ? NULL : t_regexp.c_str (),
4809 		      from_tty);
4810 }
4811 
4812 
4813 static void
4814 info_types_command (const char *regexp, int from_tty)
4815 {
4816   symtab_symbol_info (false, regexp, TYPES_DOMAIN, NULL, from_tty);
4817 }
4818 
4819 /* Breakpoint all functions matching regular expression.  */
4820 
4821 void
4822 rbreak_command_wrapper (char *regexp, int from_tty)
4823 {
4824   rbreak_command (regexp, from_tty);
4825 }
4826 
4827 static void
4828 rbreak_command (const char *regexp, int from_tty)
4829 {
4830   std::string string;
4831   const char **files = NULL;
4832   const char *file_name;
4833   int nfiles = 0;
4834 
4835   if (regexp)
4836     {
4837       const char *colon = strchr (regexp, ':');
4838 
4839       if (colon && *(colon + 1) != ':')
4840 	{
4841 	  int colon_index;
4842 	  char *local_name;
4843 
4844 	  colon_index = colon - regexp;
4845 	  local_name = (char *) alloca (colon_index + 1);
4846 	  memcpy (local_name, regexp, colon_index);
4847 	  local_name[colon_index--] = 0;
4848 	  while (isspace (local_name[colon_index]))
4849 	    local_name[colon_index--] = 0;
4850 	  file_name = local_name;
4851 	  files = &file_name;
4852 	  nfiles = 1;
4853 	  regexp = skip_spaces (colon + 1);
4854 	}
4855     }
4856 
4857   std::vector<symbol_search> symbols = search_symbols (regexp,
4858 						       FUNCTIONS_DOMAIN,
4859 						       NULL,
4860 						       nfiles, files);
4861 
4862   scoped_rbreak_breakpoints finalize;
4863   for (const symbol_search &p : symbols)
4864     {
4865       if (p.msymbol.minsym == NULL)
4866 	{
4867 	  struct symtab *symtab = symbol_symtab (p.symbol);
4868 	  const char *fullname = symtab_to_fullname (symtab);
4869 
4870 	  string = string_printf ("%s:'%s'", fullname,
4871 				  SYMBOL_LINKAGE_NAME (p.symbol));
4872 	  break_command (&string[0], from_tty);
4873 	  print_symbol_info (FUNCTIONS_DOMAIN, p.symbol, p.block, NULL);
4874 	}
4875       else
4876 	{
4877 	  string = string_printf ("'%s'",
4878 				  MSYMBOL_LINKAGE_NAME (p.msymbol.minsym));
4879 
4880 	  break_command (&string[0], from_tty);
4881 	  printf_filtered ("<function, no debug info> %s;\n",
4882 			   MSYMBOL_PRINT_NAME (p.msymbol.minsym));
4883 	}
4884     }
4885 }
4886 
4887 
4888 /* Evaluate if SYMNAME matches LOOKUP_NAME.  */
4889 
4890 static int
4891 compare_symbol_name (const char *symbol_name, language symbol_language,
4892 		     const lookup_name_info &lookup_name,
4893 		     completion_match_result &match_res)
4894 {
4895   const language_defn *lang = language_def (symbol_language);
4896 
4897   symbol_name_matcher_ftype *name_match
4898     = get_symbol_name_matcher (lang, lookup_name);
4899 
4900   return name_match (symbol_name, lookup_name, &match_res);
4901 }
4902 
4903 /*  See symtab.h.  */
4904 
4905 void
4906 completion_list_add_name (completion_tracker &tracker,
4907 			  language symbol_language,
4908 			  const char *symname,
4909 			  const lookup_name_info &lookup_name,
4910 			  const char *text, const char *word)
4911 {
4912   completion_match_result &match_res
4913     = tracker.reset_completion_match_result ();
4914 
4915   /* Clip symbols that cannot match.  */
4916   if (!compare_symbol_name (symname, symbol_language, lookup_name, match_res))
4917     return;
4918 
4919   /* Refresh SYMNAME from the match string.  It's potentially
4920      different depending on language.  (E.g., on Ada, the match may be
4921      the encoded symbol name wrapped in "<>").  */
4922   symname = match_res.match.match ();
4923   gdb_assert (symname != NULL);
4924 
4925   /* We have a match for a completion, so add SYMNAME to the current list
4926      of matches.  Note that the name is moved to freshly malloc'd space.  */
4927 
4928   {
4929     gdb::unique_xmalloc_ptr<char> completion
4930       = make_completion_match_str (symname, text, word);
4931 
4932     /* Here we pass the match-for-lcd object to add_completion.  Some
4933        languages match the user text against substrings of symbol
4934        names in some cases.  E.g., in C++, "b push_ba" completes to
4935        "std::vector::push_back", "std::string::push_back", etc., and
4936        in this case we want the completion lowest common denominator
4937        to be "push_back" instead of "std::".  */
4938     tracker.add_completion (std::move (completion),
4939 			    &match_res.match_for_lcd, text, word);
4940   }
4941 }
4942 
4943 /* completion_list_add_name wrapper for struct symbol.  */
4944 
4945 static void
4946 completion_list_add_symbol (completion_tracker &tracker,
4947 			    symbol *sym,
4948 			    const lookup_name_info &lookup_name,
4949 			    const char *text, const char *word)
4950 {
4951   completion_list_add_name (tracker, SYMBOL_LANGUAGE (sym),
4952 			    SYMBOL_NATURAL_NAME (sym),
4953 			    lookup_name, text, word);
4954 }
4955 
4956 /* completion_list_add_name wrapper for struct minimal_symbol.  */
4957 
4958 static void
4959 completion_list_add_msymbol (completion_tracker &tracker,
4960 			     minimal_symbol *sym,
4961 			     const lookup_name_info &lookup_name,
4962 			     const char *text, const char *word)
4963 {
4964   completion_list_add_name (tracker, MSYMBOL_LANGUAGE (sym),
4965 			    MSYMBOL_NATURAL_NAME (sym),
4966 			    lookup_name, text, word);
4967 }
4968 
4969 
4970 /* ObjC: In case we are completing on a selector, look as the msymbol
4971    again and feed all the selectors into the mill.  */
4972 
4973 static void
4974 completion_list_objc_symbol (completion_tracker &tracker,
4975 			     struct minimal_symbol *msymbol,
4976 			     const lookup_name_info &lookup_name,
4977 			     const char *text, const char *word)
4978 {
4979   static char *tmp = NULL;
4980   static unsigned int tmplen = 0;
4981 
4982   const char *method, *category, *selector;
4983   char *tmp2 = NULL;
4984 
4985   method = MSYMBOL_NATURAL_NAME (msymbol);
4986 
4987   /* Is it a method?  */
4988   if ((method[0] != '-') && (method[0] != '+'))
4989     return;
4990 
4991   if (text[0] == '[')
4992     /* Complete on shortened method method.  */
4993     completion_list_add_name (tracker, language_objc,
4994 			      method + 1,
4995 			      lookup_name,
4996 			      text, word);
4997 
4998   while ((strlen (method) + 1) >= tmplen)
4999     {
5000       if (tmplen == 0)
5001 	tmplen = 1024;
5002       else
5003 	tmplen *= 2;
5004       tmp = (char *) xrealloc (tmp, tmplen);
5005     }
5006   selector = strchr (method, ' ');
5007   if (selector != NULL)
5008     selector++;
5009 
5010   category = strchr (method, '(');
5011 
5012   if ((category != NULL) && (selector != NULL))
5013     {
5014       memcpy (tmp, method, (category - method));
5015       tmp[category - method] = ' ';
5016       memcpy (tmp + (category - method) + 1, selector, strlen (selector) + 1);
5017       completion_list_add_name (tracker, language_objc, tmp,
5018 				lookup_name, text, word);
5019       if (text[0] == '[')
5020 	completion_list_add_name (tracker, language_objc, tmp + 1,
5021 				  lookup_name, text, word);
5022     }
5023 
5024   if (selector != NULL)
5025     {
5026       /* Complete on selector only.  */
5027       strcpy (tmp, selector);
5028       tmp2 = strchr (tmp, ']');
5029       if (tmp2 != NULL)
5030 	*tmp2 = '\0';
5031 
5032       completion_list_add_name (tracker, language_objc, tmp,
5033 				lookup_name, text, word);
5034     }
5035 }
5036 
5037 /* Break the non-quoted text based on the characters which are in
5038    symbols.  FIXME: This should probably be language-specific.  */
5039 
5040 static const char *
5041 language_search_unquoted_string (const char *text, const char *p)
5042 {
5043   for (; p > text; --p)
5044     {
5045       if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
5046 	continue;
5047       else
5048 	{
5049 	  if ((current_language->la_language == language_objc))
5050 	    {
5051 	      if (p[-1] == ':')     /* Might be part of a method name.  */
5052 		continue;
5053 	      else if (p[-1] == '[' && (p[-2] == '-' || p[-2] == '+'))
5054 		p -= 2;             /* Beginning of a method name.  */
5055 	      else if (p[-1] == ' ' || p[-1] == '(' || p[-1] == ')')
5056 		{                   /* Might be part of a method name.  */
5057 		  const char *t = p;
5058 
5059 		  /* Seeing a ' ' or a '(' is not conclusive evidence
5060 		     that we are in the middle of a method name.  However,
5061 		     finding "-[" or "+[" should be pretty un-ambiguous.
5062 		     Unfortunately we have to find it now to decide.  */
5063 
5064 		  while (t > text)
5065 		    if (isalnum (t[-1]) || t[-1] == '_' ||
5066 			t[-1] == ' '    || t[-1] == ':' ||
5067 			t[-1] == '('    || t[-1] == ')')
5068 		      --t;
5069 		    else
5070 		      break;
5071 
5072 		  if (t[-1] == '[' && (t[-2] == '-' || t[-2] == '+'))
5073 		    p = t - 2;      /* Method name detected.  */
5074 		  /* Else we leave with p unchanged.  */
5075 		}
5076 	    }
5077 	  break;
5078 	}
5079     }
5080   return p;
5081 }
5082 
5083 static void
5084 completion_list_add_fields (completion_tracker &tracker,
5085 			    struct symbol *sym,
5086 			    const lookup_name_info &lookup_name,
5087 			    const char *text, const char *word)
5088 {
5089   if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5090     {
5091       struct type *t = SYMBOL_TYPE (sym);
5092       enum type_code c = TYPE_CODE (t);
5093       int j;
5094 
5095       if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
5096 	for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
5097 	  if (TYPE_FIELD_NAME (t, j))
5098 	    completion_list_add_name (tracker, SYMBOL_LANGUAGE (sym),
5099 				      TYPE_FIELD_NAME (t, j),
5100 				      lookup_name, text, word);
5101     }
5102 }
5103 
5104 /* See symtab.h.  */
5105 
5106 bool
5107 symbol_is_function_or_method (symbol *sym)
5108 {
5109   switch (TYPE_CODE (SYMBOL_TYPE (sym)))
5110     {
5111     case TYPE_CODE_FUNC:
5112     case TYPE_CODE_METHOD:
5113       return true;
5114     default:
5115       return false;
5116     }
5117 }
5118 
5119 /* See symtab.h.  */
5120 
5121 bool
5122 symbol_is_function_or_method (minimal_symbol *msymbol)
5123 {
5124   switch (MSYMBOL_TYPE (msymbol))
5125     {
5126     case mst_text:
5127     case mst_text_gnu_ifunc:
5128     case mst_solib_trampoline:
5129     case mst_file_text:
5130       return true;
5131     default:
5132       return false;
5133     }
5134 }
5135 
5136 /* See symtab.h.  */
5137 
5138 bound_minimal_symbol
5139 find_gnu_ifunc (const symbol *sym)
5140 {
5141   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
5142     return {};
5143 
5144   lookup_name_info lookup_name (SYMBOL_SEARCH_NAME (sym),
5145 				symbol_name_match_type::SEARCH_NAME);
5146   struct objfile *objfile = symbol_objfile (sym);
5147 
5148   CORE_ADDR address = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
5149   minimal_symbol *ifunc = NULL;
5150 
5151   iterate_over_minimal_symbols (objfile, lookup_name,
5152 				[&] (minimal_symbol *minsym)
5153     {
5154       if (MSYMBOL_TYPE (minsym) == mst_text_gnu_ifunc
5155 	  || MSYMBOL_TYPE (minsym) == mst_data_gnu_ifunc)
5156 	{
5157 	  CORE_ADDR msym_addr = MSYMBOL_VALUE_ADDRESS (objfile, minsym);
5158 	  if (MSYMBOL_TYPE (minsym) == mst_data_gnu_ifunc)
5159 	    {
5160 	      struct gdbarch *gdbarch = get_objfile_arch (objfile);
5161 	      msym_addr
5162 		= gdbarch_convert_from_func_ptr_addr (gdbarch,
5163 						      msym_addr,
5164 						      current_top_target ());
5165 	    }
5166 	  if (msym_addr == address)
5167 	    {
5168 	      ifunc = minsym;
5169 	      return true;
5170 	    }
5171 	}
5172       return false;
5173     });
5174 
5175   if (ifunc != NULL)
5176     return {ifunc, objfile};
5177   return {};
5178 }
5179 
5180 /* Add matching symbols from SYMTAB to the current completion list.  */
5181 
5182 static void
5183 add_symtab_completions (struct compunit_symtab *cust,
5184 			completion_tracker &tracker,
5185 			complete_symbol_mode mode,
5186 			const lookup_name_info &lookup_name,
5187 			const char *text, const char *word,
5188 			enum type_code code)
5189 {
5190   struct symbol *sym;
5191   const struct block *b;
5192   struct block_iterator iter;
5193   int i;
5194 
5195   if (cust == NULL)
5196     return;
5197 
5198   for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
5199     {
5200       QUIT;
5201       b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), i);
5202       ALL_BLOCK_SYMBOLS (b, iter, sym)
5203 	{
5204 	  if (completion_skip_symbol (mode, sym))
5205 	    continue;
5206 
5207 	  if (code == TYPE_CODE_UNDEF
5208 	      || (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
5209 		  && TYPE_CODE (SYMBOL_TYPE (sym)) == code))
5210 	    completion_list_add_symbol (tracker, sym,
5211 					lookup_name,
5212 					text, word);
5213 	}
5214     }
5215 }
5216 
5217 void
5218 default_collect_symbol_completion_matches_break_on
5219   (completion_tracker &tracker, complete_symbol_mode mode,
5220    symbol_name_match_type name_match_type,
5221    const char *text, const char *word,
5222    const char *break_on, enum type_code code)
5223 {
5224   /* Problem: All of the symbols have to be copied because readline
5225      frees them.  I'm not going to worry about this; hopefully there
5226      won't be that many.  */
5227 
5228   struct symbol *sym;
5229   const struct block *b;
5230   const struct block *surrounding_static_block, *surrounding_global_block;
5231   struct block_iterator iter;
5232   /* The symbol we are completing on.  Points in same buffer as text.  */
5233   const char *sym_text;
5234 
5235   /* Now look for the symbol we are supposed to complete on.  */
5236   if (mode == complete_symbol_mode::LINESPEC)
5237     sym_text = text;
5238   else
5239   {
5240     const char *p;
5241     char quote_found;
5242     const char *quote_pos = NULL;
5243 
5244     /* First see if this is a quoted string.  */
5245     quote_found = '\0';
5246     for (p = text; *p != '\0'; ++p)
5247       {
5248 	if (quote_found != '\0')
5249 	  {
5250 	    if (*p == quote_found)
5251 	      /* Found close quote.  */
5252 	      quote_found = '\0';
5253 	    else if (*p == '\\' && p[1] == quote_found)
5254 	      /* A backslash followed by the quote character
5255 	         doesn't end the string.  */
5256 	      ++p;
5257 	  }
5258 	else if (*p == '\'' || *p == '"')
5259 	  {
5260 	    quote_found = *p;
5261 	    quote_pos = p;
5262 	  }
5263       }
5264     if (quote_found == '\'')
5265       /* A string within single quotes can be a symbol, so complete on it.  */
5266       sym_text = quote_pos + 1;
5267     else if (quote_found == '"')
5268       /* A double-quoted string is never a symbol, nor does it make sense
5269          to complete it any other way.  */
5270       {
5271 	return;
5272       }
5273     else
5274       {
5275 	/* It is not a quoted string.  Break it based on the characters
5276 	   which are in symbols.  */
5277 	while (p > text)
5278 	  {
5279 	    if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0'
5280 		|| p[-1] == ':' || strchr (break_on, p[-1]) != NULL)
5281 	      --p;
5282 	    else
5283 	      break;
5284 	  }
5285 	sym_text = p;
5286       }
5287   }
5288 
5289   lookup_name_info lookup_name (sym_text, name_match_type, true);
5290 
5291   /* At this point scan through the misc symbol vectors and add each
5292      symbol you find to the list.  Eventually we want to ignore
5293      anything that isn't a text symbol (everything else will be
5294      handled by the psymtab code below).  */
5295 
5296   if (code == TYPE_CODE_UNDEF)
5297     {
5298       for (objfile *objfile : current_program_space->objfiles ())
5299 	{
5300 	  for (minimal_symbol *msymbol : objfile->msymbols ())
5301 	    {
5302 	      QUIT;
5303 
5304 	      if (completion_skip_symbol (mode, msymbol))
5305 		continue;
5306 
5307 	      completion_list_add_msymbol (tracker, msymbol, lookup_name,
5308 					   sym_text, word);
5309 
5310 	      completion_list_objc_symbol (tracker, msymbol, lookup_name,
5311 					   sym_text, word);
5312 	    }
5313 	}
5314     }
5315 
5316   /* Add completions for all currently loaded symbol tables.  */
5317   for (objfile *objfile : current_program_space->objfiles ())
5318     {
5319       for (compunit_symtab *cust : objfile->compunits ())
5320 	add_symtab_completions (cust, tracker, mode, lookup_name,
5321 				sym_text, word, code);
5322     }
5323 
5324   /* Look through the partial symtabs for all symbols which begin by
5325      matching SYM_TEXT.  Expand all CUs that you find to the list.  */
5326   expand_symtabs_matching (NULL,
5327 			   lookup_name,
5328 			   NULL,
5329 			   [&] (compunit_symtab *symtab) /* expansion notify */
5330 			     {
5331 			       add_symtab_completions (symtab,
5332 						       tracker, mode, lookup_name,
5333 						       sym_text, word, code);
5334 			     },
5335 			   ALL_DOMAIN);
5336 
5337   /* Search upwards from currently selected frame (so that we can
5338      complete on local vars).  Also catch fields of types defined in
5339      this places which match our text string.  Only complete on types
5340      visible from current context.  */
5341 
5342   b = get_selected_block (0);
5343   surrounding_static_block = block_static_block (b);
5344   surrounding_global_block = block_global_block (b);
5345   if (surrounding_static_block != NULL)
5346     while (b != surrounding_static_block)
5347       {
5348 	QUIT;
5349 
5350 	ALL_BLOCK_SYMBOLS (b, iter, sym)
5351 	  {
5352 	    if (code == TYPE_CODE_UNDEF)
5353 	      {
5354 		completion_list_add_symbol (tracker, sym, lookup_name,
5355 					    sym_text, word);
5356 		completion_list_add_fields (tracker, sym, lookup_name,
5357 					    sym_text, word);
5358 	      }
5359 	    else if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
5360 		     && TYPE_CODE (SYMBOL_TYPE (sym)) == code)
5361 	      completion_list_add_symbol (tracker, sym, lookup_name,
5362 					  sym_text, word);
5363 	  }
5364 
5365 	/* Stop when we encounter an enclosing function.  Do not stop for
5366 	   non-inlined functions - the locals of the enclosing function
5367 	   are in scope for a nested function.  */
5368 	if (BLOCK_FUNCTION (b) != NULL && block_inlined_p (b))
5369 	  break;
5370 	b = BLOCK_SUPERBLOCK (b);
5371       }
5372 
5373   /* Add fields from the file's types; symbols will be added below.  */
5374 
5375   if (code == TYPE_CODE_UNDEF)
5376     {
5377       if (surrounding_static_block != NULL)
5378 	ALL_BLOCK_SYMBOLS (surrounding_static_block, iter, sym)
5379 	  completion_list_add_fields (tracker, sym, lookup_name,
5380 				      sym_text, word);
5381 
5382       if (surrounding_global_block != NULL)
5383 	ALL_BLOCK_SYMBOLS (surrounding_global_block, iter, sym)
5384 	  completion_list_add_fields (tracker, sym, lookup_name,
5385 				      sym_text, word);
5386     }
5387 
5388   /* Skip macros if we are completing a struct tag -- arguable but
5389      usually what is expected.  */
5390   if (current_language->la_macro_expansion == macro_expansion_c
5391       && code == TYPE_CODE_UNDEF)
5392     {
5393       gdb::unique_xmalloc_ptr<struct macro_scope> scope;
5394 
5395       /* This adds a macro's name to the current completion list.  */
5396       auto add_macro_name = [&] (const char *macro_name,
5397 				 const macro_definition *,
5398 				 macro_source_file *,
5399 				 int)
5400 	{
5401 	  completion_list_add_name (tracker, language_c, macro_name,
5402 				    lookup_name, sym_text, word);
5403 	};
5404 
5405       /* Add any macros visible in the default scope.  Note that this
5406 	 may yield the occasional wrong result, because an expression
5407 	 might be evaluated in a scope other than the default.  For
5408 	 example, if the user types "break file:line if <TAB>", the
5409 	 resulting expression will be evaluated at "file:line" -- but
5410 	 at there does not seem to be a way to detect this at
5411 	 completion time.  */
5412       scope = default_macro_scope ();
5413       if (scope)
5414 	macro_for_each_in_scope (scope->file, scope->line,
5415 				 add_macro_name);
5416 
5417       /* User-defined macros are always visible.  */
5418       macro_for_each (macro_user_macros, add_macro_name);
5419     }
5420 }
5421 
5422 void
5423 default_collect_symbol_completion_matches (completion_tracker &tracker,
5424 					   complete_symbol_mode mode,
5425 					   symbol_name_match_type name_match_type,
5426 					   const char *text, const char *word,
5427 					   enum type_code code)
5428 {
5429   return default_collect_symbol_completion_matches_break_on (tracker, mode,
5430 							     name_match_type,
5431 							     text, word, "",
5432 							     code);
5433 }
5434 
5435 /* Collect all symbols (regardless of class) which begin by matching
5436    TEXT.  */
5437 
5438 void
5439 collect_symbol_completion_matches (completion_tracker &tracker,
5440 				   complete_symbol_mode mode,
5441 				   symbol_name_match_type name_match_type,
5442 				   const char *text, const char *word)
5443 {
5444   current_language->la_collect_symbol_completion_matches (tracker, mode,
5445 							  name_match_type,
5446 							  text, word,
5447 							  TYPE_CODE_UNDEF);
5448 }
5449 
5450 /* Like collect_symbol_completion_matches, but only collect
5451    STRUCT_DOMAIN symbols whose type code is CODE.  */
5452 
5453 void
5454 collect_symbol_completion_matches_type (completion_tracker &tracker,
5455 					const char *text, const char *word,
5456 					enum type_code code)
5457 {
5458   complete_symbol_mode mode = complete_symbol_mode::EXPRESSION;
5459   symbol_name_match_type name_match_type = symbol_name_match_type::EXPRESSION;
5460 
5461   gdb_assert (code == TYPE_CODE_UNION
5462 	      || code == TYPE_CODE_STRUCT
5463 	      || code == TYPE_CODE_ENUM);
5464   current_language->la_collect_symbol_completion_matches (tracker, mode,
5465 							  name_match_type,
5466 							  text, word, code);
5467 }
5468 
5469 /* Like collect_symbol_completion_matches, but collects a list of
5470    symbols defined in all source files named SRCFILE.  */
5471 
5472 void
5473 collect_file_symbol_completion_matches (completion_tracker &tracker,
5474 					complete_symbol_mode mode,
5475 					symbol_name_match_type name_match_type,
5476 					const char *text, const char *word,
5477 					const char *srcfile)
5478 {
5479   /* The symbol we are completing on.  Points in same buffer as text.  */
5480   const char *sym_text;
5481 
5482   /* Now look for the symbol we are supposed to complete on.
5483      FIXME: This should be language-specific.  */
5484   if (mode == complete_symbol_mode::LINESPEC)
5485     sym_text = text;
5486   else
5487   {
5488     const char *p;
5489     char quote_found;
5490     const char *quote_pos = NULL;
5491 
5492     /* First see if this is a quoted string.  */
5493     quote_found = '\0';
5494     for (p = text; *p != '\0'; ++p)
5495       {
5496 	if (quote_found != '\0')
5497 	  {
5498 	    if (*p == quote_found)
5499 	      /* Found close quote.  */
5500 	      quote_found = '\0';
5501 	    else if (*p == '\\' && p[1] == quote_found)
5502 	      /* A backslash followed by the quote character
5503 	         doesn't end the string.  */
5504 	      ++p;
5505 	  }
5506 	else if (*p == '\'' || *p == '"')
5507 	  {
5508 	    quote_found = *p;
5509 	    quote_pos = p;
5510 	  }
5511       }
5512     if (quote_found == '\'')
5513       /* A string within single quotes can be a symbol, so complete on it.  */
5514       sym_text = quote_pos + 1;
5515     else if (quote_found == '"')
5516       /* A double-quoted string is never a symbol, nor does it make sense
5517          to complete it any other way.  */
5518       {
5519 	return;
5520       }
5521     else
5522       {
5523 	/* Not a quoted string.  */
5524 	sym_text = language_search_unquoted_string (text, p);
5525       }
5526   }
5527 
5528   lookup_name_info lookup_name (sym_text, name_match_type, true);
5529 
5530   /* Go through symtabs for SRCFILE and check the externs and statics
5531      for symbols which match.  */
5532   iterate_over_symtabs (srcfile, [&] (symtab *s)
5533     {
5534       add_symtab_completions (SYMTAB_COMPUNIT (s),
5535 			      tracker, mode, lookup_name,
5536 			      sym_text, word, TYPE_CODE_UNDEF);
5537       return false;
5538     });
5539 }
5540 
5541 /* A helper function for make_source_files_completion_list.  It adds
5542    another file name to a list of possible completions, growing the
5543    list as necessary.  */
5544 
5545 static void
5546 add_filename_to_list (const char *fname, const char *text, const char *word,
5547 		      completion_list *list)
5548 {
5549   list->emplace_back (make_completion_match_str (fname, text, word));
5550 }
5551 
5552 static int
5553 not_interesting_fname (const char *fname)
5554 {
5555   static const char *illegal_aliens[] = {
5556     "_globals_",	/* inserted by coff_symtab_read */
5557     NULL
5558   };
5559   int i;
5560 
5561   for (i = 0; illegal_aliens[i]; i++)
5562     {
5563       if (filename_cmp (fname, illegal_aliens[i]) == 0)
5564 	return 1;
5565     }
5566   return 0;
5567 }
5568 
5569 /* An object of this type is passed as the user_data argument to
5570    map_partial_symbol_filenames.  */
5571 struct add_partial_filename_data
5572 {
5573   struct filename_seen_cache *filename_seen_cache;
5574   const char *text;
5575   const char *word;
5576   int text_len;
5577   completion_list *list;
5578 };
5579 
5580 /* A callback for map_partial_symbol_filenames.  */
5581 
5582 static void
5583 maybe_add_partial_symtab_filename (const char *filename, const char *fullname,
5584 				   void *user_data)
5585 {
5586   struct add_partial_filename_data *data
5587     = (struct add_partial_filename_data *) user_data;
5588 
5589   if (not_interesting_fname (filename))
5590     return;
5591   if (!data->filename_seen_cache->seen (filename)
5592       && filename_ncmp (filename, data->text, data->text_len) == 0)
5593     {
5594       /* This file matches for a completion; add it to the
5595 	 current list of matches.  */
5596       add_filename_to_list (filename, data->text, data->word, data->list);
5597     }
5598   else
5599     {
5600       const char *base_name = lbasename (filename);
5601 
5602       if (base_name != filename
5603 	  && !data->filename_seen_cache->seen (base_name)
5604 	  && filename_ncmp (base_name, data->text, data->text_len) == 0)
5605 	add_filename_to_list (base_name, data->text, data->word, data->list);
5606     }
5607 }
5608 
5609 /* Return a list of all source files whose names begin with matching
5610    TEXT.  The file names are looked up in the symbol tables of this
5611    program.  */
5612 
5613 completion_list
5614 make_source_files_completion_list (const char *text, const char *word)
5615 {
5616   size_t text_len = strlen (text);
5617   completion_list list;
5618   const char *base_name;
5619   struct add_partial_filename_data datum;
5620 
5621   if (!have_full_symbols () && !have_partial_symbols ())
5622     return list;
5623 
5624   filename_seen_cache filenames_seen;
5625 
5626   for (objfile *objfile : current_program_space->objfiles ())
5627     {
5628       for (compunit_symtab *cu : objfile->compunits ())
5629 	{
5630 	  for (symtab *s : compunit_filetabs (cu))
5631 	    {
5632 	      if (not_interesting_fname (s->filename))
5633 		continue;
5634 	      if (!filenames_seen.seen (s->filename)
5635 		  && filename_ncmp (s->filename, text, text_len) == 0)
5636 		{
5637 		  /* This file matches for a completion; add it to the current
5638 		     list of matches.  */
5639 		  add_filename_to_list (s->filename, text, word, &list);
5640 		}
5641 	      else
5642 		{
5643 		  /* NOTE: We allow the user to type a base name when the
5644 		     debug info records leading directories, but not the other
5645 		     way around.  This is what subroutines of breakpoint
5646 		     command do when they parse file names.  */
5647 		  base_name = lbasename (s->filename);
5648 		  if (base_name != s->filename
5649 		      && !filenames_seen.seen (base_name)
5650 		      && filename_ncmp (base_name, text, text_len) == 0)
5651 		    add_filename_to_list (base_name, text, word, &list);
5652 		}
5653 	    }
5654 	}
5655     }
5656 
5657   datum.filename_seen_cache = &filenames_seen;
5658   datum.text = text;
5659   datum.word = word;
5660   datum.text_len = text_len;
5661   datum.list = &list;
5662   map_symbol_filenames (maybe_add_partial_symtab_filename, &datum,
5663 			0 /*need_fullname*/);
5664 
5665   return list;
5666 }
5667 
5668 /* Track MAIN */
5669 
5670 /* Return the "main_info" object for the current program space.  If
5671    the object has not yet been created, create it and fill in some
5672    default values.  */
5673 
5674 static struct main_info *
5675 get_main_info (void)
5676 {
5677   struct main_info *info
5678     = (struct main_info *) program_space_data (current_program_space,
5679 					       main_progspace_key);
5680 
5681   if (info == NULL)
5682     {
5683       /* It may seem strange to store the main name in the progspace
5684 	 and also in whatever objfile happens to see a main name in
5685 	 its debug info.  The reason for this is mainly historical:
5686 	 gdb returned "main" as the name even if no function named
5687 	 "main" was defined the program; and this approach lets us
5688 	 keep compatibility.  */
5689       info = XCNEW (struct main_info);
5690       info->language_of_main = language_unknown;
5691       set_program_space_data (current_program_space, main_progspace_key,
5692 			      info);
5693     }
5694 
5695   return info;
5696 }
5697 
5698 /* A cleanup to destroy a struct main_info when a progspace is
5699    destroyed.  */
5700 
5701 static void
5702 main_info_cleanup (struct program_space *pspace, void *data)
5703 {
5704   struct main_info *info = (struct main_info *) data;
5705 
5706   if (info != NULL)
5707     xfree (info->name_of_main);
5708   xfree (info);
5709 }
5710 
5711 static void
5712 set_main_name (const char *name, enum language lang)
5713 {
5714   struct main_info *info = get_main_info ();
5715 
5716   if (info->name_of_main != NULL)
5717     {
5718       xfree (info->name_of_main);
5719       info->name_of_main = NULL;
5720       info->language_of_main = language_unknown;
5721     }
5722   if (name != NULL)
5723     {
5724       info->name_of_main = xstrdup (name);
5725       info->language_of_main = lang;
5726     }
5727 }
5728 
5729 /* Deduce the name of the main procedure, and set NAME_OF_MAIN
5730    accordingly.  */
5731 
5732 static void
5733 find_main_name (void)
5734 {
5735   const char *new_main_name;
5736 
5737   /* First check the objfiles to see whether a debuginfo reader has
5738      picked up the appropriate main name.  Historically the main name
5739      was found in a more or less random way; this approach instead
5740      relies on the order of objfile creation -- which still isn't
5741      guaranteed to get the correct answer, but is just probably more
5742      accurate.  */
5743   for (objfile *objfile : current_program_space->objfiles ())
5744     {
5745       if (objfile->per_bfd->name_of_main != NULL)
5746 	{
5747 	  set_main_name (objfile->per_bfd->name_of_main,
5748 			 objfile->per_bfd->language_of_main);
5749 	  return;
5750 	}
5751     }
5752 
5753   /* Try to see if the main procedure is in Ada.  */
5754   /* FIXME: brobecker/2005-03-07: Another way of doing this would
5755      be to add a new method in the language vector, and call this
5756      method for each language until one of them returns a non-empty
5757      name.  This would allow us to remove this hard-coded call to
5758      an Ada function.  It is not clear that this is a better approach
5759      at this point, because all methods need to be written in a way
5760      such that false positives never be returned.  For instance, it is
5761      important that a method does not return a wrong name for the main
5762      procedure if the main procedure is actually written in a different
5763      language.  It is easy to guaranty this with Ada, since we use a
5764      special symbol generated only when the main in Ada to find the name
5765      of the main procedure.  It is difficult however to see how this can
5766      be guarantied for languages such as C, for instance.  This suggests
5767      that order of call for these methods becomes important, which means
5768      a more complicated approach.  */
5769   new_main_name = ada_main_name ();
5770   if (new_main_name != NULL)
5771     {
5772       set_main_name (new_main_name, language_ada);
5773       return;
5774     }
5775 
5776   new_main_name = d_main_name ();
5777   if (new_main_name != NULL)
5778     {
5779       set_main_name (new_main_name, language_d);
5780       return;
5781     }
5782 
5783   new_main_name = go_main_name ();
5784   if (new_main_name != NULL)
5785     {
5786       set_main_name (new_main_name, language_go);
5787       return;
5788     }
5789 
5790   new_main_name = pascal_main_name ();
5791   if (new_main_name != NULL)
5792     {
5793       set_main_name (new_main_name, language_pascal);
5794       return;
5795     }
5796 
5797   /* The languages above didn't identify the name of the main procedure.
5798      Fallback to "main".  */
5799   set_main_name ("main", language_unknown);
5800 }
5801 
5802 char *
5803 main_name (void)
5804 {
5805   struct main_info *info = get_main_info ();
5806 
5807   if (info->name_of_main == NULL)
5808     find_main_name ();
5809 
5810   return info->name_of_main;
5811 }
5812 
5813 /* Return the language of the main function.  If it is not known,
5814    return language_unknown.  */
5815 
5816 enum language
5817 main_language (void)
5818 {
5819   struct main_info *info = get_main_info ();
5820 
5821   if (info->name_of_main == NULL)
5822     find_main_name ();
5823 
5824   return info->language_of_main;
5825 }
5826 
5827 /* Handle ``executable_changed'' events for the symtab module.  */
5828 
5829 static void
5830 symtab_observer_executable_changed (void)
5831 {
5832   /* NAME_OF_MAIN may no longer be the same, so reset it for now.  */
5833   set_main_name (NULL, language_unknown);
5834 }
5835 
5836 /* Return 1 if the supplied producer string matches the ARM RealView
5837    compiler (armcc).  */
5838 
5839 int
5840 producer_is_realview (const char *producer)
5841 {
5842   static const char *const arm_idents[] = {
5843     "ARM C Compiler, ADS",
5844     "Thumb C Compiler, ADS",
5845     "ARM C++ Compiler, ADS",
5846     "Thumb C++ Compiler, ADS",
5847     "ARM/Thumb C/C++ Compiler, RVCT",
5848     "ARM C/C++ Compiler, RVCT"
5849   };
5850   int i;
5851 
5852   if (producer == NULL)
5853     return 0;
5854 
5855   for (i = 0; i < ARRAY_SIZE (arm_idents); i++)
5856     if (startswith (producer, arm_idents[i]))
5857       return 1;
5858 
5859   return 0;
5860 }
5861 
5862 
5863 
5864 /* The next index to hand out in response to a registration request.  */
5865 
5866 static int next_aclass_value = LOC_FINAL_VALUE;
5867 
5868 /* The maximum number of "aclass" registrations we support.  This is
5869    constant for convenience.  */
5870 #define MAX_SYMBOL_IMPLS (LOC_FINAL_VALUE + 10)
5871 
5872 /* The objects representing the various "aclass" values.  The elements
5873    from 0 up to LOC_FINAL_VALUE-1 represent themselves, and subsequent
5874    elements are those registered at gdb initialization time.  */
5875 
5876 static struct symbol_impl symbol_impl[MAX_SYMBOL_IMPLS];
5877 
5878 /* The globally visible pointer.  This is separate from 'symbol_impl'
5879    so that it can be const.  */
5880 
5881 const struct symbol_impl *symbol_impls = &symbol_impl[0];
5882 
5883 /* Make sure we saved enough room in struct symbol.  */
5884 
5885 gdb_static_assert (MAX_SYMBOL_IMPLS <= (1 << SYMBOL_ACLASS_BITS));
5886 
5887 /* Register a computed symbol type.  ACLASS must be LOC_COMPUTED.  OPS
5888    is the ops vector associated with this index.  This returns the new
5889    index, which should be used as the aclass_index field for symbols
5890    of this type.  */
5891 
5892 int
5893 register_symbol_computed_impl (enum address_class aclass,
5894 			       const struct symbol_computed_ops *ops)
5895 {
5896   int result = next_aclass_value++;
5897 
5898   gdb_assert (aclass == LOC_COMPUTED);
5899   gdb_assert (result < MAX_SYMBOL_IMPLS);
5900   symbol_impl[result].aclass = aclass;
5901   symbol_impl[result].ops_computed = ops;
5902 
5903   /* Sanity check OPS.  */
5904   gdb_assert (ops != NULL);
5905   gdb_assert (ops->tracepoint_var_ref != NULL);
5906   gdb_assert (ops->describe_location != NULL);
5907   gdb_assert (ops->get_symbol_read_needs != NULL);
5908   gdb_assert (ops->read_variable != NULL);
5909 
5910   return result;
5911 }
5912 
5913 /* Register a function with frame base type.  ACLASS must be LOC_BLOCK.
5914    OPS is the ops vector associated with this index.  This returns the
5915    new index, which should be used as the aclass_index field for symbols
5916    of this type.  */
5917 
5918 int
5919 register_symbol_block_impl (enum address_class aclass,
5920 			    const struct symbol_block_ops *ops)
5921 {
5922   int result = next_aclass_value++;
5923 
5924   gdb_assert (aclass == LOC_BLOCK);
5925   gdb_assert (result < MAX_SYMBOL_IMPLS);
5926   symbol_impl[result].aclass = aclass;
5927   symbol_impl[result].ops_block = ops;
5928 
5929   /* Sanity check OPS.  */
5930   gdb_assert (ops != NULL);
5931   gdb_assert (ops->find_frame_base_location != NULL);
5932 
5933   return result;
5934 }
5935 
5936 /* Register a register symbol type.  ACLASS must be LOC_REGISTER or
5937    LOC_REGPARM_ADDR.  OPS is the register ops vector associated with
5938    this index.  This returns the new index, which should be used as
5939    the aclass_index field for symbols of this type.  */
5940 
5941 int
5942 register_symbol_register_impl (enum address_class aclass,
5943 			       const struct symbol_register_ops *ops)
5944 {
5945   int result = next_aclass_value++;
5946 
5947   gdb_assert (aclass == LOC_REGISTER || aclass == LOC_REGPARM_ADDR);
5948   gdb_assert (result < MAX_SYMBOL_IMPLS);
5949   symbol_impl[result].aclass = aclass;
5950   symbol_impl[result].ops_register = ops;
5951 
5952   return result;
5953 }
5954 
5955 /* Initialize elements of 'symbol_impl' for the constants in enum
5956    address_class.  */
5957 
5958 static void
5959 initialize_ordinary_address_classes (void)
5960 {
5961   int i;
5962 
5963   for (i = 0; i < LOC_FINAL_VALUE; ++i)
5964     symbol_impl[i].aclass = (enum address_class) i;
5965 }
5966 
5967 
5968 
5969 /* Helper function to initialize the fields of an objfile-owned symbol.
5970    It assumed that *SYM is already all zeroes.  */
5971 
5972 static void
5973 initialize_objfile_symbol_1 (struct symbol *sym)
5974 {
5975   SYMBOL_OBJFILE_OWNED (sym) = 1;
5976   SYMBOL_SECTION (sym) = -1;
5977 }
5978 
5979 /* Initialize the symbol SYM, and mark it as being owned by an objfile.  */
5980 
5981 void
5982 initialize_objfile_symbol (struct symbol *sym)
5983 {
5984   memset (sym, 0, sizeof (*sym));
5985   initialize_objfile_symbol_1 (sym);
5986 }
5987 
5988 /* Allocate and initialize a new 'struct symbol' on OBJFILE's
5989    obstack.  */
5990 
5991 struct symbol *
5992 allocate_symbol (struct objfile *objfile)
5993 {
5994   struct symbol *result;
5995 
5996   result = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symbol);
5997   initialize_objfile_symbol_1 (result);
5998 
5999   return result;
6000 }
6001 
6002 /* Allocate and initialize a new 'struct template_symbol' on OBJFILE's
6003    obstack.  */
6004 
6005 struct template_symbol *
6006 allocate_template_symbol (struct objfile *objfile)
6007 {
6008   struct template_symbol *result;
6009 
6010   result = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct template_symbol);
6011   initialize_objfile_symbol_1 (result);
6012 
6013   return result;
6014 }
6015 
6016 /* See symtab.h.  */
6017 
6018 struct objfile *
6019 symbol_objfile (const struct symbol *symbol)
6020 {
6021   gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
6022   return SYMTAB_OBJFILE (symbol->owner.symtab);
6023 }
6024 
6025 /* See symtab.h.  */
6026 
6027 struct gdbarch *
6028 symbol_arch (const struct symbol *symbol)
6029 {
6030   if (!SYMBOL_OBJFILE_OWNED (symbol))
6031     return symbol->owner.arch;
6032   return get_objfile_arch (SYMTAB_OBJFILE (symbol->owner.symtab));
6033 }
6034 
6035 /* See symtab.h.  */
6036 
6037 struct symtab *
6038 symbol_symtab (const struct symbol *symbol)
6039 {
6040   gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
6041   return symbol->owner.symtab;
6042 }
6043 
6044 /* See symtab.h.  */
6045 
6046 void
6047 symbol_set_symtab (struct symbol *symbol, struct symtab *symtab)
6048 {
6049   gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
6050   symbol->owner.symtab = symtab;
6051 }
6052 
6053 
6054 
6055 void
6056 _initialize_symtab (void)
6057 {
6058   initialize_ordinary_address_classes ();
6059 
6060   main_progspace_key
6061     = register_program_space_data_with_cleanup (NULL, main_info_cleanup);
6062 
6063   symbol_cache_key
6064     = register_program_space_data_with_cleanup (NULL, symbol_cache_cleanup);
6065 
6066   add_info ("variables", info_variables_command,
6067 	    info_print_args_help (_("\
6068 All global and static variable names or those matching REGEXPs.\n\
6069 Usage: info variables [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
6070 Prints the global and static variables.\n"),
6071 				  _("global and static variables")));
6072   if (dbx_commands)
6073     add_com ("whereis", class_info, info_variables_command,
6074 	     info_print_args_help (_("\
6075 All global and static variable names, or those matching REGEXPs.\n\
6076 Usage: whereis [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
6077 Prints the global and static variables.\n"),
6078 				   _("global and static variables")));
6079 
6080   add_info ("functions", info_functions_command,
6081 	    info_print_args_help (_("\
6082 All function names or those matching REGEXPs.\n\
6083 Usage: info functions [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
6084 Prints the functions.\n"),
6085 				  _("functions")));
6086 
6087   /* FIXME:  This command has at least the following problems:
6088      1.  It prints builtin types (in a very strange and confusing fashion).
6089      2.  It doesn't print right, e.g. with
6090      typedef struct foo *FOO
6091      type_print prints "FOO" when we want to make it (in this situation)
6092      print "struct foo *".
6093      I also think "ptype" or "whatis" is more likely to be useful (but if
6094      there is much disagreement "info types" can be fixed).  */
6095   add_info ("types", info_types_command,
6096 	    _("All type names, or those matching REGEXP."));
6097 
6098   add_info ("sources", info_sources_command,
6099 	    _("Source files in the program."));
6100 
6101   add_com ("rbreak", class_breakpoint, rbreak_command,
6102 	   _("Set a breakpoint for all functions matching REGEXP."));
6103 
6104   add_setshow_enum_cmd ("multiple-symbols", no_class,
6105                         multiple_symbols_modes, &multiple_symbols_mode,
6106                         _("\
6107 Set the debugger behavior when more than one symbol are possible matches\n\
6108 in an expression."), _("\
6109 Show how the debugger handles ambiguities in expressions."), _("\
6110 Valid values are \"ask\", \"all\", \"cancel\", and the default is \"all\"."),
6111                         NULL, NULL, &setlist, &showlist);
6112 
6113   add_setshow_boolean_cmd ("basenames-may-differ", class_obscure,
6114 			   &basenames_may_differ, _("\
6115 Set whether a source file may have multiple base names."), _("\
6116 Show whether a source file may have multiple base names."), _("\
6117 (A \"base name\" is the name of a file with the directory part removed.\n\
6118 Example: The base name of \"/home/user/hello.c\" is \"hello.c\".)\n\
6119 If set, GDB will canonicalize file names (e.g., expand symlinks)\n\
6120 before comparing them.  Canonicalization is an expensive operation,\n\
6121 but it allows the same file be known by more than one base name.\n\
6122 If not set (the default), all source files are assumed to have just\n\
6123 one base name, and gdb will do file name comparisons more efficiently."),
6124 			   NULL, NULL,
6125 			   &setlist, &showlist);
6126 
6127   add_setshow_zuinteger_cmd ("symtab-create", no_class, &symtab_create_debug,
6128 			     _("Set debugging of symbol table creation."),
6129 			     _("Show debugging of symbol table creation."), _("\
6130 When enabled (non-zero), debugging messages are printed when building\n\
6131 symbol tables.  A value of 1 (one) normally provides enough information.\n\
6132 A value greater than 1 provides more verbose information."),
6133 			     NULL,
6134 			     NULL,
6135 			     &setdebuglist, &showdebuglist);
6136 
6137   add_setshow_zuinteger_cmd ("symbol-lookup", no_class, &symbol_lookup_debug,
6138 			   _("\
6139 Set debugging of symbol lookup."), _("\
6140 Show debugging of symbol lookup."), _("\
6141 When enabled (non-zero), symbol lookups are logged."),
6142 			   NULL, NULL,
6143 			   &setdebuglist, &showdebuglist);
6144 
6145   add_setshow_zuinteger_cmd ("symbol-cache-size", no_class,
6146 			     &new_symbol_cache_size,
6147 			     _("Set the size of the symbol cache."),
6148 			     _("Show the size of the symbol cache."), _("\
6149 The size of the symbol cache.\n\
6150 If zero then the symbol cache is disabled."),
6151 			     set_symbol_cache_size_handler, NULL,
6152 			     &maintenance_set_cmdlist,
6153 			     &maintenance_show_cmdlist);
6154 
6155   add_cmd ("symbol-cache", class_maintenance, maintenance_print_symbol_cache,
6156 	   _("Dump the symbol cache for each program space."),
6157 	   &maintenanceprintlist);
6158 
6159   add_cmd ("symbol-cache-statistics", class_maintenance,
6160 	   maintenance_print_symbol_cache_statistics,
6161 	   _("Print symbol cache statistics for each program space."),
6162 	   &maintenanceprintlist);
6163 
6164   add_cmd ("flush-symbol-cache", class_maintenance,
6165 	   maintenance_flush_symbol_cache,
6166 	   _("Flush the symbol cache for each program space."),
6167 	   &maintenancelist);
6168 
6169   gdb::observers::executable_changed.attach (symtab_observer_executable_changed);
6170   gdb::observers::new_objfile.attach (symtab_new_objfile_observer);
6171   gdb::observers::free_objfile.attach (symtab_free_objfile_observer);
6172 }
6173