]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/symtab.c
Fix error in file_and_directory patch
[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
3456e70c 824gdb::unique_xmalloc_ptr<char>
2de7ced7
DJ
825symbol_find_demangled_name (struct general_symbol_info *gsymbol,
826 const char *mangled)
12af6855 827{
3456e70c 828 gdb::unique_xmalloc_ptr<char> demangled;
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 933 if (demangled_name.get () == nullptr)
3456e70c
TT
934 demangled_name
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 {
3456e70c
TT
1861 gdb::unique_xmalloc_ptr<char> demangled_name
1862 = gdb_demangle (name, DMGL_ANSI | DMGL_PARAMS);
2f408ecb 1863 if (demangled_name != NULL)
3456e70c 1864 return storage.set_malloc_ptr (std::move (demangled_name));
2f408ecb
PA
1865
1866 /* If we were given a non-mangled name, canonicalize it
1867 according to the language (so far only for C++). */
596dc4ad
TT
1868 gdb::unique_xmalloc_ptr<char> canon = cp_canonicalize_string (name);
1869 if (canon != nullptr)
1870 return storage.set_malloc_ptr (std::move (canon));
729051e6 1871 }
6aecb9c2
JB
1872 else if (lang == language_d)
1873 {
3456e70c 1874 gdb::unique_xmalloc_ptr<char> demangled_name = d_demangle (name, 0);
2f408ecb 1875 if (demangled_name != NULL)
3456e70c 1876 return storage.set_malloc_ptr (std::move (demangled_name));
6aecb9c2 1877 }
a766d390
DE
1878 else if (lang == language_go)
1879 {
3456e70c 1880 gdb::unique_xmalloc_ptr<char> demangled_name
82fc57fd 1881 = language_def (language_go)->demangle_symbol (name, 0);
2f408ecb 1882 if (demangled_name != NULL)
3456e70c 1883 return storage.set_malloc_ptr (std::move (demangled_name));
a766d390 1884 }
729051e6 1885
2f408ecb 1886 return name;
f8eba3c6
TT
1887}
1888
5ffa0793
PA
1889/* See symtab.h. */
1890
1891unsigned int
1892search_name_hash (enum language language, const char *search_name)
1893{
fb8006fd 1894 return language_def (language)->search_name_hash (search_name);
5ffa0793
PA
1895}
1896
cf901d3b 1897/* See symtab.h.
f8eba3c6 1898
cf901d3b 1899 This function (or rather its subordinates) have a bunch of loops and
7e082072
DE
1900 it would seem to be attractive to put in some QUIT's (though I'm not really
1901 sure whether it can run long enough to be really important). But there
f8eba3c6 1902 are a few calls for which it would appear to be bad news to quit
7e082072 1903 out of here: e.g., find_proc_desc in alpha-mdebug-tdep.c. (Note
f8eba3c6
TT
1904 that there is C++ code below which can error(), but that probably
1905 doesn't affect these calls since they are looking for a known
1906 variable and thus can probably assume it will never hit the C++
1907 code). */
1908
d12307c1 1909struct block_symbol
f8eba3c6
TT
1910lookup_symbol_in_language (const char *name, const struct block *block,
1911 const domain_enum domain, enum language lang,
1993b719 1912 struct field_of_this_result *is_a_field_of_this)
f8eba3c6 1913{
2f408ecb
PA
1914 demangle_result_storage storage;
1915 const char *modified_name = demangle_for_lookup (name, lang, storage);
f8eba3c6 1916
de63c46b
PA
1917 return lookup_symbol_aux (modified_name,
1918 symbol_name_match_type::FULL,
1919 block, domain, lang,
2f408ecb 1920 is_a_field_of_this);
fba7f19c
EZ
1921}
1922
cf901d3b 1923/* See symtab.h. */
53c5240f 1924
d12307c1 1925struct block_symbol
53c5240f 1926lookup_symbol (const char *name, const struct block *block,
1993b719
TT
1927 domain_enum domain,
1928 struct field_of_this_result *is_a_field_of_this)
53c5240f
PA
1929{
1930 return lookup_symbol_in_language (name, block, domain,
1931 current_language->la_language,
2570f2b7 1932 is_a_field_of_this);
53c5240f
PA
1933}
1934
cf901d3b 1935/* See symtab.h. */
66a17cb6 1936
de63c46b
PA
1937struct block_symbol
1938lookup_symbol_search_name (const char *search_name, const struct block *block,
1939 domain_enum domain)
1940{
1941 return lookup_symbol_aux (search_name, symbol_name_match_type::SEARCH_NAME,
1942 block, domain, language_asm, NULL);
1943}
1944
1945/* See symtab.h. */
1946
d12307c1 1947struct block_symbol
66a17cb6
TT
1948lookup_language_this (const struct language_defn *lang,
1949 const struct block *block)
1950{
5bae7c4e 1951 if (lang->name_of_this () == NULL || block == NULL)
6640a367 1952 return {};
66a17cb6 1953
cc485e62
DE
1954 if (symbol_lookup_debug > 1)
1955 {
d6bc0792 1956 struct objfile *objfile = block_objfile (block);
cc485e62
DE
1957
1958 fprintf_unfiltered (gdb_stdlog,
1959 "lookup_language_this (%s, %s (objfile %s))",
6f7664a9 1960 lang->name (), host_address_to_string (block),
cc485e62
DE
1961 objfile_debug_name (objfile));
1962 }
1963
03de6823 1964 while (block)
66a17cb6
TT
1965 {
1966 struct symbol *sym;
1967
5bae7c4e 1968 sym = block_lookup_symbol (block, lang->name_of_this (),
de63c46b
PA
1969 symbol_name_match_type::SEARCH_NAME,
1970 VAR_DOMAIN);
66a17cb6 1971 if (sym != NULL)
f149aabd 1972 {
cc485e62
DE
1973 if (symbol_lookup_debug > 1)
1974 {
1975 fprintf_unfiltered (gdb_stdlog, " = %s (%s, block %s)\n",
987012b8 1976 sym->print_name (),
cc485e62
DE
1977 host_address_to_string (sym),
1978 host_address_to_string (block));
1979 }
d12307c1 1980 return (struct block_symbol) {sym, block};
f149aabd 1981 }
66a17cb6 1982 if (BLOCK_FUNCTION (block))
03de6823 1983 break;
66a17cb6
TT
1984 block = BLOCK_SUPERBLOCK (block);
1985 }
03de6823 1986
cc485e62
DE
1987 if (symbol_lookup_debug > 1)
1988 fprintf_unfiltered (gdb_stdlog, " = NULL\n");
6640a367 1989 return {};
66a17cb6
TT
1990}
1991
2dc3df72
TT
1992/* Given TYPE, a structure/union,
1993 return 1 if the component named NAME from the ultimate target
1994 structure/union is defined, otherwise, return 0. */
1995
1996static int
1993b719
TT
1997check_field (struct type *type, const char *name,
1998 struct field_of_this_result *is_a_field_of_this)
2dc3df72
TT
1999{
2000 int i;
2001
2002 /* The type may be a stub. */
f168693b 2003 type = check_typedef (type);
2dc3df72 2004
1f704f76 2005 for (i = type->num_fields () - 1; i >= TYPE_N_BASECLASSES (type); i--)
2dc3df72 2006 {
33d16dd9 2007 const char *t_field_name = type->field (i).name ();
2dc3df72
TT
2008
2009 if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
1993b719
TT
2010 {
2011 is_a_field_of_this->type = type;
ceacbf6e 2012 is_a_field_of_this->field = &type->field (i);
1993b719
TT
2013 return 1;
2014 }
2dc3df72
TT
2015 }
2016
2017 /* C++: If it was not found as a data field, then try to return it
2018 as a pointer to a method. */
2019
2020 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
2021 {
2022 if (strcmp_iw (TYPE_FN_FIELDLIST_NAME (type, i), name) == 0)
1993b719
TT
2023 {
2024 is_a_field_of_this->type = type;
2025 is_a_field_of_this->fn_field = &TYPE_FN_FIELDLIST (type, i);
2026 return 1;
2027 }
2dc3df72
TT
2028 }
2029
2030 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
1993b719 2031 if (check_field (TYPE_BASECLASS (type, i), name, is_a_field_of_this))
2dc3df72
TT
2032 return 1;
2033
2034 return 0;
2035}
2036
53c5240f 2037/* Behave like lookup_symbol except that NAME is the natural name
7e082072 2038 (e.g., demangled name) of the symbol that we're looking for. */
5ad1c190 2039
d12307c1 2040static struct block_symbol
de63c46b
PA
2041lookup_symbol_aux (const char *name, symbol_name_match_type match_type,
2042 const struct block *block,
94af9270 2043 const domain_enum domain, enum language language,
1993b719 2044 struct field_of_this_result *is_a_field_of_this)
fba7f19c 2045{
d12307c1 2046 struct block_symbol result;
53c5240f 2047 const struct language_defn *langdef;
406bc4de 2048
cc485e62
DE
2049 if (symbol_lookup_debug)
2050 {
d6bc0792
TT
2051 struct objfile *objfile = (block == nullptr
2052 ? nullptr : block_objfile (block));
cc485e62
DE
2053
2054 fprintf_unfiltered (gdb_stdlog,
2055 "lookup_symbol_aux (%s, %s (objfile %s), %s, %s)\n",
2056 name, host_address_to_string (block),
2057 objfile != NULL
2058 ? objfile_debug_name (objfile) : "NULL",
2059 domain_name (domain), language_str (language));
2060 }
2061
9a146a11
EZ
2062 /* Make sure we do something sensible with is_a_field_of_this, since
2063 the callers that set this parameter to some non-null value will
1993b719
TT
2064 certainly use it later. If we don't set it, the contents of
2065 is_a_field_of_this are undefined. */
9a146a11 2066 if (is_a_field_of_this != NULL)
1993b719 2067 memset (is_a_field_of_this, 0, sizeof (*is_a_field_of_this));
9a146a11 2068
e4051eeb
DC
2069 /* Search specified block and its superiors. Don't search
2070 STATIC_BLOCK or GLOBAL_BLOCK. */
c906108c 2071
de63c46b 2072 result = lookup_local_symbol (name, match_type, block, domain, language);
d12307c1 2073 if (result.symbol != NULL)
cc485e62
DE
2074 {
2075 if (symbol_lookup_debug)
2076 {
2077 fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
d12307c1 2078 host_address_to_string (result.symbol));
cc485e62 2079 }
d12307c1 2080 return result;
cc485e62 2081 }
c906108c 2082
53c5240f 2083 /* If requested to do so by the caller and if appropriate for LANGUAGE,
13387711 2084 check to see if NAME is a field of `this'. */
53c5240f
PA
2085
2086 langdef = language_def (language);
5f9a71c3 2087
6592e36f
TT
2088 /* Don't do this check if we are searching for a struct. It will
2089 not be found by check_field, but will be found by other
2090 means. */
2091 if (is_a_field_of_this != NULL && domain != STRUCT_DOMAIN)
c906108c 2092 {
d12307c1 2093 result = lookup_language_this (langdef, block);
2b2d9e11 2094
d12307c1 2095 if (result.symbol)
c906108c 2096 {
d12307c1 2097 struct type *t = result.symbol->type;
9af17804 2098
2b2d9e11
VP
2099 /* I'm not really sure that type of this can ever
2100 be typedefed; just be safe. */
f168693b 2101 t = check_typedef (t);
809f3be1 2102 if (t->is_pointer_or_reference ())
2b2d9e11 2103 t = TYPE_TARGET_TYPE (t);
9af17804 2104
78134374
SM
2105 if (t->code () != TYPE_CODE_STRUCT
2106 && t->code () != TYPE_CODE_UNION)
9af17804 2107 error (_("Internal error: `%s' is not an aggregate"),
5bae7c4e 2108 langdef->name_of_this ());
9af17804 2109
1993b719 2110 if (check_field (t, name, is_a_field_of_this))
cc485e62
DE
2111 {
2112 if (symbol_lookup_debug)
2113 {
2114 fprintf_unfiltered (gdb_stdlog,
2115 "lookup_symbol_aux (...) = NULL\n");
2116 }
6640a367 2117 return {};
cc485e62 2118 }
c906108c
SS
2119 }
2120 }
2121
53c5240f 2122 /* Now do whatever is appropriate for LANGUAGE to look
774b6a14 2123 up static and global variables. */
c906108c 2124
a78a19b1 2125 result = langdef->lookup_symbol_nonlocal (name, block, domain);
d12307c1 2126 if (result.symbol != NULL)
cc485e62
DE
2127 {
2128 if (symbol_lookup_debug)
2129 {
2130 fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
d12307c1 2131 host_address_to_string (result.symbol));
cc485e62 2132 }
d12307c1 2133 return result;
cc485e62 2134 }
c906108c 2135
774b6a14
TT
2136 /* Now search all static file-level symbols. Not strictly correct,
2137 but more useful than an error. */
41f62f39 2138
d12307c1 2139 result = lookup_static_symbol (name, domain);
cc485e62
DE
2140 if (symbol_lookup_debug)
2141 {
2142 fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
d12307c1
PMR
2143 result.symbol != NULL
2144 ? host_address_to_string (result.symbol)
2145 : "NULL");
cc485e62 2146 }
d12307c1 2147 return result;
41f62f39
JK
2148}
2149
e4051eeb 2150/* Check to see if the symbol is defined in BLOCK or its superiors.
89a9d1b1 2151 Don't search STATIC_BLOCK or GLOBAL_BLOCK. */
8155455b 2152
d12307c1 2153static struct block_symbol
de63c46b
PA
2154lookup_local_symbol (const char *name,
2155 symbol_name_match_type match_type,
2156 const struct block *block,
74016e12
DE
2157 const domain_enum domain,
2158 enum language language)
8155455b
DC
2159{
2160 struct symbol *sym;
89a9d1b1 2161 const struct block *static_block = block_static_block (block);
13387711
SW
2162 const char *scope = block_scope (block);
2163
e4051eeb
DC
2164 /* Check if either no block is specified or it's a global block. */
2165
89a9d1b1 2166 if (static_block == NULL)
6640a367 2167 return {};
e4051eeb 2168
89a9d1b1 2169 while (block != static_block)
f61e8913 2170 {
de63c46b 2171 sym = lookup_symbol_in_block (name, match_type, block, domain);
f61e8913 2172 if (sym != NULL)
d12307c1 2173 return (struct block_symbol) {sym, block};
edb3359d 2174
f55ee35c 2175 if (language == language_cplus || language == language_fortran)
dda83cd7
SM
2176 {
2177 struct block_symbol blocksym
d12307c1
PMR
2178 = cp_lookup_symbol_imports_or_template (scope, name, block,
2179 domain);
2180
dda83cd7
SM
2181 if (blocksym.symbol != NULL)
2182 return blocksym;
2183 }
13387711 2184
edb3359d
DJ
2185 if (BLOCK_FUNCTION (block) != NULL && block_inlined_p (block))
2186 break;
f61e8913
DC
2187 block = BLOCK_SUPERBLOCK (block);
2188 }
2189
3aee438b 2190 /* We've reached the end of the function without finding a result. */
e4051eeb 2191
6640a367 2192 return {};
f61e8913
DC
2193}
2194
cf901d3b 2195/* See symtab.h. */
3a40aaa0 2196
5f9a71c3 2197struct symbol *
de63c46b
PA
2198lookup_symbol_in_block (const char *name, symbol_name_match_type match_type,
2199 const struct block *block,
d1a2d36d 2200 const domain_enum domain)
f61e8913
DC
2201{
2202 struct symbol *sym;
f61e8913 2203
cc485e62
DE
2204 if (symbol_lookup_debug > 1)
2205 {
d6bc0792
TT
2206 struct objfile *objfile = (block == nullptr
2207 ? nullptr : block_objfile (block));
cc485e62
DE
2208
2209 fprintf_unfiltered (gdb_stdlog,
2210 "lookup_symbol_in_block (%s, %s (objfile %s), %s)",
2211 name, host_address_to_string (block),
2212 objfile_debug_name (objfile),
2213 domain_name (domain));
2214 }
2215
de63c46b 2216 sym = block_lookup_symbol (block, name, match_type, domain);
f61e8913 2217 if (sym)
8155455b 2218 {
cc485e62
DE
2219 if (symbol_lookup_debug > 1)
2220 {
2221 fprintf_unfiltered (gdb_stdlog, " = %s\n",
2222 host_address_to_string (sym));
2223 }
21b556f4 2224 return fixup_symbol_section (sym, NULL);
8155455b
DC
2225 }
2226
cc485e62
DE
2227 if (symbol_lookup_debug > 1)
2228 fprintf_unfiltered (gdb_stdlog, " = NULL\n");
8155455b
DC
2229 return NULL;
2230}
2231
cf901d3b 2232/* See symtab.h. */
3a40aaa0 2233
d12307c1 2234struct block_symbol
efad9b6a 2235lookup_global_symbol_from_objfile (struct objfile *main_objfile,
442853af 2236 enum block_enum block_index,
3a40aaa0 2237 const char *name,
21b556f4 2238 const domain_enum domain)
3a40aaa0 2239{
442853af
CB
2240 gdb_assert (block_index == GLOBAL_BLOCK || block_index == STATIC_BLOCK);
2241
bde09ab7 2242 for (objfile *objfile : main_objfile->separate_debug_objfiles ())
15d123c9 2243 {
d12307c1 2244 struct block_symbol result
dda83cd7 2245 = lookup_symbol_in_objfile (objfile, block_index, name, domain);
15d123c9 2246
442853af 2247 if (result.symbol != nullptr)
d12307c1 2248 return result;
15d123c9 2249 }
56e3f43c 2250
6640a367 2251 return {};
3a40aaa0
UW
2252}
2253
19630284
JB
2254/* Check to see if the symbol is defined in one of the OBJFILE's
2255 symtabs. BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK,
8155455b
DC
2256 depending on whether or not we want to search global symbols or
2257 static symbols. */
2258
d12307c1 2259static struct block_symbol
c32e6a04
CB
2260lookup_symbol_in_objfile_symtabs (struct objfile *objfile,
2261 enum block_enum block_index, const char *name,
2262 const domain_enum domain)
19630284 2263{
ba715d7f
JK
2264 gdb_assert (block_index == GLOBAL_BLOCK || block_index == STATIC_BLOCK);
2265
cc485e62
DE
2266 if (symbol_lookup_debug > 1)
2267 {
2268 fprintf_unfiltered (gdb_stdlog,
2269 "lookup_symbol_in_objfile_symtabs (%s, %s, %s, %s)",
2270 objfile_debug_name (objfile),
2271 block_index == GLOBAL_BLOCK
2272 ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
2273 name, domain_name (domain));
2274 }
2275
de82891c
TV
2276 struct block_symbol other;
2277 other.symbol = NULL;
b669c953 2278 for (compunit_symtab *cust : objfile->compunits ())
a743abeb 2279 {
43f3e411
DE
2280 const struct blockvector *bv;
2281 const struct block *block;
d12307c1 2282 struct block_symbol result;
43f3e411
DE
2283
2284 bv = COMPUNIT_BLOCKVECTOR (cust);
a743abeb 2285 block = BLOCKVECTOR_BLOCK (bv, block_index);
d12307c1
PMR
2286 result.symbol = block_lookup_symbol_primary (block, name, domain);
2287 result.block = block;
de82891c
TV
2288 if (result.symbol == NULL)
2289 continue;
2290 if (best_symbol (result.symbol, domain))
a743abeb 2291 {
de82891c
TV
2292 other = result;
2293 break;
2294 }
2295 if (symbol_matches_domain (result.symbol->language (),
2296 SYMBOL_DOMAIN (result.symbol), domain))
2297 {
2298 struct symbol *better
2299 = better_symbol (other.symbol, result.symbol, domain);
2300 if (better != other.symbol)
cc485e62 2301 {
de82891c
TV
2302 other.symbol = better;
2303 other.block = block;
cc485e62 2304 }
de82891c
TV
2305 }
2306 }
d12307c1 2307
de82891c
TV
2308 if (other.symbol != NULL)
2309 {
2310 if (symbol_lookup_debug > 1)
2311 {
2312 fprintf_unfiltered (gdb_stdlog, " = %s (block %s)\n",
2313 host_address_to_string (other.symbol),
2314 host_address_to_string (other.block));
a743abeb 2315 }
de82891c
TV
2316 other.symbol = fixup_symbol_section (other.symbol, objfile);
2317 return other;
a743abeb 2318 }
19630284 2319
cc485e62
DE
2320 if (symbol_lookup_debug > 1)
2321 fprintf_unfiltered (gdb_stdlog, " = NULL\n");
6640a367 2322 return {};
19630284
JB
2323}
2324
74016e12 2325/* Wrapper around lookup_symbol_in_objfile_symtabs for search_symbols.
422d65e7 2326 Look up LINKAGE_NAME in DOMAIN in the global and static blocks of OBJFILE
01465b56
DE
2327 and all associated separate debug objfiles.
2328
2329 Normally we only look in OBJFILE, and not any separate debug objfiles
2330 because the outer loop will cause them to be searched too. This case is
2331 different. Here we're called from search_symbols where it will only
6471e7d2 2332 call us for the objfile that contains a matching minsym. */
422d65e7 2333
d12307c1 2334static struct block_symbol
422d65e7
DE
2335lookup_symbol_in_objfile_from_linkage_name (struct objfile *objfile,
2336 const char *linkage_name,
2337 domain_enum domain)
2338{
2339 enum language lang = current_language->la_language;
e9ad22ee 2340 struct objfile *main_objfile;
422d65e7 2341
2f408ecb
PA
2342 demangle_result_storage storage;
2343 const char *modified_name = demangle_for_lookup (linkage_name, lang, storage);
2344
422d65e7
DE
2345 if (objfile->separate_debug_objfile_backlink)
2346 main_objfile = objfile->separate_debug_objfile_backlink;
2347 else
2348 main_objfile = objfile;
2349
bde09ab7 2350 for (::objfile *cur_objfile : main_objfile->separate_debug_objfiles ())
422d65e7 2351 {
d12307c1
PMR
2352 struct block_symbol result;
2353
2354 result = lookup_symbol_in_objfile_symtabs (cur_objfile, GLOBAL_BLOCK,
2355 modified_name, domain);
2356 if (result.symbol == NULL)
2357 result = lookup_symbol_in_objfile_symtabs (cur_objfile, STATIC_BLOCK,
2358 modified_name, domain);
2359 if (result.symbol != NULL)
2f408ecb 2360 return result;
422d65e7
DE
2361 }
2362
6640a367 2363 return {};
422d65e7
DE
2364}
2365
08c23b0d
TT
2366/* A helper function that throws an exception when a symbol was found
2367 in a psymtab but not in a symtab. */
2368
2369static void ATTRIBUTE_NORETURN
ddbcedf5 2370error_in_psymtab_expansion (enum block_enum block_index, const char *name,
43f3e411 2371 struct compunit_symtab *cust)
08c23b0d
TT
2372{
2373 error (_("\
2374Internal: %s symbol `%s' found in %s psymtab but not in symtab.\n\
2375%s may be an inlined function, or may be a template function\n \
2376(if a template, try specifying an instantiation: %s<type>)."),
f88cb4b6 2377 block_index == GLOBAL_BLOCK ? "global" : "static",
43f3e411
DE
2378 name,
2379 symtab_to_filename_for_display (compunit_primary_filetab (cust)),
2380 name, name);
08c23b0d
TT
2381}
2382
74016e12
DE
2383/* A helper function for various lookup routines that interfaces with
2384 the "quick" symbol table functions. */
8155455b 2385
d12307c1 2386static struct block_symbol
ddbcedf5
CB
2387lookup_symbol_via_quick_fns (struct objfile *objfile,
2388 enum block_enum block_index, const char *name,
2389 const domain_enum domain)
8155455b 2390{
43f3e411 2391 struct compunit_symtab *cust;
346d1dfe 2392 const struct blockvector *bv;
8155455b 2393 const struct block *block;
d12307c1 2394 struct block_symbol result;
8155455b 2395
cc485e62
DE
2396 if (symbol_lookup_debug > 1)
2397 {
2398 fprintf_unfiltered (gdb_stdlog,
2399 "lookup_symbol_via_quick_fns (%s, %s, %s, %s)\n",
2400 objfile_debug_name (objfile),
2401 block_index == GLOBAL_BLOCK
2402 ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
2403 name, domain_name (domain));
2404 }
2405
4d080b46 2406 cust = objfile->lookup_symbol (block_index, name, domain);
43f3e411 2407 if (cust == NULL)
cc485e62
DE
2408 {
2409 if (symbol_lookup_debug > 1)
2410 {
2411 fprintf_unfiltered (gdb_stdlog,
2412 "lookup_symbol_via_quick_fns (...) = NULL\n");
2413 }
6640a367 2414 return {};
cc485e62 2415 }
8155455b 2416
43f3e411 2417 bv = COMPUNIT_BLOCKVECTOR (cust);
f88cb4b6 2418 block = BLOCKVECTOR_BLOCK (bv, block_index);
de63c46b
PA
2419 result.symbol = block_lookup_symbol (block, name,
2420 symbol_name_match_type::FULL, domain);
d12307c1 2421 if (result.symbol == NULL)
43f3e411 2422 error_in_psymtab_expansion (block_index, name, cust);
cc485e62
DE
2423
2424 if (symbol_lookup_debug > 1)
2425 {
2426 fprintf_unfiltered (gdb_stdlog,
2427 "lookup_symbol_via_quick_fns (...) = %s (block %s)\n",
d12307c1 2428 host_address_to_string (result.symbol),
cc485e62
DE
2429 host_address_to_string (block));
2430 }
2431
d12307c1
PMR
2432 result.symbol = fixup_symbol_section (result.symbol, objfile);
2433 result.block = block;
2434 return result;
8155455b
DC
2435}
2436
a78a19b1 2437/* See language.h. */
5f9a71c3 2438
d12307c1 2439struct block_symbol
a78a19b1
AB
2440language_defn::lookup_symbol_nonlocal (const char *name,
2441 const struct block *block,
2442 const domain_enum domain) const
5f9a71c3 2443{
d12307c1 2444 struct block_symbol result;
5f9a71c3 2445
d9060ba6
DE
2446 /* NOTE: dje/2014-10-26: The lookup in all objfiles search could skip
2447 the current objfile. Searching the current objfile first is useful
2448 for both matching user expectations as well as performance. */
2449
d12307c1
PMR
2450 result = lookup_symbol_in_static_block (name, block, domain);
2451 if (result.symbol != NULL)
2452 return result;
5f9a71c3 2453
1994afbf
DE
2454 /* If we didn't find a definition for a builtin type in the static block,
2455 search for it now. This is actually the right thing to do and can be
2456 a massive performance win. E.g., when debugging a program with lots of
2457 shared libraries we could search all of them only to find out the
2458 builtin type isn't defined in any of them. This is common for types
2459 like "void". */
2460 if (domain == VAR_DOMAIN)
2461 {
2462 struct gdbarch *gdbarch;
2463
2464 if (block == NULL)
2465 gdbarch = target_gdbarch ();
2466 else
2467 gdbarch = block_gdbarch (block);
a78a19b1 2468 result.symbol = language_lookup_primitive_type_as_symbol (this,
d12307c1
PMR
2469 gdbarch, name);
2470 result.block = NULL;
2471 if (result.symbol != NULL)
2472 return result;
1994afbf
DE
2473 }
2474
08724ab7 2475 return lookup_global_symbol (name, block, domain);
5f9a71c3
DC
2476}
2477
cf901d3b 2478/* See symtab.h. */
5f9a71c3 2479
d12307c1 2480struct block_symbol
24d864bb
DE
2481lookup_symbol_in_static_block (const char *name,
2482 const struct block *block,
2483 const domain_enum domain)
5f9a71c3
DC
2484{
2485 const struct block *static_block = block_static_block (block);
cc485e62 2486 struct symbol *sym;
5f9a71c3 2487
cc485e62 2488 if (static_block == NULL)
6640a367 2489 return {};
cc485e62
DE
2490
2491 if (symbol_lookup_debug)
2492 {
d6bc0792
TT
2493 struct objfile *objfile = (block == nullptr
2494 ? nullptr : block_objfile (block));
cc485e62
DE
2495
2496 fprintf_unfiltered (gdb_stdlog,
2497 "lookup_symbol_in_static_block (%s, %s (objfile %s),"
2498 " %s)\n",
2499 name,
2500 host_address_to_string (block),
2501 objfile_debug_name (objfile),
2502 domain_name (domain));
2503 }
2504
de63c46b
PA
2505 sym = lookup_symbol_in_block (name,
2506 symbol_name_match_type::FULL,
2507 static_block, domain);
cc485e62
DE
2508 if (symbol_lookup_debug)
2509 {
2510 fprintf_unfiltered (gdb_stdlog,
2511 "lookup_symbol_in_static_block (...) = %s\n",
2512 sym != NULL ? host_address_to_string (sym) : "NULL");
2513 }
d12307c1 2514 return (struct block_symbol) {sym, static_block};
5f9a71c3
DC
2515}
2516
af3768e9
DE
2517/* Perform the standard symbol lookup of NAME in OBJFILE:
2518 1) First search expanded symtabs, and if not found
2519 2) Search the "quick" symtabs (partial or .gdb_index).
2520 BLOCK_INDEX is one of GLOBAL_BLOCK or STATIC_BLOCK. */
2521
d12307c1 2522static struct block_symbol
c32e6a04 2523lookup_symbol_in_objfile (struct objfile *objfile, enum block_enum block_index,
af3768e9
DE
2524 const char *name, const domain_enum domain)
2525{
d12307c1 2526 struct block_symbol result;
af3768e9 2527
c32e6a04
CB
2528 gdb_assert (block_index == GLOBAL_BLOCK || block_index == STATIC_BLOCK);
2529
cc485e62
DE
2530 if (symbol_lookup_debug)
2531 {
2532 fprintf_unfiltered (gdb_stdlog,
2533 "lookup_symbol_in_objfile (%s, %s, %s, %s)\n",
2534 objfile_debug_name (objfile),
2535 block_index == GLOBAL_BLOCK
2536 ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
2537 name, domain_name (domain));
2538 }
2539
af3768e9
DE
2540 result = lookup_symbol_in_objfile_symtabs (objfile, block_index,
2541 name, domain);
d12307c1 2542 if (result.symbol != NULL)
af3768e9 2543 {
cc485e62
DE
2544 if (symbol_lookup_debug)
2545 {
2546 fprintf_unfiltered (gdb_stdlog,
2547 "lookup_symbol_in_objfile (...) = %s"
2548 " (in symtabs)\n",
d12307c1 2549 host_address_to_string (result.symbol));
cc485e62
DE
2550 }
2551 return result;
af3768e9
DE
2552 }
2553
cc485e62
DE
2554 result = lookup_symbol_via_quick_fns (objfile, block_index,
2555 name, domain);
2556 if (symbol_lookup_debug)
2557 {
2558 fprintf_unfiltered (gdb_stdlog,
2559 "lookup_symbol_in_objfile (...) = %s%s\n",
d12307c1
PMR
2560 result.symbol != NULL
2561 ? host_address_to_string (result.symbol)
cc485e62 2562 : "NULL",
d12307c1 2563 result.symbol != NULL ? " (via quick fns)" : "");
cc485e62 2564 }
af3768e9
DE
2565 return result;
2566}
2567
d3214198
TV
2568/* Find the language for partial symbol with NAME. */
2569
2570static enum language
2571find_quick_global_symbol_language (const char *name, const domain_enum domain)
2572{
d3214198
TV
2573 for (objfile *objfile : current_program_space->objfiles ())
2574 {
2575 bool symbol_found_p;
2576 enum language lang
4d080b46
TT
2577 = objfile->lookup_global_symbol_language (name, domain, &symbol_found_p);
2578 if (symbol_found_p)
2579 return lang;
d3214198
TV
2580 }
2581
2582 return language_unknown;
2583}
2584
19630284
JB
2585/* Private data to be used with lookup_symbol_global_iterator_cb. */
2586
9aa55206 2587struct global_or_static_sym_lookup_data
19630284
JB
2588{
2589 /* The name of the symbol we are searching for. */
2590 const char *name;
2591
2592 /* The domain to use for our search. */
2593 domain_enum domain;
2594
9aa55206
CB
2595 /* The block index in which to search. */
2596 enum block_enum block_index;
2597
19630284 2598 /* The field where the callback should store the symbol if found.
d12307c1
PMR
2599 It should be initialized to {NULL, NULL} before the search is started. */
2600 struct block_symbol result;
19630284
JB
2601};
2602
2603/* A callback function for gdbarch_iterate_over_objfiles_in_search_order.
9aa55206
CB
2604 It searches by name for a symbol in the block given by BLOCK_INDEX of the
2605 given OBJFILE. The arguments for the search are passed via CB_DATA, which
2606 in reality is a pointer to struct global_or_static_sym_lookup_data. */
19630284
JB
2607
2608static int
9aa55206
CB
2609lookup_symbol_global_or_static_iterator_cb (struct objfile *objfile,
2610 void *cb_data)
19630284 2611{
9aa55206
CB
2612 struct global_or_static_sym_lookup_data *data =
2613 (struct global_or_static_sym_lookup_data *) cb_data;
19630284 2614
d12307c1
PMR
2615 gdb_assert (data->result.symbol == NULL
2616 && data->result.block == NULL);
19630284 2617
9aa55206 2618 data->result = lookup_symbol_in_objfile (objfile, data->block_index,
af3768e9 2619 data->name, data->domain);
19630284
JB
2620
2621 /* If we found a match, tell the iterator to stop. Otherwise,
2622 keep going. */
d12307c1 2623 return (data->result.symbol != NULL);
19630284
JB
2624}
2625
9aa55206
CB
2626/* This function contains the common code of lookup_{global,static}_symbol.
2627 OBJFILE is only used if BLOCK_INDEX is GLOBAL_SCOPE, in which case it is
2628 the objfile to start the lookup in. */
5f9a71c3 2629
9aa55206
CB
2630static struct block_symbol
2631lookup_global_or_static_symbol (const char *name,
2632 enum block_enum block_index,
2633 struct objfile *objfile,
2634 const domain_enum domain)
5f9a71c3 2635{
f57d2163 2636 struct symbol_cache *cache = get_symbol_cache (current_program_space);
d12307c1 2637 struct block_symbol result;
9aa55206 2638 struct global_or_static_sym_lookup_data lookup_data;
f57d2163
DE
2639 struct block_symbol_cache *bsc;
2640 struct symbol_cache_slot *slot;
b2fb95e0 2641
9aa55206
CB
2642 gdb_assert (block_index == GLOBAL_BLOCK || block_index == STATIC_BLOCK);
2643 gdb_assert (objfile == nullptr || block_index == GLOBAL_BLOCK);
f57d2163
DE
2644
2645 /* First see if we can find the symbol in the cache.
2646 This works because we use the current objfile to qualify the lookup. */
9aa55206 2647 result = symbol_cache_lookup (cache, objfile, block_index, name, domain,
d12307c1
PMR
2648 &bsc, &slot);
2649 if (result.symbol != NULL)
f57d2163 2650 {
d12307c1 2651 if (SYMBOL_LOOKUP_FAILED_P (result))
6640a367 2652 return {};
d12307c1 2653 return result;
f57d2163
DE
2654 }
2655
626ca2c0 2656 /* Do a global search (of global blocks, heh). */
d12307c1 2657 if (result.symbol == NULL)
f57d2163
DE
2658 {
2659 memset (&lookup_data, 0, sizeof (lookup_data));
2660 lookup_data.name = name;
9aa55206 2661 lookup_data.block_index = block_index;
f57d2163
DE
2662 lookup_data.domain = domain;
2663 gdbarch_iterate_over_objfiles_in_search_order
08feed99 2664 (objfile != NULL ? objfile->arch () : target_gdbarch (),
9aa55206 2665 lookup_symbol_global_or_static_iterator_cb, &lookup_data, objfile);
d12307c1 2666 result = lookup_data.result;
f57d2163 2667 }
6a3ca067 2668
d12307c1
PMR
2669 if (result.symbol != NULL)
2670 symbol_cache_mark_found (bsc, slot, objfile, result.symbol, result.block);
f57d2163
DE
2671 else
2672 symbol_cache_mark_not_found (bsc, slot, objfile, name, domain);
2673
d12307c1 2674 return result;
5f9a71c3
DC
2675}
2676
9aa55206
CB
2677/* See symtab.h. */
2678
2679struct block_symbol
2680lookup_static_symbol (const char *name, const domain_enum domain)
2681{
2682 return lookup_global_or_static_symbol (name, STATIC_BLOCK, nullptr, domain);
2683}
2684
2685/* See symtab.h. */
2686
2687struct block_symbol
2688lookup_global_symbol (const char *name,
2689 const struct block *block,
2690 const domain_enum domain)
2691{
d3d32391
AB
2692 /* If a block was passed in, we want to search the corresponding
2693 global block first. This yields "more expected" behavior, and is
2694 needed to support 'FILENAME'::VARIABLE lookups. */
2695 const struct block *global_block = block_global_block (block);
70bc38f5 2696 symbol *sym = NULL;
d3d32391
AB
2697 if (global_block != nullptr)
2698 {
70bc38f5
TV
2699 sym = lookup_symbol_in_block (name,
2700 symbol_name_match_type::FULL,
2701 global_block, domain);
2702 if (sym != NULL && best_symbol (sym, domain))
d3d32391
AB
2703 return { sym, global_block };
2704 }
2705
d6bc0792
TT
2706 struct objfile *objfile = nullptr;
2707 if (block != nullptr)
2708 {
2709 objfile = block_objfile (block);
2710 if (objfile->separate_debug_objfile_backlink != nullptr)
2711 objfile = objfile->separate_debug_objfile_backlink;
2712 }
2713
70bc38f5
TV
2714 block_symbol bs
2715 = lookup_global_or_static_symbol (name, GLOBAL_BLOCK, objfile, domain);
2716 if (better_symbol (sym, bs.symbol, domain) == sym)
2717 return { sym, global_block };
2718 else
2719 return bs;
9aa55206
CB
2720}
2721
ececd218 2722bool
4186eb54
KS
2723symbol_matches_domain (enum language symbol_language,
2724 domain_enum symbol_domain,
2725 domain_enum domain)
2726{
2727 /* For C++ "struct foo { ... }" also defines a typedef for "foo".
4186eb54
KS
2728 Similarly, any Ada type declaration implicitly defines a typedef. */
2729 if (symbol_language == language_cplus
2730 || symbol_language == language_d
65547233
TT
2731 || symbol_language == language_ada
2732 || symbol_language == language_rust)
4186eb54
KS
2733 {
2734 if ((domain == VAR_DOMAIN || domain == STRUCT_DOMAIN)
2735 && symbol_domain == STRUCT_DOMAIN)
ececd218 2736 return true;
4186eb54
KS
2737 }
2738 /* For all other languages, strict match is required. */
2739 return (symbol_domain == domain);
2740}
2741
cf901d3b 2742/* See symtab.h. */
c906108c 2743
ccefe4c4
TT
2744struct type *
2745lookup_transparent_type (const char *name)
c906108c 2746{
54f4ca46 2747 return current_language->lookup_transparent_type (name);
ccefe4c4 2748}
9af17804 2749
ccefe4c4
TT
2750/* A helper for basic_lookup_transparent_type that interfaces with the
2751 "quick" symbol table functions. */
357e46e7 2752
ccefe4c4 2753static struct type *
ddbcedf5
CB
2754basic_lookup_transparent_type_quick (struct objfile *objfile,
2755 enum block_enum block_index,
ccefe4c4
TT
2756 const char *name)
2757{
43f3e411 2758 struct compunit_symtab *cust;
346d1dfe 2759 const struct blockvector *bv;
582942f4 2760 const struct block *block;
ccefe4c4 2761 struct symbol *sym;
c906108c 2762
4d080b46 2763 cust = objfile->lookup_symbol (block_index, name, STRUCT_DOMAIN);
43f3e411 2764 if (cust == NULL)
ccefe4c4 2765 return NULL;
c906108c 2766
43f3e411 2767 bv = COMPUNIT_BLOCKVECTOR (cust);
f88cb4b6 2768 block = BLOCKVECTOR_BLOCK (bv, block_index);
b2e2f908
DE
2769 sym = block_find_symbol (block, name, STRUCT_DOMAIN,
2770 block_find_non_opaque_type, NULL);
2771 if (sym == NULL)
43f3e411 2772 error_in_psymtab_expansion (block_index, name, cust);
b2e2f908
DE
2773 gdb_assert (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)));
2774 return SYMBOL_TYPE (sym);
2775}
08c23b0d 2776
b2e2f908
DE
2777/* Subroutine of basic_lookup_transparent_type to simplify it.
2778 Look up the non-opaque definition of NAME in BLOCK_INDEX of OBJFILE.
2779 BLOCK_INDEX is either GLOBAL_BLOCK or STATIC_BLOCK. */
2780
2781static struct type *
ddbcedf5
CB
2782basic_lookup_transparent_type_1 (struct objfile *objfile,
2783 enum block_enum block_index,
b2e2f908
DE
2784 const char *name)
2785{
b2e2f908
DE
2786 const struct blockvector *bv;
2787 const struct block *block;
2788 const struct symbol *sym;
2789
b669c953 2790 for (compunit_symtab *cust : objfile->compunits ())
b2e2f908
DE
2791 {
2792 bv = COMPUNIT_BLOCKVECTOR (cust);
2793 block = BLOCKVECTOR_BLOCK (bv, block_index);
2794 sym = block_find_symbol (block, name, STRUCT_DOMAIN,
2795 block_find_non_opaque_type, NULL);
2796 if (sym != NULL)
2797 {
2798 gdb_assert (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)));
2799 return SYMBOL_TYPE (sym);
2800 }
2801 }
c906108c 2802
ccefe4c4 2803 return NULL;
b368761e 2804}
c906108c 2805
b368761e
DC
2806/* The standard implementation of lookup_transparent_type. This code
2807 was modeled on lookup_symbol -- the parts not relevant to looking
2808 up types were just left out. In particular it's assumed here that
cf901d3b 2809 types are available in STRUCT_DOMAIN and only in file-static or
b368761e 2810 global blocks. */
c906108c
SS
2811
2812struct type *
b368761e 2813basic_lookup_transparent_type (const char *name)
c906108c 2814{
ccefe4c4 2815 struct type *t;
c906108c
SS
2816
2817 /* Now search all the global symbols. Do the symtab's first, then
c378eb4e 2818 check the psymtab's. If a psymtab indicates the existence
c906108c
SS
2819 of the desired name as a global, then do psymtab-to-symtab
2820 conversion on the fly and return the found symbol. */
c5aa993b 2821
2030c079 2822 for (objfile *objfile : current_program_space->objfiles ())
aed57c53
TT
2823 {
2824 t = basic_lookup_transparent_type_1 (objfile, GLOBAL_BLOCK, name);
2825 if (t)
2826 return t;
2827 }
c906108c 2828
2030c079 2829 for (objfile *objfile : current_program_space->objfiles ())
aed57c53
TT
2830 {
2831 t = basic_lookup_transparent_type_quick (objfile, GLOBAL_BLOCK, name);
2832 if (t)
2833 return t;
2834 }
c906108c
SS
2835
2836 /* Now search the static file-level symbols.
2837 Not strictly correct, but more useful than an error.
2838 Do the symtab's first, then
c378eb4e 2839 check the psymtab's. If a psymtab indicates the existence
c906108c 2840 of the desired name as a file-level static, then do psymtab-to-symtab
c378eb4e 2841 conversion on the fly and return the found symbol. */
c906108c 2842
2030c079 2843 for (objfile *objfile : current_program_space->objfiles ())
aed57c53
TT
2844 {
2845 t = basic_lookup_transparent_type_1 (objfile, STATIC_BLOCK, name);
2846 if (t)
2847 return t;
2848 }
c906108c 2849
2030c079 2850 for (objfile *objfile : current_program_space->objfiles ())
aed57c53
TT
2851 {
2852 t = basic_lookup_transparent_type_quick (objfile, STATIC_BLOCK, name);
2853 if (t)
2854 return t;
2855 }
ccefe4c4 2856
c906108c
SS
2857 return (struct type *) 0;
2858}
2859
6969f124 2860/* See symtab.h. */
f8eba3c6 2861
6969f124 2862bool
b5ec771e
PA
2863iterate_over_symbols (const struct block *block,
2864 const lookup_name_info &name,
f8eba3c6 2865 const domain_enum domain,
14bc53a8 2866 gdb::function_view<symbol_found_callback_ftype> callback)
f8eba3c6 2867{
4eeaa230
DE
2868 struct block_iterator iter;
2869 struct symbol *sym;
f8eba3c6 2870
358d6ab3 2871 ALL_BLOCK_SYMBOLS_WITH_NAME (block, name, iter, sym)
4eeaa230 2872 {
c1b5c1eb 2873 if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
f8eba3c6 2874 {
7e41c8db
KS
2875 struct block_symbol block_sym = {sym, block};
2876
2877 if (!callback (&block_sym))
6969f124 2878 return false;
f8eba3c6 2879 }
f8eba3c6 2880 }
6969f124 2881 return true;
f8eba3c6
TT
2882}
2883
6a3dbf1b
TT
2884/* See symtab.h. */
2885
2886bool
2887iterate_over_symbols_terminated
2888 (const struct block *block,
2889 const lookup_name_info &name,
2890 const domain_enum domain,
2891 gdb::function_view<symbol_found_callback_ftype> callback)
2892{
2893 if (!iterate_over_symbols (block, name, domain, callback))
2894 return false;
2895 struct block_symbol block_sym = {nullptr, block};
2896 return callback (&block_sym);
2897}
2898
43f3e411
DE
2899/* Find the compunit symtab associated with PC and SECTION.
2900 This will read in debug info as necessary. */
c906108c 2901
43f3e411
DE
2902struct compunit_symtab *
2903find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section)
c906108c 2904{
43f3e411 2905 struct compunit_symtab *best_cust = NULL;
61eb46a4 2906 CORE_ADDR best_cust_range = 0;
77e371c0 2907 struct bound_minimal_symbol msymbol;
8a48e967
DJ
2908
2909 /* If we know that this is not a text address, return failure. This is
2910 necessary because we loop based on the block's high and low code
2911 addresses, which do not include the data ranges, and because
2912 we call find_pc_sect_psymtab which has a similar restriction based
2913 on the partial_symtab's texthigh and textlow. */
77e371c0 2914 msymbol = lookup_minimal_symbol_by_pc_section (pc, section);
1ed9f74e 2915 if (msymbol.minsym && msymbol.minsym->data_p ())
8a48e967 2916 return NULL;
c906108c
SS
2917
2918 /* Search all symtabs for the one whose file contains our address, and which
2919 is the smallest of all the ones containing the address. This is designed
2920 to deal with a case like symtab a is at 0x1000-0x2000 and 0x3000-0x4000
2921 and symtab b is at 0x2000-0x3000. So the GLOBAL_BLOCK for a is from
2922 0x1000-0x4000, but for address 0x2345 we want to return symtab b.
2923
2924 This happens for native ecoff format, where code from included files
c378eb4e 2925 gets its own symtab. The symtab for the included file should have
c906108c
SS
2926 been read in already via the dependency mechanism.
2927 It might be swifter to create several symtabs with the same name
2928 like xcoff does (I'm not sure).
2929
2930 It also happens for objfiles that have their functions reordered.
2931 For these, the symtab we are looking for is not necessarily read in. */
2932
2030c079 2933 for (objfile *obj_file : current_program_space->objfiles ())
d8aeb77f 2934 {
b669c953 2935 for (compunit_symtab *cust : obj_file->compunits ())
d8aeb77f 2936 {
61eb46a4
TV
2937 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
2938 const struct block *global_block
2939 = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
2940 CORE_ADDR start = BLOCK_START (global_block);
2941 CORE_ADDR end = BLOCK_END (global_block);
2942 bool in_range_p = start <= pc && pc < end;
2943 if (!in_range_p)
2944 continue;
43f3e411 2945
1b00ef06
TV
2946 if (BLOCKVECTOR_MAP (bv))
2947 {
2948 if (addrmap_find (BLOCKVECTOR_MAP (bv), pc) == nullptr)
2949 continue;
2950
2951 return cust;
2952 }
2953
61eb46a4
TV
2954 CORE_ADDR range = end - start;
2955 if (best_cust != nullptr
2956 && range >= best_cust_range)
2957 /* Cust doesn't have a smaller range than best_cust, skip it. */
2958 continue;
2959
2960 /* For an objfile that has its functions reordered,
2961 find_pc_psymtab will find the proper partial symbol table
2962 and we simply return its corresponding symtab. */
2963 /* In order to better support objfiles that contain both
2964 stabs and coff debugging info, we continue on if a psymtab
2965 can't be found. */
4d080b46 2966 if ((obj_file->flags & OBJF_REORDERED) != 0)
61eb46a4
TV
2967 {
2968 struct compunit_symtab *result;
2969
2970 result
4d080b46
TT
2971 = obj_file->find_pc_sect_compunit_symtab (msymbol,
2972 pc,
2973 section,
2974 0);
61eb46a4
TV
2975 if (result != NULL)
2976 return result;
2977 }
c906108c 2978
61eb46a4 2979 if (section != 0)
d8aeb77f 2980 {
61eb46a4
TV
2981 struct symbol *sym = NULL;
2982 struct block_iterator iter;
2983
bd24c5d6
TV
2984 for (int b_index = GLOBAL_BLOCK;
2985 b_index <= STATIC_BLOCK && sym == NULL;
2986 ++b_index)
d8aeb77f 2987 {
bd24c5d6
TV
2988 const struct block *b = BLOCKVECTOR_BLOCK (bv, b_index);
2989 ALL_BLOCK_SYMBOLS (b, iter, sym)
2990 {
2991 fixup_symbol_section (sym, obj_file);
ebbc3a7d 2992 if (matching_obj_sections (sym->obj_section (obj_file),
bd24c5d6
TV
2993 section))
2994 break;
2995 }
d8aeb77f 2996 }
61eb46a4
TV
2997 if (sym == NULL)
2998 continue; /* No symbol in this symtab matches
d8aeb77f 2999 section. */
d8aeb77f 3000 }
61eb46a4
TV
3001
3002 /* Cust is best found sofar, save it. */
3003 best_cust = cust;
3004 best_cust_range = range;
d8aeb77f
TT
3005 }
3006 }
c906108c 3007
43f3e411
DE
3008 if (best_cust != NULL)
3009 return best_cust;
c906108c 3010
072cabfe
DE
3011 /* Not found in symtabs, search the "quick" symtabs (e.g. psymtabs). */
3012
2030c079 3013 for (objfile *objf : current_program_space->objfiles ())
aed57c53 3014 {
4d080b46
TT
3015 struct compunit_symtab *result
3016 = objf->find_pc_sect_compunit_symtab (msymbol, pc, section, 1);
aed57c53
TT
3017 if (result != NULL)
3018 return result;
3019 }
ccefe4c4
TT
3020
3021 return NULL;
c906108c
SS
3022}
3023
43f3e411
DE
3024/* Find the compunit symtab associated with PC.
3025 This will read in debug info as necessary.
3026 Backward compatibility, no section. */
c906108c 3027
43f3e411
DE
3028struct compunit_symtab *
3029find_pc_compunit_symtab (CORE_ADDR pc)
c906108c 3030{
43f3e411 3031 return find_pc_sect_compunit_symtab (pc, find_pc_mapped_section (pc));
c906108c 3032}
71a3c369
TT
3033
3034/* See symtab.h. */
3035
3036struct symbol *
3037find_symbol_at_address (CORE_ADDR address)
3038{
1f2624a3
TT
3039 /* A helper function to search a given symtab for a symbol matching
3040 ADDR. */
3041 auto search_symtab = [] (compunit_symtab *symtab, CORE_ADDR addr) -> symbol *
aed57c53 3042 {
1f2624a3 3043 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (symtab);
71a3c369 3044
1f2624a3 3045 for (int i = GLOBAL_BLOCK; i <= STATIC_BLOCK; ++i)
aed57c53 3046 {
1f2624a3
TT
3047 const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
3048 struct block_iterator iter;
3049 struct symbol *sym;
71a3c369 3050
1f2624a3 3051 ALL_BLOCK_SYMBOLS (b, iter, sym)
71a3c369 3052 {
1f2624a3
TT
3053 if (SYMBOL_CLASS (sym) == LOC_STATIC
3054 && SYMBOL_VALUE_ADDRESS (sym) == addr)
3055 return sym;
3056 }
3057 }
3058 return nullptr;
3059 };
aed57c53 3060
1f2624a3
TT
3061 for (objfile *objfile : current_program_space->objfiles ())
3062 {
4d080b46
TT
3063 /* If this objfile was read with -readnow, then we need to
3064 search the symtabs directly. */
3065 if ((objfile->flags & OBJF_READNOW) != 0)
1f2624a3
TT
3066 {
3067 for (compunit_symtab *symtab : objfile->compunits ())
3068 {
3069 struct symbol *sym = search_symtab (symtab, address);
3070 if (sym != nullptr)
3071 return sym;
3072 }
3073 }
3074 else
3075 {
3076 struct compunit_symtab *symtab
4d080b46 3077 = objfile->find_compunit_symtab_by_address (address);
1f2624a3
TT
3078 if (symtab != NULL)
3079 {
3080 struct symbol *sym = search_symtab (symtab, address);
3081 if (sym != nullptr)
3082 return sym;
71a3c369 3083 }
aed57c53
TT
3084 }
3085 }
71a3c369
TT
3086
3087 return NULL;
3088}
3089
c906108c 3090\f
c5aa993b 3091
7e73cedf 3092/* Find the source file and line number for a given PC value and SECTION.
c906108c
SS
3093 Return a structure containing a symtab pointer, a line number,
3094 and a pc range for the entire source line.
3095 The value's .pc field is NOT the specified pc.
3096 NOTCURRENT nonzero means, if specified pc is on a line boundary,
3097 use the line that ends there. Otherwise, in that case, the line
3098 that begins there is used. */
3099
3100/* The big complication here is that a line may start in one file, and end just
3101 before the start of another file. This usually occurs when you #include
3102 code in the middle of a subroutine. To properly find the end of a line's PC
3103 range, we must search all symtabs associated with this compilation unit, and
3104 find the one whose first PC is closer than that of the next line in this
3105 symtab. */
3106
c906108c 3107struct symtab_and_line
714835d5 3108find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
c906108c 3109{
43f3e411 3110 struct compunit_symtab *cust;
52f0bd74
AC
3111 struct linetable *l;
3112 int len;
52f0bd74 3113 struct linetable_entry *item;
346d1dfe 3114 const struct blockvector *bv;
7cbd4a93 3115 struct bound_minimal_symbol msymbol;
c906108c
SS
3116
3117 /* Info on best line seen so far, and where it starts, and its file. */
3118
3119 struct linetable_entry *best = NULL;
3120 CORE_ADDR best_end = 0;
3121 struct symtab *best_symtab = 0;
3122
3123 /* Store here the first line number
3124 of a file which contains the line at the smallest pc after PC.
3125 If we don't find a line whose range contains PC,
3126 we will use a line one less than this,
3127 with a range from the start of that file to the first line's pc. */
3128 struct linetable_entry *alt = NULL;
c906108c
SS
3129
3130 /* Info on best line seen in this file. */
3131
3132 struct linetable_entry *prev;
3133
3134 /* If this pc is not from the current frame,
3135 it is the address of the end of a call instruction.
3136 Quite likely that is the start of the following statement.
3137 But what we want is the statement containing the instruction.
3138 Fudge the pc to make sure we get that. */
3139
b77b1eb7
JB
3140 /* It's tempting to assume that, if we can't find debugging info for
3141 any function enclosing PC, that we shouldn't search for line
3142 number info, either. However, GAS can emit line number info for
3143 assembly files --- very helpful when debugging hand-written
3144 assembly code. In such a case, we'd have no debug info for the
3145 function, but we would have line info. */
648f4f79 3146
c906108c
SS
3147 if (notcurrent)
3148 pc -= 1;
3149
c5aa993b 3150 /* elz: added this because this function returned the wrong
c906108c 3151 information if the pc belongs to a stub (import/export)
c378eb4e 3152 to call a shlib function. This stub would be anywhere between
9af17804 3153 two functions in the target, and the line info was erroneously
c378eb4e
MS
3154 taken to be the one of the line before the pc. */
3155
c906108c 3156 /* RT: Further explanation:
c5aa993b 3157
c906108c
SS
3158 * We have stubs (trampolines) inserted between procedures.
3159 *
3160 * Example: "shr1" exists in a shared library, and a "shr1" stub also
3161 * exists in the main image.
3162 *
3163 * In the minimal symbol table, we have a bunch of symbols
c378eb4e 3164 * sorted by start address. The stubs are marked as "trampoline",
c906108c
SS
3165 * the others appear as text. E.g.:
3166 *
9af17804 3167 * Minimal symbol table for main image
c906108c
SS
3168 * main: code for main (text symbol)
3169 * shr1: stub (trampoline symbol)
3170 * foo: code for foo (text symbol)
3171 * ...
3172 * Minimal symbol table for "shr1" image:
3173 * ...
3174 * shr1: code for shr1 (text symbol)
3175 * ...
3176 *
3177 * So the code below is trying to detect if we are in the stub
3178 * ("shr1" stub), and if so, find the real code ("shr1" trampoline),
3179 * and if found, do the symbolization from the real-code address
3180 * rather than the stub address.
3181 *
3182 * Assumptions being made about the minimal symbol table:
3183 * 1. lookup_minimal_symbol_by_pc() will return a trampoline only
c378eb4e 3184 * if we're really in the trampoline.s If we're beyond it (say
9af17804 3185 * we're in "foo" in the above example), it'll have a closer
c906108c
SS
3186 * symbol (the "foo" text symbol for example) and will not
3187 * return the trampoline.
3188 * 2. lookup_minimal_symbol_text() will find a real text symbol
3189 * corresponding to the trampoline, and whose address will
c378eb4e 3190 * be different than the trampoline address. I put in a sanity
c906108c
SS
3191 * check for the address being the same, to avoid an
3192 * infinite recursion.
3193 */
c5aa993b 3194 msymbol = lookup_minimal_symbol_by_pc (pc);
7cbd4a93
TT
3195 if (msymbol.minsym != NULL)
3196 if (MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline)
c5aa993b 3197 {
77e371c0 3198 struct bound_minimal_symbol mfunsym
c9d95fa3 3199 = lookup_minimal_symbol_text (msymbol.minsym->linkage_name (),
77e371c0
TT
3200 NULL);
3201
3202 if (mfunsym.minsym == NULL)
c5aa993b
JM
3203 /* I eliminated this warning since it is coming out
3204 * in the following situation:
3205 * gdb shmain // test program with shared libraries
3206 * (gdb) break shr1 // function in shared lib
3207 * Warning: In stub for ...
9af17804 3208 * In the above situation, the shared lib is not loaded yet,
c5aa993b
JM
3209 * so of course we can't find the real func/line info,
3210 * but the "break" still works, and the warning is annoying.
c378eb4e 3211 * So I commented out the warning. RT */
3e43a32a 3212 /* warning ("In stub for %s; unable to find real function/line info",
987012b8 3213 msymbol->linkage_name ()); */
c378eb4e 3214 ;
c5aa993b 3215 /* fall through */
77e371c0
TT
3216 else if (BMSYMBOL_VALUE_ADDRESS (mfunsym)
3217 == BMSYMBOL_VALUE_ADDRESS (msymbol))
c5aa993b 3218 /* Avoid infinite recursion */
c378eb4e 3219 /* See above comment about why warning is commented out. */
3e43a32a 3220 /* warning ("In stub for %s; unable to find real function/line info",
987012b8 3221 msymbol->linkage_name ()); */
c378eb4e 3222 ;
c5aa993b
JM
3223 /* fall through */
3224 else
dd69bf7a
KB
3225 {
3226 /* Detect an obvious case of infinite recursion. If this
3227 should occur, we'd like to know about it, so error out,
3228 fatally. */
3229 if (BMSYMBOL_VALUE_ADDRESS (mfunsym) == pc)
3230 internal_error (__FILE__, __LINE__,
dda83cd7 3231 _("Infinite recursion detected in find_pc_sect_line;"
dd69bf7a
KB
3232 "please file a bug report"));
3233
3234 return find_pc_line (BMSYMBOL_VALUE_ADDRESS (mfunsym), 0);
3235 }
c5aa993b 3236 }
c906108c 3237
51abb421
PA
3238 symtab_and_line val;
3239 val.pspace = current_program_space;
c906108c 3240
43f3e411
DE
3241 cust = find_pc_sect_compunit_symtab (pc, section);
3242 if (cust == NULL)
c906108c 3243 {
c378eb4e 3244 /* If no symbol information, return previous pc. */
c906108c
SS
3245 if (notcurrent)
3246 pc++;
3247 val.pc = pc;
3248 return val;
3249 }
3250
43f3e411 3251 bv = COMPUNIT_BLOCKVECTOR (cust);
c906108c
SS
3252
3253 /* Look at all the symtabs that share this blockvector.
3254 They all have the same apriori range, that we found was right;
3255 but they have different line tables. */
3256
5accd1a0 3257 for (symtab *iter_s : compunit_filetabs (cust))
c906108c
SS
3258 {
3259 /* Find the best line in this symtab. */
43f3e411 3260 l = SYMTAB_LINETABLE (iter_s);
c906108c 3261 if (!l)
c5aa993b 3262 continue;
c906108c
SS
3263 len = l->nitems;
3264 if (len <= 0)
3265 {
3266 /* I think len can be zero if the symtab lacks line numbers
3267 (e.g. gcc -g1). (Either that or the LINETABLE is NULL;
3268 I'm not sure which, and maybe it depends on the symbol
3269 reader). */
3270 continue;
3271 }
3272
3273 prev = NULL;
c378eb4e 3274 item = l->item; /* Get first line info. */
c906108c
SS
3275
3276 /* Is this file's first line closer than the first lines of other files?
dda83cd7 3277 If so, record this file, and its first line, as best alternate. */
c906108c 3278 if (item->pc > pc && (!alt || item->pc < alt->pc))
c656bca5 3279 alt = item;
c906108c 3280
b926417a 3281 auto pc_compare = [](const CORE_ADDR & comp_pc,
7cbe16e9
SR
3282 const struct linetable_entry & lhs)->bool
3283 {
b926417a 3284 return comp_pc < lhs.pc;
7cbe16e9 3285 };
c906108c 3286
7cbe16e9
SR
3287 struct linetable_entry *first = item;
3288 struct linetable_entry *last = item + len;
3289 item = std::upper_bound (first, last, pc, pc_compare);
3290 if (item != first)
d8cc8af6 3291 prev = item - 1; /* Found a matching item. */
c906108c
SS
3292
3293 /* At this point, prev points at the line whose start addr is <= pc, and
dda83cd7
SM
3294 item points at the next line. If we ran off the end of the linetable
3295 (pc >= start of the last line), then prev == item. If pc < start of
3296 the first line, prev will not be set. */
c906108c
SS
3297
3298 /* Is this file's best line closer than the best in the other files?
dda83cd7
SM
3299 If so, record this file, and its best line, as best so far. Don't
3300 save prev if it represents the end of a function (i.e. line number
3301 0) instead of a real line. */
c906108c 3302
083ae935 3303 if (prev && prev->line && (!best || prev->pc > best->pc))
c906108c
SS
3304 {
3305 best = prev;
43f3e411 3306 best_symtab = iter_s;
25d53da1 3307
8c95582d
AB
3308 /* If during the binary search we land on a non-statement entry,
3309 scan backward through entries at the same address to see if
3310 there is an entry marked as is-statement. In theory this
3311 duplication should have been removed from the line table
3312 during construction, this is just a double check. If the line
3313 table has had the duplication removed then this should be
3314 pretty cheap. */
3315 if (!best->is_stmt)
3316 {
3317 struct linetable_entry *tmp = best;
3318 while (tmp > first && (tmp - 1)->pc == tmp->pc
3319 && (tmp - 1)->line != 0 && !tmp->is_stmt)
3320 --tmp;
3321 if (tmp->is_stmt)
3322 best = tmp;
3323 }
3324
25d53da1
KB
3325 /* Discard BEST_END if it's before the PC of the current BEST. */
3326 if (best_end <= best->pc)
3327 best_end = 0;
c906108c 3328 }
25d53da1
KB
3329
3330 /* If another line (denoted by ITEM) is in the linetable and its
7cbe16e9 3331 PC is after BEST's PC, but before the current BEST_END, then
25d53da1 3332 use ITEM's PC as the new best_end. */
4ee89e90 3333 if (best && item < last && item->pc > best->pc
7cbe16e9 3334 && (best_end == 0 || best_end > item->pc))
25d53da1 3335 best_end = item->pc;
c906108c
SS
3336 }
3337
3338 if (!best_symtab)
3339 {
e86e87f7
DJ
3340 /* If we didn't find any line number info, just return zeros.
3341 We used to return alt->line - 1 here, but that could be
3342 anywhere; if we don't have line number info for this PC,
3343 don't make some up. */
3344 val.pc = pc;
c906108c 3345 }
e8717518
FF
3346 else if (best->line == 0)
3347 {
3348 /* If our best fit is in a range of PC's for which no line
3349 number info is available (line number is zero) then we didn't
c378eb4e 3350 find any valid line information. */
e8717518
FF
3351 val.pc = pc;
3352 }
c906108c
SS
3353 else
3354 {
8c95582d 3355 val.is_stmt = best->is_stmt;
c906108c
SS
3356 val.symtab = best_symtab;
3357 val.line = best->line;
3358 val.pc = best->pc;
3359 if (best_end && (!alt || best_end < alt->pc))
3360 val.end = best_end;
3361 else if (alt)
3362 val.end = alt->pc;
3363 else
3364 val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
3365 }
3366 val.section = section;
3367 return val;
3368}
3369
c378eb4e 3370/* Backward compatibility (no section). */
c906108c
SS
3371
3372struct symtab_and_line
fba45db2 3373find_pc_line (CORE_ADDR pc, int notcurrent)
c906108c 3374{
714835d5 3375 struct obj_section *section;
c906108c
SS
3376
3377 section = find_pc_overlay (pc);
31a8f60f
AB
3378 if (!pc_in_unmapped_range (pc, section))
3379 return find_pc_sect_line (pc, section, notcurrent);
3380
3381 /* If the original PC was an unmapped address then we translate this to a
3382 mapped address in order to lookup the sal. However, as the user
3383 passed us an unmapped address it makes more sense to return a result
3384 that has the pc and end fields translated to unmapped addresses. */
3385 pc = overlay_mapped_address (pc, section);
3386 symtab_and_line sal = find_pc_sect_line (pc, section, notcurrent);
3387 sal.pc = overlay_unmapped_address (sal.pc, section);
3388 sal.end = overlay_unmapped_address (sal.end, section);
3389 return sal;
c906108c 3390}
34248c3a
DE
3391
3392/* See symtab.h. */
3393
3394struct symtab *
3395find_pc_line_symtab (CORE_ADDR pc)
3396{
3397 struct symtab_and_line sal;
3398
3399 /* This always passes zero for NOTCURRENT to find_pc_line.
3400 There are currently no callers that ever pass non-zero. */
3401 sal = find_pc_line (pc, 0);
3402 return sal.symtab;
3403}
c906108c 3404\f
c906108c
SS
3405/* Find line number LINE in any symtab whose name is the same as
3406 SYMTAB.
3407
3408 If found, return the symtab that contains the linetable in which it was
3409 found, set *INDEX to the index in the linetable of the best entry
ececd218 3410 found, and set *EXACT_MATCH to true if the value returned is an
c906108c
SS
3411 exact match.
3412
3413 If not found, return NULL. */
3414
50641945 3415struct symtab *
5accd1a0 3416find_line_symtab (struct symtab *sym_tab, int line,
ececd218 3417 int *index, bool *exact_match)
c906108c 3418{
6f43c46f 3419 int exact = 0; /* Initialized here to avoid a compiler warning. */
c906108c
SS
3420
3421 /* BEST_INDEX and BEST_LINETABLE identify the smallest linenumber > LINE
3422 so far seen. */
3423
3424 int best_index;
3425 struct linetable *best_linetable;
3426 struct symtab *best_symtab;
3427
3428 /* First try looking it up in the given symtab. */
5accd1a0
TT
3429 best_linetable = SYMTAB_LINETABLE (sym_tab);
3430 best_symtab = sym_tab;
f8eba3c6 3431 best_index = find_line_common (best_linetable, line, &exact, 0);
c906108c
SS
3432 if (best_index < 0 || !exact)
3433 {
3434 /* Didn't find an exact match. So we better keep looking for
dda83cd7
SM
3435 another symtab with the same name. In the case of xcoff,
3436 multiple csects for one source file (produced by IBM's FORTRAN
3437 compiler) produce multiple symtabs (this is unavoidable
3438 assuming csects can be at arbitrary places in memory and that
3439 the GLOBAL_BLOCK of a symtab has a begin and end address). */
c906108c
SS
3440
3441 /* BEST is the smallest linenumber > LINE so far seen,
dda83cd7
SM
3442 or 0 if none has been seen so far.
3443 BEST_INDEX and BEST_LINETABLE identify the item for it. */
c906108c
SS
3444 int best;
3445
c906108c
SS
3446 if (best_index >= 0)
3447 best = best_linetable->item[best_index].line;
3448 else
3449 best = 0;
3450
2030c079 3451 for (objfile *objfile : current_program_space->objfiles ())
4d080b46 3452 objfile->expand_symtabs_with_fullname (symtab_to_fullname (sym_tab));
51432cca 3453
2030c079 3454 for (objfile *objfile : current_program_space->objfiles ())
8b31193a 3455 {
b669c953 3456 for (compunit_symtab *cu : objfile->compunits ())
8b31193a
TT
3457 {
3458 for (symtab *s : compunit_filetabs (cu))
3459 {
3460 struct linetable *l;
3461 int ind;
3462
3463 if (FILENAME_CMP (sym_tab->filename, s->filename) != 0)
3464 continue;
3465 if (FILENAME_CMP (symtab_to_fullname (sym_tab),
3466 symtab_to_fullname (s)) != 0)
3467 continue;
3468 l = SYMTAB_LINETABLE (s);
3469 ind = find_line_common (l, line, &exact, 0);
3470 if (ind >= 0)
3471 {
3472 if (exact)
3473 {
3474 best_index = ind;
3475 best_linetable = l;
3476 best_symtab = s;
3477 goto done;
3478 }
3479 if (best == 0 || l->item[ind].line < best)
3480 {
3481 best = l->item[ind].line;
3482 best_index = ind;
3483 best_linetable = l;
3484 best_symtab = s;
3485 }
3486 }
3487 }
3488 }
3489 }
c906108c 3490 }
c5aa993b 3491done:
c906108c
SS
3492 if (best_index < 0)
3493 return NULL;
3494
3495 if (index)
3496 *index = best_index;
3497 if (exact_match)
ececd218 3498 *exact_match = (exact != 0);
c906108c
SS
3499
3500 return best_symtab;
3501}
f8eba3c6
TT
3502
3503/* Given SYMTAB, returns all the PCs function in the symtab that
67d89901
TT
3504 exactly match LINE. Returns an empty vector if there are no exact
3505 matches, but updates BEST_ITEM in this case. */
f8eba3c6 3506
67d89901 3507std::vector<CORE_ADDR>
f8eba3c6
TT
3508find_pcs_for_symtab_line (struct symtab *symtab, int line,
3509 struct linetable_entry **best_item)
3510{
c656bca5 3511 int start = 0;
67d89901 3512 std::vector<CORE_ADDR> result;
f8eba3c6
TT
3513
3514 /* First, collect all the PCs that are at this line. */
3515 while (1)
3516 {
3517 int was_exact;
3518 int idx;
3519
8435453b
DE
3520 idx = find_line_common (SYMTAB_LINETABLE (symtab), line, &was_exact,
3521 start);
f8eba3c6
TT
3522 if (idx < 0)
3523 break;
3524
3525 if (!was_exact)
3526 {
8435453b 3527 struct linetable_entry *item = &SYMTAB_LINETABLE (symtab)->item[idx];
f8eba3c6 3528
8c95582d
AB
3529 if (*best_item == NULL
3530 || (item->line < (*best_item)->line && item->is_stmt))
f8eba3c6
TT
3531 *best_item = item;
3532
3533 break;
3534 }
3535
67d89901 3536 result.push_back (SYMTAB_LINETABLE (symtab)->item[idx].pc);
f8eba3c6
TT
3537 start = idx + 1;
3538 }
3539
3540 return result;
3541}
3542
c906108c
SS
3543\f
3544/* Set the PC value for a given source file and line number and return true.
ececd218 3545 Returns false for invalid line number (and sets the PC to 0).
c906108c
SS
3546 The source file is specified with a struct symtab. */
3547
ececd218 3548bool
fba45db2 3549find_line_pc (struct symtab *symtab, int line, CORE_ADDR *pc)
c906108c
SS
3550{
3551 struct linetable *l;
3552 int ind;
3553
3554 *pc = 0;
3555 if (symtab == 0)
ececd218 3556 return false;
c906108c
SS
3557
3558 symtab = find_line_symtab (symtab, line, &ind, NULL);
3559 if (symtab != NULL)
3560 {
8435453b 3561 l = SYMTAB_LINETABLE (symtab);
c906108c 3562 *pc = l->item[ind].pc;
ececd218 3563 return true;
c906108c
SS
3564 }
3565 else
ececd218 3566 return false;
c906108c
SS
3567}
3568
3569/* Find the range of pc values in a line.
3570 Store the starting pc of the line into *STARTPTR
3571 and the ending pc (start of next line) into *ENDPTR.
ececd218
CB
3572 Returns true to indicate success.
3573 Returns false if could not find the specified line. */
c906108c 3574
ececd218 3575bool
fba45db2
KB
3576find_line_pc_range (struct symtab_and_line sal, CORE_ADDR *startptr,
3577 CORE_ADDR *endptr)
c906108c
SS
3578{
3579 CORE_ADDR startaddr;
3580 struct symtab_and_line found_sal;
3581
3582 startaddr = sal.pc;
c5aa993b 3583 if (startaddr == 0 && !find_line_pc (sal.symtab, sal.line, &startaddr))
ececd218 3584 return false;
c906108c
SS
3585
3586 /* This whole function is based on address. For example, if line 10 has
3587 two parts, one from 0x100 to 0x200 and one from 0x300 to 0x400, then
3588 "info line *0x123" should say the line goes from 0x100 to 0x200
3589 and "info line *0x355" should say the line goes from 0x300 to 0x400.
3590 This also insures that we never give a range like "starts at 0x134
3591 and ends at 0x12c". */
3592
3593 found_sal = find_pc_sect_line (startaddr, sal.section, 0);
3594 if (found_sal.line != sal.line)
3595 {
3596 /* The specified line (sal) has zero bytes. */
3597 *startptr = found_sal.pc;
3598 *endptr = found_sal.pc;
3599 }
3600 else
3601 {
3602 *startptr = found_sal.pc;
3603 *endptr = found_sal.end;
3604 }
ececd218 3605 return true;
c906108c
SS
3606}
3607
3608/* Given a line table and a line number, return the index into the line
3609 table for the pc of the nearest line whose number is >= the specified one.
3610 Return -1 if none is found. The value is >= 0 if it is an index.
f8eba3c6 3611 START is the index at which to start searching the line table.
c906108c
SS
3612
3613 Set *EXACT_MATCH nonzero if the value returned is an exact match. */
3614
3615static int
aa1ee363 3616find_line_common (struct linetable *l, int lineno,
f8eba3c6 3617 int *exact_match, int start)
c906108c 3618{
52f0bd74
AC
3619 int i;
3620 int len;
c906108c
SS
3621
3622 /* BEST is the smallest linenumber > LINENO so far seen,
3623 or 0 if none has been seen so far.
3624 BEST_INDEX identifies the item for it. */
3625
3626 int best_index = -1;
3627 int best = 0;
3628
b7589f7d
DJ
3629 *exact_match = 0;
3630
c906108c
SS
3631 if (lineno <= 0)
3632 return -1;
3633 if (l == 0)
3634 return -1;
3635
3636 len = l->nitems;
f8eba3c6 3637 for (i = start; i < len; i++)
c906108c 3638 {
aa1ee363 3639 struct linetable_entry *item = &(l->item[i]);
c906108c 3640
8c95582d
AB
3641 /* Ignore non-statements. */
3642 if (!item->is_stmt)
3643 continue;
3644
c906108c
SS
3645 if (item->line == lineno)
3646 {
3647 /* Return the first (lowest address) entry which matches. */
3648 *exact_match = 1;
3649 return i;
3650 }
3651
3652 if (item->line > lineno && (best == 0 || item->line < best))
3653 {
3654 best = item->line;
3655 best_index = i;
3656 }
3657 }
3658
3659 /* If we got here, we didn't get an exact match. */
c906108c
SS
3660 return best_index;
3661}
3662
ececd218 3663bool
fba45db2 3664find_pc_line_pc_range (CORE_ADDR pc, CORE_ADDR *startptr, CORE_ADDR *endptr)
c906108c
SS
3665{
3666 struct symtab_and_line sal;
433759f7 3667
c906108c
SS
3668 sal = find_pc_line (pc, 0);
3669 *startptr = sal.pc;
3670 *endptr = sal.end;
3671 return sal.symtab != 0;
3672}
3673
cd2bb709
PA
3674/* Helper for find_function_start_sal. Does most of the work, except
3675 setting the sal's symbol. */
aab2f208 3676
cd2bb709
PA
3677static symtab_and_line
3678find_function_start_sal_1 (CORE_ADDR func_addr, obj_section *section,
3679 bool funfirstline)
aab2f208 3680{
42ddae10 3681 symtab_and_line sal = find_pc_sect_line (func_addr, section, 0);
aab2f208 3682
6e22494e
JK
3683 if (funfirstline && sal.symtab != NULL
3684 && (COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (sal.symtab))
3685 || SYMTAB_LANGUAGE (sal.symtab) == language_asm))
3686 {
08feed99 3687 struct gdbarch *gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch ();
141c5cc4 3688
42ddae10 3689 sal.pc = func_addr;
141c5cc4
JK
3690 if (gdbarch_skip_entrypoint_p (gdbarch))
3691 sal.pc = gdbarch_skip_entrypoint (gdbarch, sal.pc);
6e22494e
JK
3692 return sal;
3693 }
3694
aab2f208 3695 /* We always should have a line for the function start address.
42ddae10 3696 If we don't, something is odd. Create a plain SAL referring
aab2f208
DE
3697 just the PC and hope that skip_prologue_sal (if requested)
3698 can find a line number for after the prologue. */
42ddae10 3699 if (sal.pc < func_addr)
aab2f208 3700 {
51abb421 3701 sal = {};
aab2f208 3702 sal.pspace = current_program_space;
42ddae10 3703 sal.pc = func_addr;
08be3fe3 3704 sal.section = section;
aab2f208
DE
3705 }
3706
3707 if (funfirstline)
3708 skip_prologue_sal (&sal);
3709
3710 return sal;
3711}
3712
42ddae10
PA
3713/* See symtab.h. */
3714
cd2bb709
PA
3715symtab_and_line
3716find_function_start_sal (CORE_ADDR func_addr, obj_section *section,
3717 bool funfirstline)
3718{
3719 symtab_and_line sal
3720 = find_function_start_sal_1 (func_addr, section, funfirstline);
3721
3722 /* find_function_start_sal_1 does a linetable search, so it finds
3723 the symtab and linenumber, but not a symbol. Fill in the
3724 function symbol too. */
3725 sal.symbol = find_pc_sect_containing_function (sal.pc, sal.section);
3726
3727 return sal;
3728}
3729
3730/* See symtab.h. */
3731
42ddae10
PA
3732symtab_and_line
3733find_function_start_sal (symbol *sym, bool funfirstline)
3734{
3735 fixup_symbol_section (sym, NULL);
3736 symtab_and_line sal
2b1ffcfd 3737 = find_function_start_sal_1 (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)),
ebbc3a7d 3738 sym->obj_section (symbol_objfile (sym)),
cd2bb709 3739 funfirstline);
42ddae10
PA
3740 sal.symbol = sym;
3741 return sal;
3742}
3743
3744
8c7a1ee8
EZ
3745/* Given a function start address FUNC_ADDR and SYMTAB, find the first
3746 address for that function that has an entry in SYMTAB's line info
3747 table. If such an entry cannot be found, return FUNC_ADDR
3748 unaltered. */
eca864fe 3749
70221824 3750static CORE_ADDR
8c7a1ee8
EZ
3751skip_prologue_using_lineinfo (CORE_ADDR func_addr, struct symtab *symtab)
3752{
3753 CORE_ADDR func_start, func_end;
3754 struct linetable *l;
952a6d41 3755 int i;
8c7a1ee8
EZ
3756
3757 /* Give up if this symbol has no lineinfo table. */
8435453b 3758 l = SYMTAB_LINETABLE (symtab);
8c7a1ee8
EZ
3759 if (l == NULL)
3760 return func_addr;
3761
3762 /* Get the range for the function's PC values, or give up if we
3763 cannot, for some reason. */
3764 if (!find_pc_partial_function (func_addr, NULL, &func_start, &func_end))
3765 return func_addr;
3766
3767 /* Linetable entries are ordered by PC values, see the commentary in
3768 symtab.h where `struct linetable' is defined. Thus, the first
3769 entry whose PC is in the range [FUNC_START..FUNC_END[ is the
3770 address we are looking for. */
3771 for (i = 0; i < l->nitems; i++)
3772 {
3773 struct linetable_entry *item = &(l->item[i]);
3774
3775 /* Don't use line numbers of zero, they mark special entries in
3776 the table. See the commentary on symtab.h before the
3777 definition of struct linetable. */
3778 if (item->line > 0 && func_start <= item->pc && item->pc < func_end)
3779 return item->pc;
3780 }
3781
3782 return func_addr;
3783}
3784
059acae7
UW
3785/* Adjust SAL to the first instruction past the function prologue.
3786 If the PC was explicitly specified, the SAL is not changed.
5b0e2db4
AB
3787 If the line number was explicitly specified then the SAL can still be
3788 updated, unless the language for SAL is assembler, in which case the SAL
3789 will be left unchanged.
3790 If SAL is already past the prologue, then do nothing. */
eca864fe 3791
059acae7
UW
3792void
3793skip_prologue_sal (struct symtab_and_line *sal)
3794{
3795 struct symbol *sym;
3796 struct symtab_and_line start_sal;
8be455d7 3797 CORE_ADDR pc, saved_pc;
059acae7
UW
3798 struct obj_section *section;
3799 const char *name;
3800 struct objfile *objfile;
3801 struct gdbarch *gdbarch;
3977b71f 3802 const struct block *b, *function_block;
8be455d7 3803 int force_skip, skip;
c906108c 3804
a4b411d6 3805 /* Do not change the SAL if PC was specified explicitly. */
059acae7
UW
3806 if (sal->explicit_pc)
3807 return;
6c95b8df 3808
5b0e2db4
AB
3809 /* In assembly code, if the user asks for a specific line then we should
3810 not adjust the SAL. The user already has instruction level
3811 visibility in this case, so selecting a line other than one requested
3812 is likely to be the wrong choice. */
3813 if (sal->symtab != nullptr
3814 && sal->explicit_line
3815 && SYMTAB_LANGUAGE (sal->symtab) == language_asm)
3816 return;
3817
5ed8105e
PA
3818 scoped_restore_current_pspace_and_thread restore_pspace_thread;
3819
059acae7 3820 switch_to_program_space_and_thread (sal->pspace);
6c95b8df 3821
059acae7
UW
3822 sym = find_pc_sect_function (sal->pc, sal->section);
3823 if (sym != NULL)
bccdca4a 3824 {
059acae7
UW
3825 fixup_symbol_section (sym, NULL);
3826
08be3fe3 3827 objfile = symbol_objfile (sym);
2b1ffcfd 3828 pc = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
ebbc3a7d 3829 section = sym->obj_section (objfile);
987012b8 3830 name = sym->linkage_name ();
c906108c 3831 }
059acae7
UW
3832 else
3833 {
7c7b6655 3834 struct bound_minimal_symbol msymbol
dda83cd7 3835 = lookup_minimal_symbol_by_pc_section (sal->pc, sal->section);
433759f7 3836
7c7b6655 3837 if (msymbol.minsym == NULL)
5ed8105e 3838 return;
059acae7 3839
7c7b6655 3840 objfile = msymbol.objfile;
77e371c0 3841 pc = BMSYMBOL_VALUE_ADDRESS (msymbol);
ebbc3a7d 3842 section = msymbol.minsym->obj_section (objfile);
c9d95fa3 3843 name = msymbol.minsym->linkage_name ();
059acae7
UW
3844 }
3845
08feed99 3846 gdbarch = objfile->arch ();
059acae7 3847
8be455d7
JK
3848 /* Process the prologue in two passes. In the first pass try to skip the
3849 prologue (SKIP is true) and verify there is a real need for it (indicated
3850 by FORCE_SKIP). If no such reason was found run a second pass where the
3851 prologue is not skipped (SKIP is false). */
059acae7 3852
8be455d7
JK
3853 skip = 1;
3854 force_skip = 1;
059acae7 3855
8be455d7
JK
3856 /* Be conservative - allow direct PC (without skipping prologue) only if we
3857 have proven the CU (Compilation Unit) supports it. sal->SYMTAB does not
3858 have to be set by the caller so we use SYM instead. */
08be3fe3
DE
3859 if (sym != NULL
3860 && COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (symbol_symtab (sym))))
8be455d7 3861 force_skip = 0;
059acae7 3862
8be455d7
JK
3863 saved_pc = pc;
3864 do
c906108c 3865 {
8be455d7 3866 pc = saved_pc;
4309257c 3867
8be455d7
JK
3868 /* If the function is in an unmapped overlay, use its unmapped LMA address,
3869 so that gdbarch_skip_prologue has something unique to work on. */
3870 if (section_is_overlay (section) && !section_is_mapped (section))
3871 pc = overlay_unmapped_address (pc, section);
3872
3873 /* Skip "first line" of function (which is actually its prologue). */
3874 pc += gdbarch_deprecated_function_start_offset (gdbarch);
591a12a1 3875 if (gdbarch_skip_entrypoint_p (gdbarch))
dda83cd7 3876 pc = gdbarch_skip_entrypoint (gdbarch, pc);
8be455d7 3877 if (skip)
46a62268 3878 pc = gdbarch_skip_prologue_noexcept (gdbarch, pc);
8be455d7
JK
3879
3880 /* For overlays, map pc back into its mapped VMA range. */
3881 pc = overlay_mapped_address (pc, section);
3882
3883 /* Calculate line number. */
059acae7 3884 start_sal = find_pc_sect_line (pc, section, 0);
8be455d7
JK
3885
3886 /* Check if gdbarch_skip_prologue left us in mid-line, and the next
3887 line is still part of the same function. */
3888 if (skip && start_sal.pc != pc
2b1ffcfd 3889 && (sym ? (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) <= start_sal.end
b1d96efd 3890 && start_sal.end < BLOCK_END (SYMBOL_BLOCK_VALUE (sym)))
7cbd4a93
TT
3891 : (lookup_minimal_symbol_by_pc_section (start_sal.end, section).minsym
3892 == lookup_minimal_symbol_by_pc_section (pc, section).minsym)))
8be455d7
JK
3893 {
3894 /* First pc of next line */
3895 pc = start_sal.end;
3896 /* Recalculate the line number (might not be N+1). */
3897 start_sal = find_pc_sect_line (pc, section, 0);
3898 }
3899
3900 /* On targets with executable formats that don't have a concept of
3901 constructors (ELF with .init has, PE doesn't), gcc emits a call
3902 to `__main' in `main' between the prologue and before user
3903 code. */
3904 if (gdbarch_skip_main_prologue_p (gdbarch)
7ccffd7c 3905 && name && strcmp_iw (name, "main") == 0)
8be455d7
JK
3906 {
3907 pc = gdbarch_skip_main_prologue (gdbarch, pc);
3908 /* Recalculate the line number (might not be N+1). */
3909 start_sal = find_pc_sect_line (pc, section, 0);
3910 force_skip = 1;
3911 }
4309257c 3912 }
8be455d7 3913 while (!force_skip && skip--);
4309257c 3914
8c7a1ee8
EZ
3915 /* If we still don't have a valid source line, try to find the first
3916 PC in the lineinfo table that belongs to the same function. This
3917 happens with COFF debug info, which does not seem to have an
3918 entry in lineinfo table for the code after the prologue which has
3919 no direct relation to source. For example, this was found to be
3920 the case with the DJGPP target using "gcc -gcoff" when the
3921 compiler inserted code after the prologue to make sure the stack
3922 is aligned. */
8be455d7 3923 if (!force_skip && sym && start_sal.symtab == NULL)
8c7a1ee8 3924 {
08be3fe3 3925 pc = skip_prologue_using_lineinfo (pc, symbol_symtab (sym));
8c7a1ee8 3926 /* Recalculate the line number. */
059acae7 3927 start_sal = find_pc_sect_line (pc, section, 0);
8c7a1ee8
EZ
3928 }
3929
059acae7
UW
3930 /* If we're already past the prologue, leave SAL unchanged. Otherwise
3931 forward SAL to the end of the prologue. */
3932 if (sal->pc >= pc)
3933 return;
3934
3935 sal->pc = pc;
3936 sal->section = section;
059acae7
UW
3937 sal->symtab = start_sal.symtab;
3938 sal->line = start_sal.line;
3939 sal->end = start_sal.end;
c906108c 3940
edb3359d
DJ
3941 /* Check if we are now inside an inlined function. If we can,
3942 use the call site of the function instead. */
059acae7 3943 b = block_for_pc_sect (sal->pc, sal->section);
edb3359d
DJ
3944 function_block = NULL;
3945 while (b != NULL)
3946 {
3947 if (BLOCK_FUNCTION (b) != NULL && block_inlined_p (b))
3948 function_block = b;
3949 else if (BLOCK_FUNCTION (b) != NULL)
3950 break;
3951 b = BLOCK_SUPERBLOCK (b);
3952 }
3953 if (function_block != NULL
3954 && SYMBOL_LINE (BLOCK_FUNCTION (function_block)) != 0)
3955 {
059acae7 3956 sal->line = SYMBOL_LINE (BLOCK_FUNCTION (function_block));
08be3fe3 3957 sal->symtab = symbol_symtab (BLOCK_FUNCTION (function_block));
edb3359d 3958 }
c906108c 3959}
50641945 3960
f1f58506
DE
3961/* Given PC at the function's start address, attempt to find the
3962 prologue end using SAL information. Return zero if the skip fails.
3963
3964 A non-optimized prologue traditionally has one SAL for the function
3965 and a second for the function body. A single line function has
3966 them both pointing at the same line.
3967
3968 An optimized prologue is similar but the prologue may contain
3969 instructions (SALs) from the instruction body. Need to skip those
3970 while not getting into the function body.
3971
3972 The functions end point and an increasing SAL line are used as
3973 indicators of the prologue's endpoint.
3974
3975 This code is based on the function refine_prologue_limit
3976 (found in ia64). */
3977
3978CORE_ADDR
3979skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
3980{
3981 struct symtab_and_line prologue_sal;
3982 CORE_ADDR start_pc;
3983 CORE_ADDR end_pc;
3984 const struct block *bl;
3985
3986 /* Get an initial range for the function. */
3987 find_pc_partial_function (func_addr, NULL, &start_pc, &end_pc);
3988 start_pc += gdbarch_deprecated_function_start_offset (gdbarch);
3989
3990 prologue_sal = find_pc_line (start_pc, 0);
3991 if (prologue_sal.line != 0)
3992 {
3993 /* For languages other than assembly, treat two consecutive line
3994 entries at the same address as a zero-instruction prologue.
3995 The GNU assembler emits separate line notes for each instruction
3996 in a multi-instruction macro, but compilers generally will not
3997 do this. */
3998 if (prologue_sal.symtab->language != language_asm)
3999 {
8435453b 4000 struct linetable *linetable = SYMTAB_LINETABLE (prologue_sal.symtab);
f1f58506
DE
4001 int idx = 0;
4002
4003 /* Skip any earlier lines, and any end-of-sequence marker
4004 from a previous function. */
4005 while (linetable->item[idx].pc != prologue_sal.pc
4006 || linetable->item[idx].line == 0)
4007 idx++;
4008
4009 if (idx+1 < linetable->nitems
4010 && linetable->item[idx+1].line != 0
4011 && linetable->item[idx+1].pc == start_pc)
4012 return start_pc;
4013 }
4014
4015 /* If there is only one sal that covers the entire function,
4016 then it is probably a single line function, like
4017 "foo(){}". */
4018 if (prologue_sal.end >= end_pc)
4019 return 0;
4020
4021 while (prologue_sal.end < end_pc)
4022 {
4023 struct symtab_and_line sal;
4024
4025 sal = find_pc_line (prologue_sal.end, 0);
4026 if (sal.line == 0)
4027 break;
4028 /* Assume that a consecutive SAL for the same (or larger)
4029 line mark the prologue -> body transition. */
4030 if (sal.line >= prologue_sal.line)
4031 break;
4032 /* Likewise if we are in a different symtab altogether
4033 (e.g. within a file included via #include).  */
4034 if (sal.symtab != prologue_sal.symtab)
4035 break;
4036
4037 /* The line number is smaller. Check that it's from the
4038 same function, not something inlined. If it's inlined,
4039 then there is no point comparing the line numbers. */
4040 bl = block_for_pc (prologue_sal.end);
4041 while (bl)
4042 {
4043 if (block_inlined_p (bl))
4044 break;
4045 if (BLOCK_FUNCTION (bl))
4046 {
4047 bl = NULL;
4048 break;
4049 }
4050 bl = BLOCK_SUPERBLOCK (bl);
4051 }
4052 if (bl != NULL)
4053 break;
4054
4055 /* The case in which compiler's optimizer/scheduler has
4056 moved instructions into the prologue. We look ahead in
4057 the function looking for address ranges whose
4058 corresponding line number is less the first one that we
4059 found for the function. This is more conservative then
4060 refine_prologue_limit which scans a large number of SALs
4061 looking for any in the prologue. */
4062 prologue_sal = sal;
4063 }
4064 }
4065
4066 if (prologue_sal.end < end_pc)
4067 /* Return the end of this line, or zero if we could not find a
4068 line. */
4069 return prologue_sal.end;
4070 else
4071 /* Don't return END_PC, which is past the end of the function. */
4072 return prologue_sal.pc;
4073}
bf223d3e
PA
4074
4075/* See symtab.h. */
4076
4077symbol *
4078find_function_alias_target (bound_minimal_symbol msymbol)
4079{
4024cf2b
PA
4080 CORE_ADDR func_addr;
4081 if (!msymbol_is_function (msymbol.objfile, msymbol.minsym, &func_addr))
bf223d3e
PA
4082 return NULL;
4083
4024cf2b 4084 symbol *sym = find_pc_function (func_addr);
bf223d3e
PA
4085 if (sym != NULL
4086 && SYMBOL_CLASS (sym) == LOC_BLOCK
2b1ffcfd 4087 && BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) == func_addr)
bf223d3e
PA
4088 return sym;
4089
4090 return NULL;
4091}
4092
f1f58506 4093\f
c906108c
SS
4094/* If P is of the form "operator[ \t]+..." where `...' is
4095 some legitimate operator text, return a pointer to the
4096 beginning of the substring of the operator text.
4097 Otherwise, return "". */
eca864fe 4098
96142726
TT
4099static const char *
4100operator_chars (const char *p, const char **end)
c906108c
SS
4101{
4102 *end = "";
8090b426 4103 if (!startswith (p, CP_OPERATOR_STR))
c906108c 4104 return *end;
8090b426 4105 p += CP_OPERATOR_LEN;
c906108c
SS
4106
4107 /* Don't get faked out by `operator' being part of a longer
4108 identifier. */
c5aa993b 4109 if (isalpha (*p) || *p == '_' || *p == '$' || *p == '\0')
c906108c
SS
4110 return *end;
4111
4112 /* Allow some whitespace between `operator' and the operator symbol. */
4113 while (*p == ' ' || *p == '\t')
4114 p++;
4115
c378eb4e 4116 /* Recognize 'operator TYPENAME'. */
c906108c 4117
c5aa993b 4118 if (isalpha (*p) || *p == '_' || *p == '$')
c906108c 4119 {
96142726 4120 const char *q = p + 1;
433759f7 4121
c5aa993b 4122 while (isalnum (*q) || *q == '_' || *q == '$')
c906108c
SS
4123 q++;
4124 *end = q;
4125 return p;
4126 }
4127
53e8ad3d
MS
4128 while (*p)
4129 switch (*p)
4130 {
4131 case '\\': /* regexp quoting */
4132 if (p[1] == '*')
4133 {
3e43a32a 4134 if (p[2] == '=') /* 'operator\*=' */
53e8ad3d
MS
4135 *end = p + 3;
4136 else /* 'operator\*' */
4137 *end = p + 2;
4138 return p;
4139 }
4140 else if (p[1] == '[')
4141 {
4142 if (p[2] == ']')
3e43a32a
MS
4143 error (_("mismatched quoting on brackets, "
4144 "try 'operator\\[\\]'"));
53e8ad3d
MS
4145 else if (p[2] == '\\' && p[3] == ']')
4146 {
4147 *end = p + 4; /* 'operator\[\]' */
4148 return p;
4149 }
4150 else
8a3fe4f8 4151 error (_("nothing is allowed between '[' and ']'"));
53e8ad3d 4152 }
9af17804 4153 else
53e8ad3d 4154 {
85102364 4155 /* Gratuitous quote: skip it and move on. */
53e8ad3d
MS
4156 p++;
4157 continue;
4158 }
4159 break;
4160 case '!':
4161 case '=':
4162 case '*':
4163 case '/':
4164 case '%':
4165 case '^':
4166 if (p[1] == '=')
4167 *end = p + 2;
4168 else
4169 *end = p + 1;
4170 return p;
4171 case '<':
4172 case '>':
4173 case '+':
4174 case '-':
4175 case '&':
4176 case '|':
4177 if (p[0] == '-' && p[1] == '>')
4178 {
c378eb4e 4179 /* Struct pointer member operator 'operator->'. */
53e8ad3d
MS
4180 if (p[2] == '*')
4181 {
4182 *end = p + 3; /* 'operator->*' */
4183 return p;
4184 }
4185 else if (p[2] == '\\')
4186 {
4187 *end = p + 4; /* Hopefully 'operator->\*' */
4188 return p;
4189 }
4190 else
4191 {
4192 *end = p + 2; /* 'operator->' */
4193 return p;
4194 }
4195 }
4196 if (p[1] == '=' || p[1] == p[0])
4197 *end = p + 2;
4198 else
4199 *end = p + 1;
4200 return p;
4201 case '~':
4202 case ',':
c5aa993b 4203 *end = p + 1;
53e8ad3d
MS
4204 return p;
4205 case '(':
4206 if (p[1] != ')')
3e43a32a
MS
4207 error (_("`operator ()' must be specified "
4208 "without whitespace in `()'"));
c5aa993b 4209 *end = p + 2;
53e8ad3d
MS
4210 return p;
4211 case '?':
4212 if (p[1] != ':')
3e43a32a
MS
4213 error (_("`operator ?:' must be specified "
4214 "without whitespace in `?:'"));
53e8ad3d
MS
4215 *end = p + 2;
4216 return p;
4217 case '[':
4218 if (p[1] != ']')
3e43a32a
MS
4219 error (_("`operator []' must be specified "
4220 "without whitespace in `[]'"));
53e8ad3d
MS
4221 *end = p + 2;
4222 return p;
4223 default:
8a3fe4f8 4224 error (_("`operator %s' not supported"), p);
53e8ad3d
MS
4225 break;
4226 }
4227
c906108c
SS
4228 *end = "";
4229 return *end;
4230}
c906108c 4231\f
c5aa993b 4232
4a0788e0 4233/* See class declaration. */
9fdc877b 4234
4a0788e0
AB
4235info_sources_filter::info_sources_filter (match_on match_type,
4236 const char *regexp)
4237 : m_match_type (match_type),
4238 m_regexp (regexp)
9fdc877b 4239{
4a0788e0
AB
4240 /* Setup the compiled regular expression M_C_REGEXP based on M_REGEXP. */
4241 if (m_regexp != nullptr && *m_regexp != '\0')
4242 {
4243 gdb_assert (m_regexp != nullptr);
28cd9371 4244
4a0788e0
AB
4245 int cflags = REG_NOSUB;
4246#ifdef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
4247 cflags |= REG_ICASE;
4248#endif
4249 m_c_regexp.emplace (m_regexp, cflags, _("Invalid regexp"));
4250 }
4251}
28cd9371 4252
4a0788e0 4253/* See class declaration. */
9fdc877b 4254
4a0788e0
AB
4255bool
4256info_sources_filter::matches (const char *fullname) const
4257{
4258 /* Does it match regexp? */
4259 if (m_c_regexp.has_value ())
4260 {
4261 const char *to_match;
4262 std::string dirname;
4263
4264 switch (m_match_type)
4265 {
4266 case match_on::DIRNAME:
4267 dirname = ldirname (fullname);
4268 to_match = dirname.c_str ();
4269 break;
4270 case match_on::BASENAME:
4271 to_match = lbasename (fullname);
4272 break;
4273 case match_on::FULLNAME:
4274 to_match = fullname;
4275 break;
b6aeb717
TT
4276 default:
4277 gdb_assert_not_reached ("bad m_match_type");
4a0788e0
AB
4278 }
4279
4280 if (m_c_regexp->exec (to_match, 0, NULL, 0) != 0)
4281 return false;
4282 }
4283
4284 return true;
4285}
4286
4a0788e0
AB
4287/* Data structure to maintain the state used for printing the results of
4288 the 'info sources' command. */
4289
4290struct output_source_filename_data
4291{
4292 /* Create an object for displaying the results of the 'info sources'
0e350a05
AB
4293 command to UIOUT. FILTER must remain valid and unchanged for the
4294 lifetime of this object as this object retains a reference to FILTER. */
4295 output_source_filename_data (struct ui_out *uiout,
4296 const info_sources_filter &filter)
4297 : m_filter (filter),
4298 m_uiout (uiout)
4a0788e0
AB
4299 { /* Nothing. */ }
4300
4301 DISABLE_COPY_AND_ASSIGN (output_source_filename_data);
4302
4303 /* Reset enough state of this object so we can match against a new set of
4304 files. The existing regular expression is retained though. */
4305 void reset_output ()
4306 {
4307 m_first = true;
4308 m_filename_seen_cache.clear ();
4309 }
4310
0e350a05
AB
4311 /* Worker for sources_info, outputs the file name formatted for either
4312 cli or mi (based on the current_uiout). In cli mode displays
4313 FULLNAME with a comma separating this name from any previously
4314 printed name (line breaks are added at the comma). In MI mode
4315 outputs a tuple containing DISP_NAME (the files display name),
4316 FULLNAME, and EXPANDED_P (true when this file is from a fully
4317 expanded symtab, otherwise false). */
4318 void output (const char *disp_name, const char *fullname, bool expanded_p);
eca864fe 4319
f4655dee
TT
4320 /* An overload suitable for use as a callback to
4321 quick_symbol_functions::map_symbol_filenames. */
4322 void operator() (const char *filename, const char *fullname)
4323 {
0e350a05
AB
4324 /* The false here indicates that this file is from an unexpanded
4325 symtab. */
4326 output (filename, fullname, false);
f4655dee 4327 }
4a0788e0 4328
bd742128
AB
4329 /* Return true if at least one filename has been printed (after a call to
4330 output) since either this object was created, or the last call to
4331 reset_output. */
4332 bool printed_filename_p () const
4333 {
4334 return !m_first;
4335 }
4336
4a0788e0
AB
4337private:
4338
4339 /* Flag of whether we're printing the first one. */
4340 bool m_first = true;
4341
4342 /* Cache of what we've seen so far. */
4343 filename_seen_cache m_filename_seen_cache;
4344
4345 /* How source filename should be filtered. */
4346 const info_sources_filter &m_filter;
0e350a05
AB
4347
4348 /* The object to which output is sent. */
4349 struct ui_out *m_uiout;
f4655dee
TT
4350};
4351
4a0788e0
AB
4352/* See comment in class declaration above. */
4353
f4655dee 4354void
0e350a05
AB
4355output_source_filename_data::output (const char *disp_name,
4356 const char *fullname,
4357 bool expanded_p)
c94fdfd0
EZ
4358{
4359 /* Since a single source file can result in several partial symbol
4360 tables, we need to avoid printing it more than once. Note: if
4361 some of the psymtabs are read in and some are not, it gets
4362 printed both under "Source files for which symbols have been
4363 read" and "Source files for which symbols will be read in on
4364 demand". I consider this a reasonable way to deal with the
4365 situation. I'm not sure whether this can also happen for
4366 symtabs; it doesn't hurt to check. */
4367
4a0788e0 4368 /* Was NAME already seen? If so, then don't print it again. */
0e350a05 4369 if (m_filename_seen_cache.seen (fullname))
4a0788e0 4370 return;
28cd9371 4371
4a0788e0 4372 /* If the filter rejects this file then don't print it. */
0e350a05 4373 if (!m_filter.matches (fullname))
4a0788e0 4374 return;
28cd9371 4375
0e350a05
AB
4376 ui_out_emit_tuple ui_emitter (m_uiout, nullptr);
4377
28cd9371 4378 /* Print it and reset *FIRST. */
4a0788e0 4379 if (!m_first)
0e350a05 4380 m_uiout->text (", ");
4a0788e0 4381 m_first = false;
c906108c
SS
4382
4383 wrap_here ("");
0e350a05
AB
4384 if (m_uiout->is_mi_like_p ())
4385 {
4386 m_uiout->field_string ("file", disp_name, file_name_style.style ());
4387 if (fullname != nullptr)
4388 m_uiout->field_string ("fullname", fullname,
4389 file_name_style.style ());
4390 m_uiout->field_string ("debug-fully-read",
4391 (expanded_p ? "true" : "false"));
4392 }
4393 else
4394 {
4395 if (fullname == nullptr)
4396 fullname = disp_name;
4397 m_uiout->field_string ("fullname", fullname,
4398 file_name_style.style ());
4399 }
c5aa993b 4400}
c906108c 4401
4a0788e0
AB
4402/* For the 'info sources' command, what part of the file names should we be
4403 matching the user supplied regular expression against? */
4404
4405struct filename_partial_match_opts
4406{
4407 /* Only match the directory name part. */
4408 bool dirname = false;
4409
4410 /* Only match the basename part. */
4411 bool basename = false;
4412};
4413
28cd9371
PW
4414using isrc_flag_option_def
4415 = gdb::option::flag_option_def<filename_partial_match_opts>;
4416
4417static const gdb::option::option_def info_sources_option_defs[] = {
4418
4419 isrc_flag_option_def {
4420 "dirname",
4421 [] (filename_partial_match_opts *opts) { return &opts->dirname; },
4422 N_("Show only the files having a dirname matching REGEXP."),
4423 },
4424
4425 isrc_flag_option_def {
4426 "basename",
4427 [] (filename_partial_match_opts *opts) { return &opts->basename; },
4428 N_("Show only the files having a basename matching REGEXP."),
4429 },
4430
4431};
4432
4433/* Create an option_def_group for the "info sources" options, with
4434 ISRC_OPTS as context. */
4435
4436static inline gdb::option::option_def_group
4437make_info_sources_options_def_group (filename_partial_match_opts *isrc_opts)
4438{
4439 return {{info_sources_option_defs}, isrc_opts};
4440}
4441
28cd9371
PW
4442/* Completer for "info sources". */
4443
4444static void
4445info_sources_command_completer (cmd_list_element *ignore,
4446 completion_tracker &tracker,
4447 const char *text, const char *word)
4448{
4449 const auto group = make_info_sources_options_def_group (nullptr);
4450 if (gdb::option::complete_options
4451 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
4452 return;
4453}
4454
0e350a05
AB
4455/* See symtab.h. */
4456
4457void
4458info_sources_worker (struct ui_out *uiout,
1fb1ce02 4459 bool group_by_objfile,
0e350a05
AB
4460 const info_sources_filter &filter)
4461{
4462 output_source_filename_data data (uiout, filter);
4463
4464 ui_out_emit_list results_emitter (uiout, "files");
4465 gdb::optional<ui_out_emit_tuple> output_tuple;
4466 gdb::optional<ui_out_emit_list> sources_list;
4467
bd742128 4468 gdb_assert (group_by_objfile || uiout->is_mi_like_p ());
0e350a05
AB
4469
4470 for (objfile *objfile : current_program_space->objfiles ())
4471 {
1fb1ce02
AB
4472 if (group_by_objfile)
4473 {
4474 output_tuple.emplace (uiout, nullptr);
4475 uiout->field_string ("filename", objfile_name (objfile));
bd742128 4476 uiout->text (":\n");
1fb1ce02 4477 bool debug_fully_readin = !objfile->has_unexpanded_symtabs ();
bd742128 4478 if (uiout->is_mi_like_p ())
1fb1ce02 4479 {
bd742128
AB
4480 const char *debug_info_state;
4481 if (objfile_has_symbols (objfile))
4482 {
4483 if (debug_fully_readin)
4484 debug_info_state = "fully-read";
4485 else
4486 debug_info_state = "partially-read";
4487 }
1fb1ce02 4488 else
bd742128
AB
4489 debug_info_state = "none";
4490 current_uiout->field_string ("debug-info", debug_info_state);
1fb1ce02
AB
4491 }
4492 else
bd742128
AB
4493 {
4494 if (!debug_fully_readin)
4495 uiout->text ("(Full debug information has not yet been read "
4496 "for this file.)\n");
4497 if (!objfile_has_symbols (objfile))
4498 uiout->text ("(Objfile has no debug information.)\n");
4499 uiout->text ("\n");
4500 }
1fb1ce02
AB
4501 sources_list.emplace (uiout, "sources");
4502 }
4503
0e350a05
AB
4504 for (compunit_symtab *cu : objfile->compunits ())
4505 {
4506 for (symtab *s : compunit_filetabs (cu))
4507 {
4508 const char *file = symtab_to_filename_for_display (s);
4509 const char *fullname = symtab_to_fullname (s);
4510 data.output (file, fullname, true);
4511 }
4512 }
1fb1ce02
AB
4513
4514 if (group_by_objfile)
4515 {
4516 objfile->map_symbol_filenames (data, true /* need_fullname */);
bd742128
AB
4517 if (data.printed_filename_p ())
4518 uiout->text ("\n\n");
1fb1ce02
AB
4519 data.reset_output ();
4520 sources_list.reset ();
4521 output_tuple.reset ();
4522 }
0e350a05
AB
4523 }
4524
1fb1ce02
AB
4525 if (!group_by_objfile)
4526 {
1fb1ce02
AB
4527 data.reset_output ();
4528 map_symbol_filenames (data, true /*need_fullname*/);
1fb1ce02 4529 }
0e350a05
AB
4530}
4531
4a0788e0
AB
4532/* Implement the 'info sources' command. */
4533
28cd9371
PW
4534static void
4535info_sources_command (const char *args, int from_tty)
c906108c 4536{
c906108c 4537 if (!have_full_symbols () && !have_partial_symbols ())
4a0788e0 4538 error (_("No symbol table is loaded. Use the \"file\" command."));
28cd9371 4539
4a0788e0
AB
4540 filename_partial_match_opts match_opts;
4541 auto group = make_info_sources_options_def_group (&match_opts);
28cd9371
PW
4542 gdb::option::process_options
4543 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, group);
9fdc877b 4544
4a0788e0
AB
4545 if (match_opts.dirname && match_opts.basename)
4546 error (_("You cannot give both -basename and -dirname to 'info sources'."));
c906108c 4547
4a0788e0 4548 const char *regex = nullptr;
0e350a05 4549 if (args != NULL && *args != '\000')
4a0788e0 4550 regex = args;
28cd9371 4551
4a0788e0
AB
4552 if ((match_opts.dirname || match_opts.basename) && regex == nullptr)
4553 error (_("Missing REGEXP for 'info sources'."));
28cd9371 4554
4a0788e0
AB
4555 info_sources_filter::match_on match_type;
4556 if (match_opts.dirname)
4557 match_type = info_sources_filter::match_on::DIRNAME;
4558 else if (match_opts.basename)
4559 match_type = info_sources_filter::match_on::BASENAME;
28cd9371 4560 else
4a0788e0
AB
4561 match_type = info_sources_filter::match_on::FULLNAME;
4562
4563 info_sources_filter filter (match_type, regex);
bd742128 4564 info_sources_worker (current_uiout, true, filter);
c906108c
SS
4565}
4566
470c0b1c
AB
4567/* Compare FILE against all the entries of FILENAMES. If BASENAMES is
4568 true compare only lbasename of FILENAMES. */
fbd9ab74 4569
470c0b1c
AB
4570static bool
4571file_matches (const char *file, const std::vector<const char *> &filenames,
4572 bool basenames)
c906108c 4573{
470c0b1c
AB
4574 if (filenames.empty ())
4575 return true;
c906108c 4576
470c0b1c 4577 for (const char *name : filenames)
c906108c 4578 {
470c0b1c
AB
4579 name = (basenames ? lbasename (name) : name);
4580 if (compare_filenames_for_search (file, name))
4581 return true;
c906108c 4582 }
470c0b1c
AB
4583
4584 return false;
c906108c
SS
4585}
4586
f97a63c5
AB
4587/* Helper function for std::sort on symbol_search objects. Can only sort
4588 symbols, not minimal symbols. */
eca864fe 4589
b9c04fb2
TT
4590int
4591symbol_search::compare_search_syms (const symbol_search &sym_a,
4592 const symbol_search &sym_b)
434d2d4f 4593{
b52109bc
DE
4594 int c;
4595
b9c04fb2
TT
4596 c = FILENAME_CMP (symbol_symtab (sym_a.symbol)->filename,
4597 symbol_symtab (sym_b.symbol)->filename);
b52109bc
DE
4598 if (c != 0)
4599 return c;
434d2d4f 4600
b9c04fb2
TT
4601 if (sym_a.block != sym_b.block)
4602 return sym_a.block - sym_b.block;
b52109bc 4603
987012b8 4604 return strcmp (sym_a.symbol->print_name (), sym_b.symbol->print_name ());
434d2d4f
DJ
4605}
4606
12615cba
PW
4607/* Returns true if the type_name of symbol_type of SYM matches TREG.
4608 If SYM has no symbol_type or symbol_name, returns false. */
4609
4610bool
4611treg_matches_sym_type_name (const compiled_regex &treg,
4612 const struct symbol *sym)
4613{
4614 struct type *sym_type;
4615 std::string printed_sym_type_name;
4616
4617 if (symbol_lookup_debug > 1)
4618 {
4619 fprintf_unfiltered (gdb_stdlog,
4620 "treg_matches_sym_type_name\n sym %s\n",
987012b8 4621 sym->natural_name ());
12615cba
PW
4622 }
4623
4624 sym_type = SYMBOL_TYPE (sym);
4625 if (sym_type == NULL)
4626 return false;
4627
43d397ca
PW
4628 {
4629 scoped_switch_to_sym_language_if_auto l (sym);
12615cba 4630
12615cba 4631 printed_sym_type_name = type_to_string (sym_type);
43d397ca
PW
4632 }
4633
12615cba
PW
4634
4635 if (symbol_lookup_debug > 1)
4636 {
4637 fprintf_unfiltered (gdb_stdlog,
4638 " sym_type_name %s\n",
4639 printed_sym_type_name.c_str ());
4640 }
4641
4642
4643 if (printed_sym_type_name.empty ())
4644 return false;
4645
4646 return treg.exec (printed_sym_type_name.c_str (), 0, NULL, 0) == 0;
4647}
4648
f97a63c5
AB
4649/* See symtab.h. */
4650
4651bool
4652global_symbol_searcher::is_suitable_msymbol
4653 (const enum search_domain kind, const minimal_symbol *msymbol)
4654{
4655 switch (MSYMBOL_TYPE (msymbol))
4656 {
4657 case mst_data:
4658 case mst_bss:
4659 case mst_file_data:
4660 case mst_file_bss:
4661 return kind == VARIABLES_DOMAIN;
4662 case mst_text:
4663 case mst_file_text:
4664 case mst_solib_trampoline:
4665 case mst_text_gnu_ifunc:
4666 return kind == FUNCTIONS_DOMAIN;
4667 default:
4668 return false;
4669 }
4670}
4671
4672/* See symtab.h. */
4673
4674bool
4675global_symbol_searcher::expand_symtabs
4676 (objfile *objfile, const gdb::optional<compiled_regex> &preg) const
4677{
4678 enum search_domain kind = m_kind;
4679 bool found_msymbol = false;
4680
c5a9fcdf
TT
4681 auto do_file_match = [&] (const char *filename, bool basenames)
4682 {
4683 return file_matches (filename, filenames, basenames);
4684 };
4685 gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher = nullptr;
4686 if (!filenames.empty ())
4687 file_matcher = do_file_match;
4688
4d080b46 4689 objfile->expand_symtabs_matching
c5a9fcdf 4690 (file_matcher,
4d080b46
TT
4691 &lookup_name_info::match_any (),
4692 [&] (const char *symname)
4693 {
4694 return (!preg.has_value ()
4695 || preg->exec (symname, 0, NULL, 0) == 0);
4696 },
4697 NULL,
03a8ea51 4698 SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
3bfa51a7 4699 UNDEF_DOMAIN,
4d080b46 4700 kind);
f97a63c5
AB
4701
4702 /* Here, we search through the minimal symbol tables for functions and
4703 variables that match, and force their symbols to be read. This is in
4704 particular necessary for demangled variable names, which are no longer
4705 put into the partial symbol tables. The symbol will then be found
4706 during the scan of symtabs later.
4707
4708 For functions, find_pc_symtab should succeed if we have debug info for
4709 the function, for variables we have to call
4710 lookup_symbol_in_objfile_from_linkage_name to determine if the
4711 variable has debug info. If the lookup fails, set found_msymbol so
4712 that we will rescan to print any matching symbols without debug info.
4713 We only search the objfile the msymbol came from, we no longer search
4714 all objfiles. In large programs (1000s of shared libs) searching all
4715 objfiles is not worth the pain. */
4716 if (filenames.empty ()
4717 && (kind == VARIABLES_DOMAIN || kind == FUNCTIONS_DOMAIN))
4718 {
4719 for (minimal_symbol *msymbol : objfile->msymbols ())
4720 {
4721 QUIT;
4722
4723 if (msymbol->created_by_gdb)
4724 continue;
4725
4726 if (is_suitable_msymbol (kind, msymbol))
4727 {
4728 if (!preg.has_value ()
4729 || preg->exec (msymbol->natural_name (), 0,
4730 NULL, 0) == 0)
4731 {
4732 /* An important side-effect of these lookup functions is
4733 to expand the symbol table if msymbol is found, later
4734 in the process we will add matching symbols or
4735 msymbols to the results list, and that requires that
4736 the symbols tables are expanded. */
4737 if (kind == FUNCTIONS_DOMAIN
4738 ? (find_pc_compunit_symtab
4739 (MSYMBOL_VALUE_ADDRESS (objfile, msymbol))
4740 == NULL)
4741 : (lookup_symbol_in_objfile_from_linkage_name
4742 (objfile, msymbol->linkage_name (),
4743 VAR_DOMAIN)
4744 .symbol == NULL))
4745 found_msymbol = true;
4746 }
4747 }
4748 }
4749 }
4750
4751 return found_msymbol;
4752}
4753
4754/* See symtab.h. */
4755
c2512106 4756bool
f97a63c5
AB
4757global_symbol_searcher::add_matching_symbols
4758 (objfile *objfile,
4759 const gdb::optional<compiled_regex> &preg,
4760 const gdb::optional<compiled_regex> &treg,
c2512106 4761 std::set<symbol_search> *result_set) const
f97a63c5
AB
4762{
4763 enum search_domain kind = m_kind;
4764
4765 /* Add matching symbols (if not already present). */
4766 for (compunit_symtab *cust : objfile->compunits ())
4767 {
4768 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
4769
4770 for (block_enum block : { GLOBAL_BLOCK, STATIC_BLOCK })
4771 {
4772 struct block_iterator iter;
4773 struct symbol *sym;
4774 const struct block *b = BLOCKVECTOR_BLOCK (bv, block);
4775
4776 ALL_BLOCK_SYMBOLS (b, iter, sym)
4777 {
4778 struct symtab *real_symtab = symbol_symtab (sym);
4779
4780 QUIT;
4781
4782 /* Check first sole REAL_SYMTAB->FILENAME. It does
4783 not need to be a substring of symtab_to_fullname as
4784 it may contain "./" etc. */
4785 if ((file_matches (real_symtab->filename, filenames, false)
4786 || ((basenames_may_differ
4787 || file_matches (lbasename (real_symtab->filename),
4788 filenames, true))
4789 && file_matches (symtab_to_fullname (real_symtab),
4790 filenames, false)))
4791 && ((!preg.has_value ()
4792 || preg->exec (sym->natural_name (), 0,
4793 NULL, 0) == 0)
4794 && ((kind == VARIABLES_DOMAIN
4795 && SYMBOL_CLASS (sym) != LOC_TYPEDEF
4796 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
4797 && SYMBOL_CLASS (sym) != LOC_BLOCK
4798 /* LOC_CONST can be used for more than
4799 just enums, e.g., c++ static const
4800 members. We only want to skip enums
4801 here. */
4802 && !(SYMBOL_CLASS (sym) == LOC_CONST
78134374 4803 && (SYMBOL_TYPE (sym)->code ()
f97a63c5
AB
4804 == TYPE_CODE_ENUM))
4805 && (!treg.has_value ()
4806 || treg_matches_sym_type_name (*treg, sym)))
4807 || (kind == FUNCTIONS_DOMAIN
4808 && SYMBOL_CLASS (sym) == LOC_BLOCK
4809 && (!treg.has_value ()
4810 || treg_matches_sym_type_name (*treg,
4811 sym)))
4812 || (kind == TYPES_DOMAIN
4813 && SYMBOL_CLASS (sym) == LOC_TYPEDEF
4814 && SYMBOL_DOMAIN (sym) != MODULE_DOMAIN)
4815 || (kind == MODULES_DOMAIN
4816 && SYMBOL_DOMAIN (sym) == MODULE_DOMAIN
4817 && SYMBOL_LINE (sym) != 0))))
4818 {
c2512106
AB
4819 if (result_set->size () < m_max_search_results)
4820 {
4821 /* Match, insert if not already in the results. */
4822 symbol_search ss (block, sym);
4823 if (result_set->find (ss) == result_set->end ())
4824 result_set->insert (ss);
4825 }
4826 else
4827 return false;
f97a63c5
AB
4828 }
4829 }
4830 }
4831 }
c2512106
AB
4832
4833 return true;
f97a63c5
AB
4834}
4835
4836/* See symtab.h. */
4837
c2512106 4838bool
f97a63c5
AB
4839global_symbol_searcher::add_matching_msymbols
4840 (objfile *objfile, const gdb::optional<compiled_regex> &preg,
4841 std::vector<symbol_search> *results) const
4842{
4843 enum search_domain kind = m_kind;
4844
4845 for (minimal_symbol *msymbol : objfile->msymbols ())
4846 {
4847 QUIT;
4848
4849 if (msymbol->created_by_gdb)
4850 continue;
4851
4852 if (is_suitable_msymbol (kind, msymbol))
4853 {
4854 if (!preg.has_value ()
4855 || preg->exec (msymbol->natural_name (), 0,
4856 NULL, 0) == 0)
4857 {
4858 /* For functions we can do a quick check of whether the
4859 symbol might be found via find_pc_symtab. */
4860 if (kind != FUNCTIONS_DOMAIN
4861 || (find_pc_compunit_symtab
4862 (MSYMBOL_VALUE_ADDRESS (objfile, msymbol))
4863 == NULL))
4864 {
4865 if (lookup_symbol_in_objfile_from_linkage_name
4866 (objfile, msymbol->linkage_name (),
4867 VAR_DOMAIN).symbol == NULL)
4868 {
4869 /* Matching msymbol, add it to the results list. */
c2512106
AB
4870 if (results->size () < m_max_search_results)
4871 results->emplace_back (GLOBAL_BLOCK, msymbol, objfile);
4872 else
4873 return false;
f97a63c5
AB
4874 }
4875 }
4876 }
4877 }
4878 }
12615cba 4879
c2512106 4880 return true;
434d2d4f 4881}
5bd98722 4882
470c0b1c 4883/* See symtab.h. */
c378eb4e 4884
b9c04fb2 4885std::vector<symbol_search>
470c0b1c 4886global_symbol_searcher::search () const
c906108c 4887{
2d7cc5c7 4888 gdb::optional<compiled_regex> preg;
12615cba 4889 gdb::optional<compiled_regex> treg;
c906108c 4890
470c0b1c 4891 gdb_assert (m_kind != ALL_DOMAIN);
e8930875 4892
470c0b1c 4893 if (m_symbol_name_regexp != NULL)
c906108c 4894 {
470c0b1c
AB
4895 const char *symbol_name_regexp = m_symbol_name_regexp;
4896
c906108c 4897 /* Make sure spacing is right for C++ operators.
dda83cd7
SM
4898 This is just a courtesy to make the matching less sensitive
4899 to how many spaces the user leaves between 'operator'
4900 and <TYPENAME> or <OPERATOR>. */
96142726 4901 const char *opend;
470c0b1c 4902 const char *opname = operator_chars (symbol_name_regexp, &opend);
433759f7 4903
c906108c 4904 if (*opname)
c5aa993b 4905 {
3e43a32a 4906 int fix = -1; /* -1 means ok; otherwise number of
dda83cd7 4907 spaces needed. */
433759f7 4908
c5aa993b
JM
4909 if (isalpha (*opname) || *opname == '_' || *opname == '$')
4910 {
c378eb4e 4911 /* There should 1 space between 'operator' and 'TYPENAME'. */
c5aa993b
JM
4912 if (opname[-1] != ' ' || opname[-2] == ' ')
4913 fix = 1;
4914 }
4915 else
4916 {
c378eb4e 4917 /* There should 0 spaces between 'operator' and 'OPERATOR'. */
c5aa993b
JM
4918 if (opname[-1] == ' ')
4919 fix = 0;
4920 }
c378eb4e 4921 /* If wrong number of spaces, fix it. */
c5aa993b
JM
4922 if (fix >= 0)
4923 {
045f55a6 4924 char *tmp = (char *) alloca (8 + fix + strlen (opname) + 1);
433759f7 4925
c5aa993b 4926 sprintf (tmp, "operator%.*s%s", fix, " ", opname);
470c0b1c 4927 symbol_name_regexp = tmp;
c5aa993b
JM
4928 }
4929 }
4930
2d7cc5c7
PA
4931 int cflags = REG_NOSUB | (case_sensitivity == case_sensitive_off
4932 ? REG_ICASE : 0);
470c0b1c
AB
4933 preg.emplace (symbol_name_regexp, cflags,
4934 _("Invalid regexp"));
c906108c
SS
4935 }
4936
470c0b1c 4937 if (m_symbol_type_regexp != NULL)
12615cba
PW
4938 {
4939 int cflags = REG_NOSUB | (case_sensitivity == case_sensitive_off
4940 ? REG_ICASE : 0);
470c0b1c
AB
4941 treg.emplace (m_symbol_type_regexp, cflags,
4942 _("Invalid regexp"));
12615cba
PW
4943 }
4944
f97a63c5 4945 bool found_msymbol = false;
c2512106 4946 std::set<symbol_search> result_set;
2030c079 4947 for (objfile *objfile : current_program_space->objfiles ())
d8aeb77f 4948 {
f97a63c5
AB
4949 /* Expand symtabs within objfile that possibly contain matching
4950 symbols. */
4951 found_msymbol |= expand_symtabs (objfile, preg);
4952
c2512106
AB
4953 /* Find matching symbols within OBJFILE and add them in to the
4954 RESULT_SET set. Use a set here so that we can easily detect
4955 duplicates as we go, and can therefore track how many unique
4956 matches we have found so far. */
4957 if (!add_matching_symbols (objfile, preg, treg, &result_set))
4958 break;
d8aeb77f 4959 }
c906108c 4960
c2512106
AB
4961 /* Convert the result set into a sorted result list, as std::set is
4962 defined to be sorted then no explicit call to std::sort is needed. */
4963 std::vector<symbol_search> result (result_set.begin (), result_set.end ());
b52109bc 4964
470c0b1c 4965 /* If there are no debug symbols, then add matching minsyms. But if the
f97a63c5
AB
4966 user wants to see symbols matching a type regexp, then never give a
4967 minimal symbol, as we assume that a minimal symbol does not have a
4968 type. */
4969 if ((found_msymbol || (filenames.empty () && m_kind == VARIABLES_DOMAIN))
470c0b1c 4970 && !m_exclude_minsyms
a8462bbf 4971 && !treg.has_value ())
c906108c 4972 {
f97a63c5 4973 gdb_assert (m_kind == VARIABLES_DOMAIN || m_kind == FUNCTIONS_DOMAIN);
2030c079 4974 for (objfile *objfile : current_program_space->objfiles ())
c2512106
AB
4975 if (!add_matching_msymbols (objfile, preg, &result))
4976 break;
c906108c
SS
4977 }
4978
b9c04fb2 4979 return result;
c906108c
SS
4980}
4981
5f512a7d 4982/* See symtab.h. */
c378eb4e 4983
5f512a7d
AB
4984std::string
4985symbol_to_info_string (struct symbol *sym, int block,
4986 enum search_domain kind)
c906108c 4987{
5f512a7d 4988 std::string str;
05cba821 4989
5f512a7d 4990 gdb_assert (block == GLOBAL_BLOCK || block == STATIC_BLOCK);
b744723f 4991
176620f1 4992 if (kind != TYPES_DOMAIN && block == STATIC_BLOCK)
5f512a7d 4993 str += "static ";
c5aa993b 4994
c378eb4e 4995 /* Typedef that is not a C++ class. */
176620f1
EZ
4996 if (kind == TYPES_DOMAIN
4997 && SYMBOL_DOMAIN (sym) != STRUCT_DOMAIN)
eb86c5e2 4998 {
5f512a7d
AB
4999 string_file tmp_stream;
5000
eb86c5e2
AB
5001 /* FIXME: For C (and C++) we end up with a difference in output here
5002 between how a typedef is printed, and non-typedefs are printed.
5003 The TYPEDEF_PRINT code places a ";" at the end in an attempt to
5004 appear C-like, while TYPE_PRINT doesn't.
5005
5006 For the struct printing case below, things are worse, we force
5007 printing of the ";" in this function, which is going to be wrong
5008 for languages that don't require a ";" between statements. */
78134374 5009 if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_TYPEDEF)
5f512a7d 5010 typedef_print (SYMBOL_TYPE (sym), sym, &tmp_stream);
eb86c5e2 5011 else
5f512a7d
AB
5012 type_print (SYMBOL_TYPE (sym), "", &tmp_stream, -1);
5013 str += tmp_stream.string ();
eb86c5e2 5014 }
c378eb4e 5015 /* variable, func, or typedef-that-is-c++-class. */
d50bd42b
DE
5016 else if (kind < TYPES_DOMAIN
5017 || (kind == TYPES_DOMAIN
5018 && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN))
c906108c 5019 {
5f512a7d
AB
5020 string_file tmp_stream;
5021
c906108c 5022 type_print (SYMBOL_TYPE (sym),
c5aa993b 5023 (SYMBOL_CLASS (sym) == LOC_TYPEDEF
987012b8 5024 ? "" : sym->print_name ()),
5f512a7d 5025 &tmp_stream, 0);
c906108c 5026
5f512a7d
AB
5027 str += tmp_stream.string ();
5028 str += ";";
c906108c 5029 }
59c35742
AB
5030 /* Printing of modules is currently done here, maybe at some future
5031 point we might want a language specific method to print the module
5032 symbol so that we can customise the output more. */
5033 else if (kind == MODULES_DOMAIN)
5f512a7d
AB
5034 str += sym->print_name ();
5035
5036 return str;
5037}
5038
5039/* Helper function for symbol info commands, for example 'info functions',
5040 'info variables', etc. KIND is the kind of symbol we searched for, and
5041 BLOCK is the type of block the symbols was found in, either GLOBAL_BLOCK
5042 or STATIC_BLOCK. SYM is the symbol we found. If LAST is not NULL,
5043 print file and line number information for the symbol as well. Skip
5044 printing the filename if it matches LAST. */
5045
5046static void
5047print_symbol_info (enum search_domain kind,
5048 struct symbol *sym,
5049 int block, const char *last)
5050{
5051 scoped_switch_to_sym_language_if_auto l (sym);
5052 struct symtab *s = symbol_symtab (sym);
5053
5054 if (last != NULL)
5055 {
5056 const char *s_filename = symtab_to_filename_for_display (s);
5057
5058 if (filename_cmp (last, s_filename) != 0)
5059 {
5060 printf_filtered (_("\nFile %ps:\n"),
5061 styled_string (file_name_style.style (),
5062 s_filename));
5063 }
5064
5065 if (SYMBOL_LINE (sym) != 0)
5066 printf_filtered ("%d:\t", SYMBOL_LINE (sym));
5067 else
5068 puts_filtered ("\t");
5069 }
5070
5071 std::string str = symbol_to_info_string (sym, block, kind);
5072 printf_filtered ("%s\n", str.c_str ());
c906108c
SS
5073}
5074
5075/* This help function for symtab_symbol_info() prints information
c378eb4e
MS
5076 for non-debugging symbols to gdb_stdout. */
5077
c906108c 5078static void
7c7b6655 5079print_msymbol_info (struct bound_minimal_symbol msymbol)
c906108c 5080{
08feed99 5081 struct gdbarch *gdbarch = msymbol.objfile->arch ();
3ac4495a
MS
5082 char *tmp;
5083
d80b854b 5084 if (gdbarch_addr_bit (gdbarch) <= 32)
77e371c0 5085 tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol)
bb599908
PH
5086 & (CORE_ADDR) 0xffffffff,
5087 8);
3ac4495a 5088 else
77e371c0 5089 tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol),
bb599908 5090 16);
6a831f06
PA
5091
5092 ui_file_style sym_style = (msymbol.minsym->text_p ()
5093 ? function_name_style.style ()
5094 : ui_file_style ());
5095
5096 printf_filtered (_("%ps %ps\n"),
5097 styled_string (address_style.style (), tmp),
c9d95fa3 5098 styled_string (sym_style, msymbol.minsym->print_name ()));
c906108c
SS
5099}
5100
5101/* This is the guts of the commands "info functions", "info types", and
c378eb4e 5102 "info variables". It calls search_symbols to find all matches and then
c906108c 5103 print_[m]symbol_info to print out some useful information about the
c378eb4e
MS
5104 matches. */
5105
c906108c 5106static void
4acfdd20 5107symtab_symbol_info (bool quiet, bool exclude_minsyms,
12615cba
PW
5108 const char *regexp, enum search_domain kind,
5109 const char *t_regexp, int from_tty)
c906108c 5110{
bc043ef3 5111 static const char * const classnames[] =
59c35742 5112 {"variable", "function", "type", "module"};
c7dcbf88 5113 const char *last_filename = "";
c906108c
SS
5114 int first = 1;
5115
59c35742 5116 gdb_assert (kind != ALL_DOMAIN);
e8930875 5117
b16507e0
AB
5118 if (regexp != nullptr && *regexp == '\0')
5119 regexp = nullptr;
5120
470c0b1c
AB
5121 global_symbol_searcher spec (kind, regexp);
5122 spec.set_symbol_type_regexp (t_regexp);
5123 spec.set_exclude_minsyms (exclude_minsyms);
5124 std::vector<symbol_search> symbols = spec.search ();
c906108c 5125
12615cba
PW
5126 if (!quiet)
5127 {
5128 if (regexp != NULL)
5129 {
5130 if (t_regexp != NULL)
5131 printf_filtered
5132 (_("All %ss matching regular expression \"%s\""
0c95f9ed 5133 " with type matching regular expression \"%s\":\n"),
12615cba
PW
5134 classnames[kind], regexp, t_regexp);
5135 else
5136 printf_filtered (_("All %ss matching regular expression \"%s\":\n"),
5137 classnames[kind], regexp);
5138 }
5139 else
5140 {
5141 if (t_regexp != NULL)
5142 printf_filtered
5143 (_("All defined %ss"
0c95f9ed 5144 " with type matching regular expression \"%s\" :\n"),
12615cba
PW
5145 classnames[kind], t_regexp);
5146 else
5147 printf_filtered (_("All defined %ss:\n"), classnames[kind]);
5148 }
5149 }
c906108c 5150
b9c04fb2 5151 for (const symbol_search &p : symbols)
c906108c
SS
5152 {
5153 QUIT;
5154
b9c04fb2 5155 if (p.msymbol.minsym != NULL)
c5aa993b
JM
5156 {
5157 if (first)
5158 {
12615cba
PW
5159 if (!quiet)
5160 printf_filtered (_("\nNon-debugging symbols:\n"));
c5aa993b
JM
5161 first = 0;
5162 }
b9c04fb2 5163 print_msymbol_info (p.msymbol);
c5aa993b 5164 }
c906108c 5165 else
c5aa993b
JM
5166 {
5167 print_symbol_info (kind,
b9c04fb2
TT
5168 p.symbol,
5169 p.block,
c5aa993b 5170 last_filename);
d01060f0 5171 last_filename
b9c04fb2 5172 = symtab_to_filename_for_display (symbol_symtab (p.symbol));
c5aa993b 5173 }
c906108c 5174 }
c906108c
SS
5175}
5176
4acfdd20
AB
5177/* Structure to hold the values of the options used by the 'info variables'
5178 and 'info functions' commands. These correspond to the -q, -t, and -n
5179 options. */
5180
095252be 5181struct info_vars_funcs_options
4acfdd20 5182{
491144b5
CB
5183 bool quiet = false;
5184 bool exclude_minsyms = false;
e0700ba4 5185 std::string type_regexp;
4acfdd20
AB
5186};
5187
5188/* The options used by the 'info variables' and 'info functions'
5189 commands. */
5190
095252be
AT
5191static const gdb::option::option_def info_vars_funcs_options_defs[] = {
5192 gdb::option::boolean_option_def<info_vars_funcs_options> {
4acfdd20 5193 "q",
095252be 5194 [] (info_vars_funcs_options *opt) { return &opt->quiet; },
4acfdd20
AB
5195 nullptr, /* show_cmd_cb */
5196 nullptr /* set_doc */
5197 },
5198
095252be 5199 gdb::option::boolean_option_def<info_vars_funcs_options> {
4acfdd20 5200 "n",
095252be 5201 [] (info_vars_funcs_options *opt) { return &opt->exclude_minsyms; },
4acfdd20
AB
5202 nullptr, /* show_cmd_cb */
5203 nullptr /* set_doc */
5204 },
5205
095252be 5206 gdb::option::string_option_def<info_vars_funcs_options> {
4acfdd20 5207 "t",
e0700ba4 5208 [] (info_vars_funcs_options *opt) { return &opt->type_regexp; },
4acfdd20
AB
5209 nullptr, /* show_cmd_cb */
5210 nullptr /* set_doc */
5211 }
5212};
5213
5214/* Returns the option group used by 'info variables' and 'info
5215 functions'. */
5216
5217static gdb::option::option_def_group
095252be 5218make_info_vars_funcs_options_def_group (info_vars_funcs_options *opts)
4acfdd20 5219{
095252be 5220 return {{info_vars_funcs_options_defs}, opts};
4acfdd20
AB
5221}
5222
5223/* Command completer for 'info variables' and 'info functions'. */
5224
5225static void
095252be
AT
5226info_vars_funcs_command_completer (struct cmd_list_element *ignore,
5227 completion_tracker &tracker,
5228 const char *text, const char * /* word */)
4acfdd20
AB
5229{
5230 const auto group
095252be 5231 = make_info_vars_funcs_options_def_group (nullptr);
4acfdd20
AB
5232 if (gdb::option::complete_options
5233 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
5234 return;
5235
5236 const char *word = advance_to_expression_complete_word_point (tracker, text);
5237 symbol_completer (ignore, tracker, text, word);
5238}
5239
b16507e0
AB
5240/* Implement the 'info variables' command. */
5241
0b39b52e 5242static void
12615cba 5243info_variables_command (const char *args, int from_tty)
0b39b52e 5244{
095252be
AT
5245 info_vars_funcs_options opts;
5246 auto grp = make_info_vars_funcs_options_def_group (&opts);
4acfdd20
AB
5247 gdb::option::process_options
5248 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
5249 if (args != nullptr && *args == '\0')
5250 args = nullptr;
b16507e0 5251
e0700ba4
SM
5252 symtab_symbol_info
5253 (opts.quiet, opts.exclude_minsyms, args, VARIABLES_DOMAIN,
5254 opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
5255 from_tty);
0b39b52e
TT
5256}
5257
b16507e0 5258/* Implement the 'info functions' command. */
12615cba 5259
c906108c 5260static void
12615cba 5261info_functions_command (const char *args, int from_tty)
c906108c 5262{
095252be
AT
5263 info_vars_funcs_options opts;
5264
5265 auto grp = make_info_vars_funcs_options_def_group (&opts);
4acfdd20
AB
5266 gdb::option::process_options
5267 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
5268 if (args != nullptr && *args == '\0')
5269 args = nullptr;
b16507e0 5270
e0700ba4
SM
5271 symtab_symbol_info
5272 (opts.quiet, opts.exclude_minsyms, args, FUNCTIONS_DOMAIN,
5273 opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
5274 from_tty);
c906108c
SS
5275}
5276
a8eab7c6
AB
5277/* Holds the -q option for the 'info types' command. */
5278
5279struct info_types_options
5280{
491144b5 5281 bool quiet = false;
a8eab7c6
AB
5282};
5283
5284/* The options used by the 'info types' command. */
5285
5286static const gdb::option::option_def info_types_options_defs[] = {
5287 gdb::option::boolean_option_def<info_types_options> {
5288 "q",
5289 [] (info_types_options *opt) { return &opt->quiet; },
5290 nullptr, /* show_cmd_cb */
5291 nullptr /* set_doc */
5292 }
5293};
5294
5295/* Returns the option group used by 'info types'. */
5296
5297static gdb::option::option_def_group
5298make_info_types_options_def_group (info_types_options *opts)
5299{
5300 return {{info_types_options_defs}, opts};
5301}
5302
5303/* Implement the 'info types' command. */
357e46e7 5304
c906108c 5305static void
a8eab7c6 5306info_types_command (const char *args, int from_tty)
c906108c 5307{
a8eab7c6
AB
5308 info_types_options opts;
5309
5310 auto grp = make_info_types_options_def_group (&opts);
5311 gdb::option::process_options
5312 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
5313 if (args != nullptr && *args == '\0')
5314 args = nullptr;
4acfdd20 5315 symtab_symbol_info (opts.quiet, false, args, TYPES_DOMAIN, NULL, from_tty);
a8eab7c6
AB
5316}
5317
5318/* Command completer for 'info types' command. */
5319
5320static void
5321info_types_command_completer (struct cmd_list_element *ignore,
5322 completion_tracker &tracker,
5323 const char *text, const char * /* word */)
5324{
5325 const auto group
5326 = make_info_types_options_def_group (nullptr);
5327 if (gdb::option::complete_options
5328 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
5329 return;
5330
5331 const char *word = advance_to_expression_complete_word_point (tracker, text);
5332 symbol_completer (ignore, tracker, text, word);
c906108c
SS
5333}
5334
59c35742
AB
5335/* Implement the 'info modules' command. */
5336
5337static void
5338info_modules_command (const char *args, int from_tty)
5339{
5340 info_types_options opts;
5341
5342 auto grp = make_info_types_options_def_group (&opts);
5343 gdb::option::process_options
5344 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
5345 if (args != nullptr && *args == '\0')
5346 args = nullptr;
5347 symtab_symbol_info (opts.quiet, true, args, MODULES_DOMAIN, NULL,
5348 from_tty);
5349}
5350
c906108c 5351static void
0b39b52e 5352rbreak_command (const char *regexp, int from_tty)
c906108c 5353{
c80049d3 5354 std::string string;
470c0b1c 5355 const char *file_name = nullptr;
c906108c 5356
470c0b1c 5357 if (regexp != nullptr)
8bd10a10 5358 {
0b39b52e 5359 const char *colon = strchr (regexp, ':');
433759f7 5360
2c074f49
HD
5361 /* Ignore the colon if it is part of a Windows drive. */
5362 if (HAS_DRIVE_SPEC (regexp)
5363 && (regexp[2] == '/' || regexp[2] == '\\'))
5364 colon = strchr (STRIP_DRIVE_SPEC (regexp), ':');
5365
8bd10a10
CM
5366 if (colon && *(colon + 1) != ':')
5367 {
5368 int colon_index;
96142726 5369 char *local_name;
8bd10a10
CM
5370
5371 colon_index = colon - regexp;
224c3ddb 5372 local_name = (char *) alloca (colon_index + 1);
96142726
TT
5373 memcpy (local_name, regexp, colon_index);
5374 local_name[colon_index--] = 0;
5375 while (isspace (local_name[colon_index]))
5376 local_name[colon_index--] = 0;
5377 file_name = local_name;
529480d0 5378 regexp = skip_spaces (colon + 1);
8bd10a10
CM
5379 }
5380 }
5381
470c0b1c
AB
5382 global_symbol_searcher spec (FUNCTIONS_DOMAIN, regexp);
5383 if (file_name != nullptr)
5384 spec.filenames.push_back (file_name);
5385 std::vector<symbol_search> symbols = spec.search ();
c906108c 5386
c80049d3 5387 scoped_rbreak_breakpoints finalize;
b9c04fb2 5388 for (const symbol_search &p : symbols)
c906108c 5389 {
b9c04fb2 5390 if (p.msymbol.minsym == NULL)
c5aa993b 5391 {
b9c04fb2 5392 struct symtab *symtab = symbol_symtab (p.symbol);
d01060f0 5393 const char *fullname = symtab_to_fullname (symtab);
05cba821 5394
c80049d3 5395 string = string_printf ("%s:'%s'", fullname,
987012b8 5396 p.symbol->linkage_name ());
c80049d3 5397 break_command (&string[0], from_tty);
c7dcbf88 5398 print_symbol_info (FUNCTIONS_DOMAIN, p.symbol, p.block, NULL);
c5aa993b 5399 }
c906108c 5400 else
c5aa993b 5401 {
c80049d3 5402 string = string_printf ("'%s'",
c9d95fa3 5403 p.msymbol.minsym->linkage_name ());
6214f497 5404
c80049d3 5405 break_command (&string[0], from_tty);
c5aa993b 5406 printf_filtered ("<function, no debug info> %s;\n",
c9d95fa3 5407 p.msymbol.minsym->print_name ());
c5aa993b 5408 }
c906108c 5409 }
c906108c 5410}
c906108c 5411\f
c5aa993b 5412
c62446b1 5413/* Evaluate if SYMNAME matches LOOKUP_NAME. */
1976171a
JK
5414
5415static int
c62446b1 5416compare_symbol_name (const char *symbol_name, language symbol_language,
b5ec771e 5417 const lookup_name_info &lookup_name,
b5ec771e
PA
5418 completion_match_result &match_res)
5419{
d4c2a405 5420 const language_defn *lang = language_def (symbol_language);
1976171a 5421
b5ec771e 5422 symbol_name_matcher_ftype *name_match
c9debfb9 5423 = lang->get_symbol_name_matcher (lookup_name);
1976171a 5424
a207cff2 5425 return name_match (symbol_name, lookup_name, &match_res);
1976171a
JK
5426}
5427
b5ec771e 5428/* See symtab.h. */
c906108c 5429
e08bd6c5 5430bool
eb3ff9a5 5431completion_list_add_name (completion_tracker &tracker,
b5ec771e 5432 language symbol_language,
eb3ff9a5 5433 const char *symname,
b5ec771e 5434 const lookup_name_info &lookup_name,
0d5cff50 5435 const char *text, const char *word)
c906108c 5436{
b5ec771e
PA
5437 completion_match_result &match_res
5438 = tracker.reset_completion_match_result ();
5439
c378eb4e 5440 /* Clip symbols that cannot match. */
c62446b1 5441 if (!compare_symbol_name (symname, symbol_language, lookup_name, match_res))
e08bd6c5 5442 return false;
c906108c 5443
b5ec771e
PA
5444 /* Refresh SYMNAME from the match string. It's potentially
5445 different depending on language. (E.g., on Ada, the match may be
5446 the encoded symbol name wrapped in "<>"). */
5447 symname = match_res.match.match ();
5448 gdb_assert (symname != NULL);
5449
c906108c 5450 /* We have a match for a completion, so add SYMNAME to the current list
c378eb4e 5451 of matches. Note that the name is moved to freshly malloc'd space. */
c906108c
SS
5452
5453 {
60a20c19
PA
5454 gdb::unique_xmalloc_ptr<char> completion
5455 = make_completion_match_str (symname, text, word);
ef0b411a 5456
a207cff2
PA
5457 /* Here we pass the match-for-lcd object to add_completion. Some
5458 languages match the user text against substrings of symbol
5459 names in some cases. E.g., in C++, "b push_ba" completes to
5460 "std::vector::push_back", "std::string::push_back", etc., and
5461 in this case we want the completion lowest common denominator
5462 to be "push_back" instead of "std::". */
5463 tracker.add_completion (std::move (completion),
a22ecf70 5464 &match_res.match_for_lcd, text, word);
c906108c 5465 }
e08bd6c5
PA
5466
5467 return true;
c906108c
SS
5468}
5469
6da67eb1
PA
5470/* completion_list_add_name wrapper for struct symbol. */
5471
5472static void
eb3ff9a5
PA
5473completion_list_add_symbol (completion_tracker &tracker,
5474 symbol *sym,
b5ec771e 5475 const lookup_name_info &lookup_name,
6da67eb1
PA
5476 const char *text, const char *word)
5477{
e08bd6c5
PA
5478 if (!completion_list_add_name (tracker, sym->language (),
5479 sym->natural_name (),
5480 lookup_name, text, word))
5481 return;
19a2740f
AB
5482
5483 /* C++ function symbols include the parameters within both the msymbol
5484 name and the symbol name. The problem is that the msymbol name will
5485 describe the parameters in the most basic way, with typedefs stripped
5486 out, while the symbol name will represent the types as they appear in
5487 the program. This means we will see duplicate entries in the
5488 completion tracker. The following converts the symbol name back to
5489 the msymbol name and removes the msymbol name from the completion
5490 tracker. */
5491 if (sym->language () == language_cplus
5492 && SYMBOL_DOMAIN (sym) == VAR_DOMAIN
5493 && SYMBOL_CLASS (sym) == LOC_BLOCK)
5494 {
5495 /* The call to canonicalize returns the empty string if the input
5496 string is already in canonical form, thanks to this we don't
5497 remove the symbol we just added above. */
596dc4ad 5498 gdb::unique_xmalloc_ptr<char> str
19a2740f 5499 = cp_canonicalize_string_no_typedefs (sym->natural_name ());
596dc4ad
TT
5500 if (str != nullptr)
5501 tracker.remove_completion (str.get ());
19a2740f 5502 }
6da67eb1
PA
5503}
5504
5505/* completion_list_add_name wrapper for struct minimal_symbol. */
5506
5507static void
eb3ff9a5
PA
5508completion_list_add_msymbol (completion_tracker &tracker,
5509 minimal_symbol *sym,
b5ec771e 5510 const lookup_name_info &lookup_name,
6da67eb1
PA
5511 const char *text, const char *word)
5512{
c1b5c1eb 5513 completion_list_add_name (tracker, sym->language (),
c9d95fa3 5514 sym->natural_name (),
1b026119 5515 lookup_name, text, word);
6da67eb1
PA
5516}
5517
b5ec771e 5518
69636828
AF
5519/* ObjC: In case we are completing on a selector, look as the msymbol
5520 again and feed all the selectors into the mill. */
5521
5522static void
eb3ff9a5
PA
5523completion_list_objc_symbol (completion_tracker &tracker,
5524 struct minimal_symbol *msymbol,
b5ec771e 5525 const lookup_name_info &lookup_name,
0d5cff50 5526 const char *text, const char *word)
69636828
AF
5527{
5528 static char *tmp = NULL;
5529 static unsigned int tmplen = 0;
9af17804 5530
0d5cff50 5531 const char *method, *category, *selector;
69636828 5532 char *tmp2 = NULL;
9af17804 5533
c9d95fa3 5534 method = msymbol->natural_name ();
69636828
AF
5535
5536 /* Is it a method? */
5537 if ((method[0] != '-') && (method[0] != '+'))
5538 return;
5539
1b026119 5540 if (text[0] == '[')
69636828 5541 /* Complete on shortened method method. */
b5ec771e
PA
5542 completion_list_add_name (tracker, language_objc,
5543 method + 1,
5544 lookup_name,
1b026119 5545 text, word);
9af17804 5546
69636828
AF
5547 while ((strlen (method) + 1) >= tmplen)
5548 {
5549 if (tmplen == 0)
5550 tmplen = 1024;
5551 else
5552 tmplen *= 2;
224c3ddb 5553 tmp = (char *) xrealloc (tmp, tmplen);
69636828
AF
5554 }
5555 selector = strchr (method, ' ');
5556 if (selector != NULL)
5557 selector++;
9af17804 5558
69636828 5559 category = strchr (method, '(');
9af17804 5560
69636828
AF
5561 if ((category != NULL) && (selector != NULL))
5562 {
5563 memcpy (tmp, method, (category - method));
5564 tmp[category - method] = ' ';
5565 memcpy (tmp + (category - method) + 1, selector, strlen (selector) + 1);
b5ec771e 5566 completion_list_add_name (tracker, language_objc, tmp,
1b026119
PA
5567 lookup_name, text, word);
5568 if (text[0] == '[')
b5ec771e 5569 completion_list_add_name (tracker, language_objc, tmp + 1,
1b026119 5570 lookup_name, text, word);
69636828 5571 }
9af17804 5572
69636828
AF
5573 if (selector != NULL)
5574 {
5575 /* Complete on selector only. */
5576 strcpy (tmp, selector);
5577 tmp2 = strchr (tmp, ']');
5578 if (tmp2 != NULL)
5579 *tmp2 = '\0';
9af17804 5580
b5ec771e 5581 completion_list_add_name (tracker, language_objc, tmp,
1b026119 5582 lookup_name, text, word);
69636828
AF
5583 }
5584}
5585
5586/* Break the non-quoted text based on the characters which are in
c378eb4e 5587 symbols. FIXME: This should probably be language-specific. */
69636828 5588
6f937416
PA
5589static const char *
5590language_search_unquoted_string (const char *text, const char *p)
69636828
AF
5591{
5592 for (; p > text; --p)
5593 {
5594 if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
5595 continue;
5596 else
5597 {
5598 if ((current_language->la_language == language_objc))
5599 {
c378eb4e 5600 if (p[-1] == ':') /* Might be part of a method name. */
69636828
AF
5601 continue;
5602 else if (p[-1] == '[' && (p[-2] == '-' || p[-2] == '+'))
c378eb4e 5603 p -= 2; /* Beginning of a method name. */
69636828 5604 else if (p[-1] == ' ' || p[-1] == '(' || p[-1] == ')')
c378eb4e 5605 { /* Might be part of a method name. */
6f937416 5606 const char *t = p;
69636828
AF
5607
5608 /* Seeing a ' ' or a '(' is not conclusive evidence
5609 that we are in the middle of a method name. However,
5610 finding "-[" or "+[" should be pretty un-ambiguous.
5611 Unfortunately we have to find it now to decide. */
5612
5613 while (t > text)
5614 if (isalnum (t[-1]) || t[-1] == '_' ||
5615 t[-1] == ' ' || t[-1] == ':' ||
5616 t[-1] == '(' || t[-1] == ')')
5617 --t;
5618 else
5619 break;
5620
5621 if (t[-1] == '[' && (t[-2] == '-' || t[-2] == '+'))
c378eb4e
MS
5622 p = t - 2; /* Method name detected. */
5623 /* Else we leave with p unchanged. */
69636828
AF
5624 }
5625 }
5626 break;
5627 }
5628 }
5629 return p;
5630}
5631
edb3359d 5632static void
eb3ff9a5
PA
5633completion_list_add_fields (completion_tracker &tracker,
5634 struct symbol *sym,
b5ec771e 5635 const lookup_name_info &lookup_name,
eb3ff9a5 5636 const char *text, const char *word)
edb3359d
DJ
5637{
5638 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5639 {
5640 struct type *t = SYMBOL_TYPE (sym);
78134374 5641 enum type_code c = t->code ();
edb3359d
DJ
5642 int j;
5643
5644 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
1f704f76 5645 for (j = TYPE_N_BASECLASSES (t); j < t->num_fields (); j++)
33d16dd9 5646 if (t->field (j).name ())
c1b5c1eb 5647 completion_list_add_name (tracker, sym->language (),
33d16dd9 5648 t->field (j).name (),
1b026119 5649 lookup_name, text, word);
edb3359d
DJ
5650 }
5651}
5652
f9d67a22
PA
5653/* See symtab.h. */
5654
5655bool
5656symbol_is_function_or_method (symbol *sym)
5657{
78134374 5658 switch (SYMBOL_TYPE (sym)->code ())
f9d67a22
PA
5659 {
5660 case TYPE_CODE_FUNC:
5661 case TYPE_CODE_METHOD:
5662 return true;
5663 default:
5664 return false;
5665 }
5666}
5667
5668/* See symtab.h. */
5669
5670bool
5671symbol_is_function_or_method (minimal_symbol *msymbol)
5672{
5673 switch (MSYMBOL_TYPE (msymbol))
5674 {
5675 case mst_text:
5676 case mst_text_gnu_ifunc:
5677 case mst_solib_trampoline:
5678 case mst_file_text:
5679 return true;
5680 default:
5681 return false;
5682 }
5683}
5684
ca31ab1d
PA
5685/* See symtab.h. */
5686
5687bound_minimal_symbol
5688find_gnu_ifunc (const symbol *sym)
5689{
5690 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
5691 return {};
5692
987012b8 5693 lookup_name_info lookup_name (sym->search_name (),
ca31ab1d
PA
5694 symbol_name_match_type::SEARCH_NAME);
5695 struct objfile *objfile = symbol_objfile (sym);
5696
2b1ffcfd 5697 CORE_ADDR address = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
ca31ab1d
PA
5698 minimal_symbol *ifunc = NULL;
5699
5700 iterate_over_minimal_symbols (objfile, lookup_name,
5701 [&] (minimal_symbol *minsym)
5702 {
5703 if (MSYMBOL_TYPE (minsym) == mst_text_gnu_ifunc
f50776aa 5704 || MSYMBOL_TYPE (minsym) == mst_data_gnu_ifunc)
ca31ab1d 5705 {
f50776aa
PA
5706 CORE_ADDR msym_addr = MSYMBOL_VALUE_ADDRESS (objfile, minsym);
5707 if (MSYMBOL_TYPE (minsym) == mst_data_gnu_ifunc)
5708 {
08feed99 5709 struct gdbarch *gdbarch = objfile->arch ();
328d42d8
SM
5710 msym_addr = gdbarch_convert_from_func_ptr_addr
5711 (gdbarch, msym_addr, current_inferior ()->top_target ());
f50776aa
PA
5712 }
5713 if (msym_addr == address)
5714 {
5715 ifunc = minsym;
5716 return true;
5717 }
ca31ab1d
PA
5718 }
5719 return false;
5720 });
5721
5722 if (ifunc != NULL)
5723 return {ifunc, objfile};
5724 return {};
5725}
5726
e11c72c7
GB
5727/* Add matching symbols from SYMTAB to the current completion list. */
5728
5729static void
5730add_symtab_completions (struct compunit_symtab *cust,
eb3ff9a5 5731 completion_tracker &tracker,
f9d67a22 5732 complete_symbol_mode mode,
b5ec771e 5733 const lookup_name_info &lookup_name,
e11c72c7
GB
5734 const char *text, const char *word,
5735 enum type_code code)
5736{
5737 struct symbol *sym;
5738 const struct block *b;
5739 struct block_iterator iter;
5740 int i;
5741
ff6fa247
GB
5742 if (cust == NULL)
5743 return;
5744
e11c72c7
GB
5745 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
5746 {
5747 QUIT;
5748 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), i);
5749 ALL_BLOCK_SYMBOLS (b, iter, sym)
5750 {
f9d67a22
PA
5751 if (completion_skip_symbol (mode, sym))
5752 continue;
5753
e11c72c7
GB
5754 if (code == TYPE_CODE_UNDEF
5755 || (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
78134374 5756 && SYMBOL_TYPE (sym)->code () == code))
eb3ff9a5 5757 completion_list_add_symbol (tracker, sym,
b5ec771e 5758 lookup_name,
e11c72c7
GB
5759 text, word);
5760 }
5761 }
5762}
5763
eb3ff9a5
PA
5764void
5765default_collect_symbol_completion_matches_break_on
b5ec771e
PA
5766 (completion_tracker &tracker, complete_symbol_mode mode,
5767 symbol_name_match_type name_match_type,
eb3ff9a5
PA
5768 const char *text, const char *word,
5769 const char *break_on, enum type_code code)
c906108c 5770{
41d27058
JB
5771 /* Problem: All of the symbols have to be copied because readline
5772 frees them. I'm not going to worry about this; hopefully there
5773 won't be that many. */
5774
de4f826b 5775 struct symbol *sym;
3977b71f 5776 const struct block *b;
edb3359d 5777 const struct block *surrounding_static_block, *surrounding_global_block;
8157b174 5778 struct block_iterator iter;
c906108c 5779 /* The symbol we are completing on. Points in same buffer as text. */
6f937416 5780 const char *sym_text;
c906108c 5781
41d27058 5782 /* Now look for the symbol we are supposed to complete on. */
c6756f62
PA
5783 if (mode == complete_symbol_mode::LINESPEC)
5784 sym_text = text;
5785 else
01add95b
SM
5786 {
5787 const char *p;
5788 char quote_found;
5789 const char *quote_pos = NULL;
c906108c 5790
01add95b
SM
5791 /* First see if this is a quoted string. */
5792 quote_found = '\0';
5793 for (p = text; *p != '\0'; ++p)
5794 {
5795 if (quote_found != '\0')
5796 {
5797 if (*p == quote_found)
5798 /* Found close quote. */
5799 quote_found = '\0';
5800 else if (*p == '\\' && p[1] == quote_found)
5801 /* A backslash followed by the quote character
5802 doesn't end the string. */
5803 ++p;
5804 }
5805 else if (*p == '\'' || *p == '"')
5806 {
5807 quote_found = *p;
5808 quote_pos = p;
5809 }
5810 }
5811 if (quote_found == '\'')
5812 /* A string within single quotes can be a symbol, so complete on it. */
5813 sym_text = quote_pos + 1;
5814 else if (quote_found == '"')
5815 /* A double-quoted string is never a symbol, nor does it make sense
5816 to complete it any other way. */
5817 {
5818 return;
5819 }
5820 else
5821 {
5822 /* It is not a quoted string. Break it based on the characters
5823 which are in symbols. */
5824 while (p > text)
5825 {
5826 if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0'
5827 || p[-1] == ':' || strchr (break_on, p[-1]) != NULL)
5828 --p;
5829 else
5830 break;
5831 }
5832 sym_text = p;
5833 }
5834 }
c906108c 5835
1b026119 5836 lookup_name_info lookup_name (sym_text, name_match_type, true);
b5ec771e 5837
c906108c
SS
5838 /* At this point scan through the misc symbol vectors and add each
5839 symbol you find to the list. Eventually we want to ignore
5840 anything that isn't a text symbol (everything else will be
e11c72c7 5841 handled by the psymtab code below). */
c906108c 5842
2f68a895
TT
5843 if (code == TYPE_CODE_UNDEF)
5844 {
2030c079 5845 for (objfile *objfile : current_program_space->objfiles ())
2f68a895 5846 {
7932255d 5847 for (minimal_symbol *msymbol : objfile->msymbols ())
5325b9bf
TT
5848 {
5849 QUIT;
9af17804 5850
5325b9bf
TT
5851 if (completion_skip_symbol (mode, msymbol))
5852 continue;
f9d67a22 5853
5325b9bf
TT
5854 completion_list_add_msymbol (tracker, msymbol, lookup_name,
5855 sym_text, word);
eb3ff9a5 5856
5325b9bf
TT
5857 completion_list_objc_symbol (tracker, msymbol, lookup_name,
5858 sym_text, word);
5859 }
2f68a895
TT
5860 }
5861 }
c906108c 5862
e11c72c7 5863 /* Add completions for all currently loaded symbol tables. */
2030c079 5864 for (objfile *objfile : current_program_space->objfiles ())
d8aeb77f 5865 {
b669c953 5866 for (compunit_symtab *cust : objfile->compunits ())
d8aeb77f
TT
5867 add_symtab_completions (cust, tracker, mode, lookup_name,
5868 sym_text, word, code);
5869 }
e11c72c7 5870
14bc53a8
PA
5871 /* Look through the partial symtabs for all symbols which begin by
5872 matching SYM_TEXT. Expand all CUs that you find to the list. */
5873 expand_symtabs_matching (NULL,
b5ec771e
PA
5874 lookup_name,
5875 NULL,
14bc53a8
PA
5876 [&] (compunit_symtab *symtab) /* expansion notify */
5877 {
5878 add_symtab_completions (symtab,
f9d67a22 5879 tracker, mode, lookup_name,
1b026119 5880 sym_text, word, code);
df35e626 5881 return true;
14bc53a8 5882 },
03a8ea51 5883 SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
14bc53a8 5884 ALL_DOMAIN);
e11c72c7 5885
c906108c 5886 /* Search upwards from currently selected frame (so that we can
edb3359d
DJ
5887 complete on local vars). Also catch fields of types defined in
5888 this places which match our text string. Only complete on types
c378eb4e 5889 visible from current context. */
edb3359d
DJ
5890
5891 b = get_selected_block (0);
5892 surrounding_static_block = block_static_block (b);
5893 surrounding_global_block = block_global_block (b);
5894 if (surrounding_static_block != NULL)
5895 while (b != surrounding_static_block)
5896 {
5897 QUIT;
c906108c 5898
edb3359d
DJ
5899 ALL_BLOCK_SYMBOLS (b, iter, sym)
5900 {
2f68a895
TT
5901 if (code == TYPE_CODE_UNDEF)
5902 {
b5ec771e 5903 completion_list_add_symbol (tracker, sym, lookup_name,
1b026119 5904 sym_text, word);
b5ec771e 5905 completion_list_add_fields (tracker, sym, lookup_name,
1b026119 5906 sym_text, word);
2f68a895
TT
5907 }
5908 else if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
78134374 5909 && SYMBOL_TYPE (sym)->code () == code)
b5ec771e 5910 completion_list_add_symbol (tracker, sym, lookup_name,
1b026119 5911 sym_text, word);
edb3359d 5912 }
c5aa993b 5913
edb3359d
DJ
5914 /* Stop when we encounter an enclosing function. Do not stop for
5915 non-inlined functions - the locals of the enclosing function
5916 are in scope for a nested function. */
5917 if (BLOCK_FUNCTION (b) != NULL && block_inlined_p (b))
5918 break;
5919 b = BLOCK_SUPERBLOCK (b);
5920 }
c906108c 5921
edb3359d 5922 /* Add fields from the file's types; symbols will be added below. */
c906108c 5923
2f68a895
TT
5924 if (code == TYPE_CODE_UNDEF)
5925 {
5926 if (surrounding_static_block != NULL)
5927 ALL_BLOCK_SYMBOLS (surrounding_static_block, iter, sym)
b5ec771e 5928 completion_list_add_fields (tracker, sym, lookup_name,
1b026119 5929 sym_text, word);
edb3359d 5930
2f68a895
TT
5931 if (surrounding_global_block != NULL)
5932 ALL_BLOCK_SYMBOLS (surrounding_global_block, iter, sym)
b5ec771e 5933 completion_list_add_fields (tracker, sym, lookup_name,
1b026119 5934 sym_text, word);
2f68a895 5935 }
c906108c 5936
2f68a895
TT
5937 /* Skip macros if we are completing a struct tag -- arguable but
5938 usually what is expected. */
1ac14a04 5939 if (current_language->macro_expansion () == macro_expansion_c
2f68a895 5940 && code == TYPE_CODE_UNDEF)
9a044a89 5941 {
f6c2623e 5942 gdb::unique_xmalloc_ptr<struct macro_scope> scope;
9a044a89 5943
14bc53a8
PA
5944 /* This adds a macro's name to the current completion list. */
5945 auto add_macro_name = [&] (const char *macro_name,
5946 const macro_definition *,
5947 macro_source_file *,
5948 int)
5949 {
1b026119
PA
5950 completion_list_add_name (tracker, language_c, macro_name,
5951 lookup_name, sym_text, word);
14bc53a8
PA
5952 };
5953
9a044a89
TT
5954 /* Add any macros visible in the default scope. Note that this
5955 may yield the occasional wrong result, because an expression
5956 might be evaluated in a scope other than the default. For
5957 example, if the user types "break file:line if <TAB>", the
5958 resulting expression will be evaluated at "file:line" -- but
5959 at there does not seem to be a way to detect this at
5960 completion time. */
5961 scope = default_macro_scope ();
5962 if (scope)
f6c2623e
TT
5963 macro_for_each_in_scope (scope->file, scope->line,
5964 add_macro_name);
9a044a89
TT
5965
5966 /* User-defined macros are always visible. */
14bc53a8 5967 macro_for_each (macro_user_macros, add_macro_name);
9a044a89 5968 }
ef0b411a
GB
5969}
5970
eb3ff9a5
PA
5971/* Collect all symbols (regardless of class) which begin by matching
5972 TEXT. */
41d27058 5973
eb3ff9a5
PA
5974void
5975collect_symbol_completion_matches (completion_tracker &tracker,
c6756f62 5976 complete_symbol_mode mode,
b5ec771e 5977 symbol_name_match_type name_match_type,
eb3ff9a5 5978 const char *text, const char *word)
41d27058 5979{
7e56227d
AB
5980 current_language->collect_symbol_completion_matches (tracker, mode,
5981 name_match_type,
5982 text, word,
5983 TYPE_CODE_UNDEF);
2f68a895
TT
5984}
5985
eb3ff9a5
PA
5986/* Like collect_symbol_completion_matches, but only collect
5987 STRUCT_DOMAIN symbols whose type code is CODE. */
2f68a895 5988
eb3ff9a5
PA
5989void
5990collect_symbol_completion_matches_type (completion_tracker &tracker,
5991 const char *text, const char *word,
5992 enum type_code code)
2f68a895 5993{
c6756f62 5994 complete_symbol_mode mode = complete_symbol_mode::EXPRESSION;
b5ec771e 5995 symbol_name_match_type name_match_type = symbol_name_match_type::EXPRESSION;
c6756f62 5996
2f68a895
TT
5997 gdb_assert (code == TYPE_CODE_UNION
5998 || code == TYPE_CODE_STRUCT
2f68a895 5999 || code == TYPE_CODE_ENUM);
7e56227d
AB
6000 current_language->collect_symbol_completion_matches (tracker, mode,
6001 name_match_type,
6002 text, word, code);
41d27058
JB
6003}
6004
eb3ff9a5
PA
6005/* Like collect_symbol_completion_matches, but collects a list of
6006 symbols defined in all source files named SRCFILE. */
c94fdfd0 6007
eb3ff9a5
PA
6008void
6009collect_file_symbol_completion_matches (completion_tracker &tracker,
c6756f62 6010 complete_symbol_mode mode,
b5ec771e 6011 symbol_name_match_type name_match_type,
eb3ff9a5
PA
6012 const char *text, const char *word,
6013 const char *srcfile)
c94fdfd0 6014{
c94fdfd0 6015 /* The symbol we are completing on. Points in same buffer as text. */
6f937416 6016 const char *sym_text;
c94fdfd0
EZ
6017
6018 /* Now look for the symbol we are supposed to complete on.
6019 FIXME: This should be language-specific. */
c6756f62
PA
6020 if (mode == complete_symbol_mode::LINESPEC)
6021 sym_text = text;
6022 else
01add95b
SM
6023 {
6024 const char *p;
6025 char quote_found;
6026 const char *quote_pos = NULL;
c94fdfd0 6027
01add95b
SM
6028 /* First see if this is a quoted string. */
6029 quote_found = '\0';
6030 for (p = text; *p != '\0'; ++p)
6031 {
6032 if (quote_found != '\0')
6033 {
6034 if (*p == quote_found)
6035 /* Found close quote. */
6036 quote_found = '\0';
6037 else if (*p == '\\' && p[1] == quote_found)
6038 /* A backslash followed by the quote character
6039 doesn't end the string. */
6040 ++p;
6041 }
6042 else if (*p == '\'' || *p == '"')
6043 {
6044 quote_found = *p;
6045 quote_pos = p;
6046 }
6047 }
6048 if (quote_found == '\'')
6049 /* A string within single quotes can be a symbol, so complete on it. */
6050 sym_text = quote_pos + 1;
6051 else if (quote_found == '"')
6052 /* A double-quoted string is never a symbol, nor does it make sense
6053 to complete it any other way. */
6054 {
6055 return;
6056 }
6057 else
6058 {
6059 /* Not a quoted string. */
6060 sym_text = language_search_unquoted_string (text, p);
6061 }
6062 }
c94fdfd0 6063
1b026119 6064 lookup_name_info lookup_name (sym_text, name_match_type, true);
b5ec771e 6065
8f14146e
PA
6066 /* Go through symtabs for SRCFILE and check the externs and statics
6067 for symbols which match. */
6068 iterate_over_symtabs (srcfile, [&] (symtab *s)
c94fdfd0 6069 {
8f14146e 6070 add_symtab_completions (SYMTAB_COMPUNIT (s),
f9d67a22 6071 tracker, mode, lookup_name,
1b026119 6072 sym_text, word, TYPE_CODE_UNDEF);
8f14146e
PA
6073 return false;
6074 });
e27852be
DE
6075}
6076
c94fdfd0
EZ
6077/* A helper function for make_source_files_completion_list. It adds
6078 another file name to a list of possible completions, growing the
6079 list as necessary. */
6080
6081static void
6f937416 6082add_filename_to_list (const char *fname, const char *text, const char *word,
eb3ff9a5 6083 completion_list *list)
c94fdfd0 6084{
60a20c19 6085 list->emplace_back (make_completion_match_str (fname, text, word));
c94fdfd0
EZ
6086}
6087
6088static int
6089not_interesting_fname (const char *fname)
6090{
6091 static const char *illegal_aliens[] = {
6092 "_globals_", /* inserted by coff_symtab_read */
6093 NULL
6094 };
6095 int i;
6096
6097 for (i = 0; illegal_aliens[i]; i++)
6098 {
0ba1096a 6099 if (filename_cmp (fname, illegal_aliens[i]) == 0)
c94fdfd0
EZ
6100 return 1;
6101 }
6102 return 0;
6103}
6104
f4655dee 6105/* An object of this type is passed as the callback argument to
ccefe4c4
TT
6106 map_partial_symbol_filenames. */
6107struct add_partial_filename_data
6108{
9fdc877b 6109 struct filename_seen_cache *filename_seen_cache;
6f937416
PA
6110 const char *text;
6111 const char *word;
ccefe4c4 6112 int text_len;
eb3ff9a5 6113 completion_list *list;
f4655dee
TT
6114
6115 void operator() (const char *filename, const char *fullname);
ccefe4c4
TT
6116};
6117
6118/* A callback for map_partial_symbol_filenames. */
eca864fe 6119
f4655dee
TT
6120void
6121add_partial_filename_data::operator() (const char *filename,
6122 const char *fullname)
ccefe4c4 6123{
ccefe4c4
TT
6124 if (not_interesting_fname (filename))
6125 return;
f4655dee
TT
6126 if (!filename_seen_cache->seen (filename)
6127 && filename_ncmp (filename, text, text_len) == 0)
ccefe4c4
TT
6128 {
6129 /* This file matches for a completion; add it to the
6130 current list of matches. */
f4655dee 6131 add_filename_to_list (filename, text, word, list);
ccefe4c4
TT
6132 }
6133 else
6134 {
6135 const char *base_name = lbasename (filename);
433759f7 6136
ccefe4c4 6137 if (base_name != filename
f4655dee
TT
6138 && !filename_seen_cache->seen (base_name)
6139 && filename_ncmp (base_name, text, text_len) == 0)
6140 add_filename_to_list (base_name, text, word, list);
ccefe4c4
TT
6141 }
6142}
6143
eb3ff9a5 6144/* Return a list of all source files whose names begin with matching
49c4e619 6145 TEXT. The file names are looked up in the symbol tables of this
eb3ff9a5 6146 program. */
c94fdfd0 6147
eb3ff9a5 6148completion_list
6f937416 6149make_source_files_completion_list (const char *text, const char *word)
c94fdfd0 6150{
c94fdfd0 6151 size_t text_len = strlen (text);
eb3ff9a5 6152 completion_list list;
31889e00 6153 const char *base_name;
ccefe4c4 6154 struct add_partial_filename_data datum;
c94fdfd0 6155
c94fdfd0
EZ
6156 if (!have_full_symbols () && !have_partial_symbols ())
6157 return list;
6158
bbf2f4df 6159 filename_seen_cache filenames_seen;
9fdc877b 6160
2030c079 6161 for (objfile *objfile : current_program_space->objfiles ())
c94fdfd0 6162 {
b669c953 6163 for (compunit_symtab *cu : objfile->compunits ())
c94fdfd0 6164 {
8b31193a
TT
6165 for (symtab *s : compunit_filetabs (cu))
6166 {
6167 if (not_interesting_fname (s->filename))
6168 continue;
6169 if (!filenames_seen.seen (s->filename)
6170 && filename_ncmp (s->filename, text, text_len) == 0)
6171 {
6172 /* This file matches for a completion; add it to the current
6173 list of matches. */
6174 add_filename_to_list (s->filename, text, word, &list);
6175 }
6176 else
6177 {
6178 /* NOTE: We allow the user to type a base name when the
6179 debug info records leading directories, but not the other
6180 way around. This is what subroutines of breakpoint
6181 command do when they parse file names. */
6182 base_name = lbasename (s->filename);
6183 if (base_name != s->filename
6184 && !filenames_seen.seen (base_name)
6185 && filename_ncmp (base_name, text, text_len) == 0)
6186 add_filename_to_list (base_name, text, word, &list);
6187 }
6188 }
c94fdfd0
EZ
6189 }
6190 }
6191
bbf2f4df 6192 datum.filename_seen_cache = &filenames_seen;
ccefe4c4
TT
6193 datum.text = text;
6194 datum.word = word;
6195 datum.text_len = text_len;
6196 datum.list = &list;
f4655dee 6197 map_symbol_filenames (datum, false /*need_fullname*/);
9fdc877b 6198
c94fdfd0
EZ
6199 return list;
6200}
c906108c 6201\f
51cc5b07 6202/* Track MAIN */
32ac0d11
TT
6203
6204/* Return the "main_info" object for the current program space. If
6205 the object has not yet been created, create it and fill in some
6206 default values. */
6207
6208static struct main_info *
6209get_main_info (void)
6210{
a32ad8c5 6211 struct main_info *info = main_progspace_key.get (current_program_space);
32ac0d11
TT
6212
6213 if (info == NULL)
6214 {
3d548a53
TT
6215 /* It may seem strange to store the main name in the progspace
6216 and also in whatever objfile happens to see a main name in
6217 its debug info. The reason for this is mainly historical:
6218 gdb returned "main" as the name even if no function named
6219 "main" was defined the program; and this approach lets us
6220 keep compatibility. */
a32ad8c5 6221 info = main_progspace_key.emplace (current_program_space);
32ac0d11
TT
6222 }
6223
6224 return info;
6225}
6226
3d548a53 6227static void
9e6c82ad 6228set_main_name (const char *name, enum language lang)
51cc5b07 6229{
32ac0d11
TT
6230 struct main_info *info = get_main_info ();
6231
6232 if (info->name_of_main != NULL)
51cc5b07 6233 {
32ac0d11
TT
6234 xfree (info->name_of_main);
6235 info->name_of_main = NULL;
6236 info->language_of_main = language_unknown;
51cc5b07
AC
6237 }
6238 if (name != NULL)
6239 {
32ac0d11
TT
6240 info->name_of_main = xstrdup (name);
6241 info->language_of_main = lang;
51cc5b07
AC
6242 }
6243}
6244
ea53e89f
JB
6245/* Deduce the name of the main procedure, and set NAME_OF_MAIN
6246 accordingly. */
6247
6248static void
6249find_main_name (void)
6250{
cd6c7346 6251 const char *new_main_name;
3d548a53
TT
6252
6253 /* First check the objfiles to see whether a debuginfo reader has
6254 picked up the appropriate main name. Historically the main name
6255 was found in a more or less random way; this approach instead
6256 relies on the order of objfile creation -- which still isn't
6257 guaranteed to get the correct answer, but is just probably more
6258 accurate. */
2030c079 6259 for (objfile *objfile : current_program_space->objfiles ())
aed57c53
TT
6260 {
6261 if (objfile->per_bfd->name_of_main != NULL)
6262 {
6263 set_main_name (objfile->per_bfd->name_of_main,
6264 objfile->per_bfd->language_of_main);
6265 return;
6266 }
6267 }
ea53e89f
JB
6268
6269 /* Try to see if the main procedure is in Ada. */
6270 /* FIXME: brobecker/2005-03-07: Another way of doing this would
6271 be to add a new method in the language vector, and call this
6272 method for each language until one of them returns a non-empty
6273 name. This would allow us to remove this hard-coded call to
6274 an Ada function. It is not clear that this is a better approach
6275 at this point, because all methods need to be written in a way
c378eb4e 6276 such that false positives never be returned. For instance, it is
ea53e89f
JB
6277 important that a method does not return a wrong name for the main
6278 procedure if the main procedure is actually written in a different
6279 language. It is easy to guaranty this with Ada, since we use a
6280 special symbol generated only when the main in Ada to find the name
c378eb4e 6281 of the main procedure. It is difficult however to see how this can
ea53e89f
JB
6282 be guarantied for languages such as C, for instance. This suggests
6283 that order of call for these methods becomes important, which means
6284 a more complicated approach. */
6285 new_main_name = ada_main_name ();
6286 if (new_main_name != NULL)
9af17804 6287 {
9e6c82ad 6288 set_main_name (new_main_name, language_ada);
ea53e89f
JB
6289 return;
6290 }
6291
63778547
IB
6292 new_main_name = d_main_name ();
6293 if (new_main_name != NULL)
6294 {
6295 set_main_name (new_main_name, language_d);
6296 return;
6297 }
6298
a766d390
DE
6299 new_main_name = go_main_name ();
6300 if (new_main_name != NULL)
6301 {
9e6c82ad 6302 set_main_name (new_main_name, language_go);
a766d390
DE
6303 return;
6304 }
6305
cd6c7346
PM
6306 new_main_name = pascal_main_name ();
6307 if (new_main_name != NULL)
9af17804 6308 {
9e6c82ad 6309 set_main_name (new_main_name, language_pascal);
cd6c7346
PM
6310 return;
6311 }
6312
ea53e89f
JB
6313 /* The languages above didn't identify the name of the main procedure.
6314 Fallback to "main". */
d3214198
TV
6315
6316 /* Try to find language for main in psymtabs. */
6317 enum language lang
6318 = find_quick_global_symbol_language ("main", VAR_DOMAIN);
6319 if (lang != language_unknown)
6320 {
6321 set_main_name ("main", lang);
6322 return;
6323 }
6324
9e6c82ad 6325 set_main_name ("main", language_unknown);
ea53e89f
JB
6326}
6327
cd215b2e
TT
6328/* See symtab.h. */
6329
6330const char *
6331main_name ()
51cc5b07 6332{
32ac0d11
TT
6333 struct main_info *info = get_main_info ();
6334
6335 if (info->name_of_main == NULL)
ea53e89f
JB
6336 find_main_name ();
6337
32ac0d11 6338 return info->name_of_main;
51cc5b07
AC
6339}
6340
9e6c82ad
TT
6341/* Return the language of the main function. If it is not known,
6342 return language_unknown. */
6343
6344enum language
6345main_language (void)
6346{
32ac0d11
TT
6347 struct main_info *info = get_main_info ();
6348
6349 if (info->name_of_main == NULL)
6350 find_main_name ();
6351
6352 return info->language_of_main;
9e6c82ad
TT
6353}
6354
ea53e89f
JB
6355/* Handle ``executable_changed'' events for the symtab module. */
6356
6357static void
781b42b0 6358symtab_observer_executable_changed (void)
ea53e89f
JB
6359{
6360 /* NAME_OF_MAIN may no longer be the same, so reset it for now. */
9e6c82ad 6361 set_main_name (NULL, language_unknown);
ea53e89f 6362}
51cc5b07 6363
a6c727b2
DJ
6364/* Return 1 if the supplied producer string matches the ARM RealView
6365 compiler (armcc). */
6366
ececd218 6367bool
a6c727b2
DJ
6368producer_is_realview (const char *producer)
6369{
6370 static const char *const arm_idents[] = {
6371 "ARM C Compiler, ADS",
6372 "Thumb C Compiler, ADS",
6373 "ARM C++ Compiler, ADS",
6374 "Thumb C++ Compiler, ADS",
6375 "ARM/Thumb C/C++ Compiler, RVCT",
6376 "ARM C/C++ Compiler, RVCT"
6377 };
6378 int i;
6379
6380 if (producer == NULL)
ececd218 6381 return false;
a6c727b2
DJ
6382
6383 for (i = 0; i < ARRAY_SIZE (arm_idents); i++)
61012eef 6384 if (startswith (producer, arm_idents[i]))
ececd218 6385 return true;
a6c727b2 6386
ececd218 6387 return false;
a6c727b2 6388}
ed0616c6 6389
f1e6e072
TT
6390\f
6391
6392/* The next index to hand out in response to a registration request. */
6393
6394static int next_aclass_value = LOC_FINAL_VALUE;
6395
6396/* The maximum number of "aclass" registrations we support. This is
6397 constant for convenience. */
6398#define MAX_SYMBOL_IMPLS (LOC_FINAL_VALUE + 10)
6399
6400/* The objects representing the various "aclass" values. The elements
6401 from 0 up to LOC_FINAL_VALUE-1 represent themselves, and subsequent
6402 elements are those registered at gdb initialization time. */
6403
6404static struct symbol_impl symbol_impl[MAX_SYMBOL_IMPLS];
6405
6406/* The globally visible pointer. This is separate from 'symbol_impl'
6407 so that it can be const. */
6408
6409const struct symbol_impl *symbol_impls = &symbol_impl[0];
6410
6411/* Make sure we saved enough room in struct symbol. */
6412
6413gdb_static_assert (MAX_SYMBOL_IMPLS <= (1 << SYMBOL_ACLASS_BITS));
6414
6415/* Register a computed symbol type. ACLASS must be LOC_COMPUTED. OPS
6416 is the ops vector associated with this index. This returns the new
6417 index, which should be used as the aclass_index field for symbols
6418 of this type. */
6419
6420int
6421register_symbol_computed_impl (enum address_class aclass,
6422 const struct symbol_computed_ops *ops)
6423{
6424 int result = next_aclass_value++;
6425
6426 gdb_assert (aclass == LOC_COMPUTED);
6427 gdb_assert (result < MAX_SYMBOL_IMPLS);
6428 symbol_impl[result].aclass = aclass;
6429 symbol_impl[result].ops_computed = ops;
6430
24d6c2a0
TT
6431 /* Sanity check OPS. */
6432 gdb_assert (ops != NULL);
6433 gdb_assert (ops->tracepoint_var_ref != NULL);
6434 gdb_assert (ops->describe_location != NULL);
0b31a4bc 6435 gdb_assert (ops->get_symbol_read_needs != NULL);
24d6c2a0
TT
6436 gdb_assert (ops->read_variable != NULL);
6437
f1e6e072
TT
6438 return result;
6439}
6440
6441/* Register a function with frame base type. ACLASS must be LOC_BLOCK.
6442 OPS is the ops vector associated with this index. This returns the
6443 new index, which should be used as the aclass_index field for symbols
6444 of this type. */
6445
6446int
6447register_symbol_block_impl (enum address_class aclass,
6448 const struct symbol_block_ops *ops)
6449{
6450 int result = next_aclass_value++;
6451
6452 gdb_assert (aclass == LOC_BLOCK);
6453 gdb_assert (result < MAX_SYMBOL_IMPLS);
6454 symbol_impl[result].aclass = aclass;
6455 symbol_impl[result].ops_block = ops;
6456
6457 /* Sanity check OPS. */
6458 gdb_assert (ops != NULL);
6459 gdb_assert (ops->find_frame_base_location != NULL);
6460
6461 return result;
6462}
6463
6464/* Register a register symbol type. ACLASS must be LOC_REGISTER or
6465 LOC_REGPARM_ADDR. OPS is the register ops vector associated with
6466 this index. This returns the new index, which should be used as
6467 the aclass_index field for symbols of this type. */
6468
6469int
6470register_symbol_register_impl (enum address_class aclass,
6471 const struct symbol_register_ops *ops)
6472{
6473 int result = next_aclass_value++;
6474
6475 gdb_assert (aclass == LOC_REGISTER || aclass == LOC_REGPARM_ADDR);
6476 gdb_assert (result < MAX_SYMBOL_IMPLS);
6477 symbol_impl[result].aclass = aclass;
6478 symbol_impl[result].ops_register = ops;
6479
6480 return result;
6481}
6482
6483/* Initialize elements of 'symbol_impl' for the constants in enum
6484 address_class. */
6485
6486static void
6487initialize_ordinary_address_classes (void)
6488{
6489 int i;
6490
6491 for (i = 0; i < LOC_FINAL_VALUE; ++i)
aead7601 6492 symbol_impl[i].aclass = (enum address_class) i;
f1e6e072
TT
6493}
6494
6495\f
6496
08be3fe3
DE
6497/* See symtab.h. */
6498
6499struct objfile *
6500symbol_objfile (const struct symbol *symbol)
6501{
1994afbf
DE
6502 gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
6503 return SYMTAB_OBJFILE (symbol->owner.symtab);
08be3fe3
DE
6504}
6505
6506/* See symtab.h. */
6507
6508struct gdbarch *
6509symbol_arch (const struct symbol *symbol)
6510{
1994afbf
DE
6511 if (!SYMBOL_OBJFILE_OWNED (symbol))
6512 return symbol->owner.arch;
08feed99 6513 return SYMTAB_OBJFILE (symbol->owner.symtab)->arch ();
08be3fe3
DE
6514}
6515
6516/* See symtab.h. */
6517
6518struct symtab *
6519symbol_symtab (const struct symbol *symbol)
6520{
1994afbf
DE
6521 gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
6522 return symbol->owner.symtab;
08be3fe3
DE
6523}
6524
6525/* See symtab.h. */
6526
6527void
6528symbol_set_symtab (struct symbol *symbol, struct symtab *symtab)
6529{
1994afbf
DE
6530 gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
6531 symbol->owner.symtab = symtab;
08be3fe3
DE
6532}
6533
4b610737
TT
6534/* See symtab.h. */
6535
6536CORE_ADDR
6537get_symbol_address (const struct symbol *sym)
6538{
6539 gdb_assert (sym->maybe_copied);
6540 gdb_assert (SYMBOL_CLASS (sym) == LOC_STATIC);
6541
987012b8 6542 const char *linkage_name = sym->linkage_name ();
4b610737
TT
6543
6544 for (objfile *objfile : current_program_space->objfiles ())
6545 {
3e65b3e9
TT
6546 if (objfile->separate_debug_objfile_backlink != nullptr)
6547 continue;
6548
4b610737
TT
6549 bound_minimal_symbol minsym
6550 = lookup_minimal_symbol_linkage (linkage_name, objfile);
6551 if (minsym.minsym != nullptr)
6552 return BMSYMBOL_VALUE_ADDRESS (minsym);
6553 }
468c0cbb 6554 return sym->value.address;
4b610737
TT
6555}
6556
6557/* See symtab.h. */
6558
6559CORE_ADDR
6560get_msymbol_address (struct objfile *objf, const struct minimal_symbol *minsym)
6561{
6562 gdb_assert (minsym->maybe_copied);
6563 gdb_assert ((objf->flags & OBJF_MAINLINE) == 0);
6564
c9d95fa3 6565 const char *linkage_name = minsym->linkage_name ();
4b610737
TT
6566
6567 for (objfile *objfile : current_program_space->objfiles ())
6568 {
3e65b3e9
TT
6569 if (objfile->separate_debug_objfile_backlink == nullptr
6570 && (objfile->flags & OBJF_MAINLINE) != 0)
4b610737
TT
6571 {
6572 bound_minimal_symbol found
6573 = lookup_minimal_symbol_linkage (linkage_name, objfile);
6574 if (found.minsym != nullptr)
6575 return BMSYMBOL_VALUE_ADDRESS (found);
6576 }
6577 }
a52d653e
AB
6578 return (minsym->value.address
6579 + objf->section_offsets[minsym->section_index ()]);
4b610737
TT
6580}
6581
e623cf5d
TT
6582\f
6583
165f8965
AB
6584/* Hold the sub-commands of 'info module'. */
6585
6586static struct cmd_list_element *info_module_cmdlist = NULL;
6587
165f8965
AB
6588/* See symtab.h. */
6589
6590std::vector<module_symbol_search>
6591search_module_symbols (const char *module_regexp, const char *regexp,
6592 const char *type_regexp, search_domain kind)
6593{
6594 std::vector<module_symbol_search> results;
6595
6596 /* Search for all modules matching MODULE_REGEXP. */
470c0b1c
AB
6597 global_symbol_searcher spec1 (MODULES_DOMAIN, module_regexp);
6598 spec1.set_exclude_minsyms (true);
6599 std::vector<symbol_search> modules = spec1.search ();
165f8965
AB
6600
6601 /* Now search for all symbols of the required KIND matching the required
6602 regular expressions. We figure out which ones are in which modules
6603 below. */
470c0b1c
AB
6604 global_symbol_searcher spec2 (kind, regexp);
6605 spec2.set_symbol_type_regexp (type_regexp);
6606 spec2.set_exclude_minsyms (true);
6607 std::vector<symbol_search> symbols = spec2.search ();
165f8965
AB
6608
6609 /* Now iterate over all MODULES, checking to see which items from
6610 SYMBOLS are in each module. */
6611 for (const symbol_search &p : modules)
6612 {
6613 QUIT;
6614
6615 /* This is a module. */
6616 gdb_assert (p.symbol != nullptr);
6617
987012b8 6618 std::string prefix = p.symbol->print_name ();
165f8965
AB
6619 prefix += "::";
6620
6621 for (const symbol_search &q : symbols)
6622 {
6623 if (q.symbol == nullptr)
6624 continue;
6625
987012b8 6626 if (strncmp (q.symbol->print_name (), prefix.c_str (),
165f8965
AB
6627 prefix.size ()) != 0)
6628 continue;
6629
6630 results.push_back ({p, q});
6631 }
6632 }
6633
6634 return results;
6635}
6636
6637/* Implement the core of both 'info module functions' and 'info module
6638 variables'. */
6639
6640static void
6641info_module_subcommand (bool quiet, const char *module_regexp,
6642 const char *regexp, const char *type_regexp,
6643 search_domain kind)
6644{
6645 /* Print a header line. Don't build the header line bit by bit as this
6646 prevents internationalisation. */
6647 if (!quiet)
6648 {
6649 if (module_regexp == nullptr)
6650 {
6651 if (type_regexp == nullptr)
6652 {
6653 if (regexp == nullptr)
6654 printf_filtered ((kind == VARIABLES_DOMAIN
6655 ? _("All variables in all modules:")
6656 : _("All functions in all modules:")));
6657 else
6658 printf_filtered
6659 ((kind == VARIABLES_DOMAIN
6660 ? _("All variables matching regular expression"
6661 " \"%s\" in all modules:")
6662 : _("All functions matching regular expression"
6663 " \"%s\" in all modules:")),
6664 regexp);
6665 }
6666 else
6667 {
6668 if (regexp == nullptr)
6669 printf_filtered
6670 ((kind == VARIABLES_DOMAIN
6671 ? _("All variables with type matching regular "
6672 "expression \"%s\" in all modules:")
6673 : _("All functions with type matching regular "
6674 "expression \"%s\" in all modules:")),
6675 type_regexp);
6676 else
6677 printf_filtered
6678 ((kind == VARIABLES_DOMAIN
6679 ? _("All variables matching regular expression "
6680 "\"%s\",\n\twith type matching regular "
6681 "expression \"%s\" in all modules:")
6682 : _("All functions matching regular expression "
6683 "\"%s\",\n\twith type matching regular "
6684 "expression \"%s\" in all modules:")),
6685 regexp, type_regexp);
6686 }
6687 }
6688 else
6689 {
6690 if (type_regexp == nullptr)
6691 {
6692 if (regexp == nullptr)
6693 printf_filtered
6694 ((kind == VARIABLES_DOMAIN
6695 ? _("All variables in all modules matching regular "
6696 "expression \"%s\":")
6697 : _("All functions in all modules matching regular "
6698 "expression \"%s\":")),
6699 module_regexp);
6700 else
6701 printf_filtered
6702 ((kind == VARIABLES_DOMAIN
6703 ? _("All variables matching regular expression "
6704 "\"%s\",\n\tin all modules matching regular "
6705 "expression \"%s\":")
6706 : _("All functions matching regular expression "
6707 "\"%s\",\n\tin all modules matching regular "
6708 "expression \"%s\":")),
6709 regexp, module_regexp);
6710 }
6711 else
6712 {
6713 if (regexp == nullptr)
6714 printf_filtered
6715 ((kind == VARIABLES_DOMAIN
6716 ? _("All variables with type matching regular "
6717 "expression \"%s\"\n\tin all modules matching "
6718 "regular expression \"%s\":")
6719 : _("All functions with type matching regular "
6720 "expression \"%s\"\n\tin all modules matching "
6721 "regular expression \"%s\":")),
6722 type_regexp, module_regexp);
6723 else
6724 printf_filtered
6725 ((kind == VARIABLES_DOMAIN
6726 ? _("All variables matching regular expression "
6727 "\"%s\",\n\twith type matching regular expression "
6728 "\"%s\",\n\tin all modules matching regular "
6729 "expression \"%s\":")
6730 : _("All functions matching regular expression "
6731 "\"%s\",\n\twith type matching regular expression "
6732 "\"%s\",\n\tin all modules matching regular "
6733 "expression \"%s\":")),
6734 regexp, type_regexp, module_regexp);
6735 }
6736 }
6737 printf_filtered ("\n");
6738 }
6739
6740 /* Find all symbols of type KIND matching the given regular expressions
6741 along with the symbols for the modules in which those symbols
6742 reside. */
6743 std::vector<module_symbol_search> module_symbols
6744 = search_module_symbols (module_regexp, regexp, type_regexp, kind);
6745
6746 std::sort (module_symbols.begin (), module_symbols.end (),
6747 [] (const module_symbol_search &a, const module_symbol_search &b)
6748 {
6749 if (a.first < b.first)
6750 return true;
6751 else if (a.first == b.first)
6752 return a.second < b.second;
6753 else
6754 return false;
6755 });
6756
6757 const char *last_filename = "";
6758 const symbol *last_module_symbol = nullptr;
6759 for (const module_symbol_search &ms : module_symbols)
6760 {
6761 const symbol_search &p = ms.first;
6762 const symbol_search &q = ms.second;
6763
6764 gdb_assert (q.symbol != nullptr);
6765
6766 if (last_module_symbol != p.symbol)
6767 {
6768 printf_filtered ("\n");
987012b8 6769 printf_filtered (_("Module \"%s\":\n"), p.symbol->print_name ());
165f8965
AB
6770 last_module_symbol = p.symbol;
6771 last_filename = "";
6772 }
6773
6774 print_symbol_info (FUNCTIONS_DOMAIN, q.symbol, q.block,
6775 last_filename);
6776 last_filename
6777 = symtab_to_filename_for_display (symbol_symtab (q.symbol));
6778 }
6779}
6780
6781/* Hold the option values for the 'info module .....' sub-commands. */
6782
6783struct info_modules_var_func_options
6784{
6785 bool quiet = false;
e0700ba4
SM
6786 std::string type_regexp;
6787 std::string module_regexp;
165f8965
AB
6788};
6789
6790/* The options used by 'info module variables' and 'info module functions'
6791 commands. */
6792
6793static const gdb::option::option_def info_modules_var_func_options_defs [] = {
6794 gdb::option::boolean_option_def<info_modules_var_func_options> {
6795 "q",
6796 [] (info_modules_var_func_options *opt) { return &opt->quiet; },
6797 nullptr, /* show_cmd_cb */
6798 nullptr /* set_doc */
6799 },
6800
6801 gdb::option::string_option_def<info_modules_var_func_options> {
6802 "t",
6803 [] (info_modules_var_func_options *opt) { return &opt->type_regexp; },
6804 nullptr, /* show_cmd_cb */
6805 nullptr /* set_doc */
6806 },
6807
6808 gdb::option::string_option_def<info_modules_var_func_options> {
6809 "m",
6810 [] (info_modules_var_func_options *opt) { return &opt->module_regexp; },
6811 nullptr, /* show_cmd_cb */
6812 nullptr /* set_doc */
6813 }
6814};
6815
6816/* Return the option group used by the 'info module ...' sub-commands. */
6817
6818static inline gdb::option::option_def_group
6819make_info_modules_var_func_options_def_group
6820 (info_modules_var_func_options *opts)
6821{
6822 return {{info_modules_var_func_options_defs}, opts};
6823}
6824
6825/* Implements the 'info module functions' command. */
6826
6827static void
6828info_module_functions_command (const char *args, int from_tty)
6829{
6830 info_modules_var_func_options opts;
6831 auto grp = make_info_modules_var_func_options_def_group (&opts);
6832 gdb::option::process_options
6833 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
6834 if (args != nullptr && *args == '\0')
6835 args = nullptr;
6836
e0700ba4
SM
6837 info_module_subcommand
6838 (opts.quiet,
6839 opts.module_regexp.empty () ? nullptr : opts.module_regexp.c_str (), args,
6840 opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
6841 FUNCTIONS_DOMAIN);
165f8965
AB
6842}
6843
6844/* Implements the 'info module variables' command. */
6845
6846static void
6847info_module_variables_command (const char *args, int from_tty)
6848{
6849 info_modules_var_func_options opts;
6850 auto grp = make_info_modules_var_func_options_def_group (&opts);
6851 gdb::option::process_options
6852 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
6853 if (args != nullptr && *args == '\0')
6854 args = nullptr;
6855
e0700ba4
SM
6856 info_module_subcommand
6857 (opts.quiet,
6858 opts.module_regexp.empty () ? nullptr : opts.module_regexp.c_str (), args,
6859 opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
6860 VARIABLES_DOMAIN);
165f8965
AB
6861}
6862
6863/* Command completer for 'info module ...' sub-commands. */
6864
6865static void
6866info_module_var_func_command_completer (struct cmd_list_element *ignore,
6867 completion_tracker &tracker,
6868 const char *text,
6869 const char * /* word */)
6870{
6871
6872 const auto group = make_info_modules_var_func_options_def_group (nullptr);
6873 if (gdb::option::complete_options
6874 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
6875 return;
6876
6877 const char *word = advance_to_expression_complete_word_point (tracker, text);
6878 symbol_completer (ignore, tracker, text, word);
6879}
6880
6881\f
6882
6c265988 6883void _initialize_symtab ();
c906108c 6884void
6c265988 6885_initialize_symtab ()
c906108c 6886{
60cfcb20
AB
6887 cmd_list_element *c;
6888
f1e6e072
TT
6889 initialize_ordinary_address_classes ();
6890
60cfcb20
AB
6891 c = add_info ("variables", info_variables_command,
6892 info_print_args_help (_("\
12615cba 6893All global and static variable names or those matching REGEXPs.\n\
4acfdd20 6894Usage: info variables [-q] [-n] [-t TYPEREGEXP] [NAMEREGEXP]\n\
12615cba 6895Prints the global and static variables.\n"),
4acfdd20
AB
6896 _("global and static variables"),
6897 true));
095252be 6898 set_cmd_completer_handle_brkchars (c, info_vars_funcs_command_completer);
c906108c 6899 if (dbx_commands)
60cfcb20
AB
6900 {
6901 c = add_com ("whereis", class_info, info_variables_command,
6902 info_print_args_help (_("\
12615cba 6903All global and static variable names, or those matching REGEXPs.\n\
4acfdd20 6904Usage: whereis [-q] [-n] [-t TYPEREGEXP] [NAMEREGEXP]\n\
12615cba 6905Prints the global and static variables.\n"),
4acfdd20
AB
6906 _("global and static variables"),
6907 true));
095252be 6908 set_cmd_completer_handle_brkchars (c, info_vars_funcs_command_completer);
60cfcb20 6909 }
c906108c 6910
60cfcb20
AB
6911 c = add_info ("functions", info_functions_command,
6912 info_print_args_help (_("\
12615cba 6913All function names or those matching REGEXPs.\n\
4acfdd20 6914Usage: info functions [-q] [-n] [-t TYPEREGEXP] [NAMEREGEXP]\n\
12615cba 6915Prints the functions.\n"),
4acfdd20
AB
6916 _("functions"),
6917 true));
095252be 6918 set_cmd_completer_handle_brkchars (c, info_vars_funcs_command_completer);
c906108c 6919
a8eab7c6
AB
6920 c = add_info ("types", info_types_command, _("\
6921All type names, or those matching REGEXP.\n\
6922Usage: info types [-q] [REGEXP]\n\
6923Print information about all types matching REGEXP, or all types if no\n\
6924REGEXP is given. The optional flag -q disables printing of headers."));
6925 set_cmd_completer_handle_brkchars (c, info_types_command_completer);
c906108c 6926
0e350a05
AB
6927 const auto info_sources_opts
6928 = make_info_sources_options_def_group (nullptr);
28cd9371
PW
6929
6930 static std::string info_sources_help
6931 = gdb::option::build_help (_("\
6932All source files in the program or those matching REGEXP.\n\
6933Usage: info sources [OPTION]... [REGEXP]\n\
6934By default, REGEXP is used to match anywhere in the filename.\n\
6935\n\
6936Options:\n\
6937%OPTIONS%"),
6938 info_sources_opts);
6939
6940 c = add_info ("sources", info_sources_command, info_sources_help.c_str ());
6941 set_cmd_completer_handle_brkchars (c, info_sources_command_completer);
c906108c 6942
59c35742
AB
6943 c = add_info ("modules", info_modules_command,
6944 _("All module names, or those matching REGEXP."));
6945 set_cmd_completer_handle_brkchars (c, info_types_command_completer);
6946
0743fc83 6947 add_basic_prefix_cmd ("module", class_info, _("\
165f8965 6948Print information about modules."),
2f822da5 6949 &info_module_cmdlist, 0, &infolist);
165f8965
AB
6950
6951 c = add_cmd ("functions", class_info, info_module_functions_command, _("\
6952Display functions arranged by modules.\n\
6953Usage: info module functions [-q] [-m MODREGEXP] [-t TYPEREGEXP] [REGEXP]\n\
6954Print a summary of all functions within each Fortran module, grouped by\n\
6955module and file. For each function the line on which the function is\n\
6956defined is given along with the type signature and name of the function.\n\
6957\n\
6958If REGEXP is provided then only functions whose name matches REGEXP are\n\
6959listed. If MODREGEXP is provided then only functions in modules matching\n\
6960MODREGEXP are listed. If TYPEREGEXP is given then only functions whose\n\
6961type signature matches TYPEREGEXP are listed.\n\
6962\n\
6963The -q flag suppresses printing some header information."),
6964 &info_module_cmdlist);
6965 set_cmd_completer_handle_brkchars
6966 (c, info_module_var_func_command_completer);
6967
6968 c = add_cmd ("variables", class_info, info_module_variables_command, _("\
6969Display variables arranged by modules.\n\
6970Usage: info module variables [-q] [-m MODREGEXP] [-t TYPEREGEXP] [REGEXP]\n\
6971Print a summary of all variables within each Fortran module, grouped by\n\
6972module and file. For each variable the line on which the variable is\n\
6973defined is given along with the type and name of the variable.\n\
6974\n\
6975If REGEXP is provided then only variables whose name matches REGEXP are\n\
6976listed. If MODREGEXP is provided then only variables in modules matching\n\
6977MODREGEXP are listed. If TYPEREGEXP is given then only variables whose\n\
6978type matches TYPEREGEXP are listed.\n\
6979\n\
6980The -q flag suppresses printing some header information."),
6981 &info_module_cmdlist);
6982 set_cmd_completer_handle_brkchars
6983 (c, info_module_var_func_command_completer);
6984
c906108c 6985 add_com ("rbreak", class_breakpoint, rbreak_command,
1bedd215 6986 _("Set a breakpoint for all functions matching REGEXP."));
c906108c 6987
717d2f5a 6988 add_setshow_enum_cmd ("multiple-symbols", no_class,
dda83cd7
SM
6989 multiple_symbols_modes, &multiple_symbols_mode,
6990 _("\
590042fc 6991Set how the debugger handles ambiguities in expressions."), _("\
717d2f5a
JB
6992Show how the debugger handles ambiguities in expressions."), _("\
6993Valid values are \"ask\", \"all\", \"cancel\", and the default is \"all\"."),
dda83cd7 6994 NULL, NULL, &setlist, &showlist);
717d2f5a 6995
c011a4f4
DE
6996 add_setshow_boolean_cmd ("basenames-may-differ", class_obscure,
6997 &basenames_may_differ, _("\
6998Set whether a source file may have multiple base names."), _("\
6999Show whether a source file may have multiple base names."), _("\
7000(A \"base name\" is the name of a file with the directory part removed.\n\
7001Example: The base name of \"/home/user/hello.c\" is \"hello.c\".)\n\
7002If set, GDB will canonicalize file names (e.g., expand symlinks)\n\
7003before comparing them. Canonicalization is an expensive operation,\n\
7004but it allows the same file be known by more than one base name.\n\
7005If not set (the default), all source files are assumed to have just\n\
7006one base name, and gdb will do file name comparisons more efficiently."),
7007 NULL, NULL,
7008 &setlist, &showlist);
7009
db0fec5c
DE
7010 add_setshow_zuinteger_cmd ("symtab-create", no_class, &symtab_create_debug,
7011 _("Set debugging of symbol table creation."),
7012 _("Show debugging of symbol table creation."), _("\
7013When enabled (non-zero), debugging messages are printed when building\n\
7014symbol tables. A value of 1 (one) normally provides enough information.\n\
7015A value greater than 1 provides more verbose information."),
7016 NULL,
7017 NULL,
7018 &setdebuglist, &showdebuglist);
45cfd468 7019
cc485e62
DE
7020 add_setshow_zuinteger_cmd ("symbol-lookup", no_class, &symbol_lookup_debug,
7021 _("\
7022Set debugging of symbol lookup."), _("\
7023Show debugging of symbol lookup."), _("\
7024When enabled (non-zero), symbol lookups are logged."),
7025 NULL, NULL,
7026 &setdebuglist, &showdebuglist);
7027
f57d2163
DE
7028 add_setshow_zuinteger_cmd ("symbol-cache-size", no_class,
7029 &new_symbol_cache_size,
7030 _("Set the size of the symbol cache."),
7031 _("Show the size of the symbol cache."), _("\
7032The size of the symbol cache.\n\
7033If zero then the symbol cache is disabled."),
7034 set_symbol_cache_size_handler, NULL,
7035 &maintenance_set_cmdlist,
7036 &maintenance_show_cmdlist);
7037
7038 add_cmd ("symbol-cache", class_maintenance, maintenance_print_symbol_cache,
7039 _("Dump the symbol cache for each program space."),
7040 &maintenanceprintlist);
7041
7042 add_cmd ("symbol-cache-statistics", class_maintenance,
7043 maintenance_print_symbol_cache_statistics,
7044 _("Print symbol cache statistics for each program space."),
7045 &maintenanceprintlist);
7046
5e84b7ee
SM
7047 cmd_list_element *maintenance_flush_symbol_cache_cmd
7048 = add_cmd ("symbol-cache", class_maintenance,
7049 maintenance_flush_symbol_cache,
7050 _("Flush the symbol cache for each program space."),
7051 &maintenanceflushlist);
7052 c = add_alias_cmd ("flush-symbol-cache", maintenance_flush_symbol_cache_cmd,
50a5f187
AB
7053 class_maintenance, 0, &maintenancelist);
7054 deprecate_cmd (c, "maintenancelist flush symbol-cache");
f57d2163 7055
c90e7d63
SM
7056 gdb::observers::executable_changed.attach (symtab_observer_executable_changed,
7057 "symtab");
7058 gdb::observers::new_objfile.attach (symtab_new_objfile_observer, "symtab");
7059 gdb::observers::free_objfile.attach (symtab_free_objfile_observer, "symtab");
c906108c 7060}