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