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