]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/minsyms.c
Add a testcase for PR binutils/23460
[thirdparty/binutils-gdb.git] / gdb / minsyms.c
CommitLineData
c906108c 1/* GDB routines for manipulating the minimal symbol tables.
e2882c85 2 Copyright (C) 1992-2018 Free Software Foundation, Inc.
c906108c
SS
3 Contributed by Cygnus Support, using pieces from other GDB modules.
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
21/* This file contains support routines for creating, manipulating, and
22 destroying minimal symbol tables.
23
24 Minimal symbol tables are used to hold some very basic information about
25 all defined global symbols (text, data, bss, abs, etc). The only two
26 required pieces of information are the symbol's name and the address
27 associated with that symbol.
28
29 In many cases, even if a file was compiled with no special options for
30 debugging at all, as long as was not stripped it will contain sufficient
31 information to build useful minimal symbol tables using this structure.
c5aa993b 32
c906108c
SS
33 Even when a file contains enough debugging information to build a full
34 symbol table, these minimal symbols are still useful for quickly mapping
35 between names and addresses, and vice versa. They are also sometimes used
025bb325 36 to figure out what full symbol table entries need to be read in. */
c906108c
SS
37
38
39#include "defs.h"
9227b5eb 40#include <ctype.h>
c906108c
SS
41#include "symtab.h"
42#include "bfd.h"
0ba1096a 43#include "filenames.h"
c906108c
SS
44#include "symfile.h"
45#include "objfiles.h"
46#include "demangle.h"
7ed49443
JB
47#include "value.h"
48#include "cp-abi.h"
42848c96 49#include "target.h"
71c25dea
TT
50#include "cp-support.h"
51#include "language.h"
529480d0 52#include "cli/cli-utils.h"
bd9269f7 53#include "symbol.h"
b5ec771e 54#include <algorithm>
deeeba55 55#include "safe-ctype.h"
c906108c 56
bf223d3e
PA
57/* See minsyms.h. */
58
59bool
4024cf2b
PA
60msymbol_is_function (struct objfile *objfile, minimal_symbol *minsym,
61 CORE_ADDR *func_address_p)
bf223d3e 62{
4024cf2b
PA
63 CORE_ADDR msym_addr = MSYMBOL_VALUE_ADDRESS (objfile, minsym);
64
65 switch (minsym->type)
bf223d3e 66 {
4024cf2b
PA
67 case mst_slot_got_plt:
68 case mst_data:
69 case mst_bss:
70 case mst_abs:
71 case mst_file_data:
72 case mst_file_bss:
f50776aa 73 case mst_data_gnu_ifunc:
4024cf2b
PA
74 {
75 struct gdbarch *gdbarch = get_objfile_arch (objfile);
8b88a78e
PA
76 CORE_ADDR pc
77 = gdbarch_convert_from_func_ptr_addr (gdbarch, msym_addr,
78 current_top_target ());
4024cf2b
PA
79 if (pc != msym_addr)
80 {
81 if (func_address_p != NULL)
82 *func_address_p = pc;
83 return true;
84 }
85 return false;
86 }
bf223d3e 87 default:
4024cf2b
PA
88 if (func_address_p != NULL)
89 *func_address_p = msym_addr;
90 return true;
bf223d3e
PA
91 }
92}
93
c906108c
SS
94/* Accumulate the minimal symbols for each objfile in bunches of BUNCH_SIZE.
95 At the end, copy them all into one newly allocated location on an objfile's
34643a32 96 per-BFD storage obstack. */
c906108c
SS
97
98#define BUNCH_SIZE 127
99
100struct msym_bunch
c5aa993b
JM
101 {
102 struct msym_bunch *next;
103 struct minimal_symbol contents[BUNCH_SIZE];
104 };
c906108c 105
b19686e0 106/* See minsyms.h. */
9227b5eb
JB
107
108unsigned int
109msymbol_hash_iw (const char *string)
110{
111 unsigned int hash = 0;
b8d56208 112
9227b5eb
JB
113 while (*string && *string != '(')
114 {
f1735a53 115 string = skip_spaces (string);
9227b5eb 116 if (*string && *string != '(')
375f3d86 117 {
59d7bcaf 118 hash = SYMBOL_HASH_NEXT (hash, *string);
375f3d86
DJ
119 ++string;
120 }
9227b5eb 121 }
261397f8 122 return hash;
9227b5eb
JB
123}
124
b19686e0 125/* See minsyms.h. */
9227b5eb
JB
126
127unsigned int
128msymbol_hash (const char *string)
129{
130 unsigned int hash = 0;
b8d56208 131
9227b5eb 132 for (; *string; ++string)
59d7bcaf 133 hash = SYMBOL_HASH_NEXT (hash, *string);
261397f8 134 return hash;
9227b5eb
JB
135}
136
137/* Add the minimal symbol SYM to an objfile's minsym hash table, TABLE. */
984ac464 138static void
9227b5eb
JB
139add_minsym_to_hash_table (struct minimal_symbol *sym,
140 struct minimal_symbol **table)
141{
142 if (sym->hash_next == NULL)
143 {
f56f77c1 144 unsigned int hash
efd66ac6 145 = msymbol_hash (MSYMBOL_LINKAGE_NAME (sym)) % MINIMAL_SYMBOL_HASH_SIZE;
b8d56208 146
9227b5eb
JB
147 sym->hash_next = table[hash];
148 table[hash] = sym;
149 }
150}
151
0729fd50
DB
152/* Add the minimal symbol SYM to an objfile's minsym demangled hash table,
153 TABLE. */
154static void
155add_minsym_to_demangled_hash_table (struct minimal_symbol *sym,
b5ec771e 156 struct objfile *objfile)
0729fd50
DB
157{
158 if (sym->demangled_hash_next == NULL)
159 {
b5ec771e
PA
160 unsigned int hash = search_name_hash (MSYMBOL_LANGUAGE (sym),
161 MSYMBOL_SEARCH_NAME (sym));
162
163 auto &vec = objfile->per_bfd->demangled_hash_languages;
164 auto it = std::lower_bound (vec.begin (), vec.end (),
165 MSYMBOL_LANGUAGE (sym));
166 if (it == vec.end () || *it != MSYMBOL_LANGUAGE (sym))
167 vec.insert (it, MSYMBOL_LANGUAGE (sym));
168
169 struct minimal_symbol **table
170 = objfile->per_bfd->msymbol_demangled_hash;
171 unsigned int hash_index = hash % MINIMAL_SYMBOL_HASH_SIZE;
172 sym->demangled_hash_next = table[hash_index];
173 table[hash_index] = sym;
174 }
175}
b8d56208 176
b5ec771e
PA
177/* Worker object for lookup_minimal_symbol. Stores temporary results
178 while walking the symbol tables. */
179
180struct found_minimal_symbols
181{
182 /* External symbols are best. */
183 bound_minimal_symbol external_symbol {};
184
185 /* File-local symbols are next best. */
186 bound_minimal_symbol file_symbol {};
187
188 /* Symbols for shared library trampolines are next best. */
189 bound_minimal_symbol trampoline_symbol {};
190
191 /* Called when a symbol name matches. Check if the minsym is a
192 better type than what we had already found, and record it in one
193 of the members fields if so. Returns true if we collected the
194 real symbol, in which case we can stop searching. */
195 bool maybe_collect (const char *sfile, objfile *objf,
196 minimal_symbol *msymbol);
197};
198
199/* See declaration above. */
200
201bool
202found_minimal_symbols::maybe_collect (const char *sfile,
203 struct objfile *objfile,
204 minimal_symbol *msymbol)
205{
206 switch (MSYMBOL_TYPE (msymbol))
207 {
208 case mst_file_text:
209 case mst_file_data:
210 case mst_file_bss:
211 if (sfile == NULL
212 || filename_cmp (msymbol->filename, sfile) == 0)
213 {
214 file_symbol.minsym = msymbol;
215 file_symbol.objfile = objfile;
216 }
217 break;
218
219 case mst_solib_trampoline:
220
221 /* If a trampoline symbol is found, we prefer to keep
222 looking for the *real* symbol. If the actual symbol
223 is not found, then we'll use the trampoline
224 entry. */
225 if (trampoline_symbol.minsym == NULL)
226 {
227 trampoline_symbol.minsym = msymbol;
228 trampoline_symbol.objfile = objfile;
229 }
230 break;
231
232 case mst_unknown:
233 default:
234 external_symbol.minsym = msymbol;
235 external_symbol.objfile = objfile;
236 /* We have the real symbol. No use looking further. */
237 return true;
238 }
239
240 /* Keep looking. */
241 return false;
242}
243
244/* Walk the mangled name hash table, and pass each symbol whose name
245 matches LOOKUP_NAME according to NAMECMP to FOUND. */
246
247static void
248lookup_minimal_symbol_mangled (const char *lookup_name,
249 const char *sfile,
250 struct objfile *objfile,
251 struct minimal_symbol **table,
252 unsigned int hash,
253 int (*namecmp) (const char *, const char *),
254 found_minimal_symbols &found)
255{
256 for (minimal_symbol *msymbol = table[hash];
257 msymbol != NULL;
258 msymbol = msymbol->hash_next)
259 {
260 const char *symbol_name = MSYMBOL_LINKAGE_NAME (msymbol);
261
262 if (namecmp (symbol_name, lookup_name) == 0
263 && found.maybe_collect (sfile, objfile, msymbol))
264 return;
265 }
266}
267
268/* Walk the demangled name hash table, and pass each symbol whose name
269 matches LOOKUP_NAME according to MATCHER to FOUND. */
270
271static void
272lookup_minimal_symbol_demangled (const lookup_name_info &lookup_name,
273 const char *sfile,
274 struct objfile *objfile,
275 struct minimal_symbol **table,
276 unsigned int hash,
277 symbol_name_matcher_ftype *matcher,
278 found_minimal_symbols &found)
279{
280 for (minimal_symbol *msymbol = table[hash];
281 msymbol != NULL;
282 msymbol = msymbol->demangled_hash_next)
283 {
284 const char *symbol_name = MSYMBOL_SEARCH_NAME (msymbol);
285
286 if (matcher (symbol_name, lookup_name, NULL)
287 && found.maybe_collect (sfile, objfile, msymbol))
288 return;
0729fd50
DB
289 }
290}
291
c906108c
SS
292/* Look through all the current minimal symbol tables and find the
293 first minimal symbol that matches NAME. If OBJF is non-NULL, limit
72a5efb3
DJ
294 the search to that objfile. If SFILE is non-NULL, the only file-scope
295 symbols considered will be from that source file (global symbols are
296 still preferred). Returns a pointer to the minimal symbol that
c906108c
SS
297 matches, or NULL if no match is found.
298
299 Note: One instance where there may be duplicate minimal symbols with
300 the same name is when the symbol tables for a shared library and the
301 symbol tables for an executable contain global symbols with the same
d73f140a
JB
302 names (the dynamic linker deals with the duplication).
303
304 It's also possible to have minimal symbols with different mangled
305 names, but identical demangled names. For example, the GNU C++ v3
306 ABI requires the generation of two (or perhaps three) copies of
307 constructor functions --- "in-charge", "not-in-charge", and
308 "allocate" copies; destructors may be duplicated as well.
309 Obviously, there must be distinct mangled names for each of these,
310 but the demangled names are all the same: S::S or S::~S. */
c906108c 311
3b7344d5
TT
312struct bound_minimal_symbol
313lookup_minimal_symbol (const char *name, const char *sfile,
314 struct objfile *objf)
c906108c
SS
315{
316 struct objfile *objfile;
b5ec771e 317 found_minimal_symbols found;
c906108c 318
b5ec771e 319 unsigned int mangled_hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
9227b5eb 320
b5ec771e
PA
321 auto *mangled_cmp
322 = (case_sensitivity == case_sensitive_on
323 ? strcmp
324 : strcasecmp);
71c25dea 325
c906108c 326 if (sfile != NULL)
9f37bbcc 327 sfile = lbasename (sfile);
c906108c 328
b5ec771e 329 lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
71c25dea 330
c906108c 331 for (objfile = object_files;
b5ec771e 332 objfile != NULL && found.external_symbol.minsym == NULL;
c5aa993b 333 objfile = objfile->next)
c906108c 334 {
56e3f43c 335 if (objf == NULL || objf == objfile
15d123c9 336 || objf == objfile->separate_debug_objfile_backlink)
c906108c 337 {
b5ec771e
PA
338 if (symbol_lookup_debug)
339 {
340 fprintf_unfiltered (gdb_stdlog,
341 "lookup_minimal_symbol (%s, %s, %s)\n",
342 name, sfile != NULL ? sfile : "NULL",
343 objfile_debug_name (objfile));
344 }
345
9227b5eb
JB
346 /* Do two passes: the first over the ordinary hash table,
347 and the second over the demangled hash table. */
b5ec771e
PA
348 lookup_minimal_symbol_mangled (name, sfile, objfile,
349 objfile->per_bfd->msymbol_hash,
350 mangled_hash, mangled_cmp, found);
cc485e62 351
b5ec771e
PA
352 /* If not found, try the demangled hash table. */
353 if (found.external_symbol.minsym == NULL)
c906108c 354 {
b5ec771e
PA
355 /* Once for each language in the demangled hash names
356 table (usually just zero or one languages). */
357 for (auto lang : objfile->per_bfd->demangled_hash_languages)
c906108c 358 {
b5ec771e
PA
359 unsigned int hash
360 = (lookup_name.search_name_hash (lang)
361 % MINIMAL_SYMBOL_HASH_SIZE);
362
363 symbol_name_matcher_ftype *match
618daa93
PA
364 = get_symbol_name_matcher (language_def (lang),
365 lookup_name);
b5ec771e
PA
366 struct minimal_symbol **msymbol_demangled_hash
367 = objfile->per_bfd->msymbol_demangled_hash;
368
369 lookup_minimal_symbol_demangled (lookup_name, sfile, objfile,
370 msymbol_demangled_hash,
371 hash, match, found);
372
373 if (found.external_symbol.minsym != NULL)
374 break;
9227b5eb 375 }
c906108c
SS
376 }
377 }
378 }
71c25dea 379
c906108c 380 /* External symbols are best. */
b5ec771e 381 if (found.external_symbol.minsym != NULL)
cc485e62
DE
382 {
383 if (symbol_lookup_debug)
384 {
b5ec771e
PA
385 minimal_symbol *minsym = found.external_symbol.minsym;
386
cc485e62 387 fprintf_unfiltered (gdb_stdlog,
b5ec771e
PA
388 "lookup_minimal_symbol (...) = %s (external)\n",
389 host_address_to_string (minsym));
cc485e62 390 }
b5ec771e 391 return found.external_symbol;
cc485e62 392 }
c906108c
SS
393
394 /* File-local symbols are next best. */
b5ec771e 395 if (found.file_symbol.minsym != NULL)
cc485e62
DE
396 {
397 if (symbol_lookup_debug)
398 {
b5ec771e
PA
399 minimal_symbol *minsym = found.file_symbol.minsym;
400
cc485e62 401 fprintf_unfiltered (gdb_stdlog,
b5ec771e
PA
402 "lookup_minimal_symbol (...) = %s (file-local)\n",
403 host_address_to_string (minsym));
cc485e62 404 }
b5ec771e 405 return found.file_symbol;
cc485e62 406 }
c906108c
SS
407
408 /* Symbols for shared library trampolines are next best. */
b5ec771e 409 if (found.trampoline_symbol.minsym != NULL)
cc485e62 410 {
b5ec771e
PA
411 if (symbol_lookup_debug)
412 {
413 minimal_symbol *minsym = found.trampoline_symbol.minsym;
414
415 fprintf_unfiltered (gdb_stdlog,
416 "lookup_minimal_symbol (...) = %s (trampoline)\n",
417 host_address_to_string (minsym));
418 }
419
420 return found.trampoline_symbol;
cc485e62 421 }
b5ec771e
PA
422
423 /* Not found. */
424 if (symbol_lookup_debug)
425 fprintf_unfiltered (gdb_stdlog, "lookup_minimal_symbol (...) = NULL\n");
426 return {};
7c7b6655
TT
427}
428
429/* See minsyms.h. */
c906108c 430
7c7b6655
TT
431struct bound_minimal_symbol
432lookup_bound_minimal_symbol (const char *name)
433{
3b7344d5 434 return lookup_minimal_symbol (name, NULL, NULL);
c906108c
SS
435}
436
bd9269f7
GB
437/* See common/symbol.h. */
438
439int
440find_minimal_symbol_address (const char *name, CORE_ADDR *addr,
441 struct objfile *objfile)
442{
443 struct bound_minimal_symbol sym
444 = lookup_minimal_symbol (name, NULL, objfile);
445
446 if (sym.minsym != NULL)
447 *addr = BMSYMBOL_VALUE_ADDRESS (sym);
448
449 return sym.minsym == NULL;
450}
451
8825213e
PA
452/* Get the lookup name form best suitable for linkage name
453 matching. */
454
455static const char *
456linkage_name_str (const lookup_name_info &lookup_name)
457{
458 /* Unlike most languages (including C++), Ada uses the
459 encoded/linkage name as the search name recorded in symbols. So
460 if debugging in Ada mode, prefer the Ada-encoded name. This also
461 makes Ada's verbatim match syntax ("<...>") work, because
462 "lookup_name.name()" includes the "<>"s, while
463 "lookup_name.ada().lookup_name()" is the encoded name with "<>"s
464 stripped. */
465 if (current_language->la_language == language_ada)
466 return lookup_name.ada ().lookup_name ().c_str ();
467
468 return lookup_name.name ().c_str ();
469}
470
b19686e0 471/* See minsyms.h. */
f8eba3c6
TT
472
473void
41c1efc6
TT
474iterate_over_minimal_symbols
475 (struct objfile *objf, const lookup_name_info &lookup_name,
ca31ab1d 476 gdb::function_view<bool (struct minimal_symbol *)> callback)
f8eba3c6 477{
f8eba3c6 478 /* The first pass is over the ordinary hash table. */
f8eba3c6 479 {
8825213e 480 const char *name = linkage_name_str (lookup_name);
b5ec771e
PA
481 unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
482 auto *mangled_cmp
483 = (case_sensitivity == case_sensitive_on
484 ? strcmp
485 : strcasecmp);
486
487 for (minimal_symbol *iter = objf->per_bfd->msymbol_hash[hash];
488 iter != NULL;
489 iter = iter->hash_next)
490 {
491 if (mangled_cmp (MSYMBOL_LINKAGE_NAME (iter), name) == 0)
ca31ab1d
PA
492 if (callback (iter))
493 return;
b5ec771e 494 }
f8eba3c6
TT
495 }
496
b5ec771e
PA
497 /* The second pass is over the demangled table. Once for each
498 language in the demangled hash names table (usually just zero or
499 one). */
500 for (auto lang : objf->per_bfd->demangled_hash_languages)
f8eba3c6 501 {
b5ec771e
PA
502 const language_defn *lang_def = language_def (lang);
503 symbol_name_matcher_ftype *name_match
618daa93 504 = get_symbol_name_matcher (lang_def, lookup_name);
b5ec771e
PA
505
506 unsigned int hash
507 = lookup_name.search_name_hash (lang) % MINIMAL_SYMBOL_HASH_SIZE;
508 for (minimal_symbol *iter = objf->per_bfd->msymbol_demangled_hash[hash];
509 iter != NULL;
510 iter = iter->demangled_hash_next)
511 if (name_match (MSYMBOL_SEARCH_NAME (iter), lookup_name, NULL))
ca31ab1d
PA
512 if (callback (iter))
513 return;
f8eba3c6
TT
514 }
515}
516
b19686e0 517/* See minsyms.h. */
c5aa993b 518
3b7344d5 519struct bound_minimal_symbol
5520a790 520lookup_minimal_symbol_text (const char *name, struct objfile *objf)
c906108c
SS
521{
522 struct objfile *objfile;
523 struct minimal_symbol *msymbol;
3b7344d5
TT
524 struct bound_minimal_symbol found_symbol = { NULL, NULL };
525 struct bound_minimal_symbol found_file_symbol = { NULL, NULL };
c906108c 526
72a5efb3
DJ
527 unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
528
c906108c 529 for (objfile = object_files;
3b7344d5 530 objfile != NULL && found_symbol.minsym == NULL;
c5aa993b 531 objfile = objfile->next)
c906108c 532 {
56e3f43c 533 if (objf == NULL || objf == objfile
15d123c9 534 || objf == objfile->separate_debug_objfile_backlink)
c906108c 535 {
34643a32 536 for (msymbol = objfile->per_bfd->msymbol_hash[hash];
3b7344d5 537 msymbol != NULL && found_symbol.minsym == NULL;
72a5efb3 538 msymbol = msymbol->hash_next)
c906108c 539 {
efd66ac6 540 if (strcmp (MSYMBOL_LINKAGE_NAME (msymbol), name) == 0 &&
0875794a
JK
541 (MSYMBOL_TYPE (msymbol) == mst_text
542 || MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
543 || MSYMBOL_TYPE (msymbol) == mst_file_text))
c906108c
SS
544 {
545 switch (MSYMBOL_TYPE (msymbol))
546 {
547 case mst_file_text:
3b7344d5
TT
548 found_file_symbol.minsym = msymbol;
549 found_file_symbol.objfile = objfile;
c906108c
SS
550 break;
551 default:
3b7344d5
TT
552 found_symbol.minsym = msymbol;
553 found_symbol.objfile = objfile;
c906108c
SS
554 break;
555 }
556 }
557 }
558 }
559 }
560 /* External symbols are best. */
3b7344d5 561 if (found_symbol.minsym)
c906108c
SS
562 return found_symbol;
563
564 /* File-local symbols are next best. */
3b7344d5 565 return found_file_symbol;
c906108c
SS
566}
567
b19686e0 568/* See minsyms.h. */
907fc202
UW
569
570struct minimal_symbol *
571lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name,
572 struct objfile *objf)
573{
574 struct objfile *objfile;
575 struct minimal_symbol *msymbol;
576
577 unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
578
579 for (objfile = object_files;
580 objfile != NULL;
581 objfile = objfile->next)
582 {
583 if (objf == NULL || objf == objfile
15d123c9 584 || objf == objfile->separate_debug_objfile_backlink)
907fc202 585 {
34643a32 586 for (msymbol = objfile->per_bfd->msymbol_hash[hash];
907fc202
UW
587 msymbol != NULL;
588 msymbol = msymbol->hash_next)
589 {
77e371c0 590 if (MSYMBOL_VALUE_ADDRESS (objfile, msymbol) == pc
efd66ac6 591 && strcmp (MSYMBOL_LINKAGE_NAME (msymbol), name) == 0)
907fc202
UW
592 return msymbol;
593 }
594 }
595 }
596
597 return NULL;
598}
599
b19686e0 600/* See minsyms.h. */
c5aa993b 601
3b7344d5 602struct bound_minimal_symbol
aa1ee363 603lookup_minimal_symbol_solib_trampoline (const char *name,
aa1ee363 604 struct objfile *objf)
c906108c
SS
605{
606 struct objfile *objfile;
607 struct minimal_symbol *msymbol;
3b7344d5 608 struct bound_minimal_symbol found_symbol = { NULL, NULL };
c906108c 609
72a5efb3
DJ
610 unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
611
c906108c 612 for (objfile = object_files;
3b7344d5 613 objfile != NULL;
c5aa993b 614 objfile = objfile->next)
c906108c 615 {
56e3f43c 616 if (objf == NULL || objf == objfile
15d123c9 617 || objf == objfile->separate_debug_objfile_backlink)
c906108c 618 {
34643a32 619 for (msymbol = objfile->per_bfd->msymbol_hash[hash];
3b7344d5 620 msymbol != NULL;
72a5efb3 621 msymbol = msymbol->hash_next)
c906108c 622 {
efd66ac6 623 if (strcmp (MSYMBOL_LINKAGE_NAME (msymbol), name) == 0 &&
c906108c 624 MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
3b7344d5
TT
625 {
626 found_symbol.objfile = objfile;
627 found_symbol.minsym = msymbol;
628 return found_symbol;
629 }
c906108c
SS
630 }
631 }
632 }
633
3b7344d5 634 return found_symbol;
c906108c
SS
635}
636
77e371c0
TT
637/* A helper function that makes *PC section-relative. This searches
638 the sections of OBJFILE and if *PC is in a section, it subtracts
639 the section offset and returns true. Otherwise it returns
640 false. */
641
642static int
643frob_address (struct objfile *objfile, CORE_ADDR *pc)
644{
645 struct obj_section *iter;
646
647 ALL_OBJFILE_OSECTIONS (objfile, iter)
648 {
649 if (*pc >= obj_section_addr (iter) && *pc < obj_section_endaddr (iter))
650 {
651 *pc -= obj_section_offset (iter);
652 return 1;
653 }
654 }
655
656 return 0;
657}
658
6ae50267
PA
659/* Helper for lookup_minimal_symbol_by_pc_section. Convert a
660 lookup_msym_prefer to a minimal_symbol_type. */
661
662static minimal_symbol_type
663msym_prefer_to_msym_type (lookup_msym_prefer prefer)
664{
665 switch (prefer)
666 {
667 case lookup_msym_prefer::TEXT:
668 return mst_text;
669 case lookup_msym_prefer::TRAMPOLINE:
670 return mst_solib_trampoline;
671 case lookup_msym_prefer::GNU_IFUNC:
672 return mst_text_gnu_ifunc;
673 }
674
675 /* Assert here instead of in a default switch case above so that
676 -Wswitch warns if a new enumerator is added. */
677 gdb_assert_not_reached ("unhandled lookup_msym_prefer");
678}
679
c906108c
SS
680/* Search through the minimal symbol table for each objfile and find
681 the symbol whose address is the largest address that is still less
00878c6e
PP
682 than or equal to PC, and matches SECTION (which is not NULL).
683 Returns a pointer to the minimal symbol if such a symbol is found,
684 or NULL if PC is not in a suitable range.
685 Note that we need to look through ALL the minimal symbol tables
686 before deciding on the symbol that comes closest to the specified PC.
687 This is because objfiles can overlap, for example objfile A has .text
688 at 0x100 and .data at 0x40000 and objfile B has .text at 0x234 and
689 .data at 0x40048.
c906108c 690
2eaf8d2a
DJ
691 If WANT_TRAMPOLINE is set, prefer mst_solib_trampoline symbols when
692 there are text and trampoline symbols at the same address.
693 Otherwise prefer mst_text symbols. */
694
20944a6e
PA
695bound_minimal_symbol
696lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *section,
697 lookup_msym_prefer prefer)
c906108c
SS
698{
699 int lo;
700 int hi;
fe978cb0 701 int newobj;
c906108c
SS
702 struct objfile *objfile;
703 struct minimal_symbol *msymbol;
704 struct minimal_symbol *best_symbol = NULL;
7cbd4a93
TT
705 struct objfile *best_objfile = NULL;
706 struct bound_minimal_symbol result;
c906108c 707
20944a6e
PA
708 if (section == NULL)
709 {
710 section = find_pc_section (pc_in);
711 if (section == NULL)
712 return {};
713 }
714
6ae50267 715 minimal_symbol_type want_type = msym_prefer_to_msym_type (prefer);
00878c6e
PP
716
717 /* We can not require the symbol found to be in section, because
96225718
DJ
718 e.g. IRIX 6.5 mdebug relies on this code returning an absolute
719 symbol - but find_pc_section won't return an absolute section and
720 hence the code below would skip over absolute symbols. We can
721 still take advantage of the call to find_pc_section, though - the
722 object file still must match. In case we have separate debug
723 files, search both the file and its separate debug file. There's
724 no telling which one will have the minimal symbols. */
725
00878c6e 726 gdb_assert (section != NULL);
96225718 727
15d123c9
TG
728 for (objfile = section->objfile;
729 objfile != NULL;
730 objfile = objfile_separate_debug_iterate (section->objfile, objfile))
c906108c 731 {
77e371c0
TT
732 CORE_ADDR pc = pc_in;
733
c906108c 734 /* If this objfile has a minimal symbol table, go search it using
c5aa993b
JM
735 a binary search. Note that a minimal symbol table always consists
736 of at least two symbols, a "real" symbol and the terminating
737 "null symbol". If there are no real symbols, then there is no
025bb325 738 minimal symbol table at all. */
c906108c 739
34643a32 740 if (objfile->per_bfd->minimal_symbol_count > 0)
c906108c 741 {
29e8a844
DJ
742 int best_zero_sized = -1;
743
34643a32 744 msymbol = objfile->per_bfd->msymbols;
c906108c 745 lo = 0;
34643a32 746 hi = objfile->per_bfd->minimal_symbol_count - 1;
c906108c
SS
747
748 /* This code assumes that the minimal symbols are sorted by
749 ascending address values. If the pc value is greater than or
750 equal to the first symbol's address, then some symbol in this
751 minimal symbol table is a suitable candidate for being the
752 "best" symbol. This includes the last real symbol, for cases
753 where the pc value is larger than any address in this vector.
754
755 By iterating until the address associated with the current
756 hi index (the endpoint of the test interval) is less than
757 or equal to the desired pc value, we accomplish two things:
758 (1) the case where the pc value is larger than any minimal
759 symbol address is trivially solved, (2) the address associated
760 with the hi index is always the one we want when the interation
761 terminates. In essence, we are iterating the test interval
762 down until the pc value is pushed out of it from the high end.
763
025bb325 764 Warning: this code is trickier than it would appear at first. */
c906108c 765
77e371c0
TT
766 if (frob_address (objfile, &pc)
767 && pc >= MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[lo]))
c906108c 768 {
77e371c0 769 while (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi]) > pc)
c906108c 770 {
025bb325
MS
771 /* pc is still strictly less than highest address. */
772 /* Note "new" will always be >= lo. */
fe978cb0
PA
773 newobj = (lo + hi) / 2;
774 if ((MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[newobj]) >= pc)
775 || (lo == newobj))
c906108c 776 {
fe978cb0 777 hi = newobj;
c906108c
SS
778 }
779 else
780 {
fe978cb0 781 lo = newobj;
c906108c
SS
782 }
783 }
784
785 /* If we have multiple symbols at the same address, we want
c5aa993b
JM
786 hi to point to the last one. That way we can find the
787 right symbol if it has an index greater than hi. */
34643a32 788 while (hi < objfile->per_bfd->minimal_symbol_count - 1
77e371c0
TT
789 && (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
790 == MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi + 1])))
c906108c
SS
791 hi++;
792
29e8a844
DJ
793 /* Skip various undesirable symbols. */
794 while (hi >= 0)
795 {
796 /* Skip any absolute symbols. This is apparently
797 what adb and dbx do, and is needed for the CM-5.
798 There are two known possible problems: (1) on
799 ELF, apparently end, edata, etc. are absolute.
800 Not sure ignoring them here is a big deal, but if
801 we want to use them, the fix would go in
802 elfread.c. (2) I think shared library entry
803 points on the NeXT are absolute. If we want
804 special handling for this it probably should be
805 triggered by a special mst_abs_or_lib or some
806 such. */
807
712f90be 808 if (MSYMBOL_TYPE (&msymbol[hi]) == mst_abs)
29e8a844
DJ
809 {
810 hi--;
811 continue;
812 }
813
814 /* If SECTION was specified, skip any symbol from
815 wrong section. */
816 if (section
817 /* Some types of debug info, such as COFF,
818 don't fill the bfd_section member, so don't
819 throw away symbols on those platforms. */
efd66ac6 820 && MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi]) != NULL
714835d5 821 && (!matching_obj_sections
efd66ac6 822 (MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi]),
e27d198c 823 section)))
29e8a844
DJ
824 {
825 hi--;
826 continue;
827 }
828
2eaf8d2a
DJ
829 /* If we are looking for a trampoline and this is a
830 text symbol, or the other way around, check the
177b42fe 831 preceding symbol too. If they are otherwise
2eaf8d2a
DJ
832 identical prefer that one. */
833 if (hi > 0
20944a6e 834 && MSYMBOL_TYPE (&msymbol[hi]) != want_type
2eaf8d2a
DJ
835 && MSYMBOL_TYPE (&msymbol[hi - 1]) == want_type
836 && (MSYMBOL_SIZE (&msymbol[hi])
837 == MSYMBOL_SIZE (&msymbol[hi - 1]))
77e371c0
TT
838 && (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
839 == MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi - 1]))
efd66ac6
TT
840 && (MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi])
841 == MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi - 1])))
2eaf8d2a
DJ
842 {
843 hi--;
844 continue;
845 }
846
29e8a844
DJ
847 /* If the minimal symbol has a zero size, save it
848 but keep scanning backwards looking for one with
849 a non-zero size. A zero size may mean that the
850 symbol isn't an object or function (e.g. a
851 label), or it may just mean that the size was not
852 specified. */
5506f9f6 853 if (MSYMBOL_SIZE (&msymbol[hi]) == 0)
29e8a844 854 {
5506f9f6
KB
855 if (best_zero_sized == -1)
856 best_zero_sized = hi;
29e8a844
DJ
857 hi--;
858 continue;
859 }
860
f7a6bb70
DJ
861 /* If we are past the end of the current symbol, try
862 the previous symbol if it has a larger overlapping
863 size. This happens on i686-pc-linux-gnu with glibc;
864 the nocancel variants of system calls are inside
865 the cancellable variants, but both have sizes. */
866 if (hi > 0
867 && MSYMBOL_SIZE (&msymbol[hi]) != 0
77e371c0 868 && pc >= (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
f7a6bb70 869 + MSYMBOL_SIZE (&msymbol[hi]))
77e371c0 870 && pc < (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi - 1])
f7a6bb70
DJ
871 + MSYMBOL_SIZE (&msymbol[hi - 1])))
872 {
873 hi--;
874 continue;
875 }
876
29e8a844
DJ
877 /* Otherwise, this symbol must be as good as we're going
878 to get. */
879 break;
880 }
881
882 /* If HI has a zero size, and best_zero_sized is set,
883 then we had two or more zero-sized symbols; prefer
884 the first one we found (which may have a higher
885 address). Also, if we ran off the end, be sure
886 to back up. */
887 if (best_zero_sized != -1
888 && (hi < 0 || MSYMBOL_SIZE (&msymbol[hi]) == 0))
889 hi = best_zero_sized;
890
891 /* If the minimal symbol has a non-zero size, and this
892 PC appears to be outside the symbol's contents, then
893 refuse to use this symbol. If we found a zero-sized
894 symbol with an address greater than this symbol's,
895 use that instead. We assume that if symbols have
896 specified sizes, they do not overlap. */
897
898 if (hi >= 0
899 && MSYMBOL_SIZE (&msymbol[hi]) != 0
77e371c0 900 && pc >= (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
29e8a844
DJ
901 + MSYMBOL_SIZE (&msymbol[hi])))
902 {
903 if (best_zero_sized != -1)
904 hi = best_zero_sized;
905 else
906 /* Go on to the next object file. */
907 continue;
908 }
909
c906108c 910 /* The minimal symbol indexed by hi now is the best one in this
c5aa993b 911 objfile's minimal symbol table. See if it is the best one
025bb325 912 overall. */
c906108c 913
c906108c
SS
914 if (hi >= 0
915 && ((best_symbol == NULL) ||
77e371c0
TT
916 (MSYMBOL_VALUE_RAW_ADDRESS (best_symbol) <
917 MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi]))))
c906108c
SS
918 {
919 best_symbol = &msymbol[hi];
7cbd4a93 920 best_objfile = objfile;
c906108c
SS
921 }
922 }
923 }
924 }
7cbd4a93
TT
925
926 result.minsym = best_symbol;
927 result.objfile = best_objfile;
928 return result;
c906108c
SS
929}
930
b19686e0 931/* See minsyms.h. */
c906108c 932
7cbd4a93 933struct bound_minimal_symbol
fba45db2 934lookup_minimal_symbol_by_pc (CORE_ADDR pc)
c906108c 935{
20944a6e 936 return lookup_minimal_symbol_by_pc_section (pc, NULL);
c906108c 937}
0d5392b8 938
0875794a
JK
939/* Return non-zero iff PC is in an STT_GNU_IFUNC function resolver. */
940
941int
942in_gnu_ifunc_stub (CORE_ADDR pc)
943{
20944a6e
PA
944 bound_minimal_symbol msymbol
945 = lookup_minimal_symbol_by_pc_section (pc, NULL,
946 lookup_msym_prefer::GNU_IFUNC);
7cbd4a93 947 return msymbol.minsym && MSYMBOL_TYPE (msymbol.minsym) == mst_text_gnu_ifunc;
0875794a
JK
948}
949
07be84bf
JK
950/* See elf_gnu_ifunc_resolve_addr for its real implementation. */
951
952static CORE_ADDR
953stub_gnu_ifunc_resolve_addr (struct gdbarch *gdbarch, CORE_ADDR pc)
954{
955 error (_("GDB cannot resolve STT_GNU_IFUNC symbol at address %s without "
956 "the ELF support compiled in."),
957 paddress (gdbarch, pc));
958}
959
960/* See elf_gnu_ifunc_resolve_name for its real implementation. */
961
962static int
963stub_gnu_ifunc_resolve_name (const char *function_name,
964 CORE_ADDR *function_address_p)
965{
966 error (_("GDB cannot resolve STT_GNU_IFUNC symbol \"%s\" without "
967 "the ELF support compiled in."),
968 function_name);
969}
970
0e30163f
JK
971/* See elf_gnu_ifunc_resolver_stop for its real implementation. */
972
973static void
974stub_gnu_ifunc_resolver_stop (struct breakpoint *b)
975{
976 internal_error (__FILE__, __LINE__,
977 _("elf_gnu_ifunc_resolver_stop cannot be reached."));
978}
979
980/* See elf_gnu_ifunc_resolver_return_stop for its real implementation. */
981
982static void
983stub_gnu_ifunc_resolver_return_stop (struct breakpoint *b)
984{
985 internal_error (__FILE__, __LINE__,
986 _("elf_gnu_ifunc_resolver_return_stop cannot be reached."));
987}
988
07be84bf
JK
989/* See elf_gnu_ifunc_fns for its real implementation. */
990
991static const struct gnu_ifunc_fns stub_gnu_ifunc_fns =
992{
993 stub_gnu_ifunc_resolve_addr,
994 stub_gnu_ifunc_resolve_name,
0e30163f
JK
995 stub_gnu_ifunc_resolver_stop,
996 stub_gnu_ifunc_resolver_return_stop,
07be84bf
JK
997};
998
999/* A placeholder for &elf_gnu_ifunc_fns. */
1000
1001const struct gnu_ifunc_fns *gnu_ifunc_fns_p = &stub_gnu_ifunc_fns;
1002
c906108c 1003\f
c5aa993b 1004
025bb325 1005/* Return leading symbol character for a BFD. If BFD is NULL,
c906108c
SS
1006 return the leading symbol character from the main objfile. */
1007
c906108c 1008static int
fba45db2 1009get_symbol_leading_char (bfd *abfd)
c906108c
SS
1010{
1011 if (abfd != NULL)
1012 return bfd_get_symbol_leading_char (abfd);
1013 if (symfile_objfile != NULL && symfile_objfile->obfd != NULL)
1014 return bfd_get_symbol_leading_char (symfile_objfile->obfd);
1015 return 0;
1016}
1017
b19686e0 1018/* See minsyms.h. */
c906108c 1019
d25e8719 1020minimal_symbol_reader::minimal_symbol_reader (struct objfile *obj)
8dddcb8f
TT
1021: m_objfile (obj),
1022 m_msym_bunch (NULL),
1023 /* Note that presetting m_msym_bunch_index to BUNCH_SIZE causes the
b19686e0
TT
1024 first call to save a minimal symbol to allocate the memory for
1025 the first bunch. */
8dddcb8f
TT
1026 m_msym_bunch_index (BUNCH_SIZE),
1027 m_msym_count (0)
1028{
c906108c
SS
1029}
1030
873a915e
TT
1031/* Discard the currently collected minimal symbols, if any. If we wish
1032 to save them for later use, we must have already copied them somewhere
1033 else before calling this function.
1034
1035 FIXME: We could allocate the minimal symbol bunches on their own
1036 obstack and then simply blow the obstack away when we are done with
1037 it. Is it worth the extra trouble though? */
1038
1039minimal_symbol_reader::~minimal_symbol_reader ()
1040{
1041 struct msym_bunch *next;
1042
8dddcb8f 1043 while (m_msym_bunch != NULL)
873a915e 1044 {
8dddcb8f
TT
1045 next = m_msym_bunch->next;
1046 xfree (m_msym_bunch);
1047 m_msym_bunch = next;
873a915e
TT
1048 }
1049}
1050
b19686e0
TT
1051/* See minsyms.h. */
1052
c906108c 1053void
8dddcb8f 1054minimal_symbol_reader::record (const char *name, CORE_ADDR address,
ce6c454e 1055 enum minimal_symbol_type ms_type)
c906108c
SS
1056{
1057 int section;
1058
1059 switch (ms_type)
1060 {
1061 case mst_text:
0875794a 1062 case mst_text_gnu_ifunc:
c906108c
SS
1063 case mst_file_text:
1064 case mst_solib_trampoline:
8dddcb8f 1065 section = SECT_OFF_TEXT (m_objfile);
c906108c
SS
1066 break;
1067 case mst_data:
f50776aa 1068 case mst_data_gnu_ifunc:
c906108c 1069 case mst_file_data:
8dddcb8f 1070 section = SECT_OFF_DATA (m_objfile);
c906108c
SS
1071 break;
1072 case mst_bss:
1073 case mst_file_bss:
8dddcb8f 1074 section = SECT_OFF_BSS (m_objfile);
c906108c
SS
1075 break;
1076 default:
1077 section = -1;
1078 }
1079
8dddcb8f 1080 record_with_info (name, address, ms_type, section);
c906108c
SS
1081}
1082
b19686e0 1083/* See minsyms.h. */
c906108c
SS
1084
1085struct minimal_symbol *
8dddcb8f 1086minimal_symbol_reader::record_full (const char *name, int name_len,
ce6c454e
TT
1087 bool copy_name, CORE_ADDR address,
1088 enum minimal_symbol_type ms_type,
1089 int section)
c906108c 1090{
fe978cb0 1091 struct msym_bunch *newobj;
52f0bd74 1092 struct minimal_symbol *msymbol;
c906108c 1093
66337bb1
CV
1094 /* Don't put gcc_compiled, __gnu_compiled_cplus, and friends into
1095 the minimal symbols, because if there is also another symbol
1096 at the same address (e.g. the first function of the file),
1097 lookup_minimal_symbol_by_pc would have no way of getting the
1098 right one. */
1099 if (ms_type == mst_file_text && name[0] == 'g'
1100 && (strcmp (name, GCC_COMPILED_FLAG_SYMBOL) == 0
1101 || strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0))
1102 return (NULL);
1103
1104 /* It's safe to strip the leading char here once, since the name
025bb325 1105 is also stored stripped in the minimal symbol table. */
8dddcb8f 1106 if (name[0] == get_symbol_leading_char (m_objfile->obfd))
04a679b8
TT
1107 {
1108 ++name;
1109 --name_len;
1110 }
66337bb1 1111
61012eef 1112 if (ms_type == mst_file_text && startswith (name, "__gnu_compiled"))
66337bb1 1113 return (NULL);
c906108c 1114
8dddcb8f 1115 if (m_msym_bunch_index == BUNCH_SIZE)
c906108c 1116 {
fe978cb0 1117 newobj = XCNEW (struct msym_bunch);
8dddcb8f
TT
1118 m_msym_bunch_index = 0;
1119 newobj->next = m_msym_bunch;
1120 m_msym_bunch = newobj;
c906108c 1121 }
8dddcb8f 1122 msymbol = &m_msym_bunch->contents[m_msym_bunch_index];
34643a32 1123 MSYMBOL_SET_LANGUAGE (msymbol, language_auto,
8dddcb8f
TT
1124 &m_objfile->per_bfd->storage_obstack);
1125 MSYMBOL_SET_NAMES (msymbol, name, name_len, copy_name, m_objfile);
2de7ced7 1126
40c1a007 1127 SET_MSYMBOL_VALUE_ADDRESS (msymbol, address);
efd66ac6 1128 MSYMBOL_SECTION (msymbol) = section;
714835d5 1129
c906108c 1130 MSYMBOL_TYPE (msymbol) = ms_type;
b887350f
TT
1131 MSYMBOL_TARGET_FLAG_1 (msymbol) = 0;
1132 MSYMBOL_TARGET_FLAG_2 (msymbol) = 0;
d9eaeb59
JB
1133 /* Do not use the SET_MSYMBOL_SIZE macro to initialize the size,
1134 as it would also set the has_size flag. */
1135 msymbol->size = 0;
9227b5eb 1136
a79dea61 1137 /* The hash pointers must be cleared! If they're not,
025bb325 1138 add_minsym_to_hash_table will NOT add this msymbol to the hash table. */
9227b5eb
JB
1139 msymbol->hash_next = NULL;
1140 msymbol->demangled_hash_next = NULL;
1141
34643a32
TT
1142 /* If we already read minimal symbols for this objfile, then don't
1143 ever allocate a new one. */
8dddcb8f 1144 if (!m_objfile->per_bfd->minsyms_read)
5f6cac40 1145 {
8dddcb8f
TT
1146 m_msym_bunch_index++;
1147 m_objfile->per_bfd->n_minsyms++;
5f6cac40 1148 }
8dddcb8f 1149 m_msym_count++;
c906108c
SS
1150 return msymbol;
1151}
1152
1153/* Compare two minimal symbols by address and return a signed result based
025bb325 1154 on unsigned comparisons, so that we sort into unsigned numeric order.
c906108c
SS
1155 Within groups with the same address, sort by name. */
1156
1157static int
12b9c64f 1158compare_minimal_symbols (const void *fn1p, const void *fn2p)
c906108c 1159{
52f0bd74
AC
1160 const struct minimal_symbol *fn1;
1161 const struct minimal_symbol *fn2;
c906108c
SS
1162
1163 fn1 = (const struct minimal_symbol *) fn1p;
1164 fn2 = (const struct minimal_symbol *) fn2p;
1165
77e371c0 1166 if (MSYMBOL_VALUE_RAW_ADDRESS (fn1) < MSYMBOL_VALUE_RAW_ADDRESS (fn2))
c906108c 1167 {
025bb325 1168 return (-1); /* addr 1 is less than addr 2. */
c906108c 1169 }
77e371c0 1170 else if (MSYMBOL_VALUE_RAW_ADDRESS (fn1) > MSYMBOL_VALUE_RAW_ADDRESS (fn2))
c906108c 1171 {
025bb325 1172 return (1); /* addr 1 is greater than addr 2. */
c906108c 1173 }
c5aa993b
JM
1174 else
1175 /* addrs are equal: sort by name */
c906108c 1176 {
efd66ac6
TT
1177 const char *name1 = MSYMBOL_LINKAGE_NAME (fn1);
1178 const char *name2 = MSYMBOL_LINKAGE_NAME (fn2);
c906108c
SS
1179
1180 if (name1 && name2) /* both have names */
1181 return strcmp (name1, name2);
1182 else if (name2)
025bb325
MS
1183 return 1; /* fn1 has no name, so it is "less". */
1184 else if (name1) /* fn2 has no name, so it is "less". */
c906108c
SS
1185 return -1;
1186 else
025bb325 1187 return (0); /* Neither has a name, so they're equal. */
c906108c
SS
1188 }
1189}
1190
c906108c
SS
1191/* Compact duplicate entries out of a minimal symbol table by walking
1192 through the table and compacting out entries with duplicate addresses
1193 and matching names. Return the number of entries remaining.
1194
1195 On entry, the table resides between msymbol[0] and msymbol[mcount].
1196 On exit, it resides between msymbol[0] and msymbol[result_count].
1197
1198 When files contain multiple sources of symbol information, it is
1199 possible for the minimal symbol table to contain many duplicate entries.
1200 As an example, SVR4 systems use ELF formatted object files, which
1201 usually contain at least two different types of symbol tables (a
1202 standard ELF one and a smaller dynamic linking table), as well as
1203 DWARF debugging information for files compiled with -g.
1204
1205 Without compacting, the minimal symbol table for gdb itself contains
1206 over a 1000 duplicates, about a third of the total table size. Aside
1207 from the potential trap of not noticing that two successive entries
1208 identify the same location, this duplication impacts the time required
1209 to linearly scan the table, which is done in a number of places. So we
1210 just do one linear scan here and toss out the duplicates.
1211
1212 Note that we are not concerned here about recovering the space that
1213 is potentially freed up, because the strings themselves are allocated
34643a32 1214 on the storage_obstack, and will get automatically freed when the symbol
c906108c
SS
1215 table is freed. The caller can free up the unused minimal symbols at
1216 the end of the compacted region if their allocation strategy allows it.
1217
1218 Also note we only go up to the next to last entry within the loop
1219 and then copy the last entry explicitly after the loop terminates.
1220
1221 Since the different sources of information for each symbol may
1222 have different levels of "completeness", we may have duplicates
1223 that have one entry with type "mst_unknown" and the other with a
1224 known type. So if the one we are leaving alone has type mst_unknown,
1225 overwrite its type with the type from the one we are compacting out. */
1226
1227static int
fba45db2
KB
1228compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount,
1229 struct objfile *objfile)
c906108c
SS
1230{
1231 struct minimal_symbol *copyfrom;
1232 struct minimal_symbol *copyto;
1233
1234 if (mcount > 0)
1235 {
1236 copyfrom = copyto = msymbol;
1237 while (copyfrom < msymbol + mcount - 1)
1238 {
77e371c0
TT
1239 if (MSYMBOL_VALUE_RAW_ADDRESS (copyfrom)
1240 == MSYMBOL_VALUE_RAW_ADDRESS ((copyfrom + 1))
1241 && MSYMBOL_SECTION (copyfrom) == MSYMBOL_SECTION (copyfrom + 1)
efd66ac6
TT
1242 && strcmp (MSYMBOL_LINKAGE_NAME (copyfrom),
1243 MSYMBOL_LINKAGE_NAME ((copyfrom + 1))) == 0)
c906108c 1244 {
c5aa993b 1245 if (MSYMBOL_TYPE ((copyfrom + 1)) == mst_unknown)
c906108c
SS
1246 {
1247 MSYMBOL_TYPE ((copyfrom + 1)) = MSYMBOL_TYPE (copyfrom);
1248 }
1249 copyfrom++;
1250 }
1251 else
afbb8d7a 1252 *copyto++ = *copyfrom++;
c906108c
SS
1253 }
1254 *copyto++ = *copyfrom++;
1255 mcount = copyto - msymbol;
1256 }
1257 return (mcount);
1258}
1259
afbb8d7a
KB
1260/* Build (or rebuild) the minimal symbol hash tables. This is necessary
1261 after compacting or sorting the table since the entries move around
025bb325 1262 thus causing the internal minimal_symbol pointers to become jumbled. */
afbb8d7a
KB
1263
1264static void
1265build_minimal_symbol_hash_tables (struct objfile *objfile)
1266{
1267 int i;
1268 struct minimal_symbol *msym;
1269
025bb325 1270 /* Clear the hash tables. */
afbb8d7a
KB
1271 for (i = 0; i < MINIMAL_SYMBOL_HASH_SIZE; i++)
1272 {
34643a32
TT
1273 objfile->per_bfd->msymbol_hash[i] = 0;
1274 objfile->per_bfd->msymbol_demangled_hash[i] = 0;
afbb8d7a
KB
1275 }
1276
025bb325 1277 /* Now, (re)insert the actual entries. */
34643a32
TT
1278 for ((i = objfile->per_bfd->minimal_symbol_count,
1279 msym = objfile->per_bfd->msymbols);
afbb8d7a
KB
1280 i > 0;
1281 i--, msym++)
1282 {
1283 msym->hash_next = 0;
34643a32 1284 add_minsym_to_hash_table (msym, objfile->per_bfd->msymbol_hash);
afbb8d7a
KB
1285
1286 msym->demangled_hash_next = 0;
efd66ac6 1287 if (MSYMBOL_SEARCH_NAME (msym) != MSYMBOL_LINKAGE_NAME (msym))
b5ec771e 1288 add_minsym_to_demangled_hash_table (msym, objfile);
afbb8d7a
KB
1289 }
1290}
1291
c906108c
SS
1292/* Add the minimal symbols in the existing bunches to the objfile's official
1293 minimal symbol table. In most cases there is no minimal symbol table yet
1294 for this objfile, and the existing bunches are used to create one. Once
1295 in a while (for shared libraries for example), we add symbols (e.g. common
1296 symbols) to an existing objfile.
1297
1298 Because of the way minimal symbols are collected, we generally have no way
1299 of knowing what source language applies to any particular minimal symbol.
1300 Specifically, we have no way of knowing if the minimal symbol comes from a
1301 C++ compilation unit or not. So for the sake of supporting cached
1302 demangled C++ names, we have no choice but to try and demangle each new one
1303 that comes in. If the demangling succeeds, then we assume it is a C++
1304 symbol and set the symbol's language and demangled name fields
1305 appropriately. Note that in order to avoid unnecessary demanglings, and
1306 allocating obstack space that subsequently can't be freed for the demangled
1307 names, we mark all newly added symbols with language_auto. After
1308 compaction of the minimal symbols, we go back and scan the entire minimal
1309 symbol table looking for these new symbols. For each new symbol we attempt
1310 to demangle it, and if successful, record it as a language_cplus symbol
1311 and cache the demangled form on the symbol obstack. Symbols which don't
1312 demangle are marked as language_unknown symbols, which inhibits future
025bb325 1313 attempts to demangle them if we later add more minimal symbols. */
c906108c
SS
1314
1315void
d25e8719 1316minimal_symbol_reader::install ()
c906108c 1317{
52f0bd74
AC
1318 int bindex;
1319 int mcount;
1320 struct msym_bunch *bunch;
1321 struct minimal_symbol *msymbols;
c906108c 1322 int alloc_count;
c906108c 1323
d25e8719 1324 if (m_objfile->per_bfd->minsyms_read)
34643a32
TT
1325 return;
1326
8dddcb8f 1327 if (m_msym_count > 0)
c906108c 1328 {
45cfd468
DE
1329 if (symtab_create_debug)
1330 {
1331 fprintf_unfiltered (gdb_stdlog,
1332 "Installing %d minimal symbols of objfile %s.\n",
8dddcb8f 1333 m_msym_count, objfile_name (m_objfile));
45cfd468
DE
1334 }
1335
c906108c 1336 /* Allocate enough space in the obstack, into which we will gather the
c5aa993b
JM
1337 bunches of new and existing minimal symbols, sort them, and then
1338 compact out the duplicate entries. Once we have a final table,
1339 we will give back the excess space. */
c906108c 1340
8dddcb8f 1341 alloc_count = m_msym_count + m_objfile->per_bfd->minimal_symbol_count + 1;
d25e8719 1342 obstack_blank (&m_objfile->per_bfd->storage_obstack,
c906108c
SS
1343 alloc_count * sizeof (struct minimal_symbol));
1344 msymbols = (struct minimal_symbol *)
d25e8719 1345 obstack_base (&m_objfile->per_bfd->storage_obstack);
c906108c
SS
1346
1347 /* Copy in the existing minimal symbols, if there are any. */
1348
d25e8719
TT
1349 if (m_objfile->per_bfd->minimal_symbol_count)
1350 memcpy ((char *) msymbols, (char *) m_objfile->per_bfd->msymbols,
1351 m_objfile->per_bfd->minimal_symbol_count * sizeof (struct minimal_symbol));
c906108c
SS
1352
1353 /* Walk through the list of minimal symbol bunches, adding each symbol
c5aa993b
JM
1354 to the new contiguous array of symbols. Note that we start with the
1355 current, possibly partially filled bunch (thus we use the current
1356 msym_bunch_index for the first bunch we copy over), and thereafter
025bb325 1357 each bunch is full. */
c5aa993b 1358
d25e8719 1359 mcount = m_objfile->per_bfd->minimal_symbol_count;
c5aa993b 1360
8dddcb8f 1361 for (bunch = m_msym_bunch; bunch != NULL; bunch = bunch->next)
c906108c 1362 {
8dddcb8f 1363 for (bindex = 0; bindex < m_msym_bunch_index; bindex++, mcount++)
66337bb1 1364 msymbols[mcount] = bunch->contents[bindex];
8dddcb8f 1365 m_msym_bunch_index = BUNCH_SIZE;
c906108c
SS
1366 }
1367
1368 /* Sort the minimal symbols by address. */
c5aa993b 1369
c906108c
SS
1370 qsort (msymbols, mcount, sizeof (struct minimal_symbol),
1371 compare_minimal_symbols);
c5aa993b 1372
c906108c 1373 /* Compact out any duplicates, and free up whatever space we are
c5aa993b
JM
1374 no longer using. */
1375
d25e8719 1376 mcount = compact_minimal_symbols (msymbols, mcount, m_objfile);
c906108c 1377
d25e8719 1378 obstack_blank_fast (&m_objfile->per_bfd->storage_obstack,
c5aa993b 1379 (mcount + 1 - alloc_count) * sizeof (struct minimal_symbol));
c906108c 1380 msymbols = (struct minimal_symbol *)
d25e8719 1381 obstack_finish (&m_objfile->per_bfd->storage_obstack);
c906108c
SS
1382
1383 /* We also terminate the minimal symbol table with a "null symbol",
c5aa993b
JM
1384 which is *not* included in the size of the table. This makes it
1385 easier to find the end of the table when we are handed a pointer
1386 to some symbol in the middle of it. Zero out the fields in the
1387 "null symbol" allocated at the end of the array. Note that the
1388 symbol count does *not* include this null symbol, which is why it
025bb325 1389 is indexed by mcount and not mcount-1. */
c906108c 1390
a83e9154 1391 memset (&msymbols[mcount], 0, sizeof (struct minimal_symbol));
c906108c
SS
1392
1393 /* Attach the minimal symbol table to the specified objfile.
34643a32 1394 The strings themselves are also located in the storage_obstack
c5aa993b 1395 of this objfile. */
c906108c 1396
d25e8719
TT
1397 m_objfile->per_bfd->minimal_symbol_count = mcount;
1398 m_objfile->per_bfd->msymbols = msymbols;
c906108c 1399
afbb8d7a
KB
1400 /* Now build the hash tables; we can't do this incrementally
1401 at an earlier point since we weren't finished with the obstack
1402 yet. (And if the msymbol obstack gets moved, all the internal
025bb325 1403 pointers to other msymbols need to be adjusted.) */
d25e8719 1404 build_minimal_symbol_hash_tables (m_objfile);
c906108c
SS
1405 }
1406}
1407
c35384fb
TT
1408/* See minsyms.h. */
1409
1410void
1411terminate_minimal_symbol_table (struct objfile *objfile)
1412{
34643a32 1413 if (! objfile->per_bfd->msymbols)
e39db4db
SM
1414 objfile->per_bfd->msymbols = XOBNEW (&objfile->per_bfd->storage_obstack,
1415 minimal_symbol);
c35384fb
TT
1416
1417 {
1418 struct minimal_symbol *m
34643a32 1419 = &objfile->per_bfd->msymbols[objfile->per_bfd->minimal_symbol_count];
c35384fb
TT
1420
1421 memset (m, 0, sizeof (*m));
1422 /* Don't rely on these enumeration values being 0's. */
1423 MSYMBOL_TYPE (m) = mst_unknown;
34643a32
TT
1424 MSYMBOL_SET_LANGUAGE (m, language_unknown,
1425 &objfile->per_bfd->storage_obstack);
c35384fb
TT
1426 }
1427}
1428
c9630d9c
TT
1429/* Check if PC is in a shared library trampoline code stub.
1430 Return minimal symbol for the trampoline entry or NULL if PC is not
1431 in a trampoline code stub. */
c906108c 1432
c9630d9c 1433static struct minimal_symbol *
fba45db2 1434lookup_solib_trampoline_symbol_by_pc (CORE_ADDR pc)
c906108c 1435{
20944a6e
PA
1436 bound_minimal_symbol msymbol
1437 = lookup_minimal_symbol_by_pc_section (pc, NULL,
1438 lookup_msym_prefer::TRAMPOLINE);
c906108c 1439
7cbd4a93
TT
1440 if (msymbol.minsym != NULL
1441 && MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline)
1442 return msymbol.minsym;
c906108c
SS
1443 return NULL;
1444}
1445
1446/* If PC is in a shared library trampoline code stub, return the
1447 address of the `real' function belonging to the stub.
1448 Return 0 if PC is not in a trampoline code stub or if the real
1449 function is not found in the minimal symbol table.
1450
1451 We may fail to find the right function if a function with the
1452 same name is defined in more than one shared library, but this
025bb325 1453 is considered bad programming style. We could return 0 if we find
c906108c
SS
1454 a duplicate function in case this matters someday. */
1455
1456CORE_ADDR
52f729a7 1457find_solib_trampoline_target (struct frame_info *frame, CORE_ADDR pc)
c906108c
SS
1458{
1459 struct objfile *objfile;
1460 struct minimal_symbol *msymbol;
1461 struct minimal_symbol *tsymbol = lookup_solib_trampoline_symbol_by_pc (pc);
1462
1463 if (tsymbol != NULL)
1464 {
1465 ALL_MSYMBOLS (objfile, msymbol)
c5aa993b 1466 {
42848c96 1467 /* Also handle minimal symbols pointing to function descriptors. */
f50776aa
PA
1468 if ((MSYMBOL_TYPE (msymbol) == mst_text
1469 || MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
1470 || MSYMBOL_TYPE (msymbol) == mst_data
1471 || MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
efd66ac6
TT
1472 && strcmp (MSYMBOL_LINKAGE_NAME (msymbol),
1473 MSYMBOL_LINKAGE_NAME (tsymbol)) == 0)
42848c96
UW
1474 {
1475 CORE_ADDR func;
b8d56208 1476
f50776aa
PA
1477 /* Ignore data symbols that are not function
1478 descriptors. */
1479 if (msymbol_is_function (objfile, msymbol, &func))
42848c96
UW
1480 return func;
1481 }
c5aa993b 1482 }
c906108c
SS
1483 }
1484 return 0;
1485}
50e65b17
TT
1486
1487/* See minsyms.h. */
1488
1489CORE_ADDR
1490minimal_symbol_upper_bound (struct bound_minimal_symbol minsym)
1491{
1492 int i;
1493 short section;
1494 struct obj_section *obj_section;
1495 CORE_ADDR result;
1496 struct minimal_symbol *msymbol;
1497
1498 gdb_assert (minsym.minsym != NULL);
1499
1500 /* If the minimal symbol has a size, use it. Otherwise use the
1501 lesser of the next minimal symbol in the same section, or the end
1502 of the section, as the end of the function. */
1503
1504 if (MSYMBOL_SIZE (minsym.minsym) != 0)
77e371c0 1505 return BMSYMBOL_VALUE_ADDRESS (minsym) + MSYMBOL_SIZE (minsym.minsym);
50e65b17
TT
1506
1507 /* Step over other symbols at this same address, and symbols in
1508 other sections, to find the next symbol in this section with a
1509 different address. */
1510
1511 msymbol = minsym.minsym;
efd66ac6
TT
1512 section = MSYMBOL_SECTION (msymbol);
1513 for (i = 1; MSYMBOL_LINKAGE_NAME (msymbol + i) != NULL; i++)
50e65b17 1514 {
77e371c0
TT
1515 if ((MSYMBOL_VALUE_RAW_ADDRESS (msymbol + i)
1516 != MSYMBOL_VALUE_RAW_ADDRESS (msymbol))
efd66ac6 1517 && MSYMBOL_SECTION (msymbol + i) == section)
50e65b17
TT
1518 break;
1519 }
1520
efd66ac6
TT
1521 obj_section = MSYMBOL_OBJ_SECTION (minsym.objfile, minsym.minsym);
1522 if (MSYMBOL_LINKAGE_NAME (msymbol + i) != NULL
77e371c0 1523 && (MSYMBOL_VALUE_ADDRESS (minsym.objfile, msymbol + i)
efd66ac6 1524 < obj_section_endaddr (obj_section)))
77e371c0 1525 result = MSYMBOL_VALUE_ADDRESS (minsym.objfile, msymbol + i);
50e65b17
TT
1526 else
1527 /* We got the start address from the last msymbol in the objfile.
1528 So the end address is the end of the section. */
1529 result = obj_section_endaddr (obj_section);
1530
1531 return result;
1532}