Add AArch64 Pointer Authentication to the NEWS file
[external/binutils.git] / gdb / minsyms.c
1 /* GDB routines for manipulating the minimal symbol tables.
2    Copyright (C) 1992-2019 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 "common/symbol.h"
54 #include <algorithm>
55 #include "safe-ctype.h"
56
57 /* See minsyms.h.  */
58
59 bool
60 msymbol_is_function (struct objfile *objfile, minimal_symbol *minsym,
61                      CORE_ADDR *func_address_p)
62 {
63   CORE_ADDR msym_addr = MSYMBOL_VALUE_ADDRESS (objfile, minsym);
64
65   switch (minsym->type)
66     {
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:
73     case mst_data_gnu_ifunc:
74       {
75         struct gdbarch *gdbarch = get_objfile_arch (objfile);
76         CORE_ADDR pc
77           = gdbarch_convert_from_func_ptr_addr (gdbarch, msym_addr,
78                                                 current_top_target ());
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       }
87     default:
88       if (func_address_p != NULL)
89         *func_address_p = msym_addr;
90       return true;
91     }
92 }
93
94 /* Accumulate the minimal symbols for each objfile in bunches of BUNCH_SIZE.
95    At the end, copy them all into one newly allocated array.  */
96
97 #define BUNCH_SIZE 127
98
99 struct msym_bunch
100   {
101     struct msym_bunch *next;
102     struct minimal_symbol contents[BUNCH_SIZE];
103   };
104
105 /* See minsyms.h.  */
106
107 unsigned int
108 msymbol_hash_iw (const char *string)
109 {
110   unsigned int hash = 0;
111
112   while (*string && *string != '(')
113     {
114       string = skip_spaces (string);
115       if (*string && *string != '(')
116         {
117           hash = SYMBOL_HASH_NEXT (hash, *string);
118           ++string;
119         }
120     }
121   return hash;
122 }
123
124 /* See minsyms.h.  */
125
126 unsigned int
127 msymbol_hash (const char *string)
128 {
129   unsigned int hash = 0;
130
131   for (; *string; ++string)
132     hash = SYMBOL_HASH_NEXT (hash, *string);
133   return hash;
134 }
135
136 /* Add the minimal symbol SYM to an objfile's minsym hash table, TABLE.  */
137 static void
138 add_minsym_to_hash_table (struct minimal_symbol *sym,
139                           struct minimal_symbol **table)
140 {
141   if (sym->hash_next == NULL)
142     {
143       unsigned int hash
144         = msymbol_hash (MSYMBOL_LINKAGE_NAME (sym)) % MINIMAL_SYMBOL_HASH_SIZE;
145
146       sym->hash_next = table[hash];
147       table[hash] = sym;
148     }
149 }
150
151 /* Add the minimal symbol SYM to an objfile's minsym demangled hash table,
152    TABLE.  */
153 static void
154 add_minsym_to_demangled_hash_table (struct minimal_symbol *sym,
155                                     struct objfile *objfile)
156 {
157   if (sym->demangled_hash_next == NULL)
158     {
159       unsigned int hash = search_name_hash (MSYMBOL_LANGUAGE (sym),
160                                             MSYMBOL_SEARCH_NAME (sym));
161
162       objfile->per_bfd->demangled_hash_languages.set (MSYMBOL_LANGUAGE (sym));
163
164       struct minimal_symbol **table
165         = objfile->per_bfd->msymbol_demangled_hash;
166       unsigned int hash_index = hash % MINIMAL_SYMBOL_HASH_SIZE;
167       sym->demangled_hash_next = table[hash_index];
168       table[hash_index] = sym;
169     }
170 }
171
172 /* Worker object for lookup_minimal_symbol.  Stores temporary results
173    while walking the symbol tables.  */
174
175 struct found_minimal_symbols
176 {
177   /* External symbols are best.  */
178   bound_minimal_symbol external_symbol {};
179
180   /* File-local symbols are next best.  */
181   bound_minimal_symbol file_symbol {};
182
183   /* Symbols for shared library trampolines are next best.  */
184   bound_minimal_symbol trampoline_symbol {};
185
186   /* Called when a symbol name matches.  Check if the minsym is a
187      better type than what we had already found, and record it in one
188      of the members fields if so.  Returns true if we collected the
189      real symbol, in which case we can stop searching.  */
190   bool maybe_collect (const char *sfile, objfile *objf,
191                       minimal_symbol *msymbol);
192 };
193
194 /* See declaration above.  */
195
196 bool
197 found_minimal_symbols::maybe_collect (const char *sfile,
198                                       struct objfile *objfile,
199                                       minimal_symbol *msymbol)
200 {
201   switch (MSYMBOL_TYPE (msymbol))
202     {
203     case mst_file_text:
204     case mst_file_data:
205     case mst_file_bss:
206       if (sfile == NULL
207           || filename_cmp (msymbol->filename, sfile) == 0)
208         {
209           file_symbol.minsym = msymbol;
210           file_symbol.objfile = objfile;
211         }
212       break;
213
214     case mst_solib_trampoline:
215
216       /* If a trampoline symbol is found, we prefer to keep
217          looking for the *real* symbol.  If the actual symbol
218          is not found, then we'll use the trampoline
219          entry.  */
220       if (trampoline_symbol.minsym == NULL)
221         {
222           trampoline_symbol.minsym = msymbol;
223           trampoline_symbol.objfile = objfile;
224         }
225       break;
226
227     case mst_unknown:
228     default:
229       external_symbol.minsym = msymbol;
230       external_symbol.objfile = objfile;
231       /* We have the real symbol.  No use looking further.  */
232       return true;
233     }
234
235   /* Keep looking.  */
236   return false;
237 }
238
239 /* Walk the mangled name hash table, and pass each symbol whose name
240    matches LOOKUP_NAME according to NAMECMP to FOUND.  */
241
242 static void
243 lookup_minimal_symbol_mangled (const char *lookup_name,
244                                const char *sfile,
245                                struct objfile *objfile,
246                                struct minimal_symbol **table,
247                                unsigned int hash,
248                                int (*namecmp) (const char *, const char *),
249                                found_minimal_symbols &found)
250 {
251   for (minimal_symbol *msymbol = table[hash];
252        msymbol != NULL;
253        msymbol = msymbol->hash_next)
254     {
255       const char *symbol_name = MSYMBOL_LINKAGE_NAME (msymbol);
256
257       if (namecmp (symbol_name, lookup_name) == 0
258           && found.maybe_collect (sfile, objfile, msymbol))
259         return;
260     }
261 }
262
263 /* Walk the demangled name hash table, and pass each symbol whose name
264    matches LOOKUP_NAME according to MATCHER to FOUND.  */
265
266 static void
267 lookup_minimal_symbol_demangled (const lookup_name_info &lookup_name,
268                                  const char *sfile,
269                                  struct objfile *objfile,
270                                  struct minimal_symbol **table,
271                                  unsigned int hash,
272                                  symbol_name_matcher_ftype *matcher,
273                                  found_minimal_symbols &found)
274 {
275   for (minimal_symbol *msymbol = table[hash];
276        msymbol != NULL;
277        msymbol = msymbol->demangled_hash_next)
278     {
279       const char *symbol_name = MSYMBOL_SEARCH_NAME (msymbol);
280
281       if (matcher (symbol_name, lookup_name, NULL)
282           && found.maybe_collect (sfile, objfile, msymbol))
283         return;
284     }
285 }
286
287 /* Look through all the current minimal symbol tables and find the
288    first minimal symbol that matches NAME.  If OBJF is non-NULL, limit
289    the search to that objfile.  If SFILE is non-NULL, the only file-scope
290    symbols considered will be from that source file (global symbols are
291    still preferred).  Returns a pointer to the minimal symbol that
292    matches, or NULL if no match is found.
293
294    Note:  One instance where there may be duplicate minimal symbols with
295    the same name is when the symbol tables for a shared library and the
296    symbol tables for an executable contain global symbols with the same
297    names (the dynamic linker deals with the duplication).
298
299    It's also possible to have minimal symbols with different mangled
300    names, but identical demangled names.  For example, the GNU C++ v3
301    ABI requires the generation of two (or perhaps three) copies of
302    constructor functions --- "in-charge", "not-in-charge", and
303    "allocate" copies; destructors may be duplicated as well.
304    Obviously, there must be distinct mangled names for each of these,
305    but the demangled names are all the same: S::S or S::~S.  */
306
307 struct bound_minimal_symbol
308 lookup_minimal_symbol (const char *name, const char *sfile,
309                        struct objfile *objf)
310 {
311   struct objfile *objfile;
312   found_minimal_symbols found;
313
314   unsigned int mangled_hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
315
316   auto *mangled_cmp
317     = (case_sensitivity == case_sensitive_on
318        ? strcmp
319        : strcasecmp);
320
321   if (sfile != NULL)
322     sfile = lbasename (sfile);
323
324   lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
325
326   for (objfile = object_files;
327        objfile != NULL && found.external_symbol.minsym == NULL;
328        objfile = objfile->next)
329     {
330       if (objf == NULL || objf == objfile
331           || objf == objfile->separate_debug_objfile_backlink)
332         {
333           if (symbol_lookup_debug)
334             {
335               fprintf_unfiltered (gdb_stdlog,
336                                   "lookup_minimal_symbol (%s, %s, %s)\n",
337                                   name, sfile != NULL ? sfile : "NULL",
338                                   objfile_debug_name (objfile));
339             }
340
341           /* Do two passes: the first over the ordinary hash table,
342              and the second over the demangled hash table.  */
343           lookup_minimal_symbol_mangled (name, sfile, objfile,
344                                          objfile->per_bfd->msymbol_hash,
345                                          mangled_hash, mangled_cmp, found);
346
347           /* If not found, try the demangled hash table.  */
348           if (found.external_symbol.minsym == NULL)
349             {
350               /* Once for each language in the demangled hash names
351                  table (usually just zero or one languages).  */
352               for (unsigned iter = 0; iter < nr_languages; ++iter)
353                 {
354                   if (!objfile->per_bfd->demangled_hash_languages.test (iter))
355                     continue;
356                   enum language lang = (enum language) iter;
357
358                   unsigned int hash
359                     = (lookup_name.search_name_hash (lang)
360                        % MINIMAL_SYMBOL_HASH_SIZE);
361
362                   symbol_name_matcher_ftype *match
363                     = get_symbol_name_matcher (language_def (lang),
364                                                lookup_name);
365                   struct minimal_symbol **msymbol_demangled_hash
366                     = objfile->per_bfd->msymbol_demangled_hash;
367
368                   lookup_minimal_symbol_demangled (lookup_name, sfile, objfile,
369                                                    msymbol_demangled_hash,
370                                                    hash, match, found);
371
372                   if (found.external_symbol.minsym != NULL)
373                     break;
374                 }
375             }
376         }
377     }
378
379   /* External symbols are best.  */
380   if (found.external_symbol.minsym != NULL)
381     {
382       if (symbol_lookup_debug)
383         {
384           minimal_symbol *minsym = found.external_symbol.minsym;
385
386           fprintf_unfiltered (gdb_stdlog,
387                               "lookup_minimal_symbol (...) = %s (external)\n",
388                               host_address_to_string (minsym));
389         }
390       return found.external_symbol;
391     }
392
393   /* File-local symbols are next best.  */
394   if (found.file_symbol.minsym != NULL)
395     {
396       if (symbol_lookup_debug)
397         {
398           minimal_symbol *minsym = found.file_symbol.minsym;
399
400           fprintf_unfiltered (gdb_stdlog,
401                               "lookup_minimal_symbol (...) = %s (file-local)\n",
402                               host_address_to_string (minsym));
403         }
404       return found.file_symbol;
405     }
406
407   /* Symbols for shared library trampolines are next best.  */
408   if (found.trampoline_symbol.minsym != NULL)
409     {
410       if (symbol_lookup_debug)
411         {
412           minimal_symbol *minsym = found.trampoline_symbol.minsym;
413
414           fprintf_unfiltered (gdb_stdlog,
415                               "lookup_minimal_symbol (...) = %s (trampoline)\n",
416                               host_address_to_string (minsym));
417         }
418
419       return found.trampoline_symbol;
420     }
421
422   /* Not found.  */
423   if (symbol_lookup_debug)
424     fprintf_unfiltered (gdb_stdlog, "lookup_minimal_symbol (...) = NULL\n");
425   return {};
426 }
427
428 /* See minsyms.h.  */
429
430 struct bound_minimal_symbol
431 lookup_bound_minimal_symbol (const char *name)
432 {
433   return lookup_minimal_symbol (name, NULL, NULL);
434 }
435
436 /* See common/symbol.h.  */
437
438 int
439 find_minimal_symbol_address (const char *name, CORE_ADDR *addr,
440                              struct objfile *objfile)
441 {
442   struct bound_minimal_symbol sym
443     = lookup_minimal_symbol (name, NULL, objfile);
444
445   if (sym.minsym != NULL)
446     *addr = BMSYMBOL_VALUE_ADDRESS (sym);
447
448   return sym.minsym == NULL;
449 }
450
451 /* Get the lookup name form best suitable for linkage name
452    matching.  */
453
454 static const char *
455 linkage_name_str (const lookup_name_info &lookup_name)
456 {
457   /* Unlike most languages (including C++), Ada uses the
458      encoded/linkage name as the search name recorded in symbols.  So
459      if debugging in Ada mode, prefer the Ada-encoded name.  This also
460      makes Ada's verbatim match syntax ("<...>") work, because
461      "lookup_name.name()" includes the "<>"s, while
462      "lookup_name.ada().lookup_name()" is the encoded name with "<>"s
463      stripped.  */
464   if (current_language->la_language == language_ada)
465     return lookup_name.ada ().lookup_name ().c_str ();
466
467   return lookup_name.name ().c_str ();
468 }
469
470 /* See minsyms.h.  */
471
472 void
473 iterate_over_minimal_symbols
474     (struct objfile *objf, const lookup_name_info &lookup_name,
475      gdb::function_view<bool (struct minimal_symbol *)> callback)
476 {
477   /* The first pass is over the ordinary hash table.  */
478     {
479       const char *name = linkage_name_str (lookup_name);
480       unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
481       auto *mangled_cmp
482         = (case_sensitivity == case_sensitive_on
483            ? strcmp
484            : strcasecmp);
485
486       for (minimal_symbol *iter = objf->per_bfd->msymbol_hash[hash];
487            iter != NULL;
488            iter = iter->hash_next)
489         {
490           if (mangled_cmp (MSYMBOL_LINKAGE_NAME (iter), name) == 0)
491             if (callback (iter))
492               return;
493         }
494     }
495
496   /* The second pass is over the demangled table.  Once for each
497      language in the demangled hash names table (usually just zero or
498      one).  */
499   for (unsigned liter = 0; liter < nr_languages; ++liter)
500     {
501       if (!objf->per_bfd->demangled_hash_languages.test (liter))
502         continue;
503
504       enum language lang = (enum language) liter;
505       const language_defn *lang_def = language_def (lang);
506       symbol_name_matcher_ftype *name_match
507         = get_symbol_name_matcher (lang_def, lookup_name);
508
509       unsigned int hash
510         = lookup_name.search_name_hash (lang) % MINIMAL_SYMBOL_HASH_SIZE;
511       for (minimal_symbol *iter = objf->per_bfd->msymbol_demangled_hash[hash];
512            iter != NULL;
513            iter = iter->demangled_hash_next)
514         if (name_match (MSYMBOL_SEARCH_NAME (iter), lookup_name, NULL))
515           if (callback (iter))
516             return;
517     }
518 }
519
520 /* See minsyms.h.  */
521
522 struct bound_minimal_symbol
523 lookup_minimal_symbol_text (const char *name, struct objfile *objf)
524 {
525   struct objfile *objfile;
526   struct minimal_symbol *msymbol;
527   struct bound_minimal_symbol found_symbol = { NULL, NULL };
528   struct bound_minimal_symbol found_file_symbol = { NULL, NULL };
529
530   unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
531
532   for (objfile = object_files;
533        objfile != NULL && found_symbol.minsym == NULL;
534        objfile = objfile->next)
535     {
536       if (objf == NULL || objf == objfile
537           || objf == objfile->separate_debug_objfile_backlink)
538         {
539           for (msymbol = objfile->per_bfd->msymbol_hash[hash];
540                msymbol != NULL && found_symbol.minsym == NULL;
541                msymbol = msymbol->hash_next)
542             {
543               if (strcmp (MSYMBOL_LINKAGE_NAME (msymbol), name) == 0 &&
544                   (MSYMBOL_TYPE (msymbol) == mst_text
545                    || MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
546                    || MSYMBOL_TYPE (msymbol) == mst_file_text))
547                 {
548                   switch (MSYMBOL_TYPE (msymbol))
549                     {
550                     case mst_file_text:
551                       found_file_symbol.minsym = msymbol;
552                       found_file_symbol.objfile = objfile;
553                       break;
554                     default:
555                       found_symbol.minsym = msymbol;
556                       found_symbol.objfile = objfile;
557                       break;
558                     }
559                 }
560             }
561         }
562     }
563   /* External symbols are best.  */
564   if (found_symbol.minsym)
565     return found_symbol;
566
567   /* File-local symbols are next best.  */
568   return found_file_symbol;
569 }
570
571 /* See minsyms.h.  */
572
573 struct minimal_symbol *
574 lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name,
575                                   struct objfile *objf)
576 {
577   struct objfile *objfile;
578   struct minimal_symbol *msymbol;
579
580   unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
581
582   for (objfile = object_files;
583        objfile != NULL;
584        objfile = objfile->next)
585     {
586       if (objf == NULL || objf == objfile
587           || objf == objfile->separate_debug_objfile_backlink)
588         {
589           for (msymbol = objfile->per_bfd->msymbol_hash[hash];
590                msymbol != NULL;
591                msymbol = msymbol->hash_next)
592             {
593               if (MSYMBOL_VALUE_ADDRESS (objfile, msymbol) == pc
594                   && strcmp (MSYMBOL_LINKAGE_NAME (msymbol), name) == 0)
595                 return msymbol;
596             }
597         }
598     }
599
600   return NULL;
601 }
602
603 /* See minsyms.h.  */
604
605 struct bound_minimal_symbol
606 lookup_minimal_symbol_solib_trampoline (const char *name,
607                                         struct objfile *objf)
608 {
609   struct objfile *objfile;
610   struct minimal_symbol *msymbol;
611   struct bound_minimal_symbol found_symbol = { NULL, NULL };
612
613   unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
614
615   for (objfile = object_files;
616        objfile != NULL;
617        objfile = objfile->next)
618     {
619       if (objf == NULL || objf == objfile
620           || objf == objfile->separate_debug_objfile_backlink)
621         {
622           for (msymbol = objfile->per_bfd->msymbol_hash[hash];
623                msymbol != NULL;
624                msymbol = msymbol->hash_next)
625             {
626               if (strcmp (MSYMBOL_LINKAGE_NAME (msymbol), name) == 0 &&
627                   MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
628                 {
629                   found_symbol.objfile = objfile;
630                   found_symbol.minsym = msymbol;
631                   return found_symbol;
632                 }
633             }
634         }
635     }
636
637   return found_symbol;
638 }
639
640 /* A helper function that makes *PC section-relative.  This searches
641    the sections of OBJFILE and if *PC is in a section, it subtracts
642    the section offset and returns true.  Otherwise it returns
643    false.  */
644
645 static int
646 frob_address (struct objfile *objfile, CORE_ADDR *pc)
647 {
648   struct obj_section *iter;
649
650   ALL_OBJFILE_OSECTIONS (objfile, iter)
651     {
652       if (*pc >= obj_section_addr (iter) && *pc < obj_section_endaddr (iter))
653         {
654           *pc -= obj_section_offset (iter);
655           return 1;
656         }
657     }
658
659   return 0;
660 }
661
662 /* Helper for lookup_minimal_symbol_by_pc_section.  Convert a
663    lookup_msym_prefer to a minimal_symbol_type.  */
664
665 static minimal_symbol_type
666 msym_prefer_to_msym_type (lookup_msym_prefer prefer)
667 {
668   switch (prefer)
669     {
670     case lookup_msym_prefer::TEXT:
671       return mst_text;
672     case lookup_msym_prefer::TRAMPOLINE:
673       return mst_solib_trampoline;
674     case lookup_msym_prefer::GNU_IFUNC:
675       return mst_text_gnu_ifunc;
676     }
677
678   /* Assert here instead of in a default switch case above so that
679      -Wswitch warns if a new enumerator is added.  */
680   gdb_assert_not_reached ("unhandled lookup_msym_prefer");
681 }
682
683 /* Search through the minimal symbol table for each objfile and find
684    the symbol whose address is the largest address that is still less
685    than or equal to PC, and matches SECTION (which is not NULL).
686    Returns a pointer to the minimal symbol if such a symbol is found,
687    or NULL if PC is not in a suitable range.
688    Note that we need to look through ALL the minimal symbol tables
689    before deciding on the symbol that comes closest to the specified PC.
690    This is because objfiles can overlap, for example objfile A has .text
691    at 0x100 and .data at 0x40000 and objfile B has .text at 0x234 and
692    .data at 0x40048.
693
694    If WANT_TRAMPOLINE is set, prefer mst_solib_trampoline symbols when
695    there are text and trampoline symbols at the same address.
696    Otherwise prefer mst_text symbols.  */
697
698 bound_minimal_symbol
699 lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *section,
700                                      lookup_msym_prefer prefer)
701 {
702   int lo;
703   int hi;
704   int newobj;
705   struct objfile *objfile;
706   struct minimal_symbol *msymbol;
707   struct minimal_symbol *best_symbol = NULL;
708   struct objfile *best_objfile = NULL;
709   struct bound_minimal_symbol result;
710
711   if (section == NULL)
712     {
713       section = find_pc_section (pc_in);
714       if (section == NULL)
715         return {};
716     }
717
718   minimal_symbol_type want_type = msym_prefer_to_msym_type (prefer);
719
720   /* We can not require the symbol found to be in section, because
721      e.g. IRIX 6.5 mdebug relies on this code returning an absolute
722      symbol - but find_pc_section won't return an absolute section and
723      hence the code below would skip over absolute symbols.  We can
724      still take advantage of the call to find_pc_section, though - the
725      object file still must match.  In case we have separate debug
726      files, search both the file and its separate debug file.  There's
727      no telling which one will have the minimal symbols.  */
728
729   gdb_assert (section != NULL);
730
731   for (objfile = section->objfile;
732        objfile != NULL;
733        objfile = objfile_separate_debug_iterate (section->objfile, objfile))
734     {
735       CORE_ADDR pc = pc_in;
736
737       /* If this objfile has a minimal symbol table, go search it
738          using a binary search.  */
739
740       if (objfile->per_bfd->minimal_symbol_count > 0)
741         {
742           int best_zero_sized = -1;
743
744           msymbol = objfile->per_bfd->msymbols.get ();
745           lo = 0;
746           hi = objfile->per_bfd->minimal_symbol_count - 1;
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
764              Warning: this code is trickier than it would appear at first.  */
765
766           if (frob_address (objfile, &pc)
767               && pc >= MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[lo]))
768             {
769               while (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi]) > pc)
770                 {
771                   /* pc is still strictly less than highest address.  */
772                   /* Note "new" will always be >= lo.  */
773                   newobj = (lo + hi) / 2;
774                   if ((MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[newobj]) >= pc)
775                       || (lo == newobj))
776                     {
777                       hi = newobj;
778                     }
779                   else
780                     {
781                       lo = newobj;
782                     }
783                 }
784
785               /* If we have multiple symbols at the same address, we want
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.  */
788               while (hi < objfile->per_bfd->minimal_symbol_count - 1
789                      && (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
790                          == MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi + 1])))
791                 hi++;
792
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
808                   if (MSYMBOL_TYPE (&msymbol[hi]) == mst_abs)
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.  */
820                       && MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi]) != NULL
821                       && (!matching_obj_sections
822                           (MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi]),
823                            section)))
824                     {
825                       hi--;
826                       continue;
827                     }
828
829                   /* If we are looking for a trampoline and this is a
830                      text symbol, or the other way around, check the
831                      preceding symbol too.  If they are otherwise
832                      identical prefer that one.  */
833                   if (hi > 0
834                       && MSYMBOL_TYPE (&msymbol[hi]) != want_type
835                       && MSYMBOL_TYPE (&msymbol[hi - 1]) == want_type
836                       && (MSYMBOL_SIZE (&msymbol[hi])
837                           == MSYMBOL_SIZE (&msymbol[hi - 1]))
838                       && (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
839                           == MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi - 1]))
840                       && (MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi])
841                           == MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi - 1])))
842                     {
843                       hi--;
844                       continue;
845                     }
846
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.  */
853                   if (MSYMBOL_SIZE (&msymbol[hi]) == 0)
854                     {
855                       if (best_zero_sized == -1)
856                         best_zero_sized = hi;
857                       hi--;
858                       continue;
859                     }
860
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
868                       && pc >= (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
869                                 + MSYMBOL_SIZE (&msymbol[hi]))
870                       && pc < (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi - 1])
871                                + MSYMBOL_SIZE (&msymbol[hi - 1])))
872                     {
873                       hi--;
874                       continue;
875                     }
876
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
900                   && pc >= (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
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
910               /* The minimal symbol indexed by hi now is the best one in this
911                  objfile's minimal symbol table.  See if it is the best one
912                  overall.  */
913
914               if (hi >= 0
915                   && ((best_symbol == NULL) ||
916                       (MSYMBOL_VALUE_RAW_ADDRESS (best_symbol) <
917                        MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi]))))
918                 {
919                   best_symbol = &msymbol[hi];
920                   best_objfile = objfile;
921                 }
922             }
923         }
924     }
925
926   result.minsym = best_symbol;
927   result.objfile = best_objfile;
928   return result;
929 }
930
931 /* See minsyms.h.  */
932
933 struct bound_minimal_symbol
934 lookup_minimal_symbol_by_pc (CORE_ADDR pc)
935 {
936   return lookup_minimal_symbol_by_pc_section (pc, NULL);
937 }
938
939 /* Return non-zero iff PC is in an STT_GNU_IFUNC function resolver.  */
940
941 int
942 in_gnu_ifunc_stub (CORE_ADDR pc)
943 {
944   bound_minimal_symbol msymbol
945     = lookup_minimal_symbol_by_pc_section (pc, NULL,
946                                            lookup_msym_prefer::GNU_IFUNC);
947   return msymbol.minsym && MSYMBOL_TYPE (msymbol.minsym) == mst_text_gnu_ifunc;
948 }
949
950 /* See elf_gnu_ifunc_resolve_addr for its real implementation.  */
951
952 static CORE_ADDR
953 stub_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
962 static int
963 stub_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
971 /* See elf_gnu_ifunc_resolver_stop for its real implementation.  */
972
973 static void
974 stub_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
982 static void
983 stub_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
989 /* See elf_gnu_ifunc_fns for its real implementation.  */
990
991 static const struct gnu_ifunc_fns stub_gnu_ifunc_fns =
992 {
993   stub_gnu_ifunc_resolve_addr,
994   stub_gnu_ifunc_resolve_name,
995   stub_gnu_ifunc_resolver_stop,
996   stub_gnu_ifunc_resolver_return_stop,
997 };
998
999 /* A placeholder for &elf_gnu_ifunc_fns.  */
1000
1001 const struct gnu_ifunc_fns *gnu_ifunc_fns_p = &stub_gnu_ifunc_fns;
1002
1003 \f
1004
1005 /* Return leading symbol character for a BFD.  If BFD is NULL,
1006    return the leading symbol character from the main objfile.  */
1007
1008 static int
1009 get_symbol_leading_char (bfd *abfd)
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
1018 /* See minsyms.h.  */
1019
1020 minimal_symbol_reader::minimal_symbol_reader (struct objfile *obj)
1021 : m_objfile (obj),
1022   m_msym_bunch (NULL),
1023   /* Note that presetting m_msym_bunch_index to BUNCH_SIZE causes the
1024      first call to save a minimal symbol to allocate the memory for
1025      the first bunch.  */
1026   m_msym_bunch_index (BUNCH_SIZE),
1027   m_msym_count (0)
1028 {
1029 }
1030
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 minimal_symbol_reader::~minimal_symbol_reader ()
1036 {
1037   struct msym_bunch *next;
1038
1039   while (m_msym_bunch != NULL)
1040     {
1041       next = m_msym_bunch->next;
1042       xfree (m_msym_bunch);
1043       m_msym_bunch = next;
1044     }
1045 }
1046
1047 /* See minsyms.h.  */
1048
1049 void
1050 minimal_symbol_reader::record (const char *name, CORE_ADDR address,
1051                                enum minimal_symbol_type ms_type)
1052 {
1053   int section;
1054
1055   switch (ms_type)
1056     {
1057     case mst_text:
1058     case mst_text_gnu_ifunc:
1059     case mst_file_text:
1060     case mst_solib_trampoline:
1061       section = SECT_OFF_TEXT (m_objfile);
1062       break;
1063     case mst_data:
1064     case mst_data_gnu_ifunc:
1065     case mst_file_data:
1066       section = SECT_OFF_DATA (m_objfile);
1067       break;
1068     case mst_bss:
1069     case mst_file_bss:
1070       section = SECT_OFF_BSS (m_objfile);
1071       break;
1072     default:
1073       section = -1;
1074     }
1075
1076   record_with_info (name, address, ms_type, section);
1077 }
1078
1079 /* Convert an enumerator of type minimal_symbol_type to its string
1080    representation.  */
1081
1082 static const char *
1083 mst_str (minimal_symbol_type t)
1084 {
1085 #define MST_TO_STR(x) case x: return #x;
1086   switch (t)
1087   {
1088     MST_TO_STR (mst_unknown);
1089     MST_TO_STR (mst_text);
1090     MST_TO_STR (mst_text_gnu_ifunc);
1091     MST_TO_STR (mst_slot_got_plt);
1092     MST_TO_STR (mst_data);
1093     MST_TO_STR (mst_bss);
1094     MST_TO_STR (mst_abs);
1095     MST_TO_STR (mst_solib_trampoline);
1096     MST_TO_STR (mst_file_text);
1097     MST_TO_STR (mst_file_data);
1098     MST_TO_STR (mst_file_bss);
1099
1100     default:
1101       return "mst_???";
1102   }
1103 #undef MST_TO_STR
1104 }
1105
1106 /* See minsyms.h.  */
1107
1108 struct minimal_symbol *
1109 minimal_symbol_reader::record_full (const char *name, int name_len,
1110                                     bool copy_name, CORE_ADDR address,
1111                                     enum minimal_symbol_type ms_type,
1112                                     int section)
1113 {
1114   struct msym_bunch *newobj;
1115   struct minimal_symbol *msymbol;
1116
1117   /* Don't put gcc_compiled, __gnu_compiled_cplus, and friends into
1118      the minimal symbols, because if there is also another symbol
1119      at the same address (e.g. the first function of the file),
1120      lookup_minimal_symbol_by_pc would have no way of getting the
1121      right one.  */
1122   if (ms_type == mst_file_text && name[0] == 'g'
1123       && (strcmp (name, GCC_COMPILED_FLAG_SYMBOL) == 0
1124           || strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0))
1125     return (NULL);
1126
1127   /* It's safe to strip the leading char here once, since the name
1128      is also stored stripped in the minimal symbol table.  */
1129   if (name[0] == get_symbol_leading_char (m_objfile->obfd))
1130     {
1131       ++name;
1132       --name_len;
1133     }
1134
1135   if (ms_type == mst_file_text && startswith (name, "__gnu_compiled"))
1136     return (NULL);
1137
1138   if (symtab_create_debug >= 2)
1139     printf_unfiltered ("Recording minsym:  %-21s  %18s  %4d  %s\n",
1140                mst_str (ms_type), hex_string (address), section, name);
1141
1142   if (m_msym_bunch_index == BUNCH_SIZE)
1143     {
1144       newobj = XCNEW (struct msym_bunch);
1145       m_msym_bunch_index = 0;
1146       newobj->next = m_msym_bunch;
1147       m_msym_bunch = newobj;
1148     }
1149   msymbol = &m_msym_bunch->contents[m_msym_bunch_index];
1150   symbol_set_language (msymbol, language_auto,
1151                        &m_objfile->per_bfd->storage_obstack);
1152   symbol_set_names (msymbol, name, name_len, copy_name, m_objfile->per_bfd);
1153
1154   SET_MSYMBOL_VALUE_ADDRESS (msymbol, address);
1155   MSYMBOL_SECTION (msymbol) = section;
1156
1157   MSYMBOL_TYPE (msymbol) = ms_type;
1158
1159   /* If we already read minimal symbols for this objfile, then don't
1160      ever allocate a new one.  */
1161   if (!m_objfile->per_bfd->minsyms_read)
1162     {
1163       m_msym_bunch_index++;
1164       m_objfile->per_bfd->n_minsyms++;
1165     }
1166   m_msym_count++;
1167   return msymbol;
1168 }
1169
1170 /* Compare two minimal symbols by address and return a signed result based
1171    on unsigned comparisons, so that we sort into unsigned numeric order.
1172    Within groups with the same address, sort by name.  */
1173
1174 static int
1175 compare_minimal_symbols (const void *fn1p, const void *fn2p)
1176 {
1177   const struct minimal_symbol *fn1;
1178   const struct minimal_symbol *fn2;
1179
1180   fn1 = (const struct minimal_symbol *) fn1p;
1181   fn2 = (const struct minimal_symbol *) fn2p;
1182
1183   if (MSYMBOL_VALUE_RAW_ADDRESS (fn1) < MSYMBOL_VALUE_RAW_ADDRESS (fn2))
1184     {
1185       return (-1);              /* addr 1 is less than addr 2.  */
1186     }
1187   else if (MSYMBOL_VALUE_RAW_ADDRESS (fn1) > MSYMBOL_VALUE_RAW_ADDRESS (fn2))
1188     {
1189       return (1);               /* addr 1 is greater than addr 2.  */
1190     }
1191   else
1192     /* addrs are equal: sort by name */
1193     {
1194       const char *name1 = MSYMBOL_LINKAGE_NAME (fn1);
1195       const char *name2 = MSYMBOL_LINKAGE_NAME (fn2);
1196
1197       if (name1 && name2)       /* both have names */
1198         return strcmp (name1, name2);
1199       else if (name2)
1200         return 1;               /* fn1 has no name, so it is "less".  */
1201       else if (name1)           /* fn2 has no name, so it is "less".  */
1202         return -1;
1203       else
1204         return (0);             /* Neither has a name, so they're equal.  */
1205     }
1206 }
1207
1208 /* Compact duplicate entries out of a minimal symbol table by walking
1209    through the table and compacting out entries with duplicate addresses
1210    and matching names.  Return the number of entries remaining.
1211
1212    On entry, the table resides between msymbol[0] and msymbol[mcount].
1213    On exit, it resides between msymbol[0] and msymbol[result_count].
1214
1215    When files contain multiple sources of symbol information, it is
1216    possible for the minimal symbol table to contain many duplicate entries.
1217    As an example, SVR4 systems use ELF formatted object files, which
1218    usually contain at least two different types of symbol tables (a
1219    standard ELF one and a smaller dynamic linking table), as well as
1220    DWARF debugging information for files compiled with -g.
1221
1222    Without compacting, the minimal symbol table for gdb itself contains
1223    over a 1000 duplicates, about a third of the total table size.  Aside
1224    from the potential trap of not noticing that two successive entries
1225    identify the same location, this duplication impacts the time required
1226    to linearly scan the table, which is done in a number of places.  So we
1227    just do one linear scan here and toss out the duplicates.
1228
1229    Since the different sources of information for each symbol may
1230    have different levels of "completeness", we may have duplicates
1231    that have one entry with type "mst_unknown" and the other with a
1232    known type.  So if the one we are leaving alone has type mst_unknown,
1233    overwrite its type with the type from the one we are compacting out.  */
1234
1235 static int
1236 compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount,
1237                          struct objfile *objfile)
1238 {
1239   struct minimal_symbol *copyfrom;
1240   struct minimal_symbol *copyto;
1241
1242   if (mcount > 0)
1243     {
1244       copyfrom = copyto = msymbol;
1245       while (copyfrom < msymbol + mcount - 1)
1246         {
1247           if (MSYMBOL_VALUE_RAW_ADDRESS (copyfrom)
1248               == MSYMBOL_VALUE_RAW_ADDRESS ((copyfrom + 1))
1249               && MSYMBOL_SECTION (copyfrom) == MSYMBOL_SECTION (copyfrom + 1)
1250               && strcmp (MSYMBOL_LINKAGE_NAME (copyfrom),
1251                          MSYMBOL_LINKAGE_NAME ((copyfrom + 1))) == 0)
1252             {
1253               if (MSYMBOL_TYPE ((copyfrom + 1)) == mst_unknown)
1254                 {
1255                   MSYMBOL_TYPE ((copyfrom + 1)) = MSYMBOL_TYPE (copyfrom);
1256                 }
1257               copyfrom++;
1258             }
1259           else
1260             *copyto++ = *copyfrom++;
1261         }
1262       *copyto++ = *copyfrom++;
1263       mcount = copyto - msymbol;
1264     }
1265   return (mcount);
1266 }
1267
1268 /* Build (or rebuild) the minimal symbol hash tables.  This is necessary
1269    after compacting or sorting the table since the entries move around
1270    thus causing the internal minimal_symbol pointers to become jumbled.  */
1271   
1272 static void
1273 build_minimal_symbol_hash_tables (struct objfile *objfile)
1274 {
1275   int i;
1276   struct minimal_symbol *msym;
1277
1278   /* Clear the hash tables.  */
1279   for (i = 0; i < MINIMAL_SYMBOL_HASH_SIZE; i++)
1280     {
1281       objfile->per_bfd->msymbol_hash[i] = 0;
1282       objfile->per_bfd->msymbol_demangled_hash[i] = 0;
1283     }
1284
1285   /* Now, (re)insert the actual entries.  */
1286   for ((i = objfile->per_bfd->minimal_symbol_count,
1287         msym = objfile->per_bfd->msymbols.get ());
1288        i > 0;
1289        i--, msym++)
1290     {
1291       msym->hash_next = 0;
1292       add_minsym_to_hash_table (msym, objfile->per_bfd->msymbol_hash);
1293
1294       msym->demangled_hash_next = 0;
1295       if (MSYMBOL_SEARCH_NAME (msym) != MSYMBOL_LINKAGE_NAME (msym))
1296         add_minsym_to_demangled_hash_table (msym, objfile);
1297     }
1298 }
1299
1300 /* Add the minimal symbols in the existing bunches to the objfile's official
1301    minimal symbol table.  In most cases there is no minimal symbol table yet
1302    for this objfile, and the existing bunches are used to create one.  Once
1303    in a while (for shared libraries for example), we add symbols (e.g. common
1304    symbols) to an existing objfile.  */
1305
1306 void
1307 minimal_symbol_reader::install ()
1308 {
1309   int mcount;
1310   struct msym_bunch *bunch;
1311   struct minimal_symbol *msymbols;
1312   int alloc_count;
1313
1314   if (m_objfile->per_bfd->minsyms_read)
1315     return;
1316
1317   if (m_msym_count > 0)
1318     {
1319       if (symtab_create_debug)
1320         {
1321           fprintf_unfiltered (gdb_stdlog,
1322                               "Installing %d minimal symbols of objfile %s.\n",
1323                               m_msym_count, objfile_name (m_objfile));
1324         }
1325
1326       /* Allocate enough space, into which we will gather the bunches
1327          of new and existing minimal symbols, sort them, and then
1328          compact out the duplicate entries.  Once we have a final
1329          table, we will give back the excess space.  */
1330
1331       alloc_count = m_msym_count + m_objfile->per_bfd->minimal_symbol_count;
1332       gdb::unique_xmalloc_ptr<minimal_symbol>
1333         msym_holder (XNEWVEC (minimal_symbol, alloc_count));
1334       msymbols = msym_holder.get ();
1335
1336       /* Copy in the existing minimal symbols, if there are any.  */
1337
1338       if (m_objfile->per_bfd->minimal_symbol_count)
1339         memcpy (msymbols, m_objfile->per_bfd->msymbols.get (),
1340                 m_objfile->per_bfd->minimal_symbol_count
1341                 * sizeof (struct minimal_symbol));
1342
1343       /* Walk through the list of minimal symbol bunches, adding each symbol
1344          to the new contiguous array of symbols.  Note that we start with the
1345          current, possibly partially filled bunch (thus we use the current
1346          msym_bunch_index for the first bunch we copy over), and thereafter
1347          each bunch is full.  */
1348
1349       mcount = m_objfile->per_bfd->minimal_symbol_count;
1350
1351       for (bunch = m_msym_bunch; bunch != NULL; bunch = bunch->next)
1352         {
1353           memcpy (&msymbols[mcount], &bunch->contents[0],
1354                   m_msym_bunch_index * sizeof (struct minimal_symbol));
1355           mcount += m_msym_bunch_index;
1356           m_msym_bunch_index = BUNCH_SIZE;
1357         }
1358
1359       /* Sort the minimal symbols by address.  */
1360
1361       qsort (msymbols, mcount, sizeof (struct minimal_symbol),
1362              compare_minimal_symbols);
1363
1364       /* Compact out any duplicates, and free up whatever space we are
1365          no longer using.  */
1366
1367       mcount = compact_minimal_symbols (msymbols, mcount, m_objfile);
1368       msym_holder.reset (XRESIZEVEC (struct minimal_symbol,
1369                                      msym_holder.release (),
1370                                      mcount));
1371
1372       /* Attach the minimal symbol table to the specified objfile.
1373          The strings themselves are also located in the storage_obstack
1374          of this objfile.  */
1375
1376       m_objfile->per_bfd->minimal_symbol_count = mcount;
1377       m_objfile->per_bfd->msymbols = std::move (msym_holder);
1378
1379       build_minimal_symbol_hash_tables (m_objfile);
1380     }
1381 }
1382
1383 /* Check if PC is in a shared library trampoline code stub.
1384    Return minimal symbol for the trampoline entry or NULL if PC is not
1385    in a trampoline code stub.  */
1386
1387 static struct minimal_symbol *
1388 lookup_solib_trampoline_symbol_by_pc (CORE_ADDR pc)
1389 {
1390   bound_minimal_symbol msymbol
1391     = lookup_minimal_symbol_by_pc_section (pc, NULL,
1392                                            lookup_msym_prefer::TRAMPOLINE);
1393
1394   if (msymbol.minsym != NULL
1395       && MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline)
1396     return msymbol.minsym;
1397   return NULL;
1398 }
1399
1400 /* If PC is in a shared library trampoline code stub, return the
1401    address of the `real' function belonging to the stub.
1402    Return 0 if PC is not in a trampoline code stub or if the real
1403    function is not found in the minimal symbol table.
1404
1405    We may fail to find the right function if a function with the
1406    same name is defined in more than one shared library, but this
1407    is considered bad programming style.  We could return 0 if we find
1408    a duplicate function in case this matters someday.  */
1409
1410 CORE_ADDR
1411 find_solib_trampoline_target (struct frame_info *frame, CORE_ADDR pc)
1412 {
1413   struct minimal_symbol *tsymbol = lookup_solib_trampoline_symbol_by_pc (pc);
1414
1415   if (tsymbol != NULL)
1416     {
1417       for (objfile *objfile : current_program_space->objfiles ())
1418         {
1419           for (minimal_symbol *msymbol : objfile->msymbols ())
1420             {
1421               /* Also handle minimal symbols pointing to function
1422                  descriptors.  */
1423               if ((MSYMBOL_TYPE (msymbol) == mst_text
1424                    || MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
1425                    || MSYMBOL_TYPE (msymbol) == mst_data
1426                    || MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
1427                   && strcmp (MSYMBOL_LINKAGE_NAME (msymbol),
1428                              MSYMBOL_LINKAGE_NAME (tsymbol)) == 0)
1429                 {
1430                   CORE_ADDR func;
1431
1432                   /* Ignore data symbols that are not function
1433                      descriptors.  */
1434                   if (msymbol_is_function (objfile, msymbol, &func))
1435                     return func;
1436                 }
1437             }
1438         }
1439     }
1440   return 0;
1441 }
1442
1443 /* See minsyms.h.  */
1444
1445 CORE_ADDR
1446 minimal_symbol_upper_bound (struct bound_minimal_symbol minsym)
1447 {
1448   int i;
1449   short section;
1450   struct obj_section *obj_section;
1451   CORE_ADDR result;
1452   struct minimal_symbol *msymbol;
1453
1454   gdb_assert (minsym.minsym != NULL);
1455
1456   /* If the minimal symbol has a size, use it.  Otherwise use the
1457      lesser of the next minimal symbol in the same section, or the end
1458      of the section, as the end of the function.  */
1459
1460   if (MSYMBOL_SIZE (minsym.minsym) != 0)
1461     return BMSYMBOL_VALUE_ADDRESS (minsym) + MSYMBOL_SIZE (minsym.minsym);
1462
1463   /* Step over other symbols at this same address, and symbols in
1464      other sections, to find the next symbol in this section with a
1465      different address.  */
1466
1467   msymbol = minsym.minsym;
1468   section = MSYMBOL_SECTION (msymbol);
1469   for (i = 1; MSYMBOL_LINKAGE_NAME (msymbol + i) != NULL; i++)
1470     {
1471       if ((MSYMBOL_VALUE_RAW_ADDRESS (msymbol + i)
1472            != MSYMBOL_VALUE_RAW_ADDRESS (msymbol))
1473           && MSYMBOL_SECTION (msymbol + i) == section)
1474         break;
1475     }
1476
1477   obj_section = MSYMBOL_OBJ_SECTION (minsym.objfile, minsym.minsym);
1478   if (MSYMBOL_LINKAGE_NAME (msymbol + i) != NULL
1479       && (MSYMBOL_VALUE_ADDRESS (minsym.objfile, msymbol + i)
1480           < obj_section_endaddr (obj_section)))
1481     result = MSYMBOL_VALUE_ADDRESS (minsym.objfile, msymbol + i);
1482   else
1483     /* We got the start address from the last msymbol in the objfile.
1484        So the end address is the end of the section.  */
1485     result = obj_section_endaddr (obj_section);
1486
1487   return result;
1488 }