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