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