Per-language symbol name hashing algorithm
[deliverable/binutils-gdb.git] / gdb / symtab.c
CommitLineData
c906108c 1/* Symbol table lookup for the GNU debugger, GDB.
8926118c 2
61baf725 3 Copyright (C) 1986-2017 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"
cce0e923 44#include "fnmatch.h"
2de7ced7
DJ
45#include "hashtab.h"
46
04ea0df1 47#include "gdb_obstack.h"
fe898f56 48#include "block.h"
de4f826b 49#include "dictionary.h"
c906108c
SS
50
51#include <sys/types.h>
52#include <fcntl.h>
53ce3c39 53#include <sys/stat.h>
c906108c 54#include <ctype.h>
015a42b4 55#include "cp-abi.h"
71c25dea 56#include "cp-support.h"
ea53e89f 57#include "observer.h"
3a40aaa0 58#include "solist.h"
9a044a89
TT
59#include "macrotab.h"
60#include "macroscope.h"
c906108c 61
270140bd 62#include "parser-defs.h"
ef0b411a 63#include "completer.h"
5ed8105e 64#include "progspace-and-thread.h"
2d7cc5c7 65#include "common/gdb_optional.h"
bbf2f4df 66#include "filename-seen-cache.h"
46a62268 67#include "arch-utils.h"
b9c04fb2 68#include <algorithm>
ccefe4c4 69
ff6c39cf 70/* Forward declarations for local functions. */
c906108c 71
0b39b52e 72static void rbreak_command (const char *, int);
c906108c 73
f8eba3c6 74static int find_line_common (struct linetable *, int, int *, int);
c906108c 75
d12307c1
PMR
76static struct block_symbol
77 lookup_symbol_aux (const char *name,
78 const struct block *block,
79 const domain_enum domain,
80 enum language language,
81 struct field_of_this_result *);
fba7f19c 82
e4051eeb 83static
d12307c1
PMR
84struct block_symbol lookup_local_symbol (const char *name,
85 const struct block *block,
86 const domain_enum domain,
87 enum language language);
8155455b 88
d12307c1 89static struct block_symbol
fe2a438d
DE
90 lookup_symbol_in_objfile (struct objfile *objfile, int block_index,
91 const char *name, const domain_enum domain);
c906108c 92
b6b80672
PA
93/* See symtab.h. */
94const struct block_symbol null_block_symbol = { NULL, NULL };
95
32ac0d11
TT
96/* Program space key for finding name and language of "main". */
97
98static const struct program_space_data *main_progspace_key;
99
100/* Type of the data stored on the program space. */
101
102struct main_info
103{
104 /* Name of "main". */
105
106 char *name_of_main;
107
108 /* Language of "main". */
109
110 enum language language_of_main;
111};
112
f57d2163
DE
113/* Program space key for finding its symbol cache. */
114
115static const struct program_space_data *symbol_cache_key;
116
117/* The default symbol cache size.
118 There is no extra cpu cost for large N (except when flushing the cache,
119 which is rare). The value here is just a first attempt. A better default
120 value may be higher or lower. A prime number can make up for a bad hash
121 computation, so that's why the number is what it is. */
122#define DEFAULT_SYMBOL_CACHE_SIZE 1021
123
124/* The maximum symbol cache size.
125 There's no method to the decision of what value to use here, other than
126 there's no point in allowing a user typo to make gdb consume all memory. */
127#define MAX_SYMBOL_CACHE_SIZE (1024*1024)
128
129/* symbol_cache_lookup returns this if a previous lookup failed to find the
130 symbol in any objfile. */
d12307c1
PMR
131#define SYMBOL_LOOKUP_FAILED \
132 ((struct block_symbol) {(struct symbol *) 1, NULL})
133#define SYMBOL_LOOKUP_FAILED_P(SIB) (SIB.symbol == (struct symbol *) 1)
f57d2163
DE
134
135/* Recording lookups that don't find the symbol is just as important, if not
136 more so, than recording found symbols. */
137
138enum symbol_cache_slot_state
139{
140 SYMBOL_SLOT_UNUSED,
141 SYMBOL_SLOT_NOT_FOUND,
142 SYMBOL_SLOT_FOUND
143};
144
52059ffd
TT
145struct symbol_cache_slot
146{
147 enum symbol_cache_slot_state state;
148
149 /* The objfile that was current when the symbol was looked up.
150 This is only needed for global blocks, but for simplicity's sake
151 we allocate the space for both. If data shows the extra space used
152 for static blocks is a problem, we can split things up then.
153
154 Global blocks need cache lookup to include the objfile context because
155 we need to account for gdbarch_iterate_over_objfiles_in_search_order
156 which can traverse objfiles in, effectively, any order, depending on
157 the current objfile, thus affecting which symbol is found. Normally,
158 only the current objfile is searched first, and then the rest are
159 searched in recorded order; but putting cache lookup inside
160 gdbarch_iterate_over_objfiles_in_search_order would be awkward.
161 Instead we just make the current objfile part of the context of
162 cache lookup. This means we can record the same symbol multiple times,
163 each with a different "current objfile" that was in effect when the
164 lookup was saved in the cache, but cache space is pretty cheap. */
165 const struct objfile *objfile_context;
166
167 union
168 {
d12307c1 169 struct block_symbol found;
52059ffd
TT
170 struct
171 {
172 char *name;
173 domain_enum domain;
174 } not_found;
175 } value;
176};
177
f57d2163
DE
178/* Symbols don't specify global vs static block.
179 So keep them in separate caches. */
180
181struct block_symbol_cache
182{
183 unsigned int hits;
184 unsigned int misses;
185 unsigned int collisions;
186
187 /* SYMBOLS is a variable length array of this size.
188 One can imagine that in general one cache (global/static) should be a
189 fraction of the size of the other, but there's no data at the moment
190 on which to decide. */
191 unsigned int size;
192
52059ffd 193 struct symbol_cache_slot symbols[1];
f57d2163
DE
194};
195
196/* The symbol cache.
197
198 Searching for symbols in the static and global blocks over multiple objfiles
199 again and again can be slow, as can searching very big objfiles. This is a
200 simple cache to improve symbol lookup performance, which is critical to
201 overall gdb performance.
202
203 Symbols are hashed on the name, its domain, and block.
204 They are also hashed on their objfile for objfile-specific lookups. */
205
206struct symbol_cache
207{
208 struct block_symbol_cache *global_symbols;
209 struct block_symbol_cache *static_symbols;
210};
211
45cfd468 212/* When non-zero, print debugging messages related to symtab creation. */
db0fec5c 213unsigned int symtab_create_debug = 0;
45cfd468 214
cc485e62
DE
215/* When non-zero, print debugging messages related to symbol lookup. */
216unsigned int symbol_lookup_debug = 0;
217
f57d2163
DE
218/* The size of the cache is staged here. */
219static unsigned int new_symbol_cache_size = DEFAULT_SYMBOL_CACHE_SIZE;
220
221/* The current value of the symbol cache size.
222 This is saved so that if the user enters a value too big we can restore
223 the original value from here. */
224static unsigned int symbol_cache_size = DEFAULT_SYMBOL_CACHE_SIZE;
225
c011a4f4
DE
226/* Non-zero if a file may be known by two different basenames.
227 This is the uncommon case, and significantly slows down gdb.
228 Default set to "off" to not slow down the common case. */
229int basenames_may_differ = 0;
230
717d2f5a
JB
231/* Allow the user to configure the debugger behavior with respect
232 to multiple-choice menus when more than one symbol matches during
233 a symbol lookup. */
234
7fc830e2
MK
235const char multiple_symbols_ask[] = "ask";
236const char multiple_symbols_all[] = "all";
237const char multiple_symbols_cancel[] = "cancel";
40478521 238static const char *const multiple_symbols_modes[] =
717d2f5a
JB
239{
240 multiple_symbols_ask,
241 multiple_symbols_all,
242 multiple_symbols_cancel,
243 NULL
244};
245static const char *multiple_symbols_mode = multiple_symbols_all;
246
247/* Read-only accessor to AUTO_SELECT_MODE. */
248
249const char *
250multiple_symbols_select_mode (void)
251{
252 return multiple_symbols_mode;
253}
254
20c681d1
DE
255/* Return the name of a domain_enum. */
256
257const char *
258domain_name (domain_enum e)
259{
260 switch (e)
261 {
262 case UNDEF_DOMAIN: return "UNDEF_DOMAIN";
263 case VAR_DOMAIN: return "VAR_DOMAIN";
264 case STRUCT_DOMAIN: return "STRUCT_DOMAIN";
540feddf 265 case MODULE_DOMAIN: return "MODULE_DOMAIN";
20c681d1
DE
266 case LABEL_DOMAIN: return "LABEL_DOMAIN";
267 case COMMON_BLOCK_DOMAIN: return "COMMON_BLOCK_DOMAIN";
268 default: gdb_assert_not_reached ("bad domain_enum");
269 }
270}
271
272/* Return the name of a search_domain . */
273
274const char *
275search_domain_name (enum search_domain e)
276{
277 switch (e)
278 {
279 case VARIABLES_DOMAIN: return "VARIABLES_DOMAIN";
280 case FUNCTIONS_DOMAIN: return "FUNCTIONS_DOMAIN";
281 case TYPES_DOMAIN: return "TYPES_DOMAIN";
282 case ALL_DOMAIN: return "ALL_DOMAIN";
283 default: gdb_assert_not_reached ("bad search_domain");
284 }
285}
286
43f3e411 287/* See symtab.h. */
db0fec5c 288
43f3e411
DE
289struct symtab *
290compunit_primary_filetab (const struct compunit_symtab *cust)
db0fec5c 291{
43f3e411 292 gdb_assert (COMPUNIT_FILETABS (cust) != NULL);
db0fec5c 293
43f3e411
DE
294 /* The primary file symtab is the first one in the list. */
295 return COMPUNIT_FILETABS (cust);
296}
297
298/* See symtab.h. */
299
300enum language
301compunit_language (const struct compunit_symtab *cust)
302{
303 struct symtab *symtab = compunit_primary_filetab (cust);
304
305/* The language of the compunit symtab is the language of its primary
306 source file. */
307 return SYMTAB_LANGUAGE (symtab);
db0fec5c
DE
308}
309
4aac40c8
TT
310/* See whether FILENAME matches SEARCH_NAME using the rule that we
311 advertise to the user. (The manual's description of linespecs
af529f8f
JK
312 describes what we advertise). Returns true if they match, false
313 otherwise. */
4aac40c8
TT
314
315int
b57a636e 316compare_filenames_for_search (const char *filename, const char *search_name)
4aac40c8
TT
317{
318 int len = strlen (filename);
b57a636e 319 size_t search_len = strlen (search_name);
4aac40c8
TT
320
321 if (len < search_len)
322 return 0;
323
324 /* The tail of FILENAME must match. */
325 if (FILENAME_CMP (filename + len - search_len, search_name) != 0)
326 return 0;
327
328 /* Either the names must completely match, or the character
329 preceding the trailing SEARCH_NAME segment of FILENAME must be a
d84fca2c
JK
330 directory separator.
331
af529f8f
JK
332 The check !IS_ABSOLUTE_PATH ensures SEARCH_NAME "/dir/file.c"
333 cannot match FILENAME "/path//dir/file.c" - as user has requested
334 absolute path. The sama applies for "c:\file.c" possibly
335 incorrectly hypothetically matching "d:\dir\c:\file.c".
336
d84fca2c
JK
337 The HAS_DRIVE_SPEC purpose is to make FILENAME "c:file.c"
338 compatible with SEARCH_NAME "file.c". In such case a compiler had
339 to put the "c:file.c" name into debug info. Such compatibility
340 works only on GDB built for DOS host. */
4aac40c8 341 return (len == search_len
af529f8f
JK
342 || (!IS_ABSOLUTE_PATH (search_name)
343 && IS_DIR_SEPARATOR (filename[len - search_len - 1]))
4aac40c8
TT
344 || (HAS_DRIVE_SPEC (filename)
345 && STRIP_DRIVE_SPEC (filename) == &filename[len - search_len]));
346}
347
cce0e923
DE
348/* Same as compare_filenames_for_search, but for glob-style patterns.
349 Heads up on the order of the arguments. They match the order of
350 compare_filenames_for_search, but it's the opposite of the order of
351 arguments to gdb_filename_fnmatch. */
352
353int
354compare_glob_filenames_for_search (const char *filename,
355 const char *search_name)
356{
357 /* We rely on the property of glob-style patterns with FNM_FILE_NAME that
358 all /s have to be explicitly specified. */
359 int file_path_elements = count_path_elements (filename);
360 int search_path_elements = count_path_elements (search_name);
361
362 if (search_path_elements > file_path_elements)
363 return 0;
364
365 if (IS_ABSOLUTE_PATH (search_name))
366 {
367 return (search_path_elements == file_path_elements
368 && gdb_filename_fnmatch (search_name, filename,
369 FNM_FILE_NAME | FNM_NOESCAPE) == 0);
370 }
371
372 {
373 const char *file_to_compare
374 = strip_leading_path_elements (filename,
375 file_path_elements - search_path_elements);
376
377 return gdb_filename_fnmatch (search_name, file_to_compare,
378 FNM_FILE_NAME | FNM_NOESCAPE) == 0;
379 }
380}
381
f8eba3c6
TT
382/* Check for a symtab of a specific name by searching some symtabs.
383 This is a helper function for callbacks of iterate_over_symtabs.
c906108c 384
b2d23133
DE
385 If NAME is not absolute, then REAL_PATH is NULL
386 If NAME is absolute, then REAL_PATH is the gdb_realpath form of NAME.
387
14bc53a8
PA
388 The return value, NAME, REAL_PATH and CALLBACK are identical to the
389 `map_symtabs_matching_filename' method of quick_symbol_functions.
f8eba3c6 390
43f3e411
DE
391 FIRST and AFTER_LAST indicate the range of compunit symtabs to search.
392 Each symtab within the specified compunit symtab is also searched.
393 AFTER_LAST is one past the last compunit symtab to search; NULL means to
f8eba3c6
TT
394 search until the end of the list. */
395
14bc53a8 396bool
f8eba3c6 397iterate_over_some_symtabs (const char *name,
f8eba3c6 398 const char *real_path,
43f3e411 399 struct compunit_symtab *first,
14bc53a8
PA
400 struct compunit_symtab *after_last,
401 gdb::function_view<bool (symtab *)> callback)
c906108c 402{
43f3e411
DE
403 struct compunit_symtab *cust;
404 struct symtab *s;
c011a4f4 405 const char* base_name = lbasename (name);
1f84b619 406
43f3e411 407 for (cust = first; cust != NULL && cust != after_last; cust = cust->next)
f079a2e5 408 {
43f3e411 409 ALL_COMPUNIT_FILETABS (cust, s)
a94e8645 410 {
43f3e411
DE
411 if (compare_filenames_for_search (s->filename, name))
412 {
14bc53a8
PA
413 if (callback (s))
414 return true;
43f3e411
DE
415 continue;
416 }
a94e8645 417
43f3e411
DE
418 /* Before we invoke realpath, which can get expensive when many
419 files are involved, do a quick comparison of the basenames. */
420 if (! basenames_may_differ
421 && FILENAME_CMP (base_name, lbasename (s->filename)) != 0)
422 continue;
a94e8645 423
43f3e411 424 if (compare_filenames_for_search (symtab_to_fullname (s), name))
a94e8645 425 {
14bc53a8
PA
426 if (callback (s))
427 return true;
a94e8645
DE
428 continue;
429 }
43f3e411
DE
430
431 /* If the user gave us an absolute path, try to find the file in
432 this symtab and use its absolute path. */
433 if (real_path != NULL)
434 {
435 const char *fullname = symtab_to_fullname (s);
436
437 gdb_assert (IS_ABSOLUTE_PATH (real_path));
438 gdb_assert (IS_ABSOLUTE_PATH (name));
439 if (FILENAME_CMP (real_path, fullname) == 0)
440 {
14bc53a8
PA
441 if (callback (s))
442 return true;
43f3e411
DE
443 continue;
444 }
445 }
a94e8645 446 }
f8eba3c6 447 }
58d370e0 448
14bc53a8 449 return false;
f8eba3c6
TT
450}
451
452/* Check for a symtab of a specific name; first in symtabs, then in
453 psymtabs. *If* there is no '/' in the name, a match after a '/'
454 in the symtab filename will also work.
455
14bc53a8
PA
456 Calls CALLBACK with each symtab that is found. If CALLBACK returns
457 true, the search stops. */
f8eba3c6
TT
458
459void
460iterate_over_symtabs (const char *name,
14bc53a8 461 gdb::function_view<bool (symtab *)> callback)
f8eba3c6 462{
f8eba3c6 463 struct objfile *objfile;
14bc53a8 464 gdb::unique_xmalloc_ptr<char> real_path;
f8eba3c6
TT
465
466 /* Here we are interested in canonicalizing an absolute path, not
467 absolutizing a relative path. */
468 if (IS_ABSOLUTE_PATH (name))
469 {
14278e1f 470 real_path = gdb_realpath (name);
14bc53a8 471 gdb_assert (IS_ABSOLUTE_PATH (real_path.get ()));
f8eba3c6
TT
472 }
473
474 ALL_OBJFILES (objfile)
14bc53a8
PA
475 {
476 if (iterate_over_some_symtabs (name, real_path.get (),
477 objfile->compunit_symtabs, NULL,
478 callback))
f8eba3c6 479 return;
14bc53a8 480 }
f8eba3c6 481
c906108c
SS
482 /* Same search rules as above apply here, but now we look thru the
483 psymtabs. */
484
ccefe4c4 485 ALL_OBJFILES (objfile)
14bc53a8
PA
486 {
487 if (objfile->sf
488 && objfile->sf->qf->map_symtabs_matching_filename (objfile,
489 name,
490 real_path.get (),
491 callback))
f8eba3c6 492 return;
14bc53a8 493 }
c906108c 494}
f8eba3c6
TT
495
496/* A wrapper for iterate_over_symtabs that returns the first matching
497 symtab, or NULL. */
498
499struct symtab *
500lookup_symtab (const char *name)
501{
502 struct symtab *result = NULL;
503
14bc53a8
PA
504 iterate_over_symtabs (name, [&] (symtab *symtab)
505 {
506 result = symtab;
507 return true;
508 });
509
f8eba3c6
TT
510 return result;
511}
512
c906108c
SS
513\f
514/* Mangle a GDB method stub type. This actually reassembles the pieces of the
515 full method name, which consist of the class name (from T), the unadorned
516 method name from METHOD_ID, and the signature for the specific overload,
c378eb4e 517 specified by SIGNATURE_ID. Note that this function is g++ specific. */
c906108c
SS
518
519char *
fba45db2 520gdb_mangle_name (struct type *type, int method_id, int signature_id)
c906108c
SS
521{
522 int mangled_name_len;
523 char *mangled_name;
524 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, method_id);
525 struct fn_field *method = &f[signature_id];
0d5cff50 526 const char *field_name = TYPE_FN_FIELDLIST_NAME (type, method_id);
1d06ead6 527 const char *physname = TYPE_FN_FIELD_PHYSNAME (f, signature_id);
0d5cff50 528 const char *newname = type_name_no_tag (type);
c906108c
SS
529
530 /* Does the form of physname indicate that it is the full mangled name
531 of a constructor (not just the args)? */
532 int is_full_physname_constructor;
533
534 int is_constructor;
015a42b4 535 int is_destructor = is_destructor_name (physname);
c906108c 536 /* Need a new type prefix. */
e6a959d6
PA
537 const char *const_prefix = method->is_const ? "C" : "";
538 const char *volatile_prefix = method->is_volatile ? "V" : "";
c906108c
SS
539 char buf[20];
540 int len = (newname == NULL ? 0 : strlen (newname));
541
43630227
PS
542 /* Nothing to do if physname already contains a fully mangled v3 abi name
543 or an operator name. */
544 if ((physname[0] == '_' && physname[1] == 'Z')
545 || is_operator_name (field_name))
235d1e03
EZ
546 return xstrdup (physname);
547
015a42b4 548 is_full_physname_constructor = is_constructor_name (physname);
c906108c 549
3e43a32a
MS
550 is_constructor = is_full_physname_constructor
551 || (newname && strcmp (field_name, newname) == 0);
c906108c
SS
552
553 if (!is_destructor)
61012eef 554 is_destructor = (startswith (physname, "__dt"));
c906108c
SS
555
556 if (is_destructor || is_full_physname_constructor)
557 {
c5aa993b
JM
558 mangled_name = (char *) xmalloc (strlen (physname) + 1);
559 strcpy (mangled_name, physname);
c906108c
SS
560 return mangled_name;
561 }
562
563 if (len == 0)
564 {
8c042590 565 xsnprintf (buf, sizeof (buf), "__%s%s", const_prefix, volatile_prefix);
c906108c
SS
566 }
567 else if (physname[0] == 't' || physname[0] == 'Q')
568 {
569 /* The physname for template and qualified methods already includes
c5aa993b 570 the class name. */
8c042590 571 xsnprintf (buf, sizeof (buf), "__%s%s", const_prefix, volatile_prefix);
c906108c
SS
572 newname = NULL;
573 len = 0;
574 }
575 else
576 {
8c042590
PM
577 xsnprintf (buf, sizeof (buf), "__%s%s%d", const_prefix,
578 volatile_prefix, len);
c906108c
SS
579 }
580 mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
235d1e03 581 + strlen (buf) + len + strlen (physname) + 1);
c906108c 582
433759f7
MS
583 mangled_name = (char *) xmalloc (mangled_name_len);
584 if (is_constructor)
585 mangled_name[0] = '\0';
586 else
587 strcpy (mangled_name, field_name);
588
c906108c
SS
589 strcat (mangled_name, buf);
590 /* If the class doesn't have a name, i.e. newname NULL, then we just
591 mangle it using 0 for the length of the class. Thus it gets mangled
c378eb4e 592 as something starting with `::' rather than `classname::'. */
c906108c
SS
593 if (newname != NULL)
594 strcat (mangled_name, newname);
595
596 strcat (mangled_name, physname);
597 return (mangled_name);
598}
12af6855 599
b250c185 600/* Set the demangled name of GSYMBOL to NAME. NAME must be already
7c5fdd25 601 correctly allocated. */
eca864fe 602
b250c185
SW
603void
604symbol_set_demangled_name (struct general_symbol_info *gsymbol,
cfc594ee 605 const char *name,
ccde22c0 606 struct obstack *obstack)
b250c185 607{
7c5fdd25 608 if (gsymbol->language == language_ada)
f85f34ed
TT
609 {
610 if (name == NULL)
611 {
612 gsymbol->ada_mangled = 0;
613 gsymbol->language_specific.obstack = obstack;
614 }
615 else
616 {
617 gsymbol->ada_mangled = 1;
615b3f62 618 gsymbol->language_specific.demangled_name = name;
f85f34ed
TT
619 }
620 }
29df156d 621 else
615b3f62 622 gsymbol->language_specific.demangled_name = name;
b250c185
SW
623}
624
625/* Return the demangled name of GSYMBOL. */
eca864fe 626
0d5cff50 627const char *
b250c185
SW
628symbol_get_demangled_name (const struct general_symbol_info *gsymbol)
629{
7c5fdd25 630 if (gsymbol->language == language_ada)
f85f34ed
TT
631 {
632 if (!gsymbol->ada_mangled)
633 return NULL;
634 /* Fall through. */
635 }
636
615b3f62 637 return gsymbol->language_specific.demangled_name;
b250c185
SW
638}
639
12af6855 640\f
89aad1f9 641/* Initialize the language dependent portion of a symbol
c378eb4e 642 depending upon the language for the symbol. */
eca864fe 643
89aad1f9 644void
33e5013e 645symbol_set_language (struct general_symbol_info *gsymbol,
f85f34ed
TT
646 enum language language,
647 struct obstack *obstack)
89aad1f9
EZ
648{
649 gsymbol->language = language;
7c5fdd25
DE
650 if (gsymbol->language == language_cplus
651 || gsymbol->language == language_d
a766d390 652 || gsymbol->language == language_go
f55ee35c
JK
653 || gsymbol->language == language_objc
654 || gsymbol->language == language_fortran)
89aad1f9 655 {
f85f34ed
TT
656 symbol_set_demangled_name (gsymbol, NULL, obstack);
657 }
658 else if (gsymbol->language == language_ada)
659 {
660 gdb_assert (gsymbol->ada_mangled == 0);
661 gsymbol->language_specific.obstack = obstack;
89aad1f9 662 }
89aad1f9
EZ
663 else
664 {
665 memset (&gsymbol->language_specific, 0,
666 sizeof (gsymbol->language_specific));
667 }
668}
669
2de7ced7
DJ
670/* Functions to initialize a symbol's mangled name. */
671
04a679b8
TT
672/* Objects of this type are stored in the demangled name hash table. */
673struct demangled_name_entry
674{
9d2ceabe 675 const char *mangled;
04a679b8
TT
676 char demangled[1];
677};
678
679/* Hash function for the demangled name hash. */
eca864fe 680
04a679b8
TT
681static hashval_t
682hash_demangled_name_entry (const void *data)
683{
19ba03f4
SM
684 const struct demangled_name_entry *e
685 = (const struct demangled_name_entry *) data;
433759f7 686
04a679b8
TT
687 return htab_hash_string (e->mangled);
688}
689
690/* Equality function for the demangled name hash. */
eca864fe 691
04a679b8
TT
692static int
693eq_demangled_name_entry (const void *a, const void *b)
694{
19ba03f4
SM
695 const struct demangled_name_entry *da
696 = (const struct demangled_name_entry *) a;
697 const struct demangled_name_entry *db
698 = (const struct demangled_name_entry *) b;
433759f7 699
04a679b8
TT
700 return strcmp (da->mangled, db->mangled) == 0;
701}
702
2de7ced7
DJ
703/* Create the hash table used for demangled names. Each hash entry is
704 a pair of strings; one for the mangled name and one for the demangled
705 name. The entry is hashed via just the mangled name. */
706
707static void
708create_demangled_names_hash (struct objfile *objfile)
709{
710 /* Choose 256 as the starting size of the hash table, somewhat arbitrarily.
9af17804 711 The hash table code will round this up to the next prime number.
2de7ced7
DJ
712 Choosing a much larger table size wastes memory, and saves only about
713 1% in symbol reading. */
714
84a1243b 715 objfile->per_bfd->demangled_names_hash = htab_create_alloc
04a679b8 716 (256, hash_demangled_name_entry, eq_demangled_name_entry,
aa2ee5f6 717 NULL, xcalloc, xfree);
2de7ced7 718}
12af6855 719
2de7ced7 720/* Try to determine the demangled name for a symbol, based on the
12af6855
JB
721 language of that symbol. If the language is set to language_auto,
722 it will attempt to find any demangling algorithm that works and
2de7ced7
DJ
723 then set the language appropriately. The returned name is allocated
724 by the demangler and should be xfree'd. */
12af6855 725
2de7ced7
DJ
726static char *
727symbol_find_demangled_name (struct general_symbol_info *gsymbol,
728 const char *mangled)
12af6855 729{
12af6855 730 char *demangled = NULL;
8b302db8
TT
731 int i;
732 int recognized;
12af6855
JB
733
734 if (gsymbol->language == language_unknown)
735 gsymbol->language = language_auto;
1bae87b9 736
8b302db8 737 if (gsymbol->language != language_auto)
1bae87b9 738 {
8b302db8
TT
739 const struct language_defn *lang = language_def (gsymbol->language);
740
741 language_sniff_from_mangled_name (lang, mangled, &demangled);
742 return demangled;
6aecb9c2 743 }
8b302db8
TT
744
745 for (i = language_unknown; i < nr_languages; ++i)
a766d390 746 {
8b302db8
TT
747 enum language l = (enum language) i;
748 const struct language_defn *lang = language_def (l);
749
750 if (language_sniff_from_mangled_name (lang, mangled, &demangled))
a766d390 751 {
8b302db8 752 gsymbol->language = l;
a766d390
DE
753 return demangled;
754 }
755 }
756
2de7ced7
DJ
757 return NULL;
758}
759
980cae7a 760/* Set both the mangled and demangled (if any) names for GSYMBOL based
04a679b8
TT
761 on LINKAGE_NAME and LEN. Ordinarily, NAME is copied onto the
762 objfile's obstack; but if COPY_NAME is 0 and if NAME is
763 NUL-terminated, then this function assumes that NAME is already
764 correctly saved (either permanently or with a lifetime tied to the
765 objfile), and it will not be copied.
766
767 The hash table corresponding to OBJFILE is used, and the memory
84a1243b 768 comes from the per-BFD storage_obstack. LINKAGE_NAME is copied,
04a679b8 769 so the pointer can be discarded after calling this function. */
2de7ced7
DJ
770
771void
772symbol_set_names (struct general_symbol_info *gsymbol,
04a679b8
TT
773 const char *linkage_name, int len, int copy_name,
774 struct objfile *objfile)
2de7ced7 775{
04a679b8 776 struct demangled_name_entry **slot;
980cae7a
DC
777 /* A 0-terminated copy of the linkage name. */
778 const char *linkage_name_copy;
04a679b8 779 struct demangled_name_entry entry;
84a1243b 780 struct objfile_per_bfd_storage *per_bfd = objfile->per_bfd;
2de7ced7 781
b06ead72
JB
782 if (gsymbol->language == language_ada)
783 {
784 /* In Ada, we do the symbol lookups using the mangled name, so
9c37b5ae 785 we can save some space by not storing the demangled name. */
04a679b8 786 if (!copy_name)
0d5cff50 787 gsymbol->name = linkage_name;
04a679b8
TT
788 else
789 {
224c3ddb
SM
790 char *name = (char *) obstack_alloc (&per_bfd->storage_obstack,
791 len + 1);
0d5cff50
DE
792
793 memcpy (name, linkage_name, len);
794 name[len] = '\0';
795 gsymbol->name = name;
04a679b8 796 }
84a1243b 797 symbol_set_demangled_name (gsymbol, NULL, &per_bfd->storage_obstack);
b06ead72
JB
798
799 return;
800 }
801
84a1243b 802 if (per_bfd->demangled_names_hash == NULL)
04a679b8
TT
803 create_demangled_names_hash (objfile);
804
9c37b5ae 805 if (linkage_name[len] != '\0')
2de7ced7 806 {
980cae7a
DC
807 char *alloc_name;
808
9c37b5ae 809 alloc_name = (char *) alloca (len + 1);
980cae7a 810 memcpy (alloc_name, linkage_name, len);
9c37b5ae 811 alloc_name[len] = '\0';
980cae7a
DC
812
813 linkage_name_copy = alloc_name;
2de7ced7
DJ
814 }
815 else
9c37b5ae 816 linkage_name_copy = linkage_name;
2de7ced7 817
9c37b5ae 818 entry.mangled = linkage_name_copy;
04a679b8 819 slot = ((struct demangled_name_entry **)
84a1243b 820 htab_find_slot (per_bfd->demangled_names_hash,
04a679b8 821 &entry, INSERT));
2de7ced7
DJ
822
823 /* If this name is not in the hash table, add it. */
a766d390
DE
824 if (*slot == NULL
825 /* A C version of the symbol may have already snuck into the table.
826 This happens to, e.g., main.init (__go_init_main). Cope. */
827 || (gsymbol->language == language_go
828 && (*slot)->demangled[0] == '\0'))
2de7ced7 829 {
980cae7a
DC
830 char *demangled_name = symbol_find_demangled_name (gsymbol,
831 linkage_name_copy);
2de7ced7
DJ
832 int demangled_len = demangled_name ? strlen (demangled_name) : 0;
833
04a679b8 834 /* Suppose we have demangled_name==NULL, copy_name==0, and
9c37b5ae 835 linkage_name_copy==linkage_name. In this case, we already have the
04a679b8
TT
836 mangled name saved, and we don't have a demangled name. So,
837 you might think we could save a little space by not recording
838 this in the hash table at all.
839
840 It turns out that it is actually important to still save such
841 an entry in the hash table, because storing this name gives
705b5767 842 us better bcache hit rates for partial symbols. */
9c37b5ae 843 if (!copy_name && linkage_name_copy == linkage_name)
04a679b8 844 {
224c3ddb
SM
845 *slot
846 = ((struct demangled_name_entry *)
847 obstack_alloc (&per_bfd->storage_obstack,
848 offsetof (struct demangled_name_entry, demangled)
849 + demangled_len + 1));
9c37b5ae 850 (*slot)->mangled = linkage_name;
04a679b8
TT
851 }
852 else
853 {
9d2ceabe
TT
854 char *mangled_ptr;
855
04a679b8
TT
856 /* If we must copy the mangled name, put it directly after
857 the demangled name so we can have a single
858 allocation. */
224c3ddb
SM
859 *slot
860 = ((struct demangled_name_entry *)
861 obstack_alloc (&per_bfd->storage_obstack,
862 offsetof (struct demangled_name_entry, demangled)
9c37b5ae 863 + len + demangled_len + 2));
9d2ceabe 864 mangled_ptr = &((*slot)->demangled[demangled_len + 1]);
9c37b5ae 865 strcpy (mangled_ptr, linkage_name_copy);
9d2ceabe 866 (*slot)->mangled = mangled_ptr;
04a679b8
TT
867 }
868
980cae7a 869 if (demangled_name != NULL)
2de7ced7 870 {
04a679b8 871 strcpy ((*slot)->demangled, demangled_name);
2de7ced7
DJ
872 xfree (demangled_name);
873 }
874 else
04a679b8 875 (*slot)->demangled[0] = '\0';
2de7ced7
DJ
876 }
877
9c37b5ae 878 gsymbol->name = (*slot)->mangled;
04a679b8 879 if ((*slot)->demangled[0] != '\0')
ccde22c0 880 symbol_set_demangled_name (gsymbol, (*slot)->demangled,
84a1243b 881 &per_bfd->storage_obstack);
2de7ced7 882 else
84a1243b 883 symbol_set_demangled_name (gsymbol, NULL, &per_bfd->storage_obstack);
2de7ced7
DJ
884}
885
22abf04a
DC
886/* Return the source code name of a symbol. In languages where
887 demangling is necessary, this is the demangled name. */
888
0d5cff50 889const char *
22abf04a
DC
890symbol_natural_name (const struct general_symbol_info *gsymbol)
891{
9af17804 892 switch (gsymbol->language)
22abf04a 893 {
1f8173e6 894 case language_cplus:
6aecb9c2 895 case language_d:
a766d390 896 case language_go:
1f8173e6 897 case language_objc:
f55ee35c 898 case language_fortran:
b250c185
SW
899 if (symbol_get_demangled_name (gsymbol) != NULL)
900 return symbol_get_demangled_name (gsymbol);
1f8173e6
PH
901 break;
902 case language_ada:
f85f34ed 903 return ada_decode_symbol (gsymbol);
1f8173e6
PH
904 default:
905 break;
22abf04a 906 }
1f8173e6 907 return gsymbol->name;
22abf04a
DC
908}
909
9cc0d196 910/* Return the demangled name for a symbol based on the language for
c378eb4e 911 that symbol. If no demangled name exists, return NULL. */
eca864fe 912
0d5cff50 913const char *
df8a16a1 914symbol_demangled_name (const struct general_symbol_info *gsymbol)
9cc0d196 915{
c6e5ee5e
SDJ
916 const char *dem_name = NULL;
917
9af17804 918 switch (gsymbol->language)
1f8173e6
PH
919 {
920 case language_cplus:
6aecb9c2 921 case language_d:
a766d390 922 case language_go:
1f8173e6 923 case language_objc:
f55ee35c 924 case language_fortran:
c6e5ee5e 925 dem_name = symbol_get_demangled_name (gsymbol);
1f8173e6
PH
926 break;
927 case language_ada:
f85f34ed 928 dem_name = ada_decode_symbol (gsymbol);
1f8173e6
PH
929 break;
930 default:
931 break;
932 }
c6e5ee5e 933 return dem_name;
9cc0d196 934}
fe39c653 935
4725b721
PH
936/* Return the search name of a symbol---generally the demangled or
937 linkage name of the symbol, depending on how it will be searched for.
9af17804 938 If there is no distinct demangled name, then returns the same value
c378eb4e 939 (same pointer) as SYMBOL_LINKAGE_NAME. */
eca864fe 940
0d5cff50 941const char *
fc062ac6
JB
942symbol_search_name (const struct general_symbol_info *gsymbol)
943{
1f8173e6
PH
944 if (gsymbol->language == language_ada)
945 return gsymbol->name;
946 else
947 return symbol_natural_name (gsymbol);
4725b721 948}
c906108c
SS
949\f
950
94277a38
DJ
951/* Return 1 if the two sections are the same, or if they could
952 plausibly be copies of each other, one in an original object
953 file and another in a separated debug file. */
954
955int
714835d5
UW
956matching_obj_sections (struct obj_section *obj_first,
957 struct obj_section *obj_second)
94277a38 958{
714835d5
UW
959 asection *first = obj_first? obj_first->the_bfd_section : NULL;
960 asection *second = obj_second? obj_second->the_bfd_section : NULL;
94277a38
DJ
961 struct objfile *obj;
962
963 /* If they're the same section, then they match. */
964 if (first == second)
965 return 1;
966
967 /* If either is NULL, give up. */
968 if (first == NULL || second == NULL)
969 return 0;
970
971 /* This doesn't apply to absolute symbols. */
972 if (first->owner == NULL || second->owner == NULL)
973 return 0;
974
975 /* If they're in the same object file, they must be different sections. */
976 if (first->owner == second->owner)
977 return 0;
978
979 /* Check whether the two sections are potentially corresponding. They must
980 have the same size, address, and name. We can't compare section indexes,
981 which would be more reliable, because some sections may have been
982 stripped. */
983 if (bfd_get_section_size (first) != bfd_get_section_size (second))
984 return 0;
985
818f79f6 986 /* In-memory addresses may start at a different offset, relativize them. */
94277a38 987 if (bfd_get_section_vma (first->owner, first)
818f79f6
DJ
988 - bfd_get_start_address (first->owner)
989 != bfd_get_section_vma (second->owner, second)
990 - bfd_get_start_address (second->owner))
94277a38
DJ
991 return 0;
992
993 if (bfd_get_section_name (first->owner, first) == NULL
994 || bfd_get_section_name (second->owner, second) == NULL
995 || strcmp (bfd_get_section_name (first->owner, first),
996 bfd_get_section_name (second->owner, second)) != 0)
997 return 0;
998
999 /* Otherwise check that they are in corresponding objfiles. */
1000
1001 ALL_OBJFILES (obj)
1002 if (obj->obfd == first->owner)
1003 break;
1004 gdb_assert (obj != NULL);
1005
1006 if (obj->separate_debug_objfile != NULL
1007 && obj->separate_debug_objfile->obfd == second->owner)
1008 return 1;
1009 if (obj->separate_debug_objfile_backlink != NULL
1010 && obj->separate_debug_objfile_backlink->obfd == second->owner)
1011 return 1;
1012
1013 return 0;
1014}
c5aa993b 1015
2097ae25
DE
1016/* See symtab.h. */
1017
1018void
1019expand_symtab_containing_pc (CORE_ADDR pc, struct obj_section *section)
c906108c 1020{
52f0bd74 1021 struct objfile *objfile;
77e371c0 1022 struct bound_minimal_symbol msymbol;
8a48e967
DJ
1023
1024 /* If we know that this is not a text address, return failure. This is
1025 necessary because we loop based on texthigh and textlow, which do
1026 not include the data ranges. */
77e371c0
TT
1027 msymbol = lookup_minimal_symbol_by_pc_section (pc, section);
1028 if (msymbol.minsym
1029 && (MSYMBOL_TYPE (msymbol.minsym) == mst_data
1030 || MSYMBOL_TYPE (msymbol.minsym) == mst_bss
1031 || MSYMBOL_TYPE (msymbol.minsym) == mst_abs
1032 || MSYMBOL_TYPE (msymbol.minsym) == mst_file_data
1033 || MSYMBOL_TYPE (msymbol.minsym) == mst_file_bss))
2097ae25 1034 return;
c906108c 1035
ff013f42 1036 ALL_OBJFILES (objfile)
ccefe4c4 1037 {
43f3e411 1038 struct compunit_symtab *cust = NULL;
433759f7 1039
ccefe4c4 1040 if (objfile->sf)
43f3e411
DE
1041 cust = objfile->sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol,
1042 pc, section, 0);
1043 if (cust)
2097ae25 1044 return;
ccefe4c4 1045 }
c906108c 1046}
c906108c 1047\f
f57d2163
DE
1048/* Hash function for the symbol cache. */
1049
1050static unsigned int
1051hash_symbol_entry (const struct objfile *objfile_context,
1052 const char *name, domain_enum domain)
1053{
1054 unsigned int hash = (uintptr_t) objfile_context;
1055
1056 if (name != NULL)
1057 hash += htab_hash_string (name);
1058
2c26b84f
DE
1059 /* Because of symbol_matches_domain we need VAR_DOMAIN and STRUCT_DOMAIN
1060 to map to the same slot. */
1061 if (domain == STRUCT_DOMAIN)
1062 hash += VAR_DOMAIN * 7;
1063 else
1064 hash += domain * 7;
f57d2163
DE
1065
1066 return hash;
1067}
1068
1069/* Equality function for the symbol cache. */
1070
1071static int
1072eq_symbol_entry (const struct symbol_cache_slot *slot,
1073 const struct objfile *objfile_context,
1074 const char *name, domain_enum domain)
1075{
1076 const char *slot_name;
1077 domain_enum slot_domain;
1078
1079 if (slot->state == SYMBOL_SLOT_UNUSED)
1080 return 0;
1081
1082 if (slot->objfile_context != objfile_context)
1083 return 0;
1084
1085 if (slot->state == SYMBOL_SLOT_NOT_FOUND)
1086 {
1087 slot_name = slot->value.not_found.name;
1088 slot_domain = slot->value.not_found.domain;
1089 }
1090 else
1091 {
d12307c1
PMR
1092 slot_name = SYMBOL_SEARCH_NAME (slot->value.found.symbol);
1093 slot_domain = SYMBOL_DOMAIN (slot->value.found.symbol);
f57d2163
DE
1094 }
1095
1096 /* NULL names match. */
1097 if (slot_name == NULL && name == NULL)
1098 {
1099 /* But there's no point in calling symbol_matches_domain in the
1100 SYMBOL_SLOT_FOUND case. */
1101 if (slot_domain != domain)
1102 return 0;
1103 }
1104 else if (slot_name != NULL && name != NULL)
1105 {
1106 /* It's important that we use the same comparison that was done the
1107 first time through. If the slot records a found symbol, then this
1108 means using strcmp_iw on SYMBOL_SEARCH_NAME. See dictionary.c.
1109 It also means using symbol_matches_domain for found symbols.
1110 See block.c.
1111
1112 If the slot records a not-found symbol, then require a precise match.
1113 We could still be lax with whitespace like strcmp_iw though. */
1114
1115 if (slot->state == SYMBOL_SLOT_NOT_FOUND)
1116 {
1117 if (strcmp (slot_name, name) != 0)
1118 return 0;
1119 if (slot_domain != domain)
1120 return 0;
1121 }
1122 else
1123 {
d12307c1 1124 struct symbol *sym = slot->value.found.symbol;
f57d2163
DE
1125
1126 if (strcmp_iw (slot_name, name) != 0)
1127 return 0;
1128 if (!symbol_matches_domain (SYMBOL_LANGUAGE (sym),
1129 slot_domain, domain))
1130 return 0;
1131 }
1132 }
1133 else
1134 {
1135 /* Only one name is NULL. */
1136 return 0;
1137 }
1138
1139 return 1;
1140}
1141
1142/* Given a cache of size SIZE, return the size of the struct (with variable
1143 length array) in bytes. */
1144
1145static size_t
1146symbol_cache_byte_size (unsigned int size)
1147{
1148 return (sizeof (struct block_symbol_cache)
1149 + ((size - 1) * sizeof (struct symbol_cache_slot)));
1150}
1151
1152/* Resize CACHE. */
1153
1154static void
1155resize_symbol_cache (struct symbol_cache *cache, unsigned int new_size)
1156{
1157 /* If there's no change in size, don't do anything.
1158 All caches have the same size, so we can just compare with the size
1159 of the global symbols cache. */
1160 if ((cache->global_symbols != NULL
1161 && cache->global_symbols->size == new_size)
1162 || (cache->global_symbols == NULL
1163 && new_size == 0))
1164 return;
1165
1166 xfree (cache->global_symbols);
1167 xfree (cache->static_symbols);
1168
1169 if (new_size == 0)
1170 {
1171 cache->global_symbols = NULL;
1172 cache->static_symbols = NULL;
1173 }
1174 else
1175 {
1176 size_t total_size = symbol_cache_byte_size (new_size);
1177
224c3ddb
SM
1178 cache->global_symbols
1179 = (struct block_symbol_cache *) xcalloc (1, total_size);
1180 cache->static_symbols
1181 = (struct block_symbol_cache *) xcalloc (1, total_size);
f57d2163
DE
1182 cache->global_symbols->size = new_size;
1183 cache->static_symbols->size = new_size;
1184 }
1185}
1186
1187/* Make a symbol cache of size SIZE. */
1188
1189static struct symbol_cache *
1190make_symbol_cache (unsigned int size)
1191{
1192 struct symbol_cache *cache;
1193
1194 cache = XCNEW (struct symbol_cache);
1195 resize_symbol_cache (cache, symbol_cache_size);
1196 return cache;
1197}
1198
1199/* Free the space used by CACHE. */
1200
1201static void
1202free_symbol_cache (struct symbol_cache *cache)
1203{
1204 xfree (cache->global_symbols);
1205 xfree (cache->static_symbols);
1206 xfree (cache);
1207}
1208
1209/* Return the symbol cache of PSPACE.
1210 Create one if it doesn't exist yet. */
1211
1212static struct symbol_cache *
1213get_symbol_cache (struct program_space *pspace)
1214{
19ba03f4
SM
1215 struct symbol_cache *cache
1216 = (struct symbol_cache *) program_space_data (pspace, symbol_cache_key);
f57d2163
DE
1217
1218 if (cache == NULL)
1219 {
1220 cache = make_symbol_cache (symbol_cache_size);
1221 set_program_space_data (pspace, symbol_cache_key, cache);
1222 }
1223
1224 return cache;
1225}
1226
1227/* Delete the symbol cache of PSPACE.
1228 Called when PSPACE is destroyed. */
1229
1230static void
1231symbol_cache_cleanup (struct program_space *pspace, void *data)
1232{
19ba03f4 1233 struct symbol_cache *cache = (struct symbol_cache *) data;
f57d2163
DE
1234
1235 free_symbol_cache (cache);
1236}
1237
1238/* Set the size of the symbol cache in all program spaces. */
1239
1240static void
1241set_symbol_cache_size (unsigned int new_size)
1242{
1243 struct program_space *pspace;
1244
1245 ALL_PSPACES (pspace)
1246 {
1247 struct symbol_cache *cache
19ba03f4 1248 = (struct symbol_cache *) program_space_data (pspace, symbol_cache_key);
f57d2163
DE
1249
1250 /* The pspace could have been created but not have a cache yet. */
1251 if (cache != NULL)
1252 resize_symbol_cache (cache, new_size);
1253 }
1254}
1255
1256/* Called when symbol-cache-size is set. */
1257
1258static void
eb4c3f4a 1259set_symbol_cache_size_handler (const char *args, int from_tty,
f57d2163
DE
1260 struct cmd_list_element *c)
1261{
1262 if (new_symbol_cache_size > MAX_SYMBOL_CACHE_SIZE)
1263 {
1264 /* Restore the previous value.
1265 This is the value the "show" command prints. */
1266 new_symbol_cache_size = symbol_cache_size;
1267
1268 error (_("Symbol cache size is too large, max is %u."),
1269 MAX_SYMBOL_CACHE_SIZE);
1270 }
1271 symbol_cache_size = new_symbol_cache_size;
1272
1273 set_symbol_cache_size (symbol_cache_size);
1274}
1275
1276/* Lookup symbol NAME,DOMAIN in BLOCK in the symbol cache of PSPACE.
1277 OBJFILE_CONTEXT is the current objfile, which may be NULL.
1278 The result is the symbol if found, SYMBOL_LOOKUP_FAILED if a previous lookup
1279 failed (and thus this one will too), or NULL if the symbol is not present
1280 in the cache.
2c26b84f
DE
1281 If the symbol is not present in the cache, then *BSC_PTR and *SLOT_PTR are
1282 set to the cache and slot of the symbol to save the result of a full lookup
1283 attempt. */
f57d2163 1284
d12307c1 1285static struct block_symbol
f57d2163
DE
1286symbol_cache_lookup (struct symbol_cache *cache,
1287 struct objfile *objfile_context, int block,
1288 const char *name, domain_enum domain,
1289 struct block_symbol_cache **bsc_ptr,
1290 struct symbol_cache_slot **slot_ptr)
1291{
1292 struct block_symbol_cache *bsc;
1293 unsigned int hash;
1294 struct symbol_cache_slot *slot;
1295
1296 if (block == GLOBAL_BLOCK)
1297 bsc = cache->global_symbols;
1298 else
1299 bsc = cache->static_symbols;
1300 if (bsc == NULL)
1301 {
1302 *bsc_ptr = NULL;
1303 *slot_ptr = NULL;
d12307c1 1304 return (struct block_symbol) {NULL, NULL};
f57d2163
DE
1305 }
1306
1307 hash = hash_symbol_entry (objfile_context, name, domain);
1308 slot = bsc->symbols + hash % bsc->size;
f57d2163
DE
1309
1310 if (eq_symbol_entry (slot, objfile_context, name, domain))
1311 {
1312 if (symbol_lookup_debug)
1313 fprintf_unfiltered (gdb_stdlog,
1314 "%s block symbol cache hit%s for %s, %s\n",
1315 block == GLOBAL_BLOCK ? "Global" : "Static",
1316 slot->state == SYMBOL_SLOT_NOT_FOUND
1317 ? " (not found)" : "",
1318 name, domain_name (domain));
1319 ++bsc->hits;
1320 if (slot->state == SYMBOL_SLOT_NOT_FOUND)
1321 return SYMBOL_LOOKUP_FAILED;
1322 return slot->value.found;
1323 }
1324
2c26b84f
DE
1325 /* Symbol is not present in the cache. */
1326
1327 *bsc_ptr = bsc;
1328 *slot_ptr = slot;
1329
f57d2163
DE
1330 if (symbol_lookup_debug)
1331 {
1332 fprintf_unfiltered (gdb_stdlog,
1333 "%s block symbol cache miss for %s, %s\n",
1334 block == GLOBAL_BLOCK ? "Global" : "Static",
1335 name, domain_name (domain));
1336 }
1337 ++bsc->misses;
d12307c1 1338 return (struct block_symbol) {NULL, NULL};
f57d2163
DE
1339}
1340
1341/* Clear out SLOT. */
1342
1343static void
1344symbol_cache_clear_slot (struct symbol_cache_slot *slot)
1345{
1346 if (slot->state == SYMBOL_SLOT_NOT_FOUND)
1347 xfree (slot->value.not_found.name);
1348 slot->state = SYMBOL_SLOT_UNUSED;
1349}
1350
1351/* Mark SYMBOL as found in SLOT.
1352 OBJFILE_CONTEXT is the current objfile when the lookup was done, or NULL
1353 if it's not needed to distinguish lookups (STATIC_BLOCK). It is *not*
1354 necessarily the objfile the symbol was found in. */
1355
1356static void
1357symbol_cache_mark_found (struct block_symbol_cache *bsc,
1358 struct symbol_cache_slot *slot,
1359 struct objfile *objfile_context,
d12307c1
PMR
1360 struct symbol *symbol,
1361 const struct block *block)
f57d2163
DE
1362{
1363 if (bsc == NULL)
1364 return;
1365 if (slot->state != SYMBOL_SLOT_UNUSED)
1366 {
1367 ++bsc->collisions;
1368 symbol_cache_clear_slot (slot);
1369 }
1370 slot->state = SYMBOL_SLOT_FOUND;
1371 slot->objfile_context = objfile_context;
d12307c1
PMR
1372 slot->value.found.symbol = symbol;
1373 slot->value.found.block = block;
f57d2163
DE
1374}
1375
1376/* Mark symbol NAME, DOMAIN as not found in SLOT.
1377 OBJFILE_CONTEXT is the current objfile when the lookup was done, or NULL
1378 if it's not needed to distinguish lookups (STATIC_BLOCK). */
1379
1380static void
1381symbol_cache_mark_not_found (struct block_symbol_cache *bsc,
1382 struct symbol_cache_slot *slot,
1383 struct objfile *objfile_context,
1384 const char *name, domain_enum domain)
1385{
1386 if (bsc == NULL)
1387 return;
1388 if (slot->state != SYMBOL_SLOT_UNUSED)
1389 {
1390 ++bsc->collisions;
1391 symbol_cache_clear_slot (slot);
1392 }
1393 slot->state = SYMBOL_SLOT_NOT_FOUND;
1394 slot->objfile_context = objfile_context;
1395 slot->value.not_found.name = xstrdup (name);
1396 slot->value.not_found.domain = domain;
1397}
1398
1399/* Flush the symbol cache of PSPACE. */
1400
1401static void
1402symbol_cache_flush (struct program_space *pspace)
1403{
19ba03f4
SM
1404 struct symbol_cache *cache
1405 = (struct symbol_cache *) program_space_data (pspace, symbol_cache_key);
f57d2163 1406 int pass;
f57d2163
DE
1407
1408 if (cache == NULL)
1409 return;
1410 if (cache->global_symbols == NULL)
1411 {
1412 gdb_assert (symbol_cache_size == 0);
1413 gdb_assert (cache->static_symbols == NULL);
1414 return;
1415 }
1416
1417 /* If the cache is untouched since the last flush, early exit.
1418 This is important for performance during the startup of a program linked
1419 with 100s (or 1000s) of shared libraries. */
1420 if (cache->global_symbols->misses == 0
1421 && cache->static_symbols->misses == 0)
1422 return;
1423
1424 gdb_assert (cache->global_symbols->size == symbol_cache_size);
1425 gdb_assert (cache->static_symbols->size == symbol_cache_size);
1426
1427 for (pass = 0; pass < 2; ++pass)
1428 {
1429 struct block_symbol_cache *bsc
1430 = pass == 0 ? cache->global_symbols : cache->static_symbols;
1431 unsigned int i;
1432
1433 for (i = 0; i < bsc->size; ++i)
1434 symbol_cache_clear_slot (&bsc->symbols[i]);
1435 }
1436
1437 cache->global_symbols->hits = 0;
1438 cache->global_symbols->misses = 0;
1439 cache->global_symbols->collisions = 0;
1440 cache->static_symbols->hits = 0;
1441 cache->static_symbols->misses = 0;
1442 cache->static_symbols->collisions = 0;
1443}
1444
1445/* Dump CACHE. */
1446
1447static void
1448symbol_cache_dump (const struct symbol_cache *cache)
1449{
1450 int pass;
1451
1452 if (cache->global_symbols == NULL)
1453 {
1454 printf_filtered (" <disabled>\n");
1455 return;
1456 }
1457
1458 for (pass = 0; pass < 2; ++pass)
1459 {
1460 const struct block_symbol_cache *bsc
1461 = pass == 0 ? cache->global_symbols : cache->static_symbols;
1462 unsigned int i;
1463
1464 if (pass == 0)
1465 printf_filtered ("Global symbols:\n");
1466 else
1467 printf_filtered ("Static symbols:\n");
1468
1469 for (i = 0; i < bsc->size; ++i)
1470 {
1471 const struct symbol_cache_slot *slot = &bsc->symbols[i];
1472
1473 QUIT;
1474
1475 switch (slot->state)
1476 {
1477 case SYMBOL_SLOT_UNUSED:
1478 break;
1479 case SYMBOL_SLOT_NOT_FOUND:
2c26b84f 1480 printf_filtered (" [%4u] = %s, %s %s (not found)\n", i,
f57d2163 1481 host_address_to_string (slot->objfile_context),
2c26b84f
DE
1482 slot->value.not_found.name,
1483 domain_name (slot->value.not_found.domain));
f57d2163
DE
1484 break;
1485 case SYMBOL_SLOT_FOUND:
d12307c1
PMR
1486 {
1487 struct symbol *found = slot->value.found.symbol;
1488 const struct objfile *context = slot->objfile_context;
1489
1490 printf_filtered (" [%4u] = %s, %s %s\n", i,
1491 host_address_to_string (context),
1492 SYMBOL_PRINT_NAME (found),
1493 domain_name (SYMBOL_DOMAIN (found)));
1494 break;
1495 }
f57d2163
DE
1496 }
1497 }
1498 }
1499}
1500
1501/* The "mt print symbol-cache" command. */
1502
1503static void
510e5e56 1504maintenance_print_symbol_cache (const char *args, int from_tty)
f57d2163
DE
1505{
1506 struct program_space *pspace;
1507
1508 ALL_PSPACES (pspace)
1509 {
1510 struct symbol_cache *cache;
1511
1512 printf_filtered (_("Symbol cache for pspace %d\n%s:\n"),
1513 pspace->num,
1514 pspace->symfile_object_file != NULL
1515 ? objfile_name (pspace->symfile_object_file)
1516 : "(no object file)");
1517
1518 /* If the cache hasn't been created yet, avoid creating one. */
19ba03f4
SM
1519 cache
1520 = (struct symbol_cache *) program_space_data (pspace, symbol_cache_key);
f57d2163
DE
1521 if (cache == NULL)
1522 printf_filtered (" <empty>\n");
1523 else
1524 symbol_cache_dump (cache);
1525 }
1526}
1527
1528/* The "mt flush-symbol-cache" command. */
1529
1530static void
510e5e56 1531maintenance_flush_symbol_cache (const char *args, int from_tty)
f57d2163
DE
1532{
1533 struct program_space *pspace;
1534
1535 ALL_PSPACES (pspace)
1536 {
1537 symbol_cache_flush (pspace);
1538 }
1539}
1540
1541/* Print usage statistics of CACHE. */
1542
1543static void
1544symbol_cache_stats (struct symbol_cache *cache)
1545{
1546 int pass;
1547
1548 if (cache->global_symbols == NULL)
1549 {
1550 printf_filtered (" <disabled>\n");
1551 return;
1552 }
1553
1554 for (pass = 0; pass < 2; ++pass)
1555 {
1556 const struct block_symbol_cache *bsc
1557 = pass == 0 ? cache->global_symbols : cache->static_symbols;
1558
1559 QUIT;
1560
1561 if (pass == 0)
1562 printf_filtered ("Global block cache stats:\n");
1563 else
1564 printf_filtered ("Static block cache stats:\n");
1565
1566 printf_filtered (" size: %u\n", bsc->size);
1567 printf_filtered (" hits: %u\n", bsc->hits);
1568 printf_filtered (" misses: %u\n", bsc->misses);
1569 printf_filtered (" collisions: %u\n", bsc->collisions);
1570 }
1571}
1572
1573/* The "mt print symbol-cache-statistics" command. */
1574
1575static void
510e5e56 1576maintenance_print_symbol_cache_statistics (const char *args, int from_tty)
f57d2163
DE
1577{
1578 struct program_space *pspace;
1579
1580 ALL_PSPACES (pspace)
1581 {
1582 struct symbol_cache *cache;
1583
1584 printf_filtered (_("Symbol cache statistics for pspace %d\n%s:\n"),
1585 pspace->num,
1586 pspace->symfile_object_file != NULL
1587 ? objfile_name (pspace->symfile_object_file)
1588 : "(no object file)");
1589
1590 /* If the cache hasn't been created yet, avoid creating one. */
19ba03f4
SM
1591 cache
1592 = (struct symbol_cache *) program_space_data (pspace, symbol_cache_key);
f57d2163
DE
1593 if (cache == NULL)
1594 printf_filtered (" empty, no stats available\n");
1595 else
1596 symbol_cache_stats (cache);
1597 }
1598}
1599
1600/* This module's 'new_objfile' observer. */
1601
1602static void
1603symtab_new_objfile_observer (struct objfile *objfile)
1604{
1605 /* Ideally we'd use OBJFILE->pspace, but OBJFILE may be NULL. */
1606 symbol_cache_flush (current_program_space);
1607}
1608
1609/* This module's 'free_objfile' observer. */
1610
1611static void
1612symtab_free_objfile_observer (struct objfile *objfile)
1613{
1614 symbol_cache_flush (objfile->pspace);
1615}
1616\f
c906108c
SS
1617/* Debug symbols usually don't have section information. We need to dig that
1618 out of the minimal symbols and stash that in the debug symbol. */
1619
ccefe4c4 1620void
907fc202
UW
1621fixup_section (struct general_symbol_info *ginfo,
1622 CORE_ADDR addr, struct objfile *objfile)
c906108c
SS
1623{
1624 struct minimal_symbol *msym;
c906108c 1625
bccdca4a
UW
1626 /* First, check whether a minimal symbol with the same name exists
1627 and points to the same address. The address check is required
1628 e.g. on PowerPC64, where the minimal symbol for a function will
1629 point to the function descriptor, while the debug symbol will
1630 point to the actual function code. */
907fc202
UW
1631 msym = lookup_minimal_symbol_by_pc_name (addr, ginfo->name, objfile);
1632 if (msym)
efd66ac6 1633 ginfo->section = MSYMBOL_SECTION (msym);
907fc202 1634 else
19e2d14b
KB
1635 {
1636 /* Static, function-local variables do appear in the linker
1637 (minimal) symbols, but are frequently given names that won't
1638 be found via lookup_minimal_symbol(). E.g., it has been
1639 observed in frv-uclinux (ELF) executables that a static,
1640 function-local variable named "foo" might appear in the
1641 linker symbols as "foo.6" or "foo.3". Thus, there is no
1642 point in attempting to extend the lookup-by-name mechanism to
1643 handle this case due to the fact that there can be multiple
1644 names.
9af17804 1645
19e2d14b
KB
1646 So, instead, search the section table when lookup by name has
1647 failed. The ``addr'' and ``endaddr'' fields may have already
1648 been relocated. If so, the relocation offset (i.e. the
1649 ANOFFSET value) needs to be subtracted from these values when
1650 performing the comparison. We unconditionally subtract it,
1651 because, when no relocation has been performed, the ANOFFSET
1652 value will simply be zero.
9af17804 1653
19e2d14b
KB
1654 The address of the symbol whose section we're fixing up HAS
1655 NOT BEEN adjusted (relocated) yet. It can't have been since
1656 the section isn't yet known and knowing the section is
1657 necessary in order to add the correct relocation value. In
1658 other words, we wouldn't even be in this function (attempting
1659 to compute the section) if it were already known.
1660
1661 Note that it is possible to search the minimal symbols
1662 (subtracting the relocation value if necessary) to find the
1663 matching minimal symbol, but this is overkill and much less
1664 efficient. It is not necessary to find the matching minimal
9af17804
DE
1665 symbol, only its section.
1666
19e2d14b
KB
1667 Note that this technique (of doing a section table search)
1668 can fail when unrelocated section addresses overlap. For
1669 this reason, we still attempt a lookup by name prior to doing
1670 a search of the section table. */
9af17804 1671
19e2d14b 1672 struct obj_section *s;
e27d198c 1673 int fallback = -1;
433759f7 1674
19e2d14b
KB
1675 ALL_OBJFILE_OSECTIONS (objfile, s)
1676 {
65cf3563 1677 int idx = s - objfile->sections;
19e2d14b
KB
1678 CORE_ADDR offset = ANOFFSET (objfile->section_offsets, idx);
1679
e27d198c
TT
1680 if (fallback == -1)
1681 fallback = idx;
1682
f1f6aadf
PA
1683 if (obj_section_addr (s) - offset <= addr
1684 && addr < obj_section_endaddr (s) - offset)
19e2d14b 1685 {
19e2d14b
KB
1686 ginfo->section = idx;
1687 return;
1688 }
1689 }
e27d198c
TT
1690
1691 /* If we didn't find the section, assume it is in the first
1692 section. If there is no allocated section, then it hardly
1693 matters what we pick, so just pick zero. */
1694 if (fallback == -1)
1695 ginfo->section = 0;
1696 else
1697 ginfo->section = fallback;
19e2d14b 1698 }
c906108c
SS
1699}
1700
1701struct symbol *
fba45db2 1702fixup_symbol_section (struct symbol *sym, struct objfile *objfile)
c906108c 1703{
907fc202
UW
1704 CORE_ADDR addr;
1705
c906108c
SS
1706 if (!sym)
1707 return NULL;
1708
1994afbf
DE
1709 if (!SYMBOL_OBJFILE_OWNED (sym))
1710 return sym;
1711
907fc202
UW
1712 /* We either have an OBJFILE, or we can get at it from the sym's
1713 symtab. Anything else is a bug. */
08be3fe3 1714 gdb_assert (objfile || symbol_symtab (sym));
907fc202
UW
1715
1716 if (objfile == NULL)
08be3fe3 1717 objfile = symbol_objfile (sym);
907fc202 1718
e27d198c
TT
1719 if (SYMBOL_OBJ_SECTION (objfile, sym))
1720 return sym;
1721
907fc202
UW
1722 /* We should have an objfile by now. */
1723 gdb_assert (objfile);
1724
1725 switch (SYMBOL_CLASS (sym))
1726 {
1727 case LOC_STATIC:
1728 case LOC_LABEL:
907fc202
UW
1729 addr = SYMBOL_VALUE_ADDRESS (sym);
1730 break;
1731 case LOC_BLOCK:
1732 addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
1733 break;
1734
1735 default:
1736 /* Nothing else will be listed in the minsyms -- no use looking
1737 it up. */
1738 return sym;
1739 }
1740
1741 fixup_section (&sym->ginfo, addr, objfile);
c906108c
SS
1742
1743 return sym;
1744}
1745
f8eba3c6 1746/* Compute the demangled form of NAME as used by the various symbol
2f408ecb
PA
1747 lookup functions. The result can either be the input NAME
1748 directly, or a pointer to a buffer owned by the STORAGE object.
f8eba3c6 1749
2f408ecb 1750 For Ada, this function just returns NAME, unmodified.
f8eba3c6
TT
1751 Normally, Ada symbol lookups are performed using the encoded name
1752 rather than the demangled name, and so it might seem to make sense
1753 for this function to return an encoded version of NAME.
1754 Unfortunately, we cannot do this, because this function is used in
1755 circumstances where it is not appropriate to try to encode NAME.
1756 For instance, when displaying the frame info, we demangle the name
1757 of each parameter, and then perform a symbol lookup inside our
1758 function using that demangled name. In Ada, certain functions
1759 have internally-generated parameters whose name contain uppercase
1760 characters. Encoding those name would result in those uppercase
1761 characters to become lowercase, and thus cause the symbol lookup
1762 to fail. */
c906108c 1763
2f408ecb 1764const char *
f8eba3c6 1765demangle_for_lookup (const char *name, enum language lang,
2f408ecb 1766 demangle_result_storage &storage)
c906108c 1767{
9c37b5ae 1768 /* If we are using C++, D, or Go, demangle the name before doing a
c378eb4e 1769 lookup, so we can always binary search. */
53c5240f 1770 if (lang == language_cplus)
729051e6 1771 {
2f408ecb
PA
1772 char *demangled_name = gdb_demangle (name, DMGL_ANSI | DMGL_PARAMS);
1773 if (demangled_name != NULL)
1774 return storage.set_malloc_ptr (demangled_name);
1775
1776 /* If we were given a non-mangled name, canonicalize it
1777 according to the language (so far only for C++). */
1778 std::string canon = cp_canonicalize_string (name);
1779 if (!canon.empty ())
1780 return storage.swap_string (canon);
729051e6 1781 }
6aecb9c2
JB
1782 else if (lang == language_d)
1783 {
2f408ecb
PA
1784 char *demangled_name = d_demangle (name, 0);
1785 if (demangled_name != NULL)
1786 return storage.set_malloc_ptr (demangled_name);
6aecb9c2 1787 }
a766d390
DE
1788 else if (lang == language_go)
1789 {
2f408ecb
PA
1790 char *demangled_name = go_demangle (name, 0);
1791 if (demangled_name != NULL)
1792 return storage.set_malloc_ptr (demangled_name);
a766d390 1793 }
729051e6 1794
2f408ecb 1795 return name;
f8eba3c6
TT
1796}
1797
5ffa0793
PA
1798/* See symtab.h. */
1799
1800unsigned int
1801search_name_hash (enum language language, const char *search_name)
1802{
1803 return language_def (language)->la_search_name_hash (search_name);
1804}
1805
cf901d3b 1806/* See symtab.h.
f8eba3c6 1807
cf901d3b 1808 This function (or rather its subordinates) have a bunch of loops and
7e082072
DE
1809 it would seem to be attractive to put in some QUIT's (though I'm not really
1810 sure whether it can run long enough to be really important). But there
f8eba3c6 1811 are a few calls for which it would appear to be bad news to quit
7e082072 1812 out of here: e.g., find_proc_desc in alpha-mdebug-tdep.c. (Note
f8eba3c6
TT
1813 that there is C++ code below which can error(), but that probably
1814 doesn't affect these calls since they are looking for a known
1815 variable and thus can probably assume it will never hit the C++
1816 code). */
1817
d12307c1 1818struct block_symbol
f8eba3c6
TT
1819lookup_symbol_in_language (const char *name, const struct block *block,
1820 const domain_enum domain, enum language lang,
1993b719 1821 struct field_of_this_result *is_a_field_of_this)
f8eba3c6 1822{
2f408ecb
PA
1823 demangle_result_storage storage;
1824 const char *modified_name = demangle_for_lookup (name, lang, storage);
f8eba3c6 1825
2f408ecb
PA
1826 return lookup_symbol_aux (modified_name, block, domain, lang,
1827 is_a_field_of_this);
fba7f19c
EZ
1828}
1829
cf901d3b 1830/* See symtab.h. */
53c5240f 1831
d12307c1 1832struct block_symbol
53c5240f 1833lookup_symbol (const char *name, const struct block *block,
1993b719
TT
1834 domain_enum domain,
1835 struct field_of_this_result *is_a_field_of_this)
53c5240f
PA
1836{
1837 return lookup_symbol_in_language (name, block, domain,
1838 current_language->la_language,
2570f2b7 1839 is_a_field_of_this);
53c5240f
PA
1840}
1841
cf901d3b 1842/* See symtab.h. */
66a17cb6 1843
d12307c1 1844struct block_symbol
66a17cb6
TT
1845lookup_language_this (const struct language_defn *lang,
1846 const struct block *block)
1847{
1848 if (lang->la_name_of_this == NULL || block == NULL)
d12307c1 1849 return (struct block_symbol) {NULL, NULL};
66a17cb6 1850
cc485e62
DE
1851 if (symbol_lookup_debug > 1)
1852 {
1853 struct objfile *objfile = lookup_objfile_from_block (block);
1854
1855 fprintf_unfiltered (gdb_stdlog,
1856 "lookup_language_this (%s, %s (objfile %s))",
1857 lang->la_name, host_address_to_string (block),
1858 objfile_debug_name (objfile));
1859 }
1860
03de6823 1861 while (block)
66a17cb6
TT
1862 {
1863 struct symbol *sym;
1864
16b2eaa1 1865 sym = block_lookup_symbol (block, lang->la_name_of_this, VAR_DOMAIN);
66a17cb6 1866 if (sym != NULL)
f149aabd 1867 {
cc485e62
DE
1868 if (symbol_lookup_debug > 1)
1869 {
1870 fprintf_unfiltered (gdb_stdlog, " = %s (%s, block %s)\n",
1871 SYMBOL_PRINT_NAME (sym),
1872 host_address_to_string (sym),
1873 host_address_to_string (block));
1874 }
d12307c1 1875 return (struct block_symbol) {sym, block};
f149aabd 1876 }
66a17cb6 1877 if (BLOCK_FUNCTION (block))
03de6823 1878 break;
66a17cb6
TT
1879 block = BLOCK_SUPERBLOCK (block);
1880 }
03de6823 1881
cc485e62
DE
1882 if (symbol_lookup_debug > 1)
1883 fprintf_unfiltered (gdb_stdlog, " = NULL\n");
d12307c1 1884 return (struct block_symbol) {NULL, NULL};
66a17cb6
TT
1885}
1886
2dc3df72
TT
1887/* Given TYPE, a structure/union,
1888 return 1 if the component named NAME from the ultimate target
1889 structure/union is defined, otherwise, return 0. */
1890
1891static int
1993b719
TT
1892check_field (struct type *type, const char *name,
1893 struct field_of_this_result *is_a_field_of_this)
2dc3df72
TT
1894{
1895 int i;
1896
1897 /* The type may be a stub. */
f168693b 1898 type = check_typedef (type);
2dc3df72
TT
1899
1900 for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
1901 {
1902 const char *t_field_name = TYPE_FIELD_NAME (type, i);
1903
1904 if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
1993b719
TT
1905 {
1906 is_a_field_of_this->type = type;
1907 is_a_field_of_this->field = &TYPE_FIELD (type, i);
1908 return 1;
1909 }
2dc3df72
TT
1910 }
1911
1912 /* C++: If it was not found as a data field, then try to return it
1913 as a pointer to a method. */
1914
1915 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
1916 {
1917 if (strcmp_iw (TYPE_FN_FIELDLIST_NAME (type, i), name) == 0)
1993b719
TT
1918 {
1919 is_a_field_of_this->type = type;
1920 is_a_field_of_this->fn_field = &TYPE_FN_FIELDLIST (type, i);
1921 return 1;
1922 }
2dc3df72
TT
1923 }
1924
1925 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
1993b719 1926 if (check_field (TYPE_BASECLASS (type, i), name, is_a_field_of_this))
2dc3df72
TT
1927 return 1;
1928
1929 return 0;
1930}
1931
53c5240f 1932/* Behave like lookup_symbol except that NAME is the natural name
7e082072 1933 (e.g., demangled name) of the symbol that we're looking for. */
5ad1c190 1934
d12307c1 1935static struct block_symbol
94af9270
KS
1936lookup_symbol_aux (const char *name, const struct block *block,
1937 const domain_enum domain, enum language language,
1993b719 1938 struct field_of_this_result *is_a_field_of_this)
fba7f19c 1939{
d12307c1 1940 struct block_symbol result;
53c5240f 1941 const struct language_defn *langdef;
406bc4de 1942
cc485e62
DE
1943 if (symbol_lookup_debug)
1944 {
1945 struct objfile *objfile = lookup_objfile_from_block (block);
1946
1947 fprintf_unfiltered (gdb_stdlog,
1948 "lookup_symbol_aux (%s, %s (objfile %s), %s, %s)\n",
1949 name, host_address_to_string (block),
1950 objfile != NULL
1951 ? objfile_debug_name (objfile) : "NULL",
1952 domain_name (domain), language_str (language));
1953 }
1954
9a146a11
EZ
1955 /* Make sure we do something sensible with is_a_field_of_this, since
1956 the callers that set this parameter to some non-null value will
1993b719
TT
1957 certainly use it later. If we don't set it, the contents of
1958 is_a_field_of_this are undefined. */
9a146a11 1959 if (is_a_field_of_this != NULL)
1993b719 1960 memset (is_a_field_of_this, 0, sizeof (*is_a_field_of_this));
9a146a11 1961
e4051eeb
DC
1962 /* Search specified block and its superiors. Don't search
1963 STATIC_BLOCK or GLOBAL_BLOCK. */
c906108c 1964
d12307c1
PMR
1965 result = lookup_local_symbol (name, block, domain, language);
1966 if (result.symbol != NULL)
cc485e62
DE
1967 {
1968 if (symbol_lookup_debug)
1969 {
1970 fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
d12307c1 1971 host_address_to_string (result.symbol));
cc485e62 1972 }
d12307c1 1973 return result;
cc485e62 1974 }
c906108c 1975
53c5240f 1976 /* If requested to do so by the caller and if appropriate for LANGUAGE,
13387711 1977 check to see if NAME is a field of `this'. */
53c5240f
PA
1978
1979 langdef = language_def (language);
5f9a71c3 1980
6592e36f
TT
1981 /* Don't do this check if we are searching for a struct. It will
1982 not be found by check_field, but will be found by other
1983 means. */
1984 if (is_a_field_of_this != NULL && domain != STRUCT_DOMAIN)
c906108c 1985 {
d12307c1 1986 result = lookup_language_this (langdef, block);
2b2d9e11 1987
d12307c1 1988 if (result.symbol)
c906108c 1989 {
d12307c1 1990 struct type *t = result.symbol->type;
9af17804 1991
2b2d9e11
VP
1992 /* I'm not really sure that type of this can ever
1993 be typedefed; just be safe. */
f168693b 1994 t = check_typedef (t);
aa006118 1995 if (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (t))
2b2d9e11 1996 t = TYPE_TARGET_TYPE (t);
9af17804 1997
2b2d9e11
VP
1998 if (TYPE_CODE (t) != TYPE_CODE_STRUCT
1999 && TYPE_CODE (t) != TYPE_CODE_UNION)
9af17804 2000 error (_("Internal error: `%s' is not an aggregate"),
2b2d9e11 2001 langdef->la_name_of_this);
9af17804 2002
1993b719 2003 if (check_field (t, name, is_a_field_of_this))
cc485e62
DE
2004 {
2005 if (symbol_lookup_debug)
2006 {
2007 fprintf_unfiltered (gdb_stdlog,
2008 "lookup_symbol_aux (...) = NULL\n");
2009 }
d12307c1 2010 return (struct block_symbol) {NULL, NULL};
cc485e62 2011 }
c906108c
SS
2012 }
2013 }
2014
53c5240f 2015 /* Now do whatever is appropriate for LANGUAGE to look
774b6a14 2016 up static and global variables. */
c906108c 2017
d12307c1
PMR
2018 result = langdef->la_lookup_symbol_nonlocal (langdef, name, block, domain);
2019 if (result.symbol != NULL)
cc485e62
DE
2020 {
2021 if (symbol_lookup_debug)
2022 {
2023 fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
d12307c1 2024 host_address_to_string (result.symbol));
cc485e62 2025 }
d12307c1 2026 return result;
cc485e62 2027 }
c906108c 2028
774b6a14
TT
2029 /* Now search all static file-level symbols. Not strictly correct,
2030 but more useful than an error. */
41f62f39 2031
d12307c1 2032 result = lookup_static_symbol (name, domain);
cc485e62
DE
2033 if (symbol_lookup_debug)
2034 {
2035 fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
d12307c1
PMR
2036 result.symbol != NULL
2037 ? host_address_to_string (result.symbol)
2038 : "NULL");
cc485e62 2039 }
d12307c1 2040 return result;
41f62f39
JK
2041}
2042
e4051eeb 2043/* Check to see if the symbol is defined in BLOCK or its superiors.
89a9d1b1 2044 Don't search STATIC_BLOCK or GLOBAL_BLOCK. */
8155455b 2045
d12307c1 2046static struct block_symbol
74016e12
DE
2047lookup_local_symbol (const char *name, const struct block *block,
2048 const domain_enum domain,
2049 enum language language)
8155455b
DC
2050{
2051 struct symbol *sym;
89a9d1b1 2052 const struct block *static_block = block_static_block (block);
13387711
SW
2053 const char *scope = block_scope (block);
2054
e4051eeb
DC
2055 /* Check if either no block is specified or it's a global block. */
2056
89a9d1b1 2057 if (static_block == NULL)
d12307c1 2058 return (struct block_symbol) {NULL, NULL};
e4051eeb 2059
89a9d1b1 2060 while (block != static_block)
f61e8913 2061 {
d1a2d36d 2062 sym = lookup_symbol_in_block (name, block, domain);
f61e8913 2063 if (sym != NULL)
d12307c1 2064 return (struct block_symbol) {sym, block};
edb3359d 2065
f55ee35c 2066 if (language == language_cplus || language == language_fortran)
13387711 2067 {
d12307c1
PMR
2068 struct block_symbol sym
2069 = cp_lookup_symbol_imports_or_template (scope, name, block,
2070 domain);
2071
2072 if (sym.symbol != NULL)
13387711
SW
2073 return sym;
2074 }
2075
edb3359d
DJ
2076 if (BLOCK_FUNCTION (block) != NULL && block_inlined_p (block))
2077 break;
f61e8913
DC
2078 block = BLOCK_SUPERBLOCK (block);
2079 }
2080
3aee438b 2081 /* We've reached the end of the function without finding a result. */
e4051eeb 2082
d12307c1 2083 return (struct block_symbol) {NULL, NULL};
f61e8913
DC
2084}
2085
cf901d3b 2086/* See symtab.h. */
3a40aaa0 2087
c0201579 2088struct objfile *
3a40aaa0
UW
2089lookup_objfile_from_block (const struct block *block)
2090{
2091 struct objfile *obj;
43f3e411 2092 struct compunit_symtab *cust;
3a40aaa0
UW
2093
2094 if (block == NULL)
2095 return NULL;
2096
2097 block = block_global_block (block);
43f3e411
DE
2098 /* Look through all blockvectors. */
2099 ALL_COMPUNITS (obj, cust)
2100 if (block == BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust),
2101 GLOBAL_BLOCK))
61f0d762
JK
2102 {
2103 if (obj->separate_debug_objfile_backlink)
2104 obj = obj->separate_debug_objfile_backlink;
2105
2106 return obj;
2107 }
3a40aaa0
UW
2108
2109 return NULL;
2110}
2111
cf901d3b 2112/* See symtab.h. */
f61e8913 2113
5f9a71c3 2114struct symbol *
d1a2d36d
DE
2115lookup_symbol_in_block (const char *name, const struct block *block,
2116 const domain_enum domain)
f61e8913
DC
2117{
2118 struct symbol *sym;
f61e8913 2119
cc485e62
DE
2120 if (symbol_lookup_debug > 1)
2121 {
2122 struct objfile *objfile = lookup_objfile_from_block (block);
2123
2124 fprintf_unfiltered (gdb_stdlog,
2125 "lookup_symbol_in_block (%s, %s (objfile %s), %s)",
2126 name, host_address_to_string (block),
2127 objfile_debug_name (objfile),
2128 domain_name (domain));
2129 }
2130
16b2eaa1 2131 sym = block_lookup_symbol (block, name, domain);
f61e8913 2132 if (sym)
8155455b 2133 {
cc485e62
DE
2134 if (symbol_lookup_debug > 1)
2135 {
2136 fprintf_unfiltered (gdb_stdlog, " = %s\n",
2137 host_address_to_string (sym));
2138 }
21b556f4 2139 return fixup_symbol_section (sym, NULL);
8155455b
DC
2140 }
2141
cc485e62
DE
2142 if (symbol_lookup_debug > 1)
2143 fprintf_unfiltered (gdb_stdlog, " = NULL\n");
8155455b
DC
2144 return NULL;
2145}
2146
cf901d3b 2147/* See symtab.h. */
3a40aaa0 2148
d12307c1 2149struct block_symbol
efad9b6a 2150lookup_global_symbol_from_objfile (struct objfile *main_objfile,
3a40aaa0 2151 const char *name,
21b556f4 2152 const domain_enum domain)
3a40aaa0 2153{
efad9b6a 2154 struct objfile *objfile;
3a40aaa0 2155
15d123c9
TG
2156 for (objfile = main_objfile;
2157 objfile;
2158 objfile = objfile_separate_debug_iterate (main_objfile, objfile))
2159 {
d12307c1
PMR
2160 struct block_symbol result
2161 = lookup_symbol_in_objfile (objfile, GLOBAL_BLOCK, name, domain);
15d123c9 2162
d12307c1
PMR
2163 if (result.symbol != NULL)
2164 return result;
15d123c9 2165 }
56e3f43c 2166
d12307c1 2167 return (struct block_symbol) {NULL, NULL};
3a40aaa0
UW
2168}
2169
19630284
JB
2170/* Check to see if the symbol is defined in one of the OBJFILE's
2171 symtabs. BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK,
8155455b
DC
2172 depending on whether or not we want to search global symbols or
2173 static symbols. */
2174
d12307c1 2175static struct block_symbol
74016e12
DE
2176lookup_symbol_in_objfile_symtabs (struct objfile *objfile, int block_index,
2177 const char *name, const domain_enum domain)
19630284 2178{
43f3e411 2179 struct compunit_symtab *cust;
19630284 2180
ba715d7f
JK
2181 gdb_assert (block_index == GLOBAL_BLOCK || block_index == STATIC_BLOCK);
2182
cc485e62
DE
2183 if (symbol_lookup_debug > 1)
2184 {
2185 fprintf_unfiltered (gdb_stdlog,
2186 "lookup_symbol_in_objfile_symtabs (%s, %s, %s, %s)",
2187 objfile_debug_name (objfile),
2188 block_index == GLOBAL_BLOCK
2189 ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
2190 name, domain_name (domain));
2191 }
2192
43f3e411 2193 ALL_OBJFILE_COMPUNITS (objfile, cust)
a743abeb 2194 {
43f3e411
DE
2195 const struct blockvector *bv;
2196 const struct block *block;
d12307c1 2197 struct block_symbol result;
43f3e411
DE
2198
2199 bv = COMPUNIT_BLOCKVECTOR (cust);
a743abeb 2200 block = BLOCKVECTOR_BLOCK (bv, block_index);
d12307c1
PMR
2201 result.symbol = block_lookup_symbol_primary (block, name, domain);
2202 result.block = block;
2203 if (result.symbol != NULL)
a743abeb 2204 {
cc485e62
DE
2205 if (symbol_lookup_debug > 1)
2206 {
2207 fprintf_unfiltered (gdb_stdlog, " = %s (block %s)\n",
d12307c1 2208 host_address_to_string (result.symbol),
cc485e62
DE
2209 host_address_to_string (block));
2210 }
d12307c1
PMR
2211 result.symbol = fixup_symbol_section (result.symbol, objfile);
2212 return result;
2213
a743abeb
DE
2214 }
2215 }
19630284 2216
cc485e62
DE
2217 if (symbol_lookup_debug > 1)
2218 fprintf_unfiltered (gdb_stdlog, " = NULL\n");
d12307c1 2219 return (struct block_symbol) {NULL, NULL};
19630284
JB
2220}
2221
74016e12 2222/* Wrapper around lookup_symbol_in_objfile_symtabs for search_symbols.
422d65e7 2223 Look up LINKAGE_NAME in DOMAIN in the global and static blocks of OBJFILE
01465b56
DE
2224 and all associated separate debug objfiles.
2225
2226 Normally we only look in OBJFILE, and not any separate debug objfiles
2227 because the outer loop will cause them to be searched too. This case is
2228 different. Here we're called from search_symbols where it will only
2229 call us for the the objfile that contains a matching minsym. */
422d65e7 2230
d12307c1 2231static struct block_symbol
422d65e7
DE
2232lookup_symbol_in_objfile_from_linkage_name (struct objfile *objfile,
2233 const char *linkage_name,
2234 domain_enum domain)
2235{
2236 enum language lang = current_language->la_language;
422d65e7
DE
2237 struct objfile *main_objfile, *cur_objfile;
2238
2f408ecb
PA
2239 demangle_result_storage storage;
2240 const char *modified_name = demangle_for_lookup (linkage_name, lang, storage);
2241
422d65e7
DE
2242 if (objfile->separate_debug_objfile_backlink)
2243 main_objfile = objfile->separate_debug_objfile_backlink;
2244 else
2245 main_objfile = objfile;
2246
2247 for (cur_objfile = main_objfile;
2248 cur_objfile;
2249 cur_objfile = objfile_separate_debug_iterate (main_objfile, cur_objfile))
2250 {
d12307c1
PMR
2251 struct block_symbol result;
2252
2253 result = lookup_symbol_in_objfile_symtabs (cur_objfile, GLOBAL_BLOCK,
2254 modified_name, domain);
2255 if (result.symbol == NULL)
2256 result = lookup_symbol_in_objfile_symtabs (cur_objfile, STATIC_BLOCK,
2257 modified_name, domain);
2258 if (result.symbol != NULL)
2f408ecb 2259 return result;
422d65e7
DE
2260 }
2261
d12307c1 2262 return (struct block_symbol) {NULL, NULL};
422d65e7
DE
2263}
2264
08c23b0d
TT
2265/* A helper function that throws an exception when a symbol was found
2266 in a psymtab but not in a symtab. */
2267
2268static void ATTRIBUTE_NORETURN
f88cb4b6 2269error_in_psymtab_expansion (int block_index, const char *name,
43f3e411 2270 struct compunit_symtab *cust)
08c23b0d
TT
2271{
2272 error (_("\
2273Internal: %s symbol `%s' found in %s psymtab but not in symtab.\n\
2274%s may be an inlined function, or may be a template function\n \
2275(if a template, try specifying an instantiation: %s<type>)."),
f88cb4b6 2276 block_index == GLOBAL_BLOCK ? "global" : "static",
43f3e411
DE
2277 name,
2278 symtab_to_filename_for_display (compunit_primary_filetab (cust)),
2279 name, name);
08c23b0d
TT
2280}
2281
74016e12
DE
2282/* A helper function for various lookup routines that interfaces with
2283 the "quick" symbol table functions. */
8155455b 2284
d12307c1 2285static struct block_symbol
74016e12
DE
2286lookup_symbol_via_quick_fns (struct objfile *objfile, int block_index,
2287 const char *name, const domain_enum domain)
8155455b 2288{
43f3e411 2289 struct compunit_symtab *cust;
346d1dfe 2290 const struct blockvector *bv;
8155455b 2291 const struct block *block;
d12307c1 2292 struct block_symbol result;
8155455b 2293
ccefe4c4 2294 if (!objfile->sf)
d12307c1 2295 return (struct block_symbol) {NULL, NULL};
cc485e62
DE
2296
2297 if (symbol_lookup_debug > 1)
2298 {
2299 fprintf_unfiltered (gdb_stdlog,
2300 "lookup_symbol_via_quick_fns (%s, %s, %s, %s)\n",
2301 objfile_debug_name (objfile),
2302 block_index == GLOBAL_BLOCK
2303 ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
2304 name, domain_name (domain));
2305 }
2306
43f3e411
DE
2307 cust = objfile->sf->qf->lookup_symbol (objfile, block_index, name, domain);
2308 if (cust == NULL)
cc485e62
DE
2309 {
2310 if (symbol_lookup_debug > 1)
2311 {
2312 fprintf_unfiltered (gdb_stdlog,
2313 "lookup_symbol_via_quick_fns (...) = NULL\n");
2314 }
d12307c1 2315 return (struct block_symbol) {NULL, NULL};
cc485e62 2316 }
8155455b 2317
43f3e411 2318 bv = COMPUNIT_BLOCKVECTOR (cust);
f88cb4b6 2319 block = BLOCKVECTOR_BLOCK (bv, block_index);
d12307c1
PMR
2320 result.symbol = block_lookup_symbol (block, name, domain);
2321 if (result.symbol == NULL)
43f3e411 2322 error_in_psymtab_expansion (block_index, name, cust);
cc485e62
DE
2323
2324 if (symbol_lookup_debug > 1)
2325 {
2326 fprintf_unfiltered (gdb_stdlog,
2327 "lookup_symbol_via_quick_fns (...) = %s (block %s)\n",
d12307c1 2328 host_address_to_string (result.symbol),
cc485e62
DE
2329 host_address_to_string (block));
2330 }
2331
d12307c1
PMR
2332 result.symbol = fixup_symbol_section (result.symbol, objfile);
2333 result.block = block;
2334 return result;
8155455b
DC
2335}
2336
cf901d3b 2337/* See symtab.h. */
5f9a71c3 2338
d12307c1 2339struct block_symbol
f606139a
DE
2340basic_lookup_symbol_nonlocal (const struct language_defn *langdef,
2341 const char *name,
5f9a71c3 2342 const struct block *block,
21b556f4 2343 const domain_enum domain)
5f9a71c3 2344{
d12307c1 2345 struct block_symbol result;
5f9a71c3
DC
2346
2347 /* NOTE: carlton/2003-05-19: The comments below were written when
2348 this (or what turned into this) was part of lookup_symbol_aux;
2349 I'm much less worried about these questions now, since these
2350 decisions have turned out well, but I leave these comments here
2351 for posterity. */
2352
2353 /* NOTE: carlton/2002-12-05: There is a question as to whether or
2354 not it would be appropriate to search the current global block
2355 here as well. (That's what this code used to do before the
2356 is_a_field_of_this check was moved up.) On the one hand, it's
af3768e9 2357 redundant with the lookup in all objfiles search that happens
5f9a71c3
DC
2358 next. On the other hand, if decode_line_1 is passed an argument
2359 like filename:var, then the user presumably wants 'var' to be
2360 searched for in filename. On the third hand, there shouldn't be
2361 multiple global variables all of which are named 'var', and it's
2362 not like decode_line_1 has ever restricted its search to only
2363 global variables in a single filename. All in all, only
2364 searching the static block here seems best: it's correct and it's
2365 cleanest. */
2366
2367 /* NOTE: carlton/2002-12-05: There's also a possible performance
2368 issue here: if you usually search for global symbols in the
2369 current file, then it would be slightly better to search the
2370 current global block before searching all the symtabs. But there
2371 are other factors that have a much greater effect on performance
2372 than that one, so I don't think we should worry about that for
2373 now. */
2374
d9060ba6
DE
2375 /* NOTE: dje/2014-10-26: The lookup in all objfiles search could skip
2376 the current objfile. Searching the current objfile first is useful
2377 for both matching user expectations as well as performance. */
2378
d12307c1
PMR
2379 result = lookup_symbol_in_static_block (name, block, domain);
2380 if (result.symbol != NULL)
2381 return result;
5f9a71c3 2382
1994afbf
DE
2383 /* If we didn't find a definition for a builtin type in the static block,
2384 search for it now. This is actually the right thing to do and can be
2385 a massive performance win. E.g., when debugging a program with lots of
2386 shared libraries we could search all of them only to find out the
2387 builtin type isn't defined in any of them. This is common for types
2388 like "void". */
2389 if (domain == VAR_DOMAIN)
2390 {
2391 struct gdbarch *gdbarch;
2392
2393 if (block == NULL)
2394 gdbarch = target_gdbarch ();
2395 else
2396 gdbarch = block_gdbarch (block);
d12307c1
PMR
2397 result.symbol = language_lookup_primitive_type_as_symbol (langdef,
2398 gdbarch, name);
2399 result.block = NULL;
2400 if (result.symbol != NULL)
2401 return result;
1994afbf
DE
2402 }
2403
08724ab7 2404 return lookup_global_symbol (name, block, domain);
5f9a71c3
DC
2405}
2406
cf901d3b 2407/* See symtab.h. */
5f9a71c3 2408
d12307c1 2409struct block_symbol
24d864bb
DE
2410lookup_symbol_in_static_block (const char *name,
2411 const struct block *block,
2412 const domain_enum domain)
5f9a71c3
DC
2413{
2414 const struct block *static_block = block_static_block (block);
cc485e62 2415 struct symbol *sym;
5f9a71c3 2416
cc485e62 2417 if (static_block == NULL)
d12307c1 2418 return (struct block_symbol) {NULL, NULL};
cc485e62
DE
2419
2420 if (symbol_lookup_debug)
2421 {
2422 struct objfile *objfile = lookup_objfile_from_block (static_block);
2423
2424 fprintf_unfiltered (gdb_stdlog,
2425 "lookup_symbol_in_static_block (%s, %s (objfile %s),"
2426 " %s)\n",
2427 name,
2428 host_address_to_string (block),
2429 objfile_debug_name (objfile),
2430 domain_name (domain));
2431 }
2432
2433 sym = lookup_symbol_in_block (name, static_block, domain);
2434 if (symbol_lookup_debug)
2435 {
2436 fprintf_unfiltered (gdb_stdlog,
2437 "lookup_symbol_in_static_block (...) = %s\n",
2438 sym != NULL ? host_address_to_string (sym) : "NULL");
2439 }
d12307c1 2440 return (struct block_symbol) {sym, static_block};
5f9a71c3
DC
2441}
2442
af3768e9
DE
2443/* Perform the standard symbol lookup of NAME in OBJFILE:
2444 1) First search expanded symtabs, and if not found
2445 2) Search the "quick" symtabs (partial or .gdb_index).
2446 BLOCK_INDEX is one of GLOBAL_BLOCK or STATIC_BLOCK. */
2447
d12307c1 2448static struct block_symbol
af3768e9
DE
2449lookup_symbol_in_objfile (struct objfile *objfile, int block_index,
2450 const char *name, const domain_enum domain)
2451{
d12307c1 2452 struct block_symbol result;
af3768e9 2453
cc485e62
DE
2454 if (symbol_lookup_debug)
2455 {
2456 fprintf_unfiltered (gdb_stdlog,
2457 "lookup_symbol_in_objfile (%s, %s, %s, %s)\n",
2458 objfile_debug_name (objfile),
2459 block_index == GLOBAL_BLOCK
2460 ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
2461 name, domain_name (domain));
2462 }
2463
af3768e9
DE
2464 result = lookup_symbol_in_objfile_symtabs (objfile, block_index,
2465 name, domain);
d12307c1 2466 if (result.symbol != NULL)
af3768e9 2467 {
cc485e62
DE
2468 if (symbol_lookup_debug)
2469 {
2470 fprintf_unfiltered (gdb_stdlog,
2471 "lookup_symbol_in_objfile (...) = %s"
2472 " (in symtabs)\n",
d12307c1 2473 host_address_to_string (result.symbol));
cc485e62
DE
2474 }
2475 return result;
af3768e9
DE
2476 }
2477
cc485e62
DE
2478 result = lookup_symbol_via_quick_fns (objfile, block_index,
2479 name, domain);
2480 if (symbol_lookup_debug)
2481 {
2482 fprintf_unfiltered (gdb_stdlog,
2483 "lookup_symbol_in_objfile (...) = %s%s\n",
d12307c1
PMR
2484 result.symbol != NULL
2485 ? host_address_to_string (result.symbol)
cc485e62 2486 : "NULL",
d12307c1 2487 result.symbol != NULL ? " (via quick fns)" : "");
cc485e62 2488 }
af3768e9
DE
2489 return result;
2490}
2491
2492/* See symtab.h. */
2493
d12307c1 2494struct block_symbol
af3768e9
DE
2495lookup_static_symbol (const char *name, const domain_enum domain)
2496{
f57d2163 2497 struct symbol_cache *cache = get_symbol_cache (current_program_space);
af3768e9 2498 struct objfile *objfile;
d12307c1 2499 struct block_symbol result;
f57d2163
DE
2500 struct block_symbol_cache *bsc;
2501 struct symbol_cache_slot *slot;
2502
2503 /* Lookup in STATIC_BLOCK is not current-objfile-dependent, so just pass
2504 NULL for OBJFILE_CONTEXT. */
2505 result = symbol_cache_lookup (cache, NULL, STATIC_BLOCK, name, domain,
2506 &bsc, &slot);
d12307c1 2507 if (result.symbol != NULL)
f57d2163 2508 {
d12307c1
PMR
2509 if (SYMBOL_LOOKUP_FAILED_P (result))
2510 return (struct block_symbol) {NULL, NULL};
f57d2163
DE
2511 return result;
2512 }
af3768e9
DE
2513
2514 ALL_OBJFILES (objfile)
2515 {
2516 result = lookup_symbol_in_objfile (objfile, STATIC_BLOCK, name, domain);
d12307c1 2517 if (result.symbol != NULL)
f57d2163
DE
2518 {
2519 /* Still pass NULL for OBJFILE_CONTEXT here. */
d12307c1
PMR
2520 symbol_cache_mark_found (bsc, slot, NULL, result.symbol,
2521 result.block);
f57d2163
DE
2522 return result;
2523 }
af3768e9
DE
2524 }
2525
f57d2163
DE
2526 /* Still pass NULL for OBJFILE_CONTEXT here. */
2527 symbol_cache_mark_not_found (bsc, slot, NULL, name, domain);
d12307c1 2528 return (struct block_symbol) {NULL, NULL};
af3768e9
DE
2529}
2530
19630284
JB
2531/* Private data to be used with lookup_symbol_global_iterator_cb. */
2532
2533struct global_sym_lookup_data
2534{
2535 /* The name of the symbol we are searching for. */
2536 const char *name;
2537
2538 /* The domain to use for our search. */
2539 domain_enum domain;
2540
2541 /* The field where the callback should store the symbol if found.
d12307c1
PMR
2542 It should be initialized to {NULL, NULL} before the search is started. */
2543 struct block_symbol result;
19630284
JB
2544};
2545
2546/* A callback function for gdbarch_iterate_over_objfiles_in_search_order.
2547 It searches by name for a symbol in the GLOBAL_BLOCK of the given
2548 OBJFILE. The arguments for the search are passed via CB_DATA,
2549 which in reality is a pointer to struct global_sym_lookup_data. */
2550
2551static int
2552lookup_symbol_global_iterator_cb (struct objfile *objfile,
2553 void *cb_data)
2554{
2555 struct global_sym_lookup_data *data =
2556 (struct global_sym_lookup_data *) cb_data;
2557
d12307c1
PMR
2558 gdb_assert (data->result.symbol == NULL
2559 && data->result.block == NULL);
19630284 2560
af3768e9
DE
2561 data->result = lookup_symbol_in_objfile (objfile, GLOBAL_BLOCK,
2562 data->name, data->domain);
19630284
JB
2563
2564 /* If we found a match, tell the iterator to stop. Otherwise,
2565 keep going. */
d12307c1 2566 return (data->result.symbol != NULL);
19630284
JB
2567}
2568
cf901d3b 2569/* See symtab.h. */
5f9a71c3 2570
d12307c1 2571struct block_symbol
08724ab7 2572lookup_global_symbol (const char *name,
3a40aaa0 2573 const struct block *block,
21b556f4 2574 const domain_enum domain)
5f9a71c3 2575{
f57d2163 2576 struct symbol_cache *cache = get_symbol_cache (current_program_space);
d12307c1 2577 struct block_symbol result;
f57d2163 2578 struct objfile *objfile;
19630284 2579 struct global_sym_lookup_data lookup_data;
f57d2163
DE
2580 struct block_symbol_cache *bsc;
2581 struct symbol_cache_slot *slot;
b2fb95e0 2582
6a3ca067 2583 objfile = lookup_objfile_from_block (block);
f57d2163
DE
2584
2585 /* First see if we can find the symbol in the cache.
2586 This works because we use the current objfile to qualify the lookup. */
d12307c1
PMR
2587 result = symbol_cache_lookup (cache, objfile, GLOBAL_BLOCK, name, domain,
2588 &bsc, &slot);
2589 if (result.symbol != NULL)
f57d2163 2590 {
d12307c1
PMR
2591 if (SYMBOL_LOOKUP_FAILED_P (result))
2592 return (struct block_symbol) {NULL, NULL};
2593 return result;
f57d2163
DE
2594 }
2595
2596 /* Call library-specific lookup procedure. */
67ff19f7 2597 if (objfile != NULL)
d12307c1 2598 result = solib_global_lookup (objfile, name, domain);
b2fb95e0 2599
f57d2163 2600 /* If that didn't work go a global search (of global blocks, heh). */
d12307c1 2601 if (result.symbol == NULL)
f57d2163
DE
2602 {
2603 memset (&lookup_data, 0, sizeof (lookup_data));
2604 lookup_data.name = name;
2605 lookup_data.domain = domain;
2606 gdbarch_iterate_over_objfiles_in_search_order
2607 (objfile != NULL ? get_objfile_arch (objfile) : target_gdbarch (),
2608 lookup_symbol_global_iterator_cb, &lookup_data, objfile);
d12307c1 2609 result = lookup_data.result;
f57d2163 2610 }
6a3ca067 2611
d12307c1
PMR
2612 if (result.symbol != NULL)
2613 symbol_cache_mark_found (bsc, slot, objfile, result.symbol, result.block);
f57d2163
DE
2614 else
2615 symbol_cache_mark_not_found (bsc, slot, objfile, name, domain);
2616
d12307c1 2617 return result;
5f9a71c3
DC
2618}
2619
4186eb54
KS
2620int
2621symbol_matches_domain (enum language symbol_language,
2622 domain_enum symbol_domain,
2623 domain_enum domain)
2624{
2625 /* For C++ "struct foo { ... }" also defines a typedef for "foo".
4186eb54
KS
2626 Similarly, any Ada type declaration implicitly defines a typedef. */
2627 if (symbol_language == language_cplus
2628 || symbol_language == language_d
65547233
TT
2629 || symbol_language == language_ada
2630 || symbol_language == language_rust)
4186eb54
KS
2631 {
2632 if ((domain == VAR_DOMAIN || domain == STRUCT_DOMAIN)
2633 && symbol_domain == STRUCT_DOMAIN)
2634 return 1;
2635 }
2636 /* For all other languages, strict match is required. */
2637 return (symbol_domain == domain);
2638}
2639
cf901d3b 2640/* See symtab.h. */
c906108c 2641
ccefe4c4
TT
2642struct type *
2643lookup_transparent_type (const char *name)
c906108c 2644{
ccefe4c4
TT
2645 return current_language->la_lookup_transparent_type (name);
2646}
9af17804 2647
ccefe4c4
TT
2648/* A helper for basic_lookup_transparent_type that interfaces with the
2649 "quick" symbol table functions. */
357e46e7 2650
ccefe4c4 2651static struct type *
f88cb4b6 2652basic_lookup_transparent_type_quick (struct objfile *objfile, int block_index,
ccefe4c4
TT
2653 const char *name)
2654{
43f3e411 2655 struct compunit_symtab *cust;
346d1dfe 2656 const struct blockvector *bv;
ccefe4c4
TT
2657 struct block *block;
2658 struct symbol *sym;
c906108c 2659
ccefe4c4
TT
2660 if (!objfile->sf)
2661 return NULL;
43f3e411
DE
2662 cust = objfile->sf->qf->lookup_symbol (objfile, block_index, name,
2663 STRUCT_DOMAIN);
2664 if (cust == NULL)
ccefe4c4 2665 return NULL;
c906108c 2666
43f3e411 2667 bv = COMPUNIT_BLOCKVECTOR (cust);
f88cb4b6 2668 block = BLOCKVECTOR_BLOCK (bv, block_index);
b2e2f908
DE
2669 sym = block_find_symbol (block, name, STRUCT_DOMAIN,
2670 block_find_non_opaque_type, NULL);
2671 if (sym == NULL)
43f3e411 2672 error_in_psymtab_expansion (block_index, name, cust);
b2e2f908
DE
2673 gdb_assert (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)));
2674 return SYMBOL_TYPE (sym);
2675}
08c23b0d 2676
b2e2f908
DE
2677/* Subroutine of basic_lookup_transparent_type to simplify it.
2678 Look up the non-opaque definition of NAME in BLOCK_INDEX of OBJFILE.
2679 BLOCK_INDEX is either GLOBAL_BLOCK or STATIC_BLOCK. */
2680
2681static struct type *
2682basic_lookup_transparent_type_1 (struct objfile *objfile, int block_index,
2683 const char *name)
2684{
2685 const struct compunit_symtab *cust;
2686 const struct blockvector *bv;
2687 const struct block *block;
2688 const struct symbol *sym;
2689
2690 ALL_OBJFILE_COMPUNITS (objfile, cust)
2691 {
2692 bv = COMPUNIT_BLOCKVECTOR (cust);
2693 block = BLOCKVECTOR_BLOCK (bv, block_index);
2694 sym = block_find_symbol (block, name, STRUCT_DOMAIN,
2695 block_find_non_opaque_type, NULL);
2696 if (sym != NULL)
2697 {
2698 gdb_assert (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)));
2699 return SYMBOL_TYPE (sym);
2700 }
2701 }
c906108c 2702
ccefe4c4 2703 return NULL;
b368761e 2704}
c906108c 2705
b368761e
DC
2706/* The standard implementation of lookup_transparent_type. This code
2707 was modeled on lookup_symbol -- the parts not relevant to looking
2708 up types were just left out. In particular it's assumed here that
cf901d3b 2709 types are available in STRUCT_DOMAIN and only in file-static or
b368761e 2710 global blocks. */
c906108c
SS
2711
2712struct type *
b368761e 2713basic_lookup_transparent_type (const char *name)
c906108c 2714{
52f0bd74 2715 struct objfile *objfile;
ccefe4c4 2716 struct type *t;
c906108c
SS
2717
2718 /* Now search all the global symbols. Do the symtab's first, then
c378eb4e 2719 check the psymtab's. If a psymtab indicates the existence
c906108c
SS
2720 of the desired name as a global, then do psymtab-to-symtab
2721 conversion on the fly and return the found symbol. */
c5aa993b 2722
58b6ab13 2723 ALL_OBJFILES (objfile)
c5aa993b 2724 {
b2e2f908
DE
2725 t = basic_lookup_transparent_type_1 (objfile, GLOBAL_BLOCK, name);
2726 if (t)
2727 return t;
c5aa993b 2728 }
c906108c 2729
ccefe4c4 2730 ALL_OBJFILES (objfile)
c5aa993b 2731 {
ccefe4c4
TT
2732 t = basic_lookup_transparent_type_quick (objfile, GLOBAL_BLOCK, name);
2733 if (t)
2734 return t;
c5aa993b 2735 }
c906108c
SS
2736
2737 /* Now search the static file-level symbols.
2738 Not strictly correct, but more useful than an error.
2739 Do the symtab's first, then
c378eb4e 2740 check the psymtab's. If a psymtab indicates the existence
c906108c 2741 of the desired name as a file-level static, then do psymtab-to-symtab
c378eb4e 2742 conversion on the fly and return the found symbol. */
c906108c 2743
54ec275a 2744 ALL_OBJFILES (objfile)
c5aa993b 2745 {
b2e2f908
DE
2746 t = basic_lookup_transparent_type_1 (objfile, STATIC_BLOCK, name);
2747 if (t)
2748 return t;
c5aa993b 2749 }
c906108c 2750
ccefe4c4 2751 ALL_OBJFILES (objfile)
c5aa993b 2752 {
ccefe4c4
TT
2753 t = basic_lookup_transparent_type_quick (objfile, STATIC_BLOCK, name);
2754 if (t)
2755 return t;
c5aa993b 2756 }
ccefe4c4 2757
c906108c
SS
2758 return (struct type *) 0;
2759}
2760
4eeaa230 2761/* Iterate over the symbols named NAME, matching DOMAIN, in BLOCK.
14bc53a8
PA
2762
2763 For each symbol that matches, CALLBACK is called. The symbol is
2764 passed to the callback.
2765
2766 If CALLBACK returns false, the iteration ends. Otherwise, the
4eeaa230 2767 search continues. */
f8eba3c6
TT
2768
2769void
2770iterate_over_symbols (const struct block *block, const char *name,
2771 const domain_enum domain,
14bc53a8 2772 gdb::function_view<symbol_found_callback_ftype> callback)
f8eba3c6 2773{
4eeaa230
DE
2774 struct block_iterator iter;
2775 struct symbol *sym;
f8eba3c6 2776
358d6ab3 2777 ALL_BLOCK_SYMBOLS_WITH_NAME (block, name, iter, sym)
4eeaa230 2778 {
4186eb54
KS
2779 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
2780 SYMBOL_DOMAIN (sym), domain))
f8eba3c6 2781 {
14bc53a8 2782 if (!callback (sym))
4eeaa230 2783 return;
f8eba3c6 2784 }
f8eba3c6
TT
2785 }
2786}
2787
43f3e411
DE
2788/* Find the compunit symtab associated with PC and SECTION.
2789 This will read in debug info as necessary. */
c906108c 2790
43f3e411
DE
2791struct compunit_symtab *
2792find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section)
c906108c 2793{
43f3e411
DE
2794 struct compunit_symtab *cust;
2795 struct compunit_symtab *best_cust = NULL;
52f0bd74 2796 struct objfile *objfile;
c906108c 2797 CORE_ADDR distance = 0;
77e371c0 2798 struct bound_minimal_symbol msymbol;
8a48e967
DJ
2799
2800 /* If we know that this is not a text address, return failure. This is
2801 necessary because we loop based on the block's high and low code
2802 addresses, which do not include the data ranges, and because
2803 we call find_pc_sect_psymtab which has a similar restriction based
2804 on the partial_symtab's texthigh and textlow. */
77e371c0
TT
2805 msymbol = lookup_minimal_symbol_by_pc_section (pc, section);
2806 if (msymbol.minsym
2807 && (MSYMBOL_TYPE (msymbol.minsym) == mst_data
2808 || MSYMBOL_TYPE (msymbol.minsym) == mst_bss
2809 || MSYMBOL_TYPE (msymbol.minsym) == mst_abs
2810 || MSYMBOL_TYPE (msymbol.minsym) == mst_file_data
2811 || MSYMBOL_TYPE (msymbol.minsym) == mst_file_bss))
8a48e967 2812 return NULL;
c906108c
SS
2813
2814 /* Search all symtabs for the one whose file contains our address, and which
2815 is the smallest of all the ones containing the address. This is designed
2816 to deal with a case like symtab a is at 0x1000-0x2000 and 0x3000-0x4000
2817 and symtab b is at 0x2000-0x3000. So the GLOBAL_BLOCK for a is from
2818 0x1000-0x4000, but for address 0x2345 we want to return symtab b.
2819
2820 This happens for native ecoff format, where code from included files
c378eb4e 2821 gets its own symtab. The symtab for the included file should have
c906108c
SS
2822 been read in already via the dependency mechanism.
2823 It might be swifter to create several symtabs with the same name
2824 like xcoff does (I'm not sure).
2825
2826 It also happens for objfiles that have their functions reordered.
2827 For these, the symtab we are looking for is not necessarily read in. */
2828
43f3e411 2829 ALL_COMPUNITS (objfile, cust)
c5aa993b 2830 {
43f3e411
DE
2831 struct block *b;
2832 const struct blockvector *bv;
2833
2834 bv = COMPUNIT_BLOCKVECTOR (cust);
c5aa993b 2835 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
c906108c 2836
c5aa993b 2837 if (BLOCK_START (b) <= pc
c5aa993b 2838 && BLOCK_END (b) > pc
c5aa993b
JM
2839 && (distance == 0
2840 || BLOCK_END (b) - BLOCK_START (b) < distance))
2841 {
2842 /* For an objfile that has its functions reordered,
2843 find_pc_psymtab will find the proper partial symbol table
2844 and we simply return its corresponding symtab. */
2845 /* In order to better support objfiles that contain both
2846 stabs and coff debugging info, we continue on if a psymtab
c378eb4e 2847 can't be found. */
ccefe4c4 2848 if ((objfile->flags & OBJF_REORDERED) && objfile->sf)
c5aa993b 2849 {
43f3e411 2850 struct compunit_symtab *result;
433759f7 2851
ccefe4c4 2852 result
43f3e411
DE
2853 = objfile->sf->qf->find_pc_sect_compunit_symtab (objfile,
2854 msymbol,
2855 pc, section,
2856 0);
2857 if (result != NULL)
ccefe4c4 2858 return result;
c5aa993b
JM
2859 }
2860 if (section != 0)
2861 {
8157b174 2862 struct block_iterator iter;
261397f8 2863 struct symbol *sym = NULL;
c906108c 2864
de4f826b 2865 ALL_BLOCK_SYMBOLS (b, iter, sym)
c5aa993b 2866 {
261397f8 2867 fixup_symbol_section (sym, objfile);
e27d198c
TT
2868 if (matching_obj_sections (SYMBOL_OBJ_SECTION (objfile, sym),
2869 section))
c5aa993b
JM
2870 break;
2871 }
de4f826b 2872 if (sym == NULL)
c378eb4e
MS
2873 continue; /* No symbol in this symtab matches
2874 section. */
c5aa993b
JM
2875 }
2876 distance = BLOCK_END (b) - BLOCK_START (b);
43f3e411 2877 best_cust = cust;
c5aa993b
JM
2878 }
2879 }
c906108c 2880
43f3e411
DE
2881 if (best_cust != NULL)
2882 return best_cust;
c906108c 2883
072cabfe
DE
2884 /* Not found in symtabs, search the "quick" symtabs (e.g. psymtabs). */
2885
ccefe4c4
TT
2886 ALL_OBJFILES (objfile)
2887 {
43f3e411 2888 struct compunit_symtab *result;
433759f7 2889
ccefe4c4
TT
2890 if (!objfile->sf)
2891 continue;
43f3e411
DE
2892 result = objfile->sf->qf->find_pc_sect_compunit_symtab (objfile,
2893 msymbol,
2894 pc, section,
2895 1);
2896 if (result != NULL)
ccefe4c4
TT
2897 return result;
2898 }
2899
2900 return NULL;
c906108c
SS
2901}
2902
43f3e411
DE
2903/* Find the compunit symtab associated with PC.
2904 This will read in debug info as necessary.
2905 Backward compatibility, no section. */
c906108c 2906
43f3e411
DE
2907struct compunit_symtab *
2908find_pc_compunit_symtab (CORE_ADDR pc)
c906108c 2909{
43f3e411 2910 return find_pc_sect_compunit_symtab (pc, find_pc_mapped_section (pc));
c906108c 2911}
c906108c 2912\f
c5aa993b 2913
7e73cedf 2914/* Find the source file and line number for a given PC value and SECTION.
c906108c
SS
2915 Return a structure containing a symtab pointer, a line number,
2916 and a pc range for the entire source line.
2917 The value's .pc field is NOT the specified pc.
2918 NOTCURRENT nonzero means, if specified pc is on a line boundary,
2919 use the line that ends there. Otherwise, in that case, the line
2920 that begins there is used. */
2921
2922/* The big complication here is that a line may start in one file, and end just
2923 before the start of another file. This usually occurs when you #include
2924 code in the middle of a subroutine. To properly find the end of a line's PC
2925 range, we must search all symtabs associated with this compilation unit, and
2926 find the one whose first PC is closer than that of the next line in this
2927 symtab. */
2928
2929/* If it's worth the effort, we could be using a binary search. */
2930
2931struct symtab_and_line
714835d5 2932find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
c906108c 2933{
43f3e411
DE
2934 struct compunit_symtab *cust;
2935 struct symtab *iter_s;
52f0bd74
AC
2936 struct linetable *l;
2937 int len;
2938 int i;
2939 struct linetable_entry *item;
346d1dfe 2940 const struct blockvector *bv;
7cbd4a93 2941 struct bound_minimal_symbol msymbol;
c906108c
SS
2942
2943 /* Info on best line seen so far, and where it starts, and its file. */
2944
2945 struct linetable_entry *best = NULL;
2946 CORE_ADDR best_end = 0;
2947 struct symtab *best_symtab = 0;
2948
2949 /* Store here the first line number
2950 of a file which contains the line at the smallest pc after PC.
2951 If we don't find a line whose range contains PC,
2952 we will use a line one less than this,
2953 with a range from the start of that file to the first line's pc. */
2954 struct linetable_entry *alt = NULL;
c906108c
SS
2955
2956 /* Info on best line seen in this file. */
2957
2958 struct linetable_entry *prev;
2959
2960 /* If this pc is not from the current frame,
2961 it is the address of the end of a call instruction.
2962 Quite likely that is the start of the following statement.
2963 But what we want is the statement containing the instruction.
2964 Fudge the pc to make sure we get that. */
2965
b77b1eb7
JB
2966 /* It's tempting to assume that, if we can't find debugging info for
2967 any function enclosing PC, that we shouldn't search for line
2968 number info, either. However, GAS can emit line number info for
2969 assembly files --- very helpful when debugging hand-written
2970 assembly code. In such a case, we'd have no debug info for the
2971 function, but we would have line info. */
648f4f79 2972
c906108c
SS
2973 if (notcurrent)
2974 pc -= 1;
2975
c5aa993b 2976 /* elz: added this because this function returned the wrong
c906108c 2977 information if the pc belongs to a stub (import/export)
c378eb4e 2978 to call a shlib function. This stub would be anywhere between
9af17804 2979 two functions in the target, and the line info was erroneously
c378eb4e
MS
2980 taken to be the one of the line before the pc. */
2981
c906108c 2982 /* RT: Further explanation:
c5aa993b 2983
c906108c
SS
2984 * We have stubs (trampolines) inserted between procedures.
2985 *
2986 * Example: "shr1" exists in a shared library, and a "shr1" stub also
2987 * exists in the main image.
2988 *
2989 * In the minimal symbol table, we have a bunch of symbols
c378eb4e 2990 * sorted by start address. The stubs are marked as "trampoline",
c906108c
SS
2991 * the others appear as text. E.g.:
2992 *
9af17804 2993 * Minimal symbol table for main image
c906108c
SS
2994 * main: code for main (text symbol)
2995 * shr1: stub (trampoline symbol)
2996 * foo: code for foo (text symbol)
2997 * ...
2998 * Minimal symbol table for "shr1" image:
2999 * ...
3000 * shr1: code for shr1 (text symbol)
3001 * ...
3002 *
3003 * So the code below is trying to detect if we are in the stub
3004 * ("shr1" stub), and if so, find the real code ("shr1" trampoline),
3005 * and if found, do the symbolization from the real-code address
3006 * rather than the stub address.
3007 *
3008 * Assumptions being made about the minimal symbol table:
3009 * 1. lookup_minimal_symbol_by_pc() will return a trampoline only
c378eb4e 3010 * if we're really in the trampoline.s If we're beyond it (say
9af17804 3011 * we're in "foo" in the above example), it'll have a closer
c906108c
SS
3012 * symbol (the "foo" text symbol for example) and will not
3013 * return the trampoline.
3014 * 2. lookup_minimal_symbol_text() will find a real text symbol
3015 * corresponding to the trampoline, and whose address will
c378eb4e 3016 * be different than the trampoline address. I put in a sanity
c906108c
SS
3017 * check for the address being the same, to avoid an
3018 * infinite recursion.
3019 */
c5aa993b 3020 msymbol = lookup_minimal_symbol_by_pc (pc);
7cbd4a93
TT
3021 if (msymbol.minsym != NULL)
3022 if (MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline)
c5aa993b 3023 {
77e371c0 3024 struct bound_minimal_symbol mfunsym
efd66ac6 3025 = lookup_minimal_symbol_text (MSYMBOL_LINKAGE_NAME (msymbol.minsym),
77e371c0
TT
3026 NULL);
3027
3028 if (mfunsym.minsym == NULL)
c5aa993b
JM
3029 /* I eliminated this warning since it is coming out
3030 * in the following situation:
3031 * gdb shmain // test program with shared libraries
3032 * (gdb) break shr1 // function in shared lib
3033 * Warning: In stub for ...
9af17804 3034 * In the above situation, the shared lib is not loaded yet,
c5aa993b
JM
3035 * so of course we can't find the real func/line info,
3036 * but the "break" still works, and the warning is annoying.
c378eb4e 3037 * So I commented out the warning. RT */
3e43a32a 3038 /* warning ("In stub for %s; unable to find real function/line info",
c378eb4e
MS
3039 SYMBOL_LINKAGE_NAME (msymbol)); */
3040 ;
c5aa993b 3041 /* fall through */
77e371c0
TT
3042 else if (BMSYMBOL_VALUE_ADDRESS (mfunsym)
3043 == BMSYMBOL_VALUE_ADDRESS (msymbol))
c5aa993b 3044 /* Avoid infinite recursion */
c378eb4e 3045 /* See above comment about why warning is commented out. */
3e43a32a 3046 /* warning ("In stub for %s; unable to find real function/line info",
c378eb4e
MS
3047 SYMBOL_LINKAGE_NAME (msymbol)); */
3048 ;
c5aa993b
JM
3049 /* fall through */
3050 else
77e371c0 3051 return find_pc_line (BMSYMBOL_VALUE_ADDRESS (mfunsym), 0);
c5aa993b 3052 }
c906108c 3053
51abb421
PA
3054 symtab_and_line val;
3055 val.pspace = current_program_space;
c906108c 3056
43f3e411
DE
3057 cust = find_pc_sect_compunit_symtab (pc, section);
3058 if (cust == NULL)
c906108c 3059 {
c378eb4e 3060 /* If no symbol information, return previous pc. */
c906108c
SS
3061 if (notcurrent)
3062 pc++;
3063 val.pc = pc;
3064 return val;
3065 }
3066
43f3e411 3067 bv = COMPUNIT_BLOCKVECTOR (cust);
c906108c
SS
3068
3069 /* Look at all the symtabs that share this blockvector.
3070 They all have the same apriori range, that we found was right;
3071 but they have different line tables. */
3072
43f3e411 3073 ALL_COMPUNIT_FILETABS (cust, iter_s)
c906108c
SS
3074 {
3075 /* Find the best line in this symtab. */
43f3e411 3076 l = SYMTAB_LINETABLE (iter_s);
c906108c 3077 if (!l)
c5aa993b 3078 continue;
c906108c
SS
3079 len = l->nitems;
3080 if (len <= 0)
3081 {
3082 /* I think len can be zero if the symtab lacks line numbers
3083 (e.g. gcc -g1). (Either that or the LINETABLE is NULL;
3084 I'm not sure which, and maybe it depends on the symbol
3085 reader). */
3086 continue;
3087 }
3088
3089 prev = NULL;
c378eb4e 3090 item = l->item; /* Get first line info. */
c906108c
SS
3091
3092 /* Is this file's first line closer than the first lines of other files?
c5aa993b 3093 If so, record this file, and its first line, as best alternate. */
c906108c 3094 if (item->pc > pc && (!alt || item->pc < alt->pc))
c656bca5 3095 alt = item;
c906108c
SS
3096
3097 for (i = 0; i < len; i++, item++)
3098 {
3099 /* Leave prev pointing to the linetable entry for the last line
3100 that started at or before PC. */
3101 if (item->pc > pc)
3102 break;
3103
3104 prev = item;
3105 }
3106
3107 /* At this point, prev points at the line whose start addr is <= pc, and
c5aa993b
JM
3108 item points at the next line. If we ran off the end of the linetable
3109 (pc >= start of the last line), then prev == item. If pc < start of
3110 the first line, prev will not be set. */
c906108c
SS
3111
3112 /* Is this file's best line closer than the best in the other files?
083ae935
DJ
3113 If so, record this file, and its best line, as best so far. Don't
3114 save prev if it represents the end of a function (i.e. line number
3115 0) instead of a real line. */
c906108c 3116
083ae935 3117 if (prev && prev->line && (!best || prev->pc > best->pc))
c906108c
SS
3118 {
3119 best = prev;
43f3e411 3120 best_symtab = iter_s;
25d53da1
KB
3121
3122 /* Discard BEST_END if it's before the PC of the current BEST. */
3123 if (best_end <= best->pc)
3124 best_end = 0;
c906108c 3125 }
25d53da1
KB
3126
3127 /* If another line (denoted by ITEM) is in the linetable and its
3128 PC is after BEST's PC, but before the current BEST_END, then
3129 use ITEM's PC as the new best_end. */
3130 if (best && i < len && item->pc > best->pc
3131 && (best_end == 0 || best_end > item->pc))
3132 best_end = item->pc;
c906108c
SS
3133 }
3134
3135 if (!best_symtab)
3136 {
e86e87f7
DJ
3137 /* If we didn't find any line number info, just return zeros.
3138 We used to return alt->line - 1 here, but that could be
3139 anywhere; if we don't have line number info for this PC,
3140 don't make some up. */
3141 val.pc = pc;
c906108c 3142 }
e8717518
FF
3143 else if (best->line == 0)
3144 {
3145 /* If our best fit is in a range of PC's for which no line
3146 number info is available (line number is zero) then we didn't
c378eb4e 3147 find any valid line information. */
e8717518
FF
3148 val.pc = pc;
3149 }
c906108c
SS
3150 else
3151 {
3152 val.symtab = best_symtab;
3153 val.line = best->line;
3154 val.pc = best->pc;
3155 if (best_end && (!alt || best_end < alt->pc))
3156 val.end = best_end;
3157 else if (alt)
3158 val.end = alt->pc;
3159 else
3160 val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
3161 }
3162 val.section = section;
3163 return val;
3164}
3165
c378eb4e 3166/* Backward compatibility (no section). */
c906108c
SS
3167
3168struct symtab_and_line
fba45db2 3169find_pc_line (CORE_ADDR pc, int notcurrent)
c906108c 3170{
714835d5 3171 struct obj_section *section;
c906108c
SS
3172
3173 section = find_pc_overlay (pc);
3174 if (pc_in_unmapped_range (pc, section))
3175 pc = overlay_mapped_address (pc, section);
3176 return find_pc_sect_line (pc, section, notcurrent);
3177}
34248c3a
DE
3178
3179/* See symtab.h. */
3180
3181struct symtab *
3182find_pc_line_symtab (CORE_ADDR pc)
3183{
3184 struct symtab_and_line sal;
3185
3186 /* This always passes zero for NOTCURRENT to find_pc_line.
3187 There are currently no callers that ever pass non-zero. */
3188 sal = find_pc_line (pc, 0);
3189 return sal.symtab;
3190}
c906108c 3191\f
c906108c
SS
3192/* Find line number LINE in any symtab whose name is the same as
3193 SYMTAB.
3194
3195 If found, return the symtab that contains the linetable in which it was
3196 found, set *INDEX to the index in the linetable of the best entry
3197 found, and set *EXACT_MATCH nonzero if the value returned is an
3198 exact match.
3199
3200 If not found, return NULL. */
3201
50641945 3202struct symtab *
433759f7
MS
3203find_line_symtab (struct symtab *symtab, int line,
3204 int *index, int *exact_match)
c906108c 3205{
6f43c46f 3206 int exact = 0; /* Initialized here to avoid a compiler warning. */
c906108c
SS
3207
3208 /* BEST_INDEX and BEST_LINETABLE identify the smallest linenumber > LINE
3209 so far seen. */
3210
3211 int best_index;
3212 struct linetable *best_linetable;
3213 struct symtab *best_symtab;
3214
3215 /* First try looking it up in the given symtab. */
8435453b 3216 best_linetable = SYMTAB_LINETABLE (symtab);
c906108c 3217 best_symtab = symtab;
f8eba3c6 3218 best_index = find_line_common (best_linetable, line, &exact, 0);
c906108c
SS
3219 if (best_index < 0 || !exact)
3220 {
3221 /* Didn't find an exact match. So we better keep looking for
c5aa993b
JM
3222 another symtab with the same name. In the case of xcoff,
3223 multiple csects for one source file (produced by IBM's FORTRAN
3224 compiler) produce multiple symtabs (this is unavoidable
3225 assuming csects can be at arbitrary places in memory and that
3226 the GLOBAL_BLOCK of a symtab has a begin and end address). */
c906108c
SS
3227
3228 /* BEST is the smallest linenumber > LINE so far seen,
c5aa993b
JM
3229 or 0 if none has been seen so far.
3230 BEST_INDEX and BEST_LINETABLE identify the item for it. */
c906108c
SS
3231 int best;
3232
3233 struct objfile *objfile;
43f3e411 3234 struct compunit_symtab *cu;
c906108c
SS
3235 struct symtab *s;
3236
3237 if (best_index >= 0)
3238 best = best_linetable->item[best_index].line;
3239 else
3240 best = 0;
3241
ccefe4c4 3242 ALL_OBJFILES (objfile)
51432cca 3243 {
ccefe4c4 3244 if (objfile->sf)
652a8996 3245 objfile->sf->qf->expand_symtabs_with_fullname (objfile,
05cba821 3246 symtab_to_fullname (symtab));
51432cca
CES
3247 }
3248
43f3e411 3249 ALL_FILETABS (objfile, cu, s)
c5aa993b
JM
3250 {
3251 struct linetable *l;
3252 int ind;
c906108c 3253
3ffc00b8 3254 if (FILENAME_CMP (symtab->filename, s->filename) != 0)
c5aa993b 3255 continue;
d180bcbd
JK
3256 if (FILENAME_CMP (symtab_to_fullname (symtab),
3257 symtab_to_fullname (s)) != 0)
3ffc00b8 3258 continue;
8435453b 3259 l = SYMTAB_LINETABLE (s);
f8eba3c6 3260 ind = find_line_common (l, line, &exact, 0);
c5aa993b
JM
3261 if (ind >= 0)
3262 {
3263 if (exact)
3264 {
3265 best_index = ind;
3266 best_linetable = l;
3267 best_symtab = s;
3268 goto done;
3269 }
3270 if (best == 0 || l->item[ind].line < best)
3271 {
3272 best = l->item[ind].line;
3273 best_index = ind;
3274 best_linetable = l;
3275 best_symtab = s;
3276 }
3277 }
3278 }
c906108c 3279 }
c5aa993b 3280done:
c906108c
SS
3281 if (best_index < 0)
3282 return NULL;
3283
3284 if (index)
3285 *index = best_index;
3286 if (exact_match)
3287 *exact_match = exact;
3288
3289 return best_symtab;
3290}
f8eba3c6
TT
3291
3292/* Given SYMTAB, returns all the PCs function in the symtab that
67d89901
TT
3293 exactly match LINE. Returns an empty vector if there are no exact
3294 matches, but updates BEST_ITEM in this case. */
f8eba3c6 3295
67d89901 3296std::vector<CORE_ADDR>
f8eba3c6
TT
3297find_pcs_for_symtab_line (struct symtab *symtab, int line,
3298 struct linetable_entry **best_item)
3299{
c656bca5 3300 int start = 0;
67d89901 3301 std::vector<CORE_ADDR> result;
f8eba3c6
TT
3302
3303 /* First, collect all the PCs that are at this line. */
3304 while (1)
3305 {
3306 int was_exact;
3307 int idx;
3308
8435453b
DE
3309 idx = find_line_common (SYMTAB_LINETABLE (symtab), line, &was_exact,
3310 start);
f8eba3c6
TT
3311 if (idx < 0)
3312 break;
3313
3314 if (!was_exact)
3315 {
8435453b 3316 struct linetable_entry *item = &SYMTAB_LINETABLE (symtab)->item[idx];
f8eba3c6
TT
3317
3318 if (*best_item == NULL || item->line < (*best_item)->line)
3319 *best_item = item;
3320
3321 break;
3322 }
3323
67d89901 3324 result.push_back (SYMTAB_LINETABLE (symtab)->item[idx].pc);
f8eba3c6
TT
3325 start = idx + 1;
3326 }
3327
3328 return result;
3329}
3330
c906108c
SS
3331\f
3332/* Set the PC value for a given source file and line number and return true.
3333 Returns zero for invalid line number (and sets the PC to 0).
3334 The source file is specified with a struct symtab. */
3335
3336int
fba45db2 3337find_line_pc (struct symtab *symtab, int line, CORE_ADDR *pc)
c906108c
SS
3338{
3339 struct linetable *l;
3340 int ind;
3341
3342 *pc = 0;
3343 if (symtab == 0)
3344 return 0;
3345
3346 symtab = find_line_symtab (symtab, line, &ind, NULL);
3347 if (symtab != NULL)
3348 {
8435453b 3349 l = SYMTAB_LINETABLE (symtab);
c906108c
SS
3350 *pc = l->item[ind].pc;
3351 return 1;
3352 }
3353 else
3354 return 0;
3355}
3356
3357/* Find the range of pc values in a line.
3358 Store the starting pc of the line into *STARTPTR
3359 and the ending pc (start of next line) into *ENDPTR.
3360 Returns 1 to indicate success.
3361 Returns 0 if could not find the specified line. */
3362
3363int
fba45db2
KB
3364find_line_pc_range (struct symtab_and_line sal, CORE_ADDR *startptr,
3365 CORE_ADDR *endptr)
c906108c
SS
3366{
3367 CORE_ADDR startaddr;
3368 struct symtab_and_line found_sal;
3369
3370 startaddr = sal.pc;
c5aa993b 3371 if (startaddr == 0 && !find_line_pc (sal.symtab, sal.line, &startaddr))
c906108c
SS
3372 return 0;
3373
3374 /* This whole function is based on address. For example, if line 10 has
3375 two parts, one from 0x100 to 0x200 and one from 0x300 to 0x400, then
3376 "info line *0x123" should say the line goes from 0x100 to 0x200
3377 and "info line *0x355" should say the line goes from 0x300 to 0x400.
3378 This also insures that we never give a range like "starts at 0x134
3379 and ends at 0x12c". */
3380
3381 found_sal = find_pc_sect_line (startaddr, sal.section, 0);
3382 if (found_sal.line != sal.line)
3383 {
3384 /* The specified line (sal) has zero bytes. */
3385 *startptr = found_sal.pc;
3386 *endptr = found_sal.pc;
3387 }
3388 else
3389 {
3390 *startptr = found_sal.pc;
3391 *endptr = found_sal.end;
3392 }
3393 return 1;
3394}
3395
3396/* Given a line table and a line number, return the index into the line
3397 table for the pc of the nearest line whose number is >= the specified one.
3398 Return -1 if none is found. The value is >= 0 if it is an index.
f8eba3c6 3399 START is the index at which to start searching the line table.
c906108c
SS
3400
3401 Set *EXACT_MATCH nonzero if the value returned is an exact match. */
3402
3403static int
aa1ee363 3404find_line_common (struct linetable *l, int lineno,
f8eba3c6 3405 int *exact_match, int start)
c906108c 3406{
52f0bd74
AC
3407 int i;
3408 int len;
c906108c
SS
3409
3410 /* BEST is the smallest linenumber > LINENO so far seen,
3411 or 0 if none has been seen so far.
3412 BEST_INDEX identifies the item for it. */
3413
3414 int best_index = -1;
3415 int best = 0;
3416
b7589f7d
DJ
3417 *exact_match = 0;
3418
c906108c
SS
3419 if (lineno <= 0)
3420 return -1;
3421 if (l == 0)
3422 return -1;
3423
3424 len = l->nitems;
f8eba3c6 3425 for (i = start; i < len; i++)
c906108c 3426 {
aa1ee363 3427 struct linetable_entry *item = &(l->item[i]);
c906108c
SS
3428
3429 if (item->line == lineno)
3430 {
3431 /* Return the first (lowest address) entry which matches. */
3432 *exact_match = 1;
3433 return i;
3434 }
3435
3436 if (item->line > lineno && (best == 0 || item->line < best))
3437 {
3438 best = item->line;
3439 best_index = i;
3440 }
3441 }
3442
3443 /* If we got here, we didn't get an exact match. */
c906108c
SS
3444 return best_index;
3445}
3446
3447int
fba45db2 3448find_pc_line_pc_range (CORE_ADDR pc, CORE_ADDR *startptr, CORE_ADDR *endptr)
c906108c
SS
3449{
3450 struct symtab_and_line sal;
433759f7 3451
c906108c
SS
3452 sal = find_pc_line (pc, 0);
3453 *startptr = sal.pc;
3454 *endptr = sal.end;
3455 return sal.symtab != 0;
3456}
3457
aab2f208
DE
3458/* Given a function symbol SYM, find the symtab and line for the start
3459 of the function.
3460 If the argument FUNFIRSTLINE is nonzero, we want the first line
6e22494e
JK
3461 of real code inside the function.
3462 This function should return SALs matching those from minsym_found,
3463 otherwise false multiple-locations breakpoints could be placed. */
aab2f208
DE
3464
3465struct symtab_and_line
3466find_function_start_sal (struct symbol *sym, int funfirstline)
3467{
aab2f208 3468 fixup_symbol_section (sym, NULL);
51abb421
PA
3469
3470 obj_section *section = SYMBOL_OBJ_SECTION (symbol_objfile (sym), sym);
3471 symtab_and_line sal
3472 = find_pc_sect_line (BLOCK_START (SYMBOL_BLOCK_VALUE (sym)), section, 0);
06871ae8 3473 sal.symbol = sym;
aab2f208 3474
6e22494e
JK
3475 if (funfirstline && sal.symtab != NULL
3476 && (COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (sal.symtab))
3477 || SYMTAB_LANGUAGE (sal.symtab) == language_asm))
3478 {
141c5cc4
JK
3479 struct gdbarch *gdbarch = symbol_arch (sym);
3480
6e22494e 3481 sal.pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
141c5cc4
JK
3482 if (gdbarch_skip_entrypoint_p (gdbarch))
3483 sal.pc = gdbarch_skip_entrypoint (gdbarch, sal.pc);
6e22494e
JK
3484 return sal;
3485 }
3486
aab2f208
DE
3487 /* We always should have a line for the function start address.
3488 If we don't, something is odd. Create a plain SAL refering
3489 just the PC and hope that skip_prologue_sal (if requested)
3490 can find a line number for after the prologue. */
3491 if (sal.pc < BLOCK_START (SYMBOL_BLOCK_VALUE (sym)))
3492 {
51abb421 3493 sal = {};
aab2f208
DE
3494 sal.pspace = current_program_space;
3495 sal.pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
08be3fe3 3496 sal.section = section;
06871ae8 3497 sal.symbol = sym;
aab2f208
DE
3498 }
3499
3500 if (funfirstline)
3501 skip_prologue_sal (&sal);
3502
3503 return sal;
3504}
3505
8c7a1ee8
EZ
3506/* Given a function start address FUNC_ADDR and SYMTAB, find the first
3507 address for that function that has an entry in SYMTAB's line info
3508 table. If such an entry cannot be found, return FUNC_ADDR
3509 unaltered. */
eca864fe 3510
70221824 3511static CORE_ADDR
8c7a1ee8
EZ
3512skip_prologue_using_lineinfo (CORE_ADDR func_addr, struct symtab *symtab)
3513{
3514 CORE_ADDR func_start, func_end;
3515 struct linetable *l;
952a6d41 3516 int i;
8c7a1ee8
EZ
3517
3518 /* Give up if this symbol has no lineinfo table. */
8435453b 3519 l = SYMTAB_LINETABLE (symtab);
8c7a1ee8
EZ
3520 if (l == NULL)
3521 return func_addr;
3522
3523 /* Get the range for the function's PC values, or give up if we
3524 cannot, for some reason. */
3525 if (!find_pc_partial_function (func_addr, NULL, &func_start, &func_end))
3526 return func_addr;
3527
3528 /* Linetable entries are ordered by PC values, see the commentary in
3529 symtab.h where `struct linetable' is defined. Thus, the first
3530 entry whose PC is in the range [FUNC_START..FUNC_END[ is the
3531 address we are looking for. */
3532 for (i = 0; i < l->nitems; i++)
3533 {
3534 struct linetable_entry *item = &(l->item[i]);
3535
3536 /* Don't use line numbers of zero, they mark special entries in
3537 the table. See the commentary on symtab.h before the
3538 definition of struct linetable. */
3539 if (item->line > 0 && func_start <= item->pc && item->pc < func_end)
3540 return item->pc;
3541 }
3542
3543 return func_addr;
3544}
3545
059acae7
UW
3546/* Adjust SAL to the first instruction past the function prologue.
3547 If the PC was explicitly specified, the SAL is not changed.
3548 If the line number was explicitly specified, at most the SAL's PC
3549 is updated. If SAL is already past the prologue, then do nothing. */
eca864fe 3550
059acae7
UW
3551void
3552skip_prologue_sal (struct symtab_and_line *sal)
3553{
3554 struct symbol *sym;
3555 struct symtab_and_line start_sal;
8be455d7 3556 CORE_ADDR pc, saved_pc;
059acae7
UW
3557 struct obj_section *section;
3558 const char *name;
3559 struct objfile *objfile;
3560 struct gdbarch *gdbarch;
3977b71f 3561 const struct block *b, *function_block;
8be455d7 3562 int force_skip, skip;
c906108c 3563
a4b411d6 3564 /* Do not change the SAL if PC was specified explicitly. */
059acae7
UW
3565 if (sal->explicit_pc)
3566 return;
6c95b8df 3567
5ed8105e
PA
3568 scoped_restore_current_pspace_and_thread restore_pspace_thread;
3569
059acae7 3570 switch_to_program_space_and_thread (sal->pspace);
6c95b8df 3571
059acae7
UW
3572 sym = find_pc_sect_function (sal->pc, sal->section);
3573 if (sym != NULL)
bccdca4a 3574 {
059acae7
UW
3575 fixup_symbol_section (sym, NULL);
3576
08be3fe3 3577 objfile = symbol_objfile (sym);
059acae7 3578 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
08be3fe3 3579 section = SYMBOL_OBJ_SECTION (objfile, sym);
059acae7 3580 name = SYMBOL_LINKAGE_NAME (sym);
c906108c 3581 }
059acae7
UW
3582 else
3583 {
7c7b6655
TT
3584 struct bound_minimal_symbol msymbol
3585 = lookup_minimal_symbol_by_pc_section (sal->pc, sal->section);
433759f7 3586
7c7b6655 3587 if (msymbol.minsym == NULL)
5ed8105e 3588 return;
059acae7 3589
7c7b6655 3590 objfile = msymbol.objfile;
77e371c0 3591 pc = BMSYMBOL_VALUE_ADDRESS (msymbol);
efd66ac6
TT
3592 section = MSYMBOL_OBJ_SECTION (objfile, msymbol.minsym);
3593 name = MSYMBOL_LINKAGE_NAME (msymbol.minsym);
059acae7
UW
3594 }
3595
3596 gdbarch = get_objfile_arch (objfile);
3597
8be455d7
JK
3598 /* Process the prologue in two passes. In the first pass try to skip the
3599 prologue (SKIP is true) and verify there is a real need for it (indicated
3600 by FORCE_SKIP). If no such reason was found run a second pass where the
3601 prologue is not skipped (SKIP is false). */
059acae7 3602
8be455d7
JK
3603 skip = 1;
3604 force_skip = 1;
059acae7 3605
8be455d7
JK
3606 /* Be conservative - allow direct PC (without skipping prologue) only if we
3607 have proven the CU (Compilation Unit) supports it. sal->SYMTAB does not
3608 have to be set by the caller so we use SYM instead. */
08be3fe3
DE
3609 if (sym != NULL
3610 && COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (symbol_symtab (sym))))
8be455d7 3611 force_skip = 0;
059acae7 3612
8be455d7
JK
3613 saved_pc = pc;
3614 do
c906108c 3615 {
8be455d7 3616 pc = saved_pc;
4309257c 3617
8be455d7
JK
3618 /* If the function is in an unmapped overlay, use its unmapped LMA address,
3619 so that gdbarch_skip_prologue has something unique to work on. */
3620 if (section_is_overlay (section) && !section_is_mapped (section))
3621 pc = overlay_unmapped_address (pc, section);
3622
3623 /* Skip "first line" of function (which is actually its prologue). */
3624 pc += gdbarch_deprecated_function_start_offset (gdbarch);
591a12a1
UW
3625 if (gdbarch_skip_entrypoint_p (gdbarch))
3626 pc = gdbarch_skip_entrypoint (gdbarch, pc);
8be455d7 3627 if (skip)
46a62268 3628 pc = gdbarch_skip_prologue_noexcept (gdbarch, pc);
8be455d7
JK
3629
3630 /* For overlays, map pc back into its mapped VMA range. */
3631 pc = overlay_mapped_address (pc, section);
3632
3633 /* Calculate line number. */
059acae7 3634 start_sal = find_pc_sect_line (pc, section, 0);
8be455d7
JK
3635
3636 /* Check if gdbarch_skip_prologue left us in mid-line, and the next
3637 line is still part of the same function. */
3638 if (skip && start_sal.pc != pc
b1d96efd
JK
3639 && (sym ? (BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) <= start_sal.end
3640 && start_sal.end < BLOCK_END (SYMBOL_BLOCK_VALUE (sym)))
7cbd4a93
TT
3641 : (lookup_minimal_symbol_by_pc_section (start_sal.end, section).minsym
3642 == lookup_minimal_symbol_by_pc_section (pc, section).minsym)))
8be455d7
JK
3643 {
3644 /* First pc of next line */
3645 pc = start_sal.end;
3646 /* Recalculate the line number (might not be N+1). */
3647 start_sal = find_pc_sect_line (pc, section, 0);
3648 }
3649
3650 /* On targets with executable formats that don't have a concept of
3651 constructors (ELF with .init has, PE doesn't), gcc emits a call
3652 to `__main' in `main' between the prologue and before user
3653 code. */
3654 if (gdbarch_skip_main_prologue_p (gdbarch)
7ccffd7c 3655 && name && strcmp_iw (name, "main") == 0)
8be455d7
JK
3656 {
3657 pc = gdbarch_skip_main_prologue (gdbarch, pc);
3658 /* Recalculate the line number (might not be N+1). */
3659 start_sal = find_pc_sect_line (pc, section, 0);
3660 force_skip = 1;
3661 }
4309257c 3662 }
8be455d7 3663 while (!force_skip && skip--);
4309257c 3664
8c7a1ee8
EZ
3665 /* If we still don't have a valid source line, try to find the first
3666 PC in the lineinfo table that belongs to the same function. This
3667 happens with COFF debug info, which does not seem to have an
3668 entry in lineinfo table for the code after the prologue which has
3669 no direct relation to source. For example, this was found to be
3670 the case with the DJGPP target using "gcc -gcoff" when the
3671 compiler inserted code after the prologue to make sure the stack
3672 is aligned. */
8be455d7 3673 if (!force_skip && sym && start_sal.symtab == NULL)
8c7a1ee8 3674 {
08be3fe3 3675 pc = skip_prologue_using_lineinfo (pc, symbol_symtab (sym));
8c7a1ee8 3676 /* Recalculate the line number. */
059acae7 3677 start_sal = find_pc_sect_line (pc, section, 0);
8c7a1ee8
EZ
3678 }
3679
059acae7
UW
3680 /* If we're already past the prologue, leave SAL unchanged. Otherwise
3681 forward SAL to the end of the prologue. */
3682 if (sal->pc >= pc)
3683 return;
3684
3685 sal->pc = pc;
3686 sal->section = section;
3687
3688 /* Unless the explicit_line flag was set, update the SAL line
3689 and symtab to correspond to the modified PC location. */
3690 if (sal->explicit_line)
3691 return;
3692
3693 sal->symtab = start_sal.symtab;
3694 sal->line = start_sal.line;
3695 sal->end = start_sal.end;
c906108c 3696
edb3359d
DJ
3697 /* Check if we are now inside an inlined function. If we can,
3698 use the call site of the function instead. */
059acae7 3699 b = block_for_pc_sect (sal->pc, sal->section);
edb3359d
DJ
3700 function_block = NULL;
3701 while (b != NULL)
3702 {
3703 if (BLOCK_FUNCTION (b) != NULL && block_inlined_p (b))
3704 function_block = b;
3705 else if (BLOCK_FUNCTION (b) != NULL)
3706 break;
3707 b = BLOCK_SUPERBLOCK (b);
3708 }
3709 if (function_block != NULL
3710 && SYMBOL_LINE (BLOCK_FUNCTION (function_block)) != 0)
3711 {
059acae7 3712 sal->line = SYMBOL_LINE (BLOCK_FUNCTION (function_block));
08be3fe3 3713 sal->symtab = symbol_symtab (BLOCK_FUNCTION (function_block));
edb3359d 3714 }
c906108c 3715}
50641945 3716
f1f58506
DE
3717/* Given PC at the function's start address, attempt to find the
3718 prologue end using SAL information. Return zero if the skip fails.
3719
3720 A non-optimized prologue traditionally has one SAL for the function
3721 and a second for the function body. A single line function has
3722 them both pointing at the same line.
3723
3724 An optimized prologue is similar but the prologue may contain
3725 instructions (SALs) from the instruction body. Need to skip those
3726 while not getting into the function body.
3727
3728 The functions end point and an increasing SAL line are used as
3729 indicators of the prologue's endpoint.
3730
3731 This code is based on the function refine_prologue_limit
3732 (found in ia64). */
3733
3734CORE_ADDR
3735skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
3736{
3737 struct symtab_and_line prologue_sal;
3738 CORE_ADDR start_pc;
3739 CORE_ADDR end_pc;
3740 const struct block *bl;
3741
3742 /* Get an initial range for the function. */
3743 find_pc_partial_function (func_addr, NULL, &start_pc, &end_pc);
3744 start_pc += gdbarch_deprecated_function_start_offset (gdbarch);
3745
3746 prologue_sal = find_pc_line (start_pc, 0);
3747 if (prologue_sal.line != 0)
3748 {
3749 /* For languages other than assembly, treat two consecutive line
3750 entries at the same address as a zero-instruction prologue.
3751 The GNU assembler emits separate line notes for each instruction
3752 in a multi-instruction macro, but compilers generally will not
3753 do this. */
3754 if (prologue_sal.symtab->language != language_asm)
3755 {
8435453b 3756 struct linetable *linetable = SYMTAB_LINETABLE (prologue_sal.symtab);
f1f58506
DE
3757 int idx = 0;
3758
3759 /* Skip any earlier lines, and any end-of-sequence marker
3760 from a previous function. */
3761 while (linetable->item[idx].pc != prologue_sal.pc
3762 || linetable->item[idx].line == 0)
3763 idx++;
3764
3765 if (idx+1 < linetable->nitems
3766 && linetable->item[idx+1].line != 0
3767 && linetable->item[idx+1].pc == start_pc)
3768 return start_pc;
3769 }
3770
3771 /* If there is only one sal that covers the entire function,
3772 then it is probably a single line function, like
3773 "foo(){}". */
3774 if (prologue_sal.end >= end_pc)
3775 return 0;
3776
3777 while (prologue_sal.end < end_pc)
3778 {
3779 struct symtab_and_line sal;
3780
3781 sal = find_pc_line (prologue_sal.end, 0);
3782 if (sal.line == 0)
3783 break;
3784 /* Assume that a consecutive SAL for the same (or larger)
3785 line mark the prologue -> body transition. */
3786 if (sal.line >= prologue_sal.line)
3787 break;
3788 /* Likewise if we are in a different symtab altogether
3789 (e.g. within a file included via #include).  */
3790 if (sal.symtab != prologue_sal.symtab)
3791 break;
3792
3793 /* The line number is smaller. Check that it's from the
3794 same function, not something inlined. If it's inlined,
3795 then there is no point comparing the line numbers. */
3796 bl = block_for_pc (prologue_sal.end);
3797 while (bl)
3798 {
3799 if (block_inlined_p (bl))
3800 break;
3801 if (BLOCK_FUNCTION (bl))
3802 {
3803 bl = NULL;
3804 break;
3805 }
3806 bl = BLOCK_SUPERBLOCK (bl);
3807 }
3808 if (bl != NULL)
3809 break;
3810
3811 /* The case in which compiler's optimizer/scheduler has
3812 moved instructions into the prologue. We look ahead in
3813 the function looking for address ranges whose
3814 corresponding line number is less the first one that we
3815 found for the function. This is more conservative then
3816 refine_prologue_limit which scans a large number of SALs
3817 looking for any in the prologue. */
3818 prologue_sal = sal;
3819 }
3820 }
3821
3822 if (prologue_sal.end < end_pc)
3823 /* Return the end of this line, or zero if we could not find a
3824 line. */
3825 return prologue_sal.end;
3826 else
3827 /* Don't return END_PC, which is past the end of the function. */
3828 return prologue_sal.pc;
3829}
bf223d3e
PA
3830
3831/* See symtab.h. */
3832
3833symbol *
3834find_function_alias_target (bound_minimal_symbol msymbol)
3835{
3836 if (!msymbol_is_text (msymbol.minsym))
3837 return NULL;
3838
3839 CORE_ADDR addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
3840 symbol *sym = find_pc_function (addr);
3841 if (sym != NULL
3842 && SYMBOL_CLASS (sym) == LOC_BLOCK
3843 && BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) == addr)
3844 return sym;
3845
3846 return NULL;
3847}
3848
f1f58506 3849\f
c906108c
SS
3850/* If P is of the form "operator[ \t]+..." where `...' is
3851 some legitimate operator text, return a pointer to the
3852 beginning of the substring of the operator text.
3853 Otherwise, return "". */
eca864fe 3854
96142726
TT
3855static const char *
3856operator_chars (const char *p, const char **end)
c906108c
SS
3857{
3858 *end = "";
8090b426 3859 if (!startswith (p, CP_OPERATOR_STR))
c906108c 3860 return *end;
8090b426 3861 p += CP_OPERATOR_LEN;
c906108c
SS
3862
3863 /* Don't get faked out by `operator' being part of a longer
3864 identifier. */
c5aa993b 3865 if (isalpha (*p) || *p == '_' || *p == '$' || *p == '\0')
c906108c
SS
3866 return *end;
3867
3868 /* Allow some whitespace between `operator' and the operator symbol. */
3869 while (*p == ' ' || *p == '\t')
3870 p++;
3871
c378eb4e 3872 /* Recognize 'operator TYPENAME'. */
c906108c 3873
c5aa993b 3874 if (isalpha (*p) || *p == '_' || *p == '$')
c906108c 3875 {
96142726 3876 const char *q = p + 1;
433759f7 3877
c5aa993b 3878 while (isalnum (*q) || *q == '_' || *q == '$')
c906108c
SS
3879 q++;
3880 *end = q;
3881 return p;
3882 }
3883
53e8ad3d
MS
3884 while (*p)
3885 switch (*p)
3886 {
3887 case '\\': /* regexp quoting */
3888 if (p[1] == '*')
3889 {
3e43a32a 3890 if (p[2] == '=') /* 'operator\*=' */
53e8ad3d
MS
3891 *end = p + 3;
3892 else /* 'operator\*' */
3893 *end = p + 2;
3894 return p;
3895 }
3896 else if (p[1] == '[')
3897 {
3898 if (p[2] == ']')
3e43a32a
MS
3899 error (_("mismatched quoting on brackets, "
3900 "try 'operator\\[\\]'"));
53e8ad3d
MS
3901 else if (p[2] == '\\' && p[3] == ']')
3902 {
3903 *end = p + 4; /* 'operator\[\]' */
3904 return p;
3905 }
3906 else
8a3fe4f8 3907 error (_("nothing is allowed between '[' and ']'"));
53e8ad3d 3908 }
9af17804 3909 else
53e8ad3d 3910 {
c378eb4e 3911 /* Gratuitous qoute: skip it and move on. */
53e8ad3d
MS
3912 p++;
3913 continue;
3914 }
3915 break;
3916 case '!':
3917 case '=':
3918 case '*':
3919 case '/':
3920 case '%':
3921 case '^':
3922 if (p[1] == '=')
3923 *end = p + 2;
3924 else
3925 *end = p + 1;
3926 return p;
3927 case '<':
3928 case '>':
3929 case '+':
3930 case '-':
3931 case '&':
3932 case '|':
3933 if (p[0] == '-' && p[1] == '>')
3934 {
c378eb4e 3935 /* Struct pointer member operator 'operator->'. */
53e8ad3d
MS
3936 if (p[2] == '*')
3937 {
3938 *end = p + 3; /* 'operator->*' */
3939 return p;
3940 }
3941 else if (p[2] == '\\')
3942 {
3943 *end = p + 4; /* Hopefully 'operator->\*' */
3944 return p;
3945 }
3946 else
3947 {
3948 *end = p + 2; /* 'operator->' */
3949 return p;
3950 }
3951 }
3952 if (p[1] == '=' || p[1] == p[0])
3953 *end = p + 2;
3954 else
3955 *end = p + 1;
3956 return p;
3957 case '~':
3958 case ',':
c5aa993b 3959 *end = p + 1;
53e8ad3d
MS
3960 return p;
3961 case '(':
3962 if (p[1] != ')')
3e43a32a
MS
3963 error (_("`operator ()' must be specified "
3964 "without whitespace in `()'"));
c5aa993b 3965 *end = p + 2;
53e8ad3d
MS
3966 return p;
3967 case '?':
3968 if (p[1] != ':')
3e43a32a
MS
3969 error (_("`operator ?:' must be specified "
3970 "without whitespace in `?:'"));
53e8ad3d
MS
3971 *end = p + 2;
3972 return p;
3973 case '[':
3974 if (p[1] != ']')
3e43a32a
MS
3975 error (_("`operator []' must be specified "
3976 "without whitespace in `[]'"));
53e8ad3d
MS
3977 *end = p + 2;
3978 return p;
3979 default:
8a3fe4f8 3980 error (_("`operator %s' not supported"), p);
53e8ad3d
MS
3981 break;
3982 }
3983
c906108c
SS
3984 *end = "";
3985 return *end;
3986}
c906108c 3987\f
c5aa993b 3988
9fdc877b
DE
3989/* Data structure to maintain printing state for output_source_filename. */
3990
3991struct output_source_filename_data
3992{
3993 /* Cache of what we've seen so far. */
3994 struct filename_seen_cache *filename_seen_cache;
3995
3996 /* Flag of whether we're printing the first one. */
3997 int first;
3998};
3999
c94fdfd0 4000/* Slave routine for sources_info. Force line breaks at ,'s.
9fdc877b
DE
4001 NAME is the name to print.
4002 DATA contains the state for printing and watching for duplicates. */
eca864fe 4003
c94fdfd0 4004static void
9fdc877b
DE
4005output_source_filename (const char *name,
4006 struct output_source_filename_data *data)
c94fdfd0
EZ
4007{
4008 /* Since a single source file can result in several partial symbol
4009 tables, we need to avoid printing it more than once. Note: if
4010 some of the psymtabs are read in and some are not, it gets
4011 printed both under "Source files for which symbols have been
4012 read" and "Source files for which symbols will be read in on
4013 demand". I consider this a reasonable way to deal with the
4014 situation. I'm not sure whether this can also happen for
4015 symtabs; it doesn't hurt to check. */
4016
4017 /* Was NAME already seen? */
bbf2f4df 4018 if (data->filename_seen_cache->seen (name))
c94fdfd0
EZ
4019 {
4020 /* Yes; don't print it again. */
4021 return;
4022 }
9fdc877b 4023
c94fdfd0 4024 /* No; print it and reset *FIRST. */
9fdc877b
DE
4025 if (! data->first)
4026 printf_filtered (", ");
4027 data->first = 0;
c906108c
SS
4028
4029 wrap_here ("");
4030 fputs_filtered (name, gdb_stdout);
c5aa993b 4031}
c906108c 4032
ccefe4c4 4033/* A callback for map_partial_symbol_filenames. */
eca864fe 4034
ccefe4c4 4035static void
533a737e 4036output_partial_symbol_filename (const char *filename, const char *fullname,
ccefe4c4
TT
4037 void *data)
4038{
19ba03f4
SM
4039 output_source_filename (fullname ? fullname : filename,
4040 (struct output_source_filename_data *) data);
ccefe4c4
TT
4041}
4042
c906108c 4043static void
1d12d88f 4044info_sources_command (const char *ignore, int from_tty)
c906108c 4045{
43f3e411 4046 struct compunit_symtab *cu;
52f0bd74 4047 struct symtab *s;
52f0bd74 4048 struct objfile *objfile;
9fdc877b 4049 struct output_source_filename_data data;
c5aa993b 4050
c906108c
SS
4051 if (!have_full_symbols () && !have_partial_symbols ())
4052 {
8a3fe4f8 4053 error (_("No symbol table is loaded. Use the \"file\" command."));
c906108c 4054 }
c5aa993b 4055
bbf2f4df
PA
4056 filename_seen_cache filenames_seen;
4057
4058 data.filename_seen_cache = &filenames_seen;
9fdc877b 4059
c906108c
SS
4060 printf_filtered ("Source files for which symbols have been read in:\n\n");
4061
9fdc877b 4062 data.first = 1;
43f3e411 4063 ALL_FILETABS (objfile, cu, s)
c5aa993b 4064 {
d092d1a2 4065 const char *fullname = symtab_to_fullname (s);
433759f7 4066
f35a17b5 4067 output_source_filename (fullname, &data);
c5aa993b 4068 }
c906108c 4069 printf_filtered ("\n\n");
c5aa993b 4070
3e43a32a
MS
4071 printf_filtered ("Source files for which symbols "
4072 "will be read in on demand:\n\n");
c906108c 4073
bbf2f4df 4074 filenames_seen.clear ();
9fdc877b 4075 data.first = 1;
bb4142cf
DE
4076 map_symbol_filenames (output_partial_symbol_filename, &data,
4077 1 /*need_fullname*/);
c906108c
SS
4078 printf_filtered ("\n");
4079}
4080
fbd9ab74
JK
4081/* Compare FILE against all the NFILES entries of FILES. If BASENAMES is
4082 non-zero compare only lbasename of FILES. */
4083
c906108c 4084static int
96142726 4085file_matches (const char *file, const char *files[], int nfiles, int basenames)
c906108c
SS
4086{
4087 int i;
4088
4089 if (file != NULL && nfiles != 0)
4090 {
4091 for (i = 0; i < nfiles; i++)
c5aa993b 4092 {
fbd9ab74
JK
4093 if (compare_filenames_for_search (file, (basenames
4094 ? lbasename (files[i])
4095 : files[i])))
c5aa993b
JM
4096 return 1;
4097 }
c906108c
SS
4098 }
4099 else if (nfiles == 0)
4100 return 1;
4101 return 0;
4102}
4103
b52109bc 4104/* Helper function for sort_search_symbols_remove_dups and qsort. Can only
434d2d4f 4105 sort symbols, not minimal symbols. */
eca864fe 4106
b9c04fb2
TT
4107int
4108symbol_search::compare_search_syms (const symbol_search &sym_a,
4109 const symbol_search &sym_b)
434d2d4f 4110{
b52109bc
DE
4111 int c;
4112
b9c04fb2
TT
4113 c = FILENAME_CMP (symbol_symtab (sym_a.symbol)->filename,
4114 symbol_symtab (sym_b.symbol)->filename);
b52109bc
DE
4115 if (c != 0)
4116 return c;
434d2d4f 4117
b9c04fb2
TT
4118 if (sym_a.block != sym_b.block)
4119 return sym_a.block - sym_b.block;
b52109bc 4120
b9c04fb2
TT
4121 return strcmp (SYMBOL_PRINT_NAME (sym_a.symbol),
4122 SYMBOL_PRINT_NAME (sym_b.symbol));
434d2d4f
DJ
4123}
4124
b9c04fb2 4125/* Sort the symbols in RESULT and remove duplicates. */
b52109bc
DE
4126
4127static void
b9c04fb2 4128sort_search_symbols_remove_dups (std::vector<symbol_search> *result)
434d2d4f 4129{
b9c04fb2
TT
4130 std::sort (result->begin (), result->end ());
4131 result->erase (std::unique (result->begin (), result->end ()),
4132 result->end ());
434d2d4f 4133}
5bd98722 4134
c906108c 4135/* Search the symbol table for matches to the regular expression REGEXP,
b9c04fb2 4136 returning the results.
c906108c
SS
4137
4138 Only symbols of KIND are searched:
e8930875
JK
4139 VARIABLES_DOMAIN - search all symbols, excluding functions, type names,
4140 and constants (enums)
176620f1
EZ
4141 FUNCTIONS_DOMAIN - search all functions
4142 TYPES_DOMAIN - search all type names
7b08b9eb 4143 ALL_DOMAIN - an internal error for this function
c906108c 4144
b52109bc
DE
4145 Within each file the results are sorted locally; each symtab's global and
4146 static blocks are separately alphabetized.
4147 Duplicate entries are removed. */
c378eb4e 4148
b9c04fb2 4149std::vector<symbol_search>
96142726 4150search_symbols (const char *regexp, enum search_domain kind,
b9c04fb2 4151 int nfiles, const char *files[])
c906108c 4152{
43f3e411 4153 struct compunit_symtab *cust;
346d1dfe 4154 const struct blockvector *bv;
52f0bd74
AC
4155 struct block *b;
4156 int i = 0;
8157b174 4157 struct block_iterator iter;
52f0bd74 4158 struct symbol *sym;
c906108c
SS
4159 struct objfile *objfile;
4160 struct minimal_symbol *msymbol;
c906108c 4161 int found_misc = 0;
bc043ef3 4162 static const enum minimal_symbol_type types[]
e8930875 4163 = {mst_data, mst_text, mst_abs};
bc043ef3 4164 static const enum minimal_symbol_type types2[]
e8930875 4165 = {mst_bss, mst_file_text, mst_abs};
bc043ef3 4166 static const enum minimal_symbol_type types3[]
e8930875 4167 = {mst_file_data, mst_solib_trampoline, mst_abs};
bc043ef3 4168 static const enum minimal_symbol_type types4[]
e8930875 4169 = {mst_file_bss, mst_text_gnu_ifunc, mst_abs};
c906108c
SS
4170 enum minimal_symbol_type ourtype;
4171 enum minimal_symbol_type ourtype2;
4172 enum minimal_symbol_type ourtype3;
4173 enum minimal_symbol_type ourtype4;
b9c04fb2 4174 std::vector<symbol_search> result;
2d7cc5c7 4175 gdb::optional<compiled_regex> preg;
c906108c 4176
e8930875
JK
4177 gdb_assert (kind <= TYPES_DOMAIN);
4178
8903c50d
TT
4179 ourtype = types[kind];
4180 ourtype2 = types2[kind];
4181 ourtype3 = types3[kind];
4182 ourtype4 = types4[kind];
c906108c 4183
c906108c
SS
4184 if (regexp != NULL)
4185 {
4186 /* Make sure spacing is right for C++ operators.
4187 This is just a courtesy to make the matching less sensitive
4188 to how many spaces the user leaves between 'operator'
c378eb4e 4189 and <TYPENAME> or <OPERATOR>. */
96142726
TT
4190 const char *opend;
4191 const char *opname = operator_chars (regexp, &opend);
681bf369 4192 int errcode;
433759f7 4193
c906108c 4194 if (*opname)
c5aa993b 4195 {
3e43a32a
MS
4196 int fix = -1; /* -1 means ok; otherwise number of
4197 spaces needed. */
433759f7 4198
c5aa993b
JM
4199 if (isalpha (*opname) || *opname == '_' || *opname == '$')
4200 {
c378eb4e 4201 /* There should 1 space between 'operator' and 'TYPENAME'. */
c5aa993b
JM
4202 if (opname[-1] != ' ' || opname[-2] == ' ')
4203 fix = 1;
4204 }
4205 else
4206 {
c378eb4e 4207 /* There should 0 spaces between 'operator' and 'OPERATOR'. */
c5aa993b
JM
4208 if (opname[-1] == ' ')
4209 fix = 0;
4210 }
c378eb4e 4211 /* If wrong number of spaces, fix it. */
c5aa993b
JM
4212 if (fix >= 0)
4213 {
045f55a6 4214 char *tmp = (char *) alloca (8 + fix + strlen (opname) + 1);
433759f7 4215
c5aa993b
JM
4216 sprintf (tmp, "operator%.*s%s", fix, " ", opname);
4217 regexp = tmp;
4218 }
4219 }
4220
2d7cc5c7
PA
4221 int cflags = REG_NOSUB | (case_sensitivity == case_sensitive_off
4222 ? REG_ICASE : 0);
4223 preg.emplace (regexp, cflags, _("Invalid regexp"));
c906108c
SS
4224 }
4225
4226 /* Search through the partial symtabs *first* for all symbols
4227 matching the regexp. That way we don't have to reproduce all of
c378eb4e 4228 the machinery below. */
14bc53a8
PA
4229 expand_symtabs_matching ([&] (const char *filename, bool basenames)
4230 {
4231 return file_matches (filename, files, nfiles,
4232 basenames);
4233 },
4234 [&] (const char *symname)
4235 {
2d7cc5c7
PA
4236 return (!preg || preg->exec (symname,
4237 0, NULL, 0) == 0);
14bc53a8
PA
4238 },
4239 NULL,
4240 kind);
c906108c
SS
4241
4242 /* Here, we search through the minimal symbol tables for functions
4243 and variables that match, and force their symbols to be read.
4244 This is in particular necessary for demangled variable names,
4245 which are no longer put into the partial symbol tables.
4246 The symbol will then be found during the scan of symtabs below.
4247
4248 For functions, find_pc_symtab should succeed if we have debug info
422d65e7
DE
4249 for the function, for variables we have to call
4250 lookup_symbol_in_objfile_from_linkage_name to determine if the variable
4251 has debug info.
c906108c 4252 If the lookup fails, set found_misc so that we will rescan to print
422d65e7
DE
4253 any matching symbols without debug info.
4254 We only search the objfile the msymbol came from, we no longer search
4255 all objfiles. In large programs (1000s of shared libs) searching all
4256 objfiles is not worth the pain. */
c906108c 4257
176620f1 4258 if (nfiles == 0 && (kind == VARIABLES_DOMAIN || kind == FUNCTIONS_DOMAIN))
c906108c
SS
4259 {
4260 ALL_MSYMBOLS (objfile, msymbol)
c5aa993b 4261 {
89295b4d
PP
4262 QUIT;
4263
422d65e7
DE
4264 if (msymbol->created_by_gdb)
4265 continue;
4266
d50bd42b
DE
4267 if (MSYMBOL_TYPE (msymbol) == ourtype
4268 || MSYMBOL_TYPE (msymbol) == ourtype2
4269 || MSYMBOL_TYPE (msymbol) == ourtype3
4270 || MSYMBOL_TYPE (msymbol) == ourtype4)
c5aa993b 4271 {
2d7cc5c7
PA
4272 if (!preg
4273 || preg->exec (MSYMBOL_NATURAL_NAME (msymbol), 0,
4274 NULL, 0) == 0)
c5aa993b 4275 {
422d65e7
DE
4276 /* Note: An important side-effect of these lookup functions
4277 is to expand the symbol table if msymbol is found, for the
43f3e411 4278 benefit of the next loop on ALL_COMPUNITS. */
422d65e7 4279 if (kind == FUNCTIONS_DOMAIN
43f3e411
DE
4280 ? (find_pc_compunit_symtab
4281 (MSYMBOL_VALUE_ADDRESS (objfile, msymbol)) == NULL)
422d65e7 4282 : (lookup_symbol_in_objfile_from_linkage_name
efd66ac6 4283 (objfile, MSYMBOL_LINKAGE_NAME (msymbol), VAR_DOMAIN)
d12307c1 4284 .symbol == NULL))
422d65e7 4285 found_misc = 1;
c5aa993b
JM
4286 }
4287 }
4288 }
c906108c
SS
4289 }
4290
43f3e411 4291 ALL_COMPUNITS (objfile, cust)
c5aa993b 4292 {
43f3e411 4293 bv = COMPUNIT_BLOCKVECTOR (cust);
d50bd42b
DE
4294 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
4295 {
d50bd42b
DE
4296 b = BLOCKVECTOR_BLOCK (bv, i);
4297 ALL_BLOCK_SYMBOLS (b, iter, sym)
4298 {
08be3fe3 4299 struct symtab *real_symtab = symbol_symtab (sym);
d50bd42b
DE
4300
4301 QUIT;
4302
fbd9ab74
JK
4303 /* Check first sole REAL_SYMTAB->FILENAME. It does not need to be
4304 a substring of symtab_to_fullname as it may contain "./" etc. */
4305 if ((file_matches (real_symtab->filename, files, nfiles, 0)
4306 || ((basenames_may_differ
4307 || file_matches (lbasename (real_symtab->filename),
4308 files, nfiles, 1))
4309 && file_matches (symtab_to_fullname (real_symtab),
4310 files, nfiles, 0)))
2d7cc5c7
PA
4311 && ((!preg
4312 || preg->exec (SYMBOL_NATURAL_NAME (sym), 0,
4313 NULL, 0) == 0)
d50bd42b
DE
4314 && ((kind == VARIABLES_DOMAIN
4315 && SYMBOL_CLASS (sym) != LOC_TYPEDEF
4316 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
4317 && SYMBOL_CLASS (sym) != LOC_BLOCK
4318 /* LOC_CONST can be used for more than just enums,
4319 e.g., c++ static const members.
4320 We only want to skip enums here. */
4321 && !(SYMBOL_CLASS (sym) == LOC_CONST
01465b56
DE
4322 && (TYPE_CODE (SYMBOL_TYPE (sym))
4323 == TYPE_CODE_ENUM)))
d50bd42b
DE
4324 || (kind == FUNCTIONS_DOMAIN
4325 && SYMBOL_CLASS (sym) == LOC_BLOCK)
4326 || (kind == TYPES_DOMAIN
4327 && SYMBOL_CLASS (sym) == LOC_TYPEDEF))))
4328 {
4329 /* match */
b9c04fb2 4330 result.emplace_back (i, sym);
d50bd42b
DE
4331 }
4332 }
d50bd42b 4333 }
c5aa993b 4334 }
c906108c 4335
b9c04fb2
TT
4336 if (!result.empty ())
4337 sort_search_symbols_remove_dups (&result);
b52109bc 4338
c906108c 4339 /* If there are no eyes, avoid all contact. I mean, if there are
01465b56 4340 no debug symbols, then add matching minsyms. */
c906108c 4341
422d65e7 4342 if (found_misc || (nfiles == 0 && kind != FUNCTIONS_DOMAIN))
c906108c
SS
4343 {
4344 ALL_MSYMBOLS (objfile, msymbol)
c5aa993b 4345 {
89295b4d
PP
4346 QUIT;
4347
422d65e7
DE
4348 if (msymbol->created_by_gdb)
4349 continue;
4350
d50bd42b
DE
4351 if (MSYMBOL_TYPE (msymbol) == ourtype
4352 || MSYMBOL_TYPE (msymbol) == ourtype2
4353 || MSYMBOL_TYPE (msymbol) == ourtype3
4354 || MSYMBOL_TYPE (msymbol) == ourtype4)
c5aa993b 4355 {
2d7cc5c7
PA
4356 if (!preg || preg->exec (MSYMBOL_NATURAL_NAME (msymbol), 0,
4357 NULL, 0) == 0)
c5aa993b 4358 {
422d65e7
DE
4359 /* For functions we can do a quick check of whether the
4360 symbol might be found via find_pc_symtab. */
4361 if (kind != FUNCTIONS_DOMAIN
43f3e411
DE
4362 || (find_pc_compunit_symtab
4363 (MSYMBOL_VALUE_ADDRESS (objfile, msymbol)) == NULL))
c5aa993b 4364 {
422d65e7 4365 if (lookup_symbol_in_objfile_from_linkage_name
efd66ac6 4366 (objfile, MSYMBOL_LINKAGE_NAME (msymbol), VAR_DOMAIN)
d12307c1 4367 .symbol == NULL)
c5aa993b
JM
4368 {
4369 /* match */
b9c04fb2 4370 result.emplace_back (i, msymbol, objfile);
c5aa993b
JM
4371 }
4372 }
4373 }
4374 }
4375 }
c906108c
SS
4376 }
4377
b9c04fb2 4378 return result;
c906108c
SS
4379}
4380
4381/* Helper function for symtab_symbol_info, this function uses
4382 the data returned from search_symbols() to print information
c378eb4e
MS
4383 regarding the match to gdb_stdout. */
4384
c906108c 4385static void
8903c50d 4386print_symbol_info (enum search_domain kind,
d01060f0 4387 struct symbol *sym,
05cba821 4388 int block, const char *last)
c906108c 4389{
08be3fe3 4390 struct symtab *s = symbol_symtab (sym);
05cba821
JK
4391 const char *s_filename = symtab_to_filename_for_display (s);
4392
4393 if (last == NULL || filename_cmp (last, s_filename) != 0)
c906108c
SS
4394 {
4395 fputs_filtered ("\nFile ", gdb_stdout);
05cba821 4396 fputs_filtered (s_filename, gdb_stdout);
c906108c
SS
4397 fputs_filtered (":\n", gdb_stdout);
4398 }
4399
176620f1 4400 if (kind != TYPES_DOMAIN && block == STATIC_BLOCK)
c906108c 4401 printf_filtered ("static ");
c5aa993b 4402
c378eb4e 4403 /* Typedef that is not a C++ class. */
176620f1
EZ
4404 if (kind == TYPES_DOMAIN
4405 && SYMBOL_DOMAIN (sym) != STRUCT_DOMAIN)
a5238fbc 4406 typedef_print (SYMBOL_TYPE (sym), sym, gdb_stdout);
c378eb4e 4407 /* variable, func, or typedef-that-is-c++-class. */
d50bd42b
DE
4408 else if (kind < TYPES_DOMAIN
4409 || (kind == TYPES_DOMAIN
4410 && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN))
c906108c
SS
4411 {
4412 type_print (SYMBOL_TYPE (sym),
c5aa993b 4413 (SYMBOL_CLASS (sym) == LOC_TYPEDEF
de5ad195 4414 ? "" : SYMBOL_PRINT_NAME (sym)),
c5aa993b 4415 gdb_stdout, 0);
c906108c
SS
4416
4417 printf_filtered (";\n");
4418 }
c906108c
SS
4419}
4420
4421/* This help function for symtab_symbol_info() prints information
c378eb4e
MS
4422 for non-debugging symbols to gdb_stdout. */
4423
c906108c 4424static void
7c7b6655 4425print_msymbol_info (struct bound_minimal_symbol msymbol)
c906108c 4426{
7c7b6655 4427 struct gdbarch *gdbarch = get_objfile_arch (msymbol.objfile);
3ac4495a
MS
4428 char *tmp;
4429
d80b854b 4430 if (gdbarch_addr_bit (gdbarch) <= 32)
77e371c0 4431 tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol)
bb599908
PH
4432 & (CORE_ADDR) 0xffffffff,
4433 8);
3ac4495a 4434 else
77e371c0 4435 tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol),
bb599908 4436 16);
3ac4495a 4437 printf_filtered ("%s %s\n",
efd66ac6 4438 tmp, MSYMBOL_PRINT_NAME (msymbol.minsym));
c906108c
SS
4439}
4440
4441/* This is the guts of the commands "info functions", "info types", and
c378eb4e 4442 "info variables". It calls search_symbols to find all matches and then
c906108c 4443 print_[m]symbol_info to print out some useful information about the
c378eb4e
MS
4444 matches. */
4445
c906108c 4446static void
0b39b52e 4447symtab_symbol_info (const char *regexp, enum search_domain kind, int from_tty)
c906108c 4448{
bc043ef3 4449 static const char * const classnames[] =
e8930875 4450 {"variable", "function", "type"};
05cba821 4451 const char *last_filename = NULL;
c906108c
SS
4452 int first = 1;
4453
e8930875
JK
4454 gdb_assert (kind <= TYPES_DOMAIN);
4455
c378eb4e 4456 /* Must make sure that if we're interrupted, symbols gets freed. */
b9c04fb2 4457 std::vector<symbol_search> symbols = search_symbols (regexp, kind, 0, NULL);
c906108c 4458
ca242aad
YQ
4459 if (regexp != NULL)
4460 printf_filtered (_("All %ss matching regular expression \"%s\":\n"),
4461 classnames[kind], regexp);
4462 else
4463 printf_filtered (_("All defined %ss:\n"), classnames[kind]);
c906108c 4464
b9c04fb2 4465 for (const symbol_search &p : symbols)
c906108c
SS
4466 {
4467 QUIT;
4468
b9c04fb2 4469 if (p.msymbol.minsym != NULL)
c5aa993b
JM
4470 {
4471 if (first)
4472 {
ca242aad 4473 printf_filtered (_("\nNon-debugging symbols:\n"));
c5aa993b
JM
4474 first = 0;
4475 }
b9c04fb2 4476 print_msymbol_info (p.msymbol);
c5aa993b 4477 }
c906108c 4478 else
c5aa993b
JM
4479 {
4480 print_symbol_info (kind,
b9c04fb2
TT
4481 p.symbol,
4482 p.block,
c5aa993b 4483 last_filename);
d01060f0 4484 last_filename
b9c04fb2 4485 = symtab_to_filename_for_display (symbol_symtab (p.symbol));
c5aa993b 4486 }
c906108c 4487 }
c906108c
SS
4488}
4489
0b39b52e
TT
4490static void
4491info_variables_command (const char *regexp, int from_tty)
4492{
4493 symtab_symbol_info (regexp, VARIABLES_DOMAIN, from_tty);
4494}
4495
c906108c 4496static void
1d12d88f 4497info_functions_command (const char *regexp, int from_tty)
c906108c 4498{
176620f1 4499 symtab_symbol_info (regexp, FUNCTIONS_DOMAIN, from_tty);
c906108c
SS
4500}
4501
357e46e7 4502
c906108c 4503static void
1d12d88f 4504info_types_command (const char *regexp, int from_tty)
c906108c 4505{
176620f1 4506 symtab_symbol_info (regexp, TYPES_DOMAIN, from_tty);
c906108c
SS
4507}
4508
c378eb4e 4509/* Breakpoint all functions matching regular expression. */
8926118c 4510
8b93c638 4511void
fba45db2 4512rbreak_command_wrapper (char *regexp, int from_tty)
8b93c638
JM
4513{
4514 rbreak_command (regexp, from_tty);
4515}
8926118c 4516
c906108c 4517static void
0b39b52e 4518rbreak_command (const char *regexp, int from_tty)
c906108c 4519{
c80049d3 4520 std::string string;
96142726
TT
4521 const char **files = NULL;
4522 const char *file_name;
8bd10a10 4523 int nfiles = 0;
c906108c 4524
8bd10a10
CM
4525 if (regexp)
4526 {
0b39b52e 4527 const char *colon = strchr (regexp, ':');
433759f7 4528
8bd10a10
CM
4529 if (colon && *(colon + 1) != ':')
4530 {
4531 int colon_index;
96142726 4532 char *local_name;
8bd10a10
CM
4533
4534 colon_index = colon - regexp;
224c3ddb 4535 local_name = (char *) alloca (colon_index + 1);
96142726
TT
4536 memcpy (local_name, regexp, colon_index);
4537 local_name[colon_index--] = 0;
4538 while (isspace (local_name[colon_index]))
4539 local_name[colon_index--] = 0;
4540 file_name = local_name;
8bd10a10
CM
4541 files = &file_name;
4542 nfiles = 1;
529480d0 4543 regexp = skip_spaces (colon + 1);
8bd10a10
CM
4544 }
4545 }
4546
b9c04fb2
TT
4547 std::vector<symbol_search> symbols = search_symbols (regexp,
4548 FUNCTIONS_DOMAIN,
4549 nfiles, files);
c906108c 4550
c80049d3 4551 scoped_rbreak_breakpoints finalize;
b9c04fb2 4552 for (const symbol_search &p : symbols)
c906108c 4553 {
b9c04fb2 4554 if (p.msymbol.minsym == NULL)
c5aa993b 4555 {
b9c04fb2 4556 struct symtab *symtab = symbol_symtab (p.symbol);
d01060f0 4557 const char *fullname = symtab_to_fullname (symtab);
05cba821 4558
c80049d3
TT
4559 string = string_printf ("%s:'%s'", fullname,
4560 SYMBOL_LINKAGE_NAME (p.symbol));
4561 break_command (&string[0], from_tty);
176620f1 4562 print_symbol_info (FUNCTIONS_DOMAIN,
b9c04fb2
TT
4563 p.symbol,
4564 p.block,
d01060f0 4565 symtab_to_filename_for_display (symtab));
c5aa993b 4566 }
c906108c 4567 else
c5aa993b 4568 {
c80049d3
TT
4569 string = string_printf ("'%s'",
4570 MSYMBOL_LINKAGE_NAME (p.msymbol.minsym));
6214f497 4571
c80049d3 4572 break_command (&string[0], from_tty);
c5aa993b 4573 printf_filtered ("<function, no debug info> %s;\n",
b9c04fb2 4574 MSYMBOL_PRINT_NAME (p.msymbol.minsym));
c5aa993b 4575 }
c906108c 4576 }
c906108c 4577}
c906108c 4578\f
c5aa993b 4579
1976171a
JK
4580/* Evaluate if NAME matches SYM_TEXT and SYM_TEXT_LEN.
4581
4582 Either sym_text[sym_text_len] != '(' and then we search for any
4583 symbol starting with SYM_TEXT text.
4584
4585 Otherwise sym_text[sym_text_len] == '(' and then we require symbol name to
4586 be terminated at that point. Partial symbol tables do not have parameters
4587 information. */
4588
4589static int
4590compare_symbol_name (const char *name, const char *sym_text, int sym_text_len)
4591{
4592 int (*ncmp) (const char *, const char *, size_t);
4593
4594 ncmp = (case_sensitivity == case_sensitive_on ? strncmp : strncasecmp);
4595
4596 if (ncmp (name, sym_text, sym_text_len) != 0)
4597 return 0;
4598
4599 if (sym_text[sym_text_len] == '(')
4600 {
4601 /* User searches for `name(someth...'. Require NAME to be terminated.
4602 Normally psymtabs and gdbindex have no parameter types so '\0' will be
4603 present but accept even parameters presence. In this case this
4604 function is in fact strcmp_iw but whitespace skipping is not supported
4605 for tab completion. */
4606
4607 if (name[sym_text_len] != '\0' && name[sym_text_len] != '(')
4608 return 0;
4609 }
4610
4611 return 1;
4612}
4613
c906108c 4614/* Test to see if the symbol specified by SYMNAME (which is already
c5aa993b 4615 demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
c378eb4e 4616 characters. If so, add it to the current completion list. */
c906108c
SS
4617
4618static void
eb3ff9a5
PA
4619completion_list_add_name (completion_tracker &tracker,
4620 const char *symname,
0d5cff50
DE
4621 const char *sym_text, int sym_text_len,
4622 const char *text, const char *word)
c906108c 4623{
c378eb4e 4624 /* Clip symbols that cannot match. */
1976171a
JK
4625 if (!compare_symbol_name (symname, sym_text, sym_text_len))
4626 return;
c906108c 4627
c906108c 4628 /* We have a match for a completion, so add SYMNAME to the current list
c378eb4e 4629 of matches. Note that the name is moved to freshly malloc'd space. */
c906108c
SS
4630
4631 {
fe978cb0 4632 char *newobj;
433759f7 4633
c906108c
SS
4634 if (word == sym_text)
4635 {
224c3ddb 4636 newobj = (char *) xmalloc (strlen (symname) + 5);
fe978cb0 4637 strcpy (newobj, symname);
c906108c
SS
4638 }
4639 else if (word > sym_text)
4640 {
4641 /* Return some portion of symname. */
224c3ddb 4642 newobj = (char *) xmalloc (strlen (symname) + 5);
fe978cb0 4643 strcpy (newobj, symname + (word - sym_text));
c906108c
SS
4644 }
4645 else
4646 {
4647 /* Return some of SYM_TEXT plus symname. */
224c3ddb 4648 newobj = (char *) xmalloc (strlen (symname) + (sym_text - word) + 5);
fe978cb0
PA
4649 strncpy (newobj, word, sym_text - word);
4650 newobj[sym_text - word] = '\0';
4651 strcat (newobj, symname);
c906108c
SS
4652 }
4653
eb3ff9a5 4654 gdb::unique_xmalloc_ptr<char> completion (newobj);
ef0b411a 4655
eb3ff9a5 4656 tracker.add_completion (std::move (completion));
c906108c
SS
4657 }
4658}
4659
6da67eb1
PA
4660/* completion_list_add_name wrapper for struct symbol. */
4661
4662static void
eb3ff9a5
PA
4663completion_list_add_symbol (completion_tracker &tracker,
4664 symbol *sym,
6da67eb1
PA
4665 const char *sym_text, int sym_text_len,
4666 const char *text, const char *word)
4667{
eb3ff9a5 4668 completion_list_add_name (tracker, SYMBOL_NATURAL_NAME (sym),
6da67eb1
PA
4669 sym_text, sym_text_len, text, word);
4670}
4671
4672/* completion_list_add_name wrapper for struct minimal_symbol. */
4673
4674static void
eb3ff9a5
PA
4675completion_list_add_msymbol (completion_tracker &tracker,
4676 minimal_symbol *sym,
6da67eb1
PA
4677 const char *sym_text, int sym_text_len,
4678 const char *text, const char *word)
4679{
eb3ff9a5 4680 completion_list_add_name (tracker, MSYMBOL_NATURAL_NAME (sym),
6da67eb1
PA
4681 sym_text, sym_text_len, text, word);
4682}
4683
69636828
AF
4684/* ObjC: In case we are completing on a selector, look as the msymbol
4685 again and feed all the selectors into the mill. */
4686
4687static void
eb3ff9a5
PA
4688completion_list_objc_symbol (completion_tracker &tracker,
4689 struct minimal_symbol *msymbol,
0d5cff50
DE
4690 const char *sym_text, int sym_text_len,
4691 const char *text, const char *word)
69636828
AF
4692{
4693 static char *tmp = NULL;
4694 static unsigned int tmplen = 0;
9af17804 4695
0d5cff50 4696 const char *method, *category, *selector;
69636828 4697 char *tmp2 = NULL;
9af17804 4698
efd66ac6 4699 method = MSYMBOL_NATURAL_NAME (msymbol);
69636828
AF
4700
4701 /* Is it a method? */
4702 if ((method[0] != '-') && (method[0] != '+'))
4703 return;
4704
4705 if (sym_text[0] == '[')
4706 /* Complete on shortened method method. */
eb3ff9a5
PA
4707 completion_list_add_name (tracker, method + 1,
4708 sym_text, sym_text_len, text, word);
9af17804 4709
69636828
AF
4710 while ((strlen (method) + 1) >= tmplen)
4711 {
4712 if (tmplen == 0)
4713 tmplen = 1024;
4714 else
4715 tmplen *= 2;
224c3ddb 4716 tmp = (char *) xrealloc (tmp, tmplen);
69636828
AF
4717 }
4718 selector = strchr (method, ' ');
4719 if (selector != NULL)
4720 selector++;
9af17804 4721
69636828 4722 category = strchr (method, '(');
9af17804 4723
69636828
AF
4724 if ((category != NULL) && (selector != NULL))
4725 {
4726 memcpy (tmp, method, (category - method));
4727 tmp[category - method] = ' ';
4728 memcpy (tmp + (category - method) + 1, selector, strlen (selector) + 1);
eb3ff9a5
PA
4729 completion_list_add_name (tracker, tmp,
4730 sym_text, sym_text_len, text, word);
69636828 4731 if (sym_text[0] == '[')
eb3ff9a5
PA
4732 completion_list_add_name (tracker, tmp + 1,
4733 sym_text, sym_text_len, text, word);
69636828 4734 }
9af17804 4735
69636828
AF
4736 if (selector != NULL)
4737 {
4738 /* Complete on selector only. */
4739 strcpy (tmp, selector);
4740 tmp2 = strchr (tmp, ']');
4741 if (tmp2 != NULL)
4742 *tmp2 = '\0';
9af17804 4743
eb3ff9a5
PA
4744 completion_list_add_name (tracker, tmp,
4745 sym_text, sym_text_len, text, word);
69636828
AF
4746 }
4747}
4748
4749/* Break the non-quoted text based on the characters which are in
c378eb4e 4750 symbols. FIXME: This should probably be language-specific. */
69636828 4751
6f937416
PA
4752static const char *
4753language_search_unquoted_string (const char *text, const char *p)
69636828
AF
4754{
4755 for (; p > text; --p)
4756 {
4757 if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
4758 continue;
4759 else
4760 {
4761 if ((current_language->la_language == language_objc))
4762 {
c378eb4e 4763 if (p[-1] == ':') /* Might be part of a method name. */
69636828
AF
4764 continue;
4765 else if (p[-1] == '[' && (p[-2] == '-' || p[-2] == '+'))
c378eb4e 4766 p -= 2; /* Beginning of a method name. */
69636828 4767 else if (p[-1] == ' ' || p[-1] == '(' || p[-1] == ')')
c378eb4e 4768 { /* Might be part of a method name. */
6f937416 4769 const char *t = p;
69636828
AF
4770
4771 /* Seeing a ' ' or a '(' is not conclusive evidence
4772 that we are in the middle of a method name. However,
4773 finding "-[" or "+[" should be pretty un-ambiguous.
4774 Unfortunately we have to find it now to decide. */
4775
4776 while (t > text)
4777 if (isalnum (t[-1]) || t[-1] == '_' ||
4778 t[-1] == ' ' || t[-1] == ':' ||
4779 t[-1] == '(' || t[-1] == ')')
4780 --t;
4781 else
4782 break;
4783
4784 if (t[-1] == '[' && (t[-2] == '-' || t[-2] == '+'))
c378eb4e
MS
4785 p = t - 2; /* Method name detected. */
4786 /* Else we leave with p unchanged. */
69636828
AF
4787 }
4788 }
4789 break;
4790 }
4791 }
4792 return p;
4793}
4794
edb3359d 4795static void
eb3ff9a5
PA
4796completion_list_add_fields (completion_tracker &tracker,
4797 struct symbol *sym,
4798 const char *sym_text, int sym_text_len,
4799 const char *text, const char *word)
edb3359d
DJ
4800{
4801 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4802 {
4803 struct type *t = SYMBOL_TYPE (sym);
4804 enum type_code c = TYPE_CODE (t);
4805 int j;
4806
4807 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
4808 for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
4809 if (TYPE_FIELD_NAME (t, j))
eb3ff9a5 4810 completion_list_add_name (tracker, TYPE_FIELD_NAME (t, j),
edb3359d
DJ
4811 sym_text, sym_text_len, text, word);
4812 }
4813}
4814
e11c72c7
GB
4815/* Add matching symbols from SYMTAB to the current completion list. */
4816
4817static void
4818add_symtab_completions (struct compunit_symtab *cust,
eb3ff9a5 4819 completion_tracker &tracker,
e11c72c7
GB
4820 const char *sym_text, int sym_text_len,
4821 const char *text, const char *word,
4822 enum type_code code)
4823{
4824 struct symbol *sym;
4825 const struct block *b;
4826 struct block_iterator iter;
4827 int i;
4828
ff6fa247
GB
4829 if (cust == NULL)
4830 return;
4831
e11c72c7
GB
4832 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
4833 {
4834 QUIT;
4835 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), i);
4836 ALL_BLOCK_SYMBOLS (b, iter, sym)
4837 {
4838 if (code == TYPE_CODE_UNDEF
4839 || (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
4840 && TYPE_CODE (SYMBOL_TYPE (sym)) == code))
eb3ff9a5 4841 completion_list_add_symbol (tracker, sym,
e11c72c7
GB
4842 sym_text, sym_text_len,
4843 text, word);
4844 }
4845 }
4846}
4847
eb3ff9a5
PA
4848void
4849default_collect_symbol_completion_matches_break_on
4850 (completion_tracker &tracker,
c6756f62 4851 complete_symbol_mode mode,
eb3ff9a5
PA
4852 const char *text, const char *word,
4853 const char *break_on, enum type_code code)
c906108c 4854{
41d27058
JB
4855 /* Problem: All of the symbols have to be copied because readline
4856 frees them. I'm not going to worry about this; hopefully there
4857 won't be that many. */
4858
de4f826b 4859 struct symbol *sym;
43f3e411 4860 struct compunit_symtab *cust;
de4f826b
DC
4861 struct minimal_symbol *msymbol;
4862 struct objfile *objfile;
3977b71f 4863 const struct block *b;
edb3359d 4864 const struct block *surrounding_static_block, *surrounding_global_block;
8157b174 4865 struct block_iterator iter;
c906108c 4866 /* The symbol we are completing on. Points in same buffer as text. */
6f937416 4867 const char *sym_text;
c906108c
SS
4868 /* Length of sym_text. */
4869 int sym_text_len;
4870
41d27058 4871 /* Now look for the symbol we are supposed to complete on. */
c6756f62
PA
4872 if (mode == complete_symbol_mode::LINESPEC)
4873 sym_text = text;
4874 else
c906108c 4875 {
6f937416 4876 const char *p;
c906108c 4877 char quote_found;
6f937416 4878 const char *quote_pos = NULL;
c906108c
SS
4879
4880 /* First see if this is a quoted string. */
4881 quote_found = '\0';
4882 for (p = text; *p != '\0'; ++p)
4883 {
4884 if (quote_found != '\0')
4885 {
4886 if (*p == quote_found)
4887 /* Found close quote. */
4888 quote_found = '\0';
4889 else if (*p == '\\' && p[1] == quote_found)
4890 /* A backslash followed by the quote character
c5aa993b 4891 doesn't end the string. */
c906108c
SS
4892 ++p;
4893 }
4894 else if (*p == '\'' || *p == '"')
4895 {
4896 quote_found = *p;
4897 quote_pos = p;
4898 }
4899 }
4900 if (quote_found == '\'')
4901 /* A string within single quotes can be a symbol, so complete on it. */
4902 sym_text = quote_pos + 1;
4903 else if (quote_found == '"')
4904 /* A double-quoted string is never a symbol, nor does it make sense
c5aa993b 4905 to complete it any other way. */
c94fdfd0 4906 {
ef0b411a 4907 return;
c94fdfd0 4908 }
c906108c
SS
4909 else
4910 {
4911 /* It is not a quoted string. Break it based on the characters
4912 which are in symbols. */
4913 while (p > text)
4914 {
95699ff0 4915 if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0'
f55ee35c 4916 || p[-1] == ':' || strchr (break_on, p[-1]) != NULL)
c906108c
SS
4917 --p;
4918 else
4919 break;
4920 }
4921 sym_text = p;
4922 }
4923 }
4924
4925 sym_text_len = strlen (sym_text);
4926
1976171a
JK
4927 /* Prepare SYM_TEXT_LEN for compare_symbol_name. */
4928
4929 if (current_language->la_language == language_cplus
1976171a
JK
4930 || current_language->la_language == language_fortran)
4931 {
4932 /* These languages may have parameters entered by user but they are never
4933 present in the partial symbol tables. */
4934
585a269a 4935 const char *cs = (const char *) memchr (sym_text, '(', sym_text_len);
1976171a
JK
4936
4937 if (cs)
4938 sym_text_len = cs - sym_text;
4939 }
4940 gdb_assert (sym_text[sym_text_len] == '\0' || sym_text[sym_text_len] == '(');
4941
c906108c
SS
4942 /* At this point scan through the misc symbol vectors and add each
4943 symbol you find to the list. Eventually we want to ignore
4944 anything that isn't a text symbol (everything else will be
e11c72c7 4945 handled by the psymtab code below). */
c906108c 4946
2f68a895
TT
4947 if (code == TYPE_CODE_UNDEF)
4948 {
4949 ALL_MSYMBOLS (objfile, msymbol)
4950 {
4951 QUIT;
9af17804 4952
eb3ff9a5
PA
4953 completion_list_add_msymbol (tracker,
4954 msymbol, sym_text, sym_text_len,
4955 text, word);
4956
4957 completion_list_objc_symbol (tracker,
4958 msymbol, sym_text, sym_text_len,
4959 text, word);
2f68a895
TT
4960 }
4961 }
c906108c 4962
e11c72c7
GB
4963 /* Add completions for all currently loaded symbol tables. */
4964 ALL_COMPUNITS (objfile, cust)
eb3ff9a5
PA
4965 add_symtab_completions (cust, tracker,
4966 sym_text, sym_text_len, text, word, code);
e11c72c7 4967
14bc53a8
PA
4968 /* Look through the partial symtabs for all symbols which begin by
4969 matching SYM_TEXT. Expand all CUs that you find to the list. */
4970 expand_symtabs_matching (NULL,
4971 [&] (const char *name) /* symbol matcher */
4972 {
4973 return compare_symbol_name (name,
4974 sym_text,
4975 sym_text_len);
4976 },
4977 [&] (compunit_symtab *symtab) /* expansion notify */
4978 {
4979 add_symtab_completions (symtab,
eb3ff9a5 4980 tracker,
14bc53a8
PA
4981 sym_text, sym_text_len,
4982 text, word, code);
4983 },
4984 ALL_DOMAIN);
e11c72c7 4985
c906108c 4986 /* Search upwards from currently selected frame (so that we can
edb3359d
DJ
4987 complete on local vars). Also catch fields of types defined in
4988 this places which match our text string. Only complete on types
c378eb4e 4989 visible from current context. */
edb3359d
DJ
4990
4991 b = get_selected_block (0);
4992 surrounding_static_block = block_static_block (b);
4993 surrounding_global_block = block_global_block (b);
4994 if (surrounding_static_block != NULL)
4995 while (b != surrounding_static_block)
4996 {
4997 QUIT;
c906108c 4998
edb3359d
DJ
4999 ALL_BLOCK_SYMBOLS (b, iter, sym)
5000 {
2f68a895
TT
5001 if (code == TYPE_CODE_UNDEF)
5002 {
eb3ff9a5
PA
5003 completion_list_add_symbol (tracker, sym,
5004 sym_text, sym_text_len, text,
2f68a895 5005 word);
eb3ff9a5
PA
5006 completion_list_add_fields (tracker, sym,
5007 sym_text, sym_text_len, text,
2f68a895
TT
5008 word);
5009 }
5010 else if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
5011 && TYPE_CODE (SYMBOL_TYPE (sym)) == code)
eb3ff9a5
PA
5012 completion_list_add_symbol (tracker, sym,
5013 sym_text, sym_text_len, text,
2f68a895 5014 word);
edb3359d 5015 }
c5aa993b 5016
edb3359d
DJ
5017 /* Stop when we encounter an enclosing function. Do not stop for
5018 non-inlined functions - the locals of the enclosing function
5019 are in scope for a nested function. */
5020 if (BLOCK_FUNCTION (b) != NULL && block_inlined_p (b))
5021 break;
5022 b = BLOCK_SUPERBLOCK (b);
5023 }
c906108c 5024
edb3359d 5025 /* Add fields from the file's types; symbols will be added below. */
c906108c 5026
2f68a895
TT
5027 if (code == TYPE_CODE_UNDEF)
5028 {
5029 if (surrounding_static_block != NULL)
5030 ALL_BLOCK_SYMBOLS (surrounding_static_block, iter, sym)
eb3ff9a5
PA
5031 completion_list_add_fields (tracker, sym,
5032 sym_text, sym_text_len, text, word);
edb3359d 5033
2f68a895
TT
5034 if (surrounding_global_block != NULL)
5035 ALL_BLOCK_SYMBOLS (surrounding_global_block, iter, sym)
eb3ff9a5
PA
5036 completion_list_add_fields (tracker, sym,
5037 sym_text, sym_text_len, text, word);
2f68a895 5038 }
c906108c 5039
2f68a895
TT
5040 /* Skip macros if we are completing a struct tag -- arguable but
5041 usually what is expected. */
5042 if (current_language->la_macro_expansion == macro_expansion_c
5043 && code == TYPE_CODE_UNDEF)
9a044a89
TT
5044 {
5045 struct macro_scope *scope;
9a044a89 5046
14bc53a8
PA
5047 /* This adds a macro's name to the current completion list. */
5048 auto add_macro_name = [&] (const char *macro_name,
5049 const macro_definition *,
5050 macro_source_file *,
5051 int)
5052 {
eb3ff9a5 5053 completion_list_add_name (tracker, macro_name,
14bc53a8
PA
5054 sym_text, sym_text_len,
5055 text, word);
5056 };
5057
9a044a89
TT
5058 /* Add any macros visible in the default scope. Note that this
5059 may yield the occasional wrong result, because an expression
5060 might be evaluated in a scope other than the default. For
5061 example, if the user types "break file:line if <TAB>", the
5062 resulting expression will be evaluated at "file:line" -- but
5063 at there does not seem to be a way to detect this at
5064 completion time. */
5065 scope = default_macro_scope ();
5066 if (scope)
5067 {
5068 macro_for_each_in_scope (scope->file, scope->line,
14bc53a8 5069 add_macro_name);
9a044a89
TT
5070 xfree (scope);
5071 }
5072
5073 /* User-defined macros are always visible. */
14bc53a8 5074 macro_for_each (macro_user_macros, add_macro_name);
9a044a89 5075 }
ef0b411a
GB
5076}
5077
eb3ff9a5
PA
5078void
5079default_collect_symbol_completion_matches (completion_tracker &tracker,
c6756f62 5080 complete_symbol_mode mode,
eb3ff9a5
PA
5081 const char *text, const char *word,
5082 enum type_code code)
f55ee35c 5083{
c6756f62 5084 return default_collect_symbol_completion_matches_break_on (tracker, mode,
eb3ff9a5
PA
5085 text, word, "",
5086 code);
f55ee35c
JK
5087}
5088
eb3ff9a5
PA
5089/* Collect all symbols (regardless of class) which begin by matching
5090 TEXT. */
41d27058 5091
eb3ff9a5
PA
5092void
5093collect_symbol_completion_matches (completion_tracker &tracker,
c6756f62 5094 complete_symbol_mode mode,
eb3ff9a5 5095 const char *text, const char *word)
41d27058 5096{
c6756f62 5097 current_language->la_collect_symbol_completion_matches (tracker, mode,
eb3ff9a5
PA
5098 text, word,
5099 TYPE_CODE_UNDEF);
2f68a895
TT
5100}
5101
eb3ff9a5
PA
5102/* Like collect_symbol_completion_matches, but only collect
5103 STRUCT_DOMAIN symbols whose type code is CODE. */
2f68a895 5104
eb3ff9a5
PA
5105void
5106collect_symbol_completion_matches_type (completion_tracker &tracker,
5107 const char *text, const char *word,
5108 enum type_code code)
2f68a895 5109{
c6756f62
PA
5110 complete_symbol_mode mode = complete_symbol_mode::EXPRESSION;
5111
2f68a895
TT
5112 gdb_assert (code == TYPE_CODE_UNION
5113 || code == TYPE_CODE_STRUCT
2f68a895 5114 || code == TYPE_CODE_ENUM);
c6756f62 5115 current_language->la_collect_symbol_completion_matches (tracker, mode,
eb3ff9a5 5116 text, word, code);
41d27058
JB
5117}
5118
eb3ff9a5
PA
5119/* Like collect_symbol_completion_matches, but collects a list of
5120 symbols defined in all source files named SRCFILE. */
c94fdfd0 5121
eb3ff9a5
PA
5122void
5123collect_file_symbol_completion_matches (completion_tracker &tracker,
c6756f62 5124 complete_symbol_mode mode,
eb3ff9a5
PA
5125 const char *text, const char *word,
5126 const char *srcfile)
c94fdfd0 5127{
c94fdfd0 5128 /* The symbol we are completing on. Points in same buffer as text. */
6f937416 5129 const char *sym_text;
c94fdfd0
EZ
5130 /* Length of sym_text. */
5131 int sym_text_len;
5132
5133 /* Now look for the symbol we are supposed to complete on.
5134 FIXME: This should be language-specific. */
c6756f62
PA
5135 if (mode == complete_symbol_mode::LINESPEC)
5136 sym_text = text;
5137 else
c94fdfd0 5138 {
6f937416 5139 const char *p;
c94fdfd0 5140 char quote_found;
6f937416 5141 const char *quote_pos = NULL;
c94fdfd0
EZ
5142
5143 /* First see if this is a quoted string. */
5144 quote_found = '\0';
5145 for (p = text; *p != '\0'; ++p)
5146 {
5147 if (quote_found != '\0')
5148 {
5149 if (*p == quote_found)
5150 /* Found close quote. */
5151 quote_found = '\0';
5152 else if (*p == '\\' && p[1] == quote_found)
5153 /* A backslash followed by the quote character
5154 doesn't end the string. */
5155 ++p;
5156 }
5157 else if (*p == '\'' || *p == '"')
5158 {
5159 quote_found = *p;
5160 quote_pos = p;
5161 }
5162 }
5163 if (quote_found == '\'')
5164 /* A string within single quotes can be a symbol, so complete on it. */
5165 sym_text = quote_pos + 1;
5166 else if (quote_found == '"')
5167 /* A double-quoted string is never a symbol, nor does it make sense
5168 to complete it any other way. */
5169 {
eb3ff9a5 5170 return;
c94fdfd0
EZ
5171 }
5172 else
5173 {
69636828
AF
5174 /* Not a quoted string. */
5175 sym_text = language_search_unquoted_string (text, p);
c94fdfd0
EZ
5176 }
5177 }
5178
5179 sym_text_len = strlen (sym_text);
5180
8f14146e
PA
5181 /* Go through symtabs for SRCFILE and check the externs and statics
5182 for symbols which match. */
5183 iterate_over_symtabs (srcfile, [&] (symtab *s)
c94fdfd0 5184 {
8f14146e 5185 add_symtab_completions (SYMTAB_COMPUNIT (s),
eb3ff9a5 5186 tracker,
8f14146e
PA
5187 sym_text, sym_text_len,
5188 text, word, TYPE_CODE_UNDEF);
5189 return false;
5190 });
e27852be
DE
5191}
5192
c94fdfd0
EZ
5193/* A helper function for make_source_files_completion_list. It adds
5194 another file name to a list of possible completions, growing the
5195 list as necessary. */
5196
5197static void
6f937416 5198add_filename_to_list (const char *fname, const char *text, const char *word,
eb3ff9a5 5199 completion_list *list)
c94fdfd0 5200{
fe978cb0 5201 char *newobj;
c94fdfd0
EZ
5202 size_t fnlen = strlen (fname);
5203
c94fdfd0
EZ
5204 if (word == text)
5205 {
5206 /* Return exactly fname. */
224c3ddb 5207 newobj = (char *) xmalloc (fnlen + 5);
fe978cb0 5208 strcpy (newobj, fname);
c94fdfd0
EZ
5209 }
5210 else if (word > text)
5211 {
5212 /* Return some portion of fname. */
224c3ddb 5213 newobj = (char *) xmalloc (fnlen + 5);
fe978cb0 5214 strcpy (newobj, fname + (word - text));
c94fdfd0
EZ
5215 }
5216 else
5217 {
5218 /* Return some of TEXT plus fname. */
224c3ddb 5219 newobj = (char *) xmalloc (fnlen + (text - word) + 5);
fe978cb0
PA
5220 strncpy (newobj, word, text - word);
5221 newobj[text - word] = '\0';
5222 strcat (newobj, fname);
c94fdfd0 5223 }
eb3ff9a5 5224 list->emplace_back (newobj);
c94fdfd0
EZ
5225}
5226
5227static int
5228not_interesting_fname (const char *fname)
5229{
5230 static const char *illegal_aliens[] = {
5231 "_globals_", /* inserted by coff_symtab_read */
5232 NULL
5233 };
5234 int i;
5235
5236 for (i = 0; illegal_aliens[i]; i++)
5237 {
0ba1096a 5238 if (filename_cmp (fname, illegal_aliens[i]) == 0)
c94fdfd0
EZ
5239 return 1;
5240 }
5241 return 0;
5242}
5243
ccefe4c4
TT
5244/* An object of this type is passed as the user_data argument to
5245 map_partial_symbol_filenames. */
5246struct add_partial_filename_data
5247{
9fdc877b 5248 struct filename_seen_cache *filename_seen_cache;
6f937416
PA
5249 const char *text;
5250 const char *word;
ccefe4c4 5251 int text_len;
eb3ff9a5 5252 completion_list *list;
ccefe4c4
TT
5253};
5254
5255/* A callback for map_partial_symbol_filenames. */
eca864fe 5256
ccefe4c4 5257static void
2837d59e 5258maybe_add_partial_symtab_filename (const char *filename, const char *fullname,
ccefe4c4
TT
5259 void *user_data)
5260{
19ba03f4
SM
5261 struct add_partial_filename_data *data
5262 = (struct add_partial_filename_data *) user_data;
ccefe4c4
TT
5263
5264 if (not_interesting_fname (filename))
5265 return;
bbf2f4df 5266 if (!data->filename_seen_cache->seen (filename)
0ba1096a 5267 && filename_ncmp (filename, data->text, data->text_len) == 0)
ccefe4c4
TT
5268 {
5269 /* This file matches for a completion; add it to the
5270 current list of matches. */
49c4e619 5271 add_filename_to_list (filename, data->text, data->word, data->list);
ccefe4c4
TT
5272 }
5273 else
5274 {
5275 const char *base_name = lbasename (filename);
433759f7 5276
ccefe4c4 5277 if (base_name != filename
bbf2f4df 5278 && !data->filename_seen_cache->seen (base_name)
0ba1096a 5279 && filename_ncmp (base_name, data->text, data->text_len) == 0)
49c4e619 5280 add_filename_to_list (base_name, data->text, data->word, data->list);
ccefe4c4
TT
5281 }
5282}
5283
eb3ff9a5 5284/* Return a list of all source files whose names begin with matching
49c4e619 5285 TEXT. The file names are looked up in the symbol tables of this
eb3ff9a5 5286 program. */
c94fdfd0 5287
eb3ff9a5 5288completion_list
6f937416 5289make_source_files_completion_list (const char *text, const char *word)
c94fdfd0 5290{
43f3e411 5291 struct compunit_symtab *cu;
52f0bd74 5292 struct symtab *s;
52f0bd74 5293 struct objfile *objfile;
c94fdfd0 5294 size_t text_len = strlen (text);
eb3ff9a5 5295 completion_list list;
31889e00 5296 const char *base_name;
ccefe4c4 5297 struct add_partial_filename_data datum;
c94fdfd0 5298
c94fdfd0
EZ
5299 if (!have_full_symbols () && !have_partial_symbols ())
5300 return list;
5301
bbf2f4df 5302 filename_seen_cache filenames_seen;
9fdc877b 5303
43f3e411 5304 ALL_FILETABS (objfile, cu, s)
c94fdfd0
EZ
5305 {
5306 if (not_interesting_fname (s->filename))
5307 continue;
bbf2f4df 5308 if (!filenames_seen.seen (s->filename)
0ba1096a 5309 && filename_ncmp (s->filename, text, text_len) == 0)
c94fdfd0
EZ
5310 {
5311 /* This file matches for a completion; add it to the current
5312 list of matches. */
49c4e619 5313 add_filename_to_list (s->filename, text, word, &list);
c94fdfd0
EZ
5314 }
5315 else
5316 {
5317 /* NOTE: We allow the user to type a base name when the
5318 debug info records leading directories, but not the other
5319 way around. This is what subroutines of breakpoint
5320 command do when they parse file names. */
31889e00 5321 base_name = lbasename (s->filename);
c94fdfd0 5322 if (base_name != s->filename
bbf2f4df 5323 && !filenames_seen.seen (base_name)
0ba1096a 5324 && filename_ncmp (base_name, text, text_len) == 0)
49c4e619 5325 add_filename_to_list (base_name, text, word, &list);
c94fdfd0
EZ
5326 }
5327 }
5328
bbf2f4df 5329 datum.filename_seen_cache = &filenames_seen;
ccefe4c4
TT
5330 datum.text = text;
5331 datum.word = word;
5332 datum.text_len = text_len;
5333 datum.list = &list;
bb4142cf
DE
5334 map_symbol_filenames (maybe_add_partial_symtab_filename, &datum,
5335 0 /*need_fullname*/);
9fdc877b 5336
c94fdfd0
EZ
5337 return list;
5338}
c906108c 5339\f
51cc5b07 5340/* Track MAIN */
32ac0d11
TT
5341
5342/* Return the "main_info" object for the current program space. If
5343 the object has not yet been created, create it and fill in some
5344 default values. */
5345
5346static struct main_info *
5347get_main_info (void)
5348{
19ba03f4
SM
5349 struct main_info *info
5350 = (struct main_info *) program_space_data (current_program_space,
32ac0d11
TT
5351 main_progspace_key);
5352
5353 if (info == NULL)
5354 {
3d548a53
TT
5355 /* It may seem strange to store the main name in the progspace
5356 and also in whatever objfile happens to see a main name in
5357 its debug info. The reason for this is mainly historical:
5358 gdb returned "main" as the name even if no function named
5359 "main" was defined the program; and this approach lets us
5360 keep compatibility. */
32ac0d11
TT
5361 info = XCNEW (struct main_info);
5362 info->language_of_main = language_unknown;
5363 set_program_space_data (current_program_space, main_progspace_key,
5364 info);
5365 }
5366
5367 return info;
5368}
5369
5370/* A cleanup to destroy a struct main_info when a progspace is
5371 destroyed. */
5372
5373static void
5374main_info_cleanup (struct program_space *pspace, void *data)
5375{
19ba03f4 5376 struct main_info *info = (struct main_info *) data;
32ac0d11
TT
5377
5378 if (info != NULL)
5379 xfree (info->name_of_main);
5380 xfree (info);
5381}
51cc5b07 5382
3d548a53 5383static void
9e6c82ad 5384set_main_name (const char *name, enum language lang)
51cc5b07 5385{
32ac0d11
TT
5386 struct main_info *info = get_main_info ();
5387
5388 if (info->name_of_main != NULL)
51cc5b07 5389 {
32ac0d11
TT
5390 xfree (info->name_of_main);
5391 info->name_of_main = NULL;
5392 info->language_of_main = language_unknown;
51cc5b07
AC
5393 }
5394 if (name != NULL)
5395 {
32ac0d11
TT
5396 info->name_of_main = xstrdup (name);
5397 info->language_of_main = lang;
51cc5b07
AC
5398 }
5399}
5400
ea53e89f
JB
5401/* Deduce the name of the main procedure, and set NAME_OF_MAIN
5402 accordingly. */
5403
5404static void
5405find_main_name (void)
5406{
cd6c7346 5407 const char *new_main_name;
3d548a53
TT
5408 struct objfile *objfile;
5409
5410 /* First check the objfiles to see whether a debuginfo reader has
5411 picked up the appropriate main name. Historically the main name
5412 was found in a more or less random way; this approach instead
5413 relies on the order of objfile creation -- which still isn't
5414 guaranteed to get the correct answer, but is just probably more
5415 accurate. */
5416 ALL_OBJFILES (objfile)
5417 {
5418 if (objfile->per_bfd->name_of_main != NULL)
5419 {
5420 set_main_name (objfile->per_bfd->name_of_main,
5421 objfile->per_bfd->language_of_main);
5422 return;
5423 }
5424 }
ea53e89f
JB
5425
5426 /* Try to see if the main procedure is in Ada. */
5427 /* FIXME: brobecker/2005-03-07: Another way of doing this would
5428 be to add a new method in the language vector, and call this
5429 method for each language until one of them returns a non-empty
5430 name. This would allow us to remove this hard-coded call to
5431 an Ada function. It is not clear that this is a better approach
5432 at this point, because all methods need to be written in a way
c378eb4e 5433 such that false positives never be returned. For instance, it is
ea53e89f
JB
5434 important that a method does not return a wrong name for the main
5435 procedure if the main procedure is actually written in a different
5436 language. It is easy to guaranty this with Ada, since we use a
5437 special symbol generated only when the main in Ada to find the name
c378eb4e 5438 of the main procedure. It is difficult however to see how this can
ea53e89f
JB
5439 be guarantied for languages such as C, for instance. This suggests
5440 that order of call for these methods becomes important, which means
5441 a more complicated approach. */
5442 new_main_name = ada_main_name ();
5443 if (new_main_name != NULL)
9af17804 5444 {
9e6c82ad 5445 set_main_name (new_main_name, language_ada);
ea53e89f
JB
5446 return;
5447 }
5448
63778547
IB
5449 new_main_name = d_main_name ();
5450 if (new_main_name != NULL)
5451 {
5452 set_main_name (new_main_name, language_d);
5453 return;
5454 }
5455
a766d390
DE
5456 new_main_name = go_main_name ();
5457 if (new_main_name != NULL)
5458 {
9e6c82ad 5459 set_main_name (new_main_name, language_go);
a766d390
DE
5460 return;
5461 }
5462
cd6c7346
PM
5463 new_main_name = pascal_main_name ();
5464 if (new_main_name != NULL)
9af17804 5465 {
9e6c82ad 5466 set_main_name (new_main_name, language_pascal);
cd6c7346
PM
5467 return;
5468 }
5469
ea53e89f
JB
5470 /* The languages above didn't identify the name of the main procedure.
5471 Fallback to "main". */
9e6c82ad 5472 set_main_name ("main", language_unknown);
ea53e89f
JB
5473}
5474
51cc5b07
AC
5475char *
5476main_name (void)
5477{
32ac0d11
TT
5478 struct main_info *info = get_main_info ();
5479
5480 if (info->name_of_main == NULL)
ea53e89f
JB
5481 find_main_name ();
5482
32ac0d11 5483 return info->name_of_main;
51cc5b07
AC
5484}
5485
9e6c82ad
TT
5486/* Return the language of the main function. If it is not known,
5487 return language_unknown. */
5488
5489enum language
5490main_language (void)
5491{
32ac0d11
TT
5492 struct main_info *info = get_main_info ();
5493
5494 if (info->name_of_main == NULL)
5495 find_main_name ();
5496
5497 return info->language_of_main;
9e6c82ad
TT
5498}
5499
ea53e89f
JB
5500/* Handle ``executable_changed'' events for the symtab module. */
5501
5502static void
781b42b0 5503symtab_observer_executable_changed (void)
ea53e89f
JB
5504{
5505 /* NAME_OF_MAIN may no longer be the same, so reset it for now. */
9e6c82ad 5506 set_main_name (NULL, language_unknown);
ea53e89f 5507}
51cc5b07 5508
a6c727b2
DJ
5509/* Return 1 if the supplied producer string matches the ARM RealView
5510 compiler (armcc). */
5511
5512int
5513producer_is_realview (const char *producer)
5514{
5515 static const char *const arm_idents[] = {
5516 "ARM C Compiler, ADS",
5517 "Thumb C Compiler, ADS",
5518 "ARM C++ Compiler, ADS",
5519 "Thumb C++ Compiler, ADS",
5520 "ARM/Thumb C/C++ Compiler, RVCT",
5521 "ARM C/C++ Compiler, RVCT"
5522 };
5523 int i;
5524
5525 if (producer == NULL)
5526 return 0;
5527
5528 for (i = 0; i < ARRAY_SIZE (arm_idents); i++)
61012eef 5529 if (startswith (producer, arm_idents[i]))
a6c727b2
DJ
5530 return 1;
5531
5532 return 0;
5533}
ed0616c6 5534
f1e6e072
TT
5535\f
5536
5537/* The next index to hand out in response to a registration request. */
5538
5539static int next_aclass_value = LOC_FINAL_VALUE;
5540
5541/* The maximum number of "aclass" registrations we support. This is
5542 constant for convenience. */
5543#define MAX_SYMBOL_IMPLS (LOC_FINAL_VALUE + 10)
5544
5545/* The objects representing the various "aclass" values. The elements
5546 from 0 up to LOC_FINAL_VALUE-1 represent themselves, and subsequent
5547 elements are those registered at gdb initialization time. */
5548
5549static struct symbol_impl symbol_impl[MAX_SYMBOL_IMPLS];
5550
5551/* The globally visible pointer. This is separate from 'symbol_impl'
5552 so that it can be const. */
5553
5554const struct symbol_impl *symbol_impls = &symbol_impl[0];
5555
5556/* Make sure we saved enough room in struct symbol. */
5557
5558gdb_static_assert (MAX_SYMBOL_IMPLS <= (1 << SYMBOL_ACLASS_BITS));
5559
5560/* Register a computed symbol type. ACLASS must be LOC_COMPUTED. OPS
5561 is the ops vector associated with this index. This returns the new
5562 index, which should be used as the aclass_index field for symbols
5563 of this type. */
5564
5565int
5566register_symbol_computed_impl (enum address_class aclass,
5567 const struct symbol_computed_ops *ops)
5568{
5569 int result = next_aclass_value++;
5570
5571 gdb_assert (aclass == LOC_COMPUTED);
5572 gdb_assert (result < MAX_SYMBOL_IMPLS);
5573 symbol_impl[result].aclass = aclass;
5574 symbol_impl[result].ops_computed = ops;
5575
24d6c2a0
TT
5576 /* Sanity check OPS. */
5577 gdb_assert (ops != NULL);
5578 gdb_assert (ops->tracepoint_var_ref != NULL);
5579 gdb_assert (ops->describe_location != NULL);
0b31a4bc 5580 gdb_assert (ops->get_symbol_read_needs != NULL);
24d6c2a0
TT
5581 gdb_assert (ops->read_variable != NULL);
5582
f1e6e072
TT
5583 return result;
5584}
5585
5586/* Register a function with frame base type. ACLASS must be LOC_BLOCK.
5587 OPS is the ops vector associated with this index. This returns the
5588 new index, which should be used as the aclass_index field for symbols
5589 of this type. */
5590
5591int
5592register_symbol_block_impl (enum address_class aclass,
5593 const struct symbol_block_ops *ops)
5594{
5595 int result = next_aclass_value++;
5596
5597 gdb_assert (aclass == LOC_BLOCK);
5598 gdb_assert (result < MAX_SYMBOL_IMPLS);
5599 symbol_impl[result].aclass = aclass;
5600 symbol_impl[result].ops_block = ops;
5601
5602 /* Sanity check OPS. */
5603 gdb_assert (ops != NULL);
5604 gdb_assert (ops->find_frame_base_location != NULL);
5605
5606 return result;
5607}
5608
5609/* Register a register symbol type. ACLASS must be LOC_REGISTER or
5610 LOC_REGPARM_ADDR. OPS is the register ops vector associated with
5611 this index. This returns the new index, which should be used as
5612 the aclass_index field for symbols of this type. */
5613
5614int
5615register_symbol_register_impl (enum address_class aclass,
5616 const struct symbol_register_ops *ops)
5617{
5618 int result = next_aclass_value++;
5619
5620 gdb_assert (aclass == LOC_REGISTER || aclass == LOC_REGPARM_ADDR);
5621 gdb_assert (result < MAX_SYMBOL_IMPLS);
5622 symbol_impl[result].aclass = aclass;
5623 symbol_impl[result].ops_register = ops;
5624
5625 return result;
5626}
5627
5628/* Initialize elements of 'symbol_impl' for the constants in enum
5629 address_class. */
5630
5631static void
5632initialize_ordinary_address_classes (void)
5633{
5634 int i;
5635
5636 for (i = 0; i < LOC_FINAL_VALUE; ++i)
aead7601 5637 symbol_impl[i].aclass = (enum address_class) i;
f1e6e072
TT
5638}
5639
5640\f
5641
1994afbf
DE
5642/* Helper function to initialize the fields of an objfile-owned symbol.
5643 It assumed that *SYM is already all zeroes. */
5644
5645static void
5646initialize_objfile_symbol_1 (struct symbol *sym)
5647{
5648 SYMBOL_OBJFILE_OWNED (sym) = 1;
5649 SYMBOL_SECTION (sym) = -1;
5650}
5651
5652/* Initialize the symbol SYM, and mark it as being owned by an objfile. */
e623cf5d
TT
5653
5654void
38bf1463 5655initialize_objfile_symbol (struct symbol *sym)
e623cf5d
TT
5656{
5657 memset (sym, 0, sizeof (*sym));
1994afbf 5658 initialize_objfile_symbol_1 (sym);
e623cf5d
TT
5659}
5660
5661/* Allocate and initialize a new 'struct symbol' on OBJFILE's
5662 obstack. */
5663
5664struct symbol *
5665allocate_symbol (struct objfile *objfile)
5666{
5667 struct symbol *result;
5668
5669 result = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symbol);
1994afbf 5670 initialize_objfile_symbol_1 (result);
e623cf5d
TT
5671
5672 return result;
5673}
5674
5675/* Allocate and initialize a new 'struct template_symbol' on OBJFILE's
5676 obstack. */
5677
5678struct template_symbol *
5679allocate_template_symbol (struct objfile *objfile)
5680{
5681 struct template_symbol *result;
5682
5683 result = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct template_symbol);
1994afbf 5684 initialize_objfile_symbol_1 (&result->base);
e623cf5d
TT
5685
5686 return result;
5687}
5688
08be3fe3
DE
5689/* See symtab.h. */
5690
5691struct objfile *
5692symbol_objfile (const struct symbol *symbol)
5693{
1994afbf
DE
5694 gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
5695 return SYMTAB_OBJFILE (symbol->owner.symtab);
08be3fe3
DE
5696}
5697
5698/* See symtab.h. */
5699
5700struct gdbarch *
5701symbol_arch (const struct symbol *symbol)
5702{
1994afbf
DE
5703 if (!SYMBOL_OBJFILE_OWNED (symbol))
5704 return symbol->owner.arch;
5705 return get_objfile_arch (SYMTAB_OBJFILE (symbol->owner.symtab));
08be3fe3
DE
5706}
5707
5708/* See symtab.h. */
5709
5710struct symtab *
5711symbol_symtab (const struct symbol *symbol)
5712{
1994afbf
DE
5713 gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
5714 return symbol->owner.symtab;
08be3fe3
DE
5715}
5716
5717/* See symtab.h. */
5718
5719void
5720symbol_set_symtab (struct symbol *symbol, struct symtab *symtab)
5721{
1994afbf
DE
5722 gdb_assert (SYMBOL_OBJFILE_OWNED (symbol));
5723 symbol->owner.symtab = symtab;
08be3fe3
DE
5724}
5725
e623cf5d
TT
5726\f
5727
c906108c 5728void
fba45db2 5729_initialize_symtab (void)
c906108c 5730{
f1e6e072
TT
5731 initialize_ordinary_address_classes ();
5732
32ac0d11
TT
5733 main_progspace_key
5734 = register_program_space_data_with_cleanup (NULL, main_info_cleanup);
5735
f57d2163
DE
5736 symbol_cache_key
5737 = register_program_space_data_with_cleanup (NULL, symbol_cache_cleanup);
5738
11db9430 5739 add_info ("variables", info_variables_command, _("\
1bedd215 5740All global and static variable names, or those matching REGEXP."));
c906108c 5741 if (dbx_commands)
11db9430 5742 add_com ("whereis", class_info, info_variables_command, _("\
1bedd215 5743All global and static variable names, or those matching REGEXP."));
c906108c 5744
11db9430 5745 add_info ("functions", info_functions_command,
1bedd215 5746 _("All function names, or those matching REGEXP."));
c906108c
SS
5747
5748 /* FIXME: This command has at least the following problems:
5749 1. It prints builtin types (in a very strange and confusing fashion).
5750 2. It doesn't print right, e.g. with
c5aa993b
JM
5751 typedef struct foo *FOO
5752 type_print prints "FOO" when we want to make it (in this situation)
5753 print "struct foo *".
c906108c
SS
5754 I also think "ptype" or "whatis" is more likely to be useful (but if
5755 there is much disagreement "info types" can be fixed). */
11db9430 5756 add_info ("types", info_types_command,
1bedd215 5757 _("All type names, or those matching REGEXP."));
c906108c 5758
11db9430 5759 add_info ("sources", info_sources_command,
1bedd215 5760 _("Source files in the program."));
c906108c
SS
5761
5762 add_com ("rbreak", class_breakpoint, rbreak_command,
1bedd215 5763 _("Set a breakpoint for all functions matching REGEXP."));
c906108c 5764
717d2f5a
JB
5765 add_setshow_enum_cmd ("multiple-symbols", no_class,
5766 multiple_symbols_modes, &multiple_symbols_mode,
5767 _("\
5768Set the debugger behavior when more than one symbol are possible matches\n\
5769in an expression."), _("\
5770Show how the debugger handles ambiguities in expressions."), _("\
5771Valid values are \"ask\", \"all\", \"cancel\", and the default is \"all\"."),
5772 NULL, NULL, &setlist, &showlist);
5773
c011a4f4
DE
5774 add_setshow_boolean_cmd ("basenames-may-differ", class_obscure,
5775 &basenames_may_differ, _("\
5776Set whether a source file may have multiple base names."), _("\
5777Show whether a source file may have multiple base names."), _("\
5778(A \"base name\" is the name of a file with the directory part removed.\n\
5779Example: The base name of \"/home/user/hello.c\" is \"hello.c\".)\n\
5780If set, GDB will canonicalize file names (e.g., expand symlinks)\n\
5781before comparing them. Canonicalization is an expensive operation,\n\
5782but it allows the same file be known by more than one base name.\n\
5783If not set (the default), all source files are assumed to have just\n\
5784one base name, and gdb will do file name comparisons more efficiently."),
5785 NULL, NULL,
5786 &setlist, &showlist);
5787
db0fec5c
DE
5788 add_setshow_zuinteger_cmd ("symtab-create", no_class, &symtab_create_debug,
5789 _("Set debugging of symbol table creation."),
5790 _("Show debugging of symbol table creation."), _("\
5791When enabled (non-zero), debugging messages are printed when building\n\
5792symbol tables. A value of 1 (one) normally provides enough information.\n\
5793A value greater than 1 provides more verbose information."),
5794 NULL,
5795 NULL,
5796 &setdebuglist, &showdebuglist);
45cfd468 5797
cc485e62
DE
5798 add_setshow_zuinteger_cmd ("symbol-lookup", no_class, &symbol_lookup_debug,
5799 _("\
5800Set debugging of symbol lookup."), _("\
5801Show debugging of symbol lookup."), _("\
5802When enabled (non-zero), symbol lookups are logged."),
5803 NULL, NULL,
5804 &setdebuglist, &showdebuglist);
5805
f57d2163
DE
5806 add_setshow_zuinteger_cmd ("symbol-cache-size", no_class,
5807 &new_symbol_cache_size,
5808 _("Set the size of the symbol cache."),
5809 _("Show the size of the symbol cache."), _("\
5810The size of the symbol cache.\n\
5811If zero then the symbol cache is disabled."),
5812 set_symbol_cache_size_handler, NULL,
5813 &maintenance_set_cmdlist,
5814 &maintenance_show_cmdlist);
5815
5816 add_cmd ("symbol-cache", class_maintenance, maintenance_print_symbol_cache,
5817 _("Dump the symbol cache for each program space."),
5818 &maintenanceprintlist);
5819
5820 add_cmd ("symbol-cache-statistics", class_maintenance,
5821 maintenance_print_symbol_cache_statistics,
5822 _("Print symbol cache statistics for each program space."),
5823 &maintenanceprintlist);
5824
5825 add_cmd ("flush-symbol-cache", class_maintenance,
5826 maintenance_flush_symbol_cache,
5827 _("Flush the symbol cache for each program space."),
5828 &maintenancelist);
5829
ea53e89f 5830 observer_attach_executable_changed (symtab_observer_executable_changed);
f57d2163
DE
5831 observer_attach_new_objfile (symtab_new_objfile_observer);
5832 observer_attach_free_objfile (symtab_free_objfile_observer);
c906108c 5833}
This page took 4.801155 seconds and 4 git commands to generate.