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