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