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