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