2011-03-23 Kai Tietz <ktietz@redhat.com>
[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 = hash * 67 + *string - 113;
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 = hash * 67 + *string - 113;
110   return hash;
111 }
112
113 /* Add the minimal symbol SYM to an objfile's minsym hash table, TABLE.  */
114 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                       match = strcmp (SYMBOL_LINKAGE_NAME (msymbol),
243                                       modified_name) == 0;
244                     }
245                   else
246                     {
247                       match = SYMBOL_MATCHES_SEARCH_NAME (msymbol,
248                                                           modified_name);
249                     }
250
251                   if (match)
252                     {
253                     switch (MSYMBOL_TYPE (msymbol))
254                       {
255                       case mst_file_text:
256                       case mst_file_data:
257                       case mst_file_bss:
258                         if (sfile == NULL
259                             || filename_cmp (msymbol->filename, sfile) == 0)
260                           found_file_symbol = msymbol;
261                         break;
262
263                       case mst_solib_trampoline:
264
265                         /* If a trampoline symbol is found, we prefer to
266                            keep looking for the *real* symbol.  If the
267                            actual symbol is not found, then we'll use the
268                            trampoline entry.  */
269                         if (trampoline_symbol == NULL)
270                           trampoline_symbol = msymbol;
271                         break;
272
273                       case mst_unknown:
274                       default:
275                         found_symbol = msymbol;
276                         break;
277                       }
278                     }
279
280                 /* Find the next symbol on the hash chain.  */
281                 if (pass == 1)
282                   msymbol = msymbol->hash_next;
283                 else
284                   msymbol = msymbol->demangled_hash_next;
285                 }
286             }
287         }
288     }
289
290   if (needtofreename)
291     xfree ((void *) modified_name);
292
293   /* External symbols are best.  */
294   if (found_symbol)
295     return found_symbol;
296
297   /* File-local symbols are next best.  */
298   if (found_file_symbol)
299     return found_file_symbol;
300
301   /* Symbols for shared library trampolines are next best.  */
302   if (trampoline_symbol)
303     return trampoline_symbol;
304
305   return NULL;
306 }
307
308 /* Look through all the current minimal symbol tables and find the
309    first minimal symbol that matches NAME and has text type.  If OBJF
310    is non-NULL, limit the search to that objfile.  Returns a pointer
311    to the minimal symbol that matches, or NULL if no match is found.
312
313    This function only searches the mangled (linkage) names.  */
314
315 struct minimal_symbol *
316 lookup_minimal_symbol_text (const char *name, struct objfile *objf)
317 {
318   struct objfile *objfile;
319   struct minimal_symbol *msymbol;
320   struct minimal_symbol *found_symbol = NULL;
321   struct minimal_symbol *found_file_symbol = NULL;
322
323   unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
324
325   for (objfile = object_files;
326        objfile != NULL && found_symbol == NULL;
327        objfile = objfile->next)
328     {
329       if (objf == NULL || objf == objfile
330           || objf == objfile->separate_debug_objfile_backlink)
331         {
332           for (msymbol = objfile->msymbol_hash[hash];
333                msymbol != NULL && found_symbol == NULL;
334                msymbol = msymbol->hash_next)
335             {
336               if (strcmp (SYMBOL_LINKAGE_NAME (msymbol), name) == 0 &&
337                   (MSYMBOL_TYPE (msymbol) == mst_text ||
338                    MSYMBOL_TYPE (msymbol) == mst_file_text))
339                 {
340                   switch (MSYMBOL_TYPE (msymbol))
341                     {
342                     case mst_file_text:
343                       found_file_symbol = msymbol;
344                       break;
345                     default:
346                       found_symbol = msymbol;
347                       break;
348                     }
349                 }
350             }
351         }
352     }
353   /* External symbols are best.  */
354   if (found_symbol)
355     return found_symbol;
356
357   /* File-local symbols are next best.  */
358   if (found_file_symbol)
359     return found_file_symbol;
360
361   return NULL;
362 }
363
364 /* Look through all the current minimal symbol tables and find the
365    first minimal symbol that matches NAME and PC.  If OBJF is non-NULL,
366    limit the search to that objfile.  Returns a pointer to the minimal
367    symbol that matches, or NULL if no match is found.  */
368
369 struct minimal_symbol *
370 lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name,
371                                   struct objfile *objf)
372 {
373   struct objfile *objfile;
374   struct minimal_symbol *msymbol;
375
376   unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
377
378   for (objfile = object_files;
379        objfile != NULL;
380        objfile = objfile->next)
381     {
382       if (objf == NULL || objf == objfile
383           || objf == objfile->separate_debug_objfile_backlink)
384         {
385           for (msymbol = objfile->msymbol_hash[hash];
386                msymbol != NULL;
387                msymbol = msymbol->hash_next)
388             {
389               if (SYMBOL_VALUE_ADDRESS (msymbol) == pc
390                   && strcmp (SYMBOL_LINKAGE_NAME (msymbol), name) == 0)
391                 return msymbol;
392             }
393         }
394     }
395
396   return NULL;
397 }
398
399 /* Look through all the current minimal symbol tables and find the
400    first minimal symbol that matches NAME and is a solib trampoline.
401    If OBJF is non-NULL, limit the search to that objfile.  Returns a
402    pointer to the minimal symbol that matches, or NULL if no match is
403    found.
404
405    This function only searches the mangled (linkage) names.  */
406
407 struct minimal_symbol *
408 lookup_minimal_symbol_solib_trampoline (const char *name,
409                                         struct objfile *objf)
410 {
411   struct objfile *objfile;
412   struct minimal_symbol *msymbol;
413   struct minimal_symbol *found_symbol = NULL;
414
415   unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
416
417   for (objfile = object_files;
418        objfile != NULL && found_symbol == NULL;
419        objfile = objfile->next)
420     {
421       if (objf == NULL || objf == objfile
422           || objf == objfile->separate_debug_objfile_backlink)
423         {
424           for (msymbol = objfile->msymbol_hash[hash];
425                msymbol != NULL && found_symbol == NULL;
426                msymbol = msymbol->hash_next)
427             {
428               if (strcmp (SYMBOL_LINKAGE_NAME (msymbol), name) == 0 &&
429                   MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
430                 return msymbol;
431             }
432         }
433     }
434
435   return NULL;
436 }
437
438 /* Search through the minimal symbol table for each objfile and find
439    the symbol whose address is the largest address that is still less
440    than or equal to PC, and matches SECTION (which is not NULL).
441    Returns a pointer to the minimal symbol if such a symbol is found,
442    or NULL if PC is not in a suitable range.
443    Note that we need to look through ALL the minimal symbol tables
444    before deciding on the symbol that comes closest to the specified PC.
445    This is because objfiles can overlap, for example objfile A has .text
446    at 0x100 and .data at 0x40000 and objfile B has .text at 0x234 and
447    .data at 0x40048.
448
449    If WANT_TRAMPOLINE is set, prefer mst_solib_trampoline symbols when
450    there are text and trampoline symbols at the same address.
451    Otherwise prefer mst_text symbols.  */
452
453 static struct minimal_symbol *
454 lookup_minimal_symbol_by_pc_section_1 (CORE_ADDR pc,
455                                        struct obj_section *section,
456                                        int want_trampoline)
457 {
458   int lo;
459   int hi;
460   int new;
461   struct objfile *objfile;
462   struct minimal_symbol *msymbol;
463   struct minimal_symbol *best_symbol = NULL;
464   enum minimal_symbol_type want_type, other_type;
465
466   want_type = want_trampoline ? mst_solib_trampoline : mst_text;
467   other_type = want_trampoline ? mst_text : mst_solib_trampoline;
468
469   /* We can not require the symbol found to be in section, because
470      e.g. IRIX 6.5 mdebug relies on this code returning an absolute
471      symbol - but find_pc_section won't return an absolute section and
472      hence the code below would skip over absolute symbols.  We can
473      still take advantage of the call to find_pc_section, though - the
474      object file still must match.  In case we have separate debug
475      files, search both the file and its separate debug file.  There's
476      no telling which one will have the minimal symbols.  */
477
478   gdb_assert (section != NULL);
479
480   for (objfile = section->objfile;
481        objfile != NULL;
482        objfile = objfile_separate_debug_iterate (section->objfile, objfile))
483     {
484       /* If this objfile has a minimal symbol table, go search it using
485          a binary search.  Note that a minimal symbol table always consists
486          of at least two symbols, a "real" symbol and the terminating
487          "null symbol".  If there are no real symbols, then there is no
488          minimal symbol table at all.  */
489
490       if (objfile->minimal_symbol_count > 0)
491         {
492           int best_zero_sized = -1;
493
494           msymbol = objfile->msymbols;
495           lo = 0;
496           hi = objfile->minimal_symbol_count - 1;
497
498           /* This code assumes that the minimal symbols are sorted by
499              ascending address values.  If the pc value is greater than or
500              equal to the first symbol's address, then some symbol in this
501              minimal symbol table is a suitable candidate for being the
502              "best" symbol.  This includes the last real symbol, for cases
503              where the pc value is larger than any address in this vector.
504
505              By iterating until the address associated with the current
506              hi index (the endpoint of the test interval) is less than
507              or equal to the desired pc value, we accomplish two things:
508              (1) the case where the pc value is larger than any minimal
509              symbol address is trivially solved, (2) the address associated
510              with the hi index is always the one we want when the interation
511              terminates.  In essence, we are iterating the test interval
512              down until the pc value is pushed out of it from the high end.
513
514              Warning: this code is trickier than it would appear at first.  */
515
516           /* Should also require that pc is <= end of objfile.  FIXME!  */
517           if (pc >= SYMBOL_VALUE_ADDRESS (&msymbol[lo]))
518             {
519               while (SYMBOL_VALUE_ADDRESS (&msymbol[hi]) > pc)
520                 {
521                   /* pc is still strictly less than highest address.  */
522                   /* Note "new" will always be >= lo.  */
523                   new = (lo + hi) / 2;
524                   if ((SYMBOL_VALUE_ADDRESS (&msymbol[new]) >= pc) ||
525                       (lo == new))
526                     {
527                       hi = new;
528                     }
529                   else
530                     {
531                       lo = new;
532                     }
533                 }
534
535               /* If we have multiple symbols at the same address, we want
536                  hi to point to the last one.  That way we can find the
537                  right symbol if it has an index greater than hi.  */
538               while (hi < objfile->minimal_symbol_count - 1
539                      && (SYMBOL_VALUE_ADDRESS (&msymbol[hi])
540                          == SYMBOL_VALUE_ADDRESS (&msymbol[hi + 1])))
541                 hi++;
542
543               /* Skip various undesirable symbols.  */
544               while (hi >= 0)
545                 {
546                   /* Skip any absolute symbols.  This is apparently
547                      what adb and dbx do, and is needed for the CM-5.
548                      There are two known possible problems: (1) on
549                      ELF, apparently end, edata, etc. are absolute.
550                      Not sure ignoring them here is a big deal, but if
551                      we want to use them, the fix would go in
552                      elfread.c.  (2) I think shared library entry
553                      points on the NeXT are absolute.  If we want
554                      special handling for this it probably should be
555                      triggered by a special mst_abs_or_lib or some
556                      such.  */
557
558                   if (MSYMBOL_TYPE (&msymbol[hi]) == mst_abs)
559                     {
560                       hi--;
561                       continue;
562                     }
563
564                   /* If SECTION was specified, skip any symbol from
565                      wrong section.  */
566                   if (section
567                       /* Some types of debug info, such as COFF,
568                          don't fill the bfd_section member, so don't
569                          throw away symbols on those platforms.  */
570                       && SYMBOL_OBJ_SECTION (&msymbol[hi]) != NULL
571                       && (!matching_obj_sections
572                           (SYMBOL_OBJ_SECTION (&msymbol[hi]), section)))
573                     {
574                       hi--;
575                       continue;
576                     }
577
578                   /* If we are looking for a trampoline and this is a
579                      text symbol, or the other way around, check the
580                      preceeding symbol too.  If they are otherwise
581                      identical prefer that one.  */
582                   if (hi > 0
583                       && MSYMBOL_TYPE (&msymbol[hi]) == other_type
584                       && MSYMBOL_TYPE (&msymbol[hi - 1]) == want_type
585                       && (MSYMBOL_SIZE (&msymbol[hi])
586                           == MSYMBOL_SIZE (&msymbol[hi - 1]))
587                       && (SYMBOL_VALUE_ADDRESS (&msymbol[hi])
588                           == SYMBOL_VALUE_ADDRESS (&msymbol[hi - 1]))
589                       && (SYMBOL_OBJ_SECTION (&msymbol[hi])
590                           == SYMBOL_OBJ_SECTION (&msymbol[hi - 1])))
591                     {
592                       hi--;
593                       continue;
594                     }
595
596                   /* If the minimal symbol has a zero size, save it
597                      but keep scanning backwards looking for one with
598                      a non-zero size.  A zero size may mean that the
599                      symbol isn't an object or function (e.g. a
600                      label), or it may just mean that the size was not
601                      specified.  */
602                   if (MSYMBOL_SIZE (&msymbol[hi]) == 0
603                       && best_zero_sized == -1)
604                     {
605                       best_zero_sized = hi;
606                       hi--;
607                       continue;
608                     }
609
610                   /* If we are past the end of the current symbol, try
611                      the previous symbol if it has a larger overlapping
612                      size.  This happens on i686-pc-linux-gnu with glibc;
613                      the nocancel variants of system calls are inside
614                      the cancellable variants, but both have sizes.  */
615                   if (hi > 0
616                       && MSYMBOL_SIZE (&msymbol[hi]) != 0
617                       && pc >= (SYMBOL_VALUE_ADDRESS (&msymbol[hi])
618                                 + MSYMBOL_SIZE (&msymbol[hi]))
619                       && pc < (SYMBOL_VALUE_ADDRESS (&msymbol[hi - 1])
620                                + MSYMBOL_SIZE (&msymbol[hi - 1])))
621                     {
622                       hi--;
623                       continue;
624                     }
625
626                   /* Otherwise, this symbol must be as good as we're going
627                      to get.  */
628                   break;
629                 }
630
631               /* If HI has a zero size, and best_zero_sized is set,
632                  then we had two or more zero-sized symbols; prefer
633                  the first one we found (which may have a higher
634                  address).  Also, if we ran off the end, be sure
635                  to back up.  */
636               if (best_zero_sized != -1
637                   && (hi < 0 || MSYMBOL_SIZE (&msymbol[hi]) == 0))
638                 hi = best_zero_sized;
639
640               /* If the minimal symbol has a non-zero size, and this
641                  PC appears to be outside the symbol's contents, then
642                  refuse to use this symbol.  If we found a zero-sized
643                  symbol with an address greater than this symbol's,
644                  use that instead.  We assume that if symbols have
645                  specified sizes, they do not overlap.  */
646
647               if (hi >= 0
648                   && MSYMBOL_SIZE (&msymbol[hi]) != 0
649                   && pc >= (SYMBOL_VALUE_ADDRESS (&msymbol[hi])
650                             + MSYMBOL_SIZE (&msymbol[hi])))
651                 {
652                   if (best_zero_sized != -1)
653                     hi = best_zero_sized;
654                   else
655                     /* Go on to the next object file.  */
656                     continue;
657                 }
658
659               /* The minimal symbol indexed by hi now is the best one in this
660                  objfile's minimal symbol table.  See if it is the best one
661                  overall.  */
662
663               if (hi >= 0
664                   && ((best_symbol == NULL) ||
665                       (SYMBOL_VALUE_ADDRESS (best_symbol) <
666                        SYMBOL_VALUE_ADDRESS (&msymbol[hi]))))
667                 {
668                   best_symbol = &msymbol[hi];
669                 }
670             }
671         }
672     }
673   return (best_symbol);
674 }
675
676 struct minimal_symbol *
677 lookup_minimal_symbol_by_pc_section (CORE_ADDR pc, struct obj_section *section)
678 {
679   if (section == NULL)
680     {
681       /* NOTE: cagney/2004-01-27: This was using find_pc_mapped_section to
682          force the section but that (well unless you're doing overlay
683          debugging) always returns NULL making the call somewhat useless.  */
684       section = find_pc_section (pc);
685       if (section == NULL)
686         return NULL;
687     }
688   return lookup_minimal_symbol_by_pc_section_1 (pc, section, 0);
689 }
690
691 /* Backward compatibility: search through the minimal symbol table 
692    for a matching PC (no section given).  */
693
694 struct minimal_symbol *
695 lookup_minimal_symbol_by_pc (CORE_ADDR pc)
696 {
697   return lookup_minimal_symbol_by_pc_section (pc, NULL);
698 }
699
700 /* Find the minimal symbol named NAME, and return both the minsym
701    struct and its objfile.  This only checks the linkage name.  Sets
702    *OBJFILE_P and returns the minimal symbol, if it is found.  If it
703    is not found, returns NULL.  */
704
705 struct minimal_symbol *
706 lookup_minimal_symbol_and_objfile (const char *name,
707                                    struct objfile **objfile_p)
708 {
709   struct objfile *objfile;
710   unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
711
712   ALL_OBJFILES (objfile)
713     {
714       struct minimal_symbol *msym;
715
716       for (msym = objfile->msymbol_hash[hash];
717            msym != NULL;
718            msym = msym->hash_next)
719         {
720           if (strcmp (SYMBOL_LINKAGE_NAME (msym), name) == 0)
721             {
722               *objfile_p = objfile;
723               return msym;
724             }
725         }
726     }
727
728   return 0;
729 }
730 \f
731
732 /* Return leading symbol character for a BFD.  If BFD is NULL,
733    return the leading symbol character from the main objfile.  */
734
735 static int get_symbol_leading_char (bfd *);
736
737 static int
738 get_symbol_leading_char (bfd *abfd)
739 {
740   if (abfd != NULL)
741     return bfd_get_symbol_leading_char (abfd);
742   if (symfile_objfile != NULL && symfile_objfile->obfd != NULL)
743     return bfd_get_symbol_leading_char (symfile_objfile->obfd);
744   return 0;
745 }
746
747 /* Prepare to start collecting minimal symbols.  Note that presetting
748    msym_bunch_index to BUNCH_SIZE causes the first call to save a minimal
749    symbol to allocate the memory for the first bunch.  */
750
751 void
752 init_minimal_symbol_collection (void)
753 {
754   msym_count = 0;
755   msym_bunch = NULL;
756   msym_bunch_index = BUNCH_SIZE;
757 }
758
759 void
760 prim_record_minimal_symbol (const char *name, CORE_ADDR address,
761                             enum minimal_symbol_type ms_type,
762                             struct objfile *objfile)
763 {
764   int section;
765
766   switch (ms_type)
767     {
768     case mst_text:
769     case mst_file_text:
770     case mst_solib_trampoline:
771       section = SECT_OFF_TEXT (objfile);
772       break;
773     case mst_data:
774     case mst_file_data:
775       section = SECT_OFF_DATA (objfile);
776       break;
777     case mst_bss:
778     case mst_file_bss:
779       section = SECT_OFF_BSS (objfile);
780       break;
781     default:
782       section = -1;
783     }
784
785   prim_record_minimal_symbol_and_info (name, address, ms_type,
786                                        section, NULL, objfile);
787 }
788
789 /* Record a minimal symbol in the msym bunches.  Returns the symbol
790    newly created.  */
791
792 struct minimal_symbol *
793 prim_record_minimal_symbol_full (const char *name, int name_len, int copy_name,
794                                  CORE_ADDR address,
795                                  enum minimal_symbol_type ms_type,
796                                  int section,
797                                  asection *bfd_section,
798                                  struct objfile *objfile)
799 {
800   struct obj_section *obj_section;
801   struct msym_bunch *new;
802   struct minimal_symbol *msymbol;
803
804   /* Don't put gcc_compiled, __gnu_compiled_cplus, and friends into
805      the minimal symbols, because if there is also another symbol
806      at the same address (e.g. the first function of the file),
807      lookup_minimal_symbol_by_pc would have no way of getting the
808      right one.  */
809   if (ms_type == mst_file_text && name[0] == 'g'
810       && (strcmp (name, GCC_COMPILED_FLAG_SYMBOL) == 0
811           || strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0))
812     return (NULL);
813
814   /* It's safe to strip the leading char here once, since the name
815      is also stored stripped in the minimal symbol table.  */
816   if (name[0] == get_symbol_leading_char (objfile->obfd))
817     {
818       ++name;
819       --name_len;
820     }
821
822   if (ms_type == mst_file_text && strncmp (name, "__gnu_compiled", 14) == 0)
823     return (NULL);
824
825   if (msym_bunch_index == BUNCH_SIZE)
826     {
827       new = XCALLOC (1, struct msym_bunch);
828       msym_bunch_index = 0;
829       new->next = msym_bunch;
830       msym_bunch = new;
831     }
832   msymbol = &msym_bunch->contents[msym_bunch_index];
833   SYMBOL_SET_LANGUAGE (msymbol, language_auto);
834   SYMBOL_SET_NAMES (msymbol, name, name_len, copy_name, objfile);
835
836   SYMBOL_VALUE_ADDRESS (msymbol) = address;
837   SYMBOL_SECTION (msymbol) = section;
838   SYMBOL_OBJ_SECTION (msymbol) = NULL;
839
840   /* Find obj_section corresponding to bfd_section.  */
841   if (bfd_section)
842     ALL_OBJFILE_OSECTIONS (objfile, obj_section)
843       {
844         if (obj_section->the_bfd_section == bfd_section)
845           {
846             SYMBOL_OBJ_SECTION (msymbol) = obj_section;
847             break;
848           }
849       }
850
851   MSYMBOL_TYPE (msymbol) = ms_type;
852   MSYMBOL_TARGET_FLAG_1 (msymbol) = 0;
853   MSYMBOL_TARGET_FLAG_2 (msymbol) = 0;
854   MSYMBOL_SIZE (msymbol) = 0;
855
856   /* The hash pointers must be cleared! If they're not,
857      add_minsym_to_hash_table will NOT add this msymbol to the hash table.  */
858   msymbol->hash_next = NULL;
859   msymbol->demangled_hash_next = NULL;
860
861   msym_bunch_index++;
862   msym_count++;
863   OBJSTAT (objfile, n_minsyms++);
864   return msymbol;
865 }
866
867 /* Record a minimal symbol in the msym bunches.  Returns the symbol
868    newly created.  */
869
870 struct minimal_symbol *
871 prim_record_minimal_symbol_and_info (const char *name, CORE_ADDR address,
872                                      enum minimal_symbol_type ms_type,
873                                      int section,
874                                      asection *bfd_section,
875                                      struct objfile *objfile)
876 {
877   return prim_record_minimal_symbol_full (name, strlen (name), 1,
878                                           address, ms_type, section,
879                                           bfd_section, objfile);
880 }
881
882 /* Compare two minimal symbols by address and return a signed result based
883    on unsigned comparisons, so that we sort into unsigned numeric order.
884    Within groups with the same address, sort by name.  */
885
886 static int
887 compare_minimal_symbols (const void *fn1p, const void *fn2p)
888 {
889   const struct minimal_symbol *fn1;
890   const struct minimal_symbol *fn2;
891
892   fn1 = (const struct minimal_symbol *) fn1p;
893   fn2 = (const struct minimal_symbol *) fn2p;
894
895   if (SYMBOL_VALUE_ADDRESS (fn1) < SYMBOL_VALUE_ADDRESS (fn2))
896     {
897       return (-1);              /* addr 1 is less than addr 2.  */
898     }
899   else if (SYMBOL_VALUE_ADDRESS (fn1) > SYMBOL_VALUE_ADDRESS (fn2))
900     {
901       return (1);               /* addr 1 is greater than addr 2.  */
902     }
903   else
904     /* addrs are equal: sort by name */
905     {
906       char *name1 = SYMBOL_LINKAGE_NAME (fn1);
907       char *name2 = SYMBOL_LINKAGE_NAME (fn2);
908
909       if (name1 && name2)       /* both have names */
910         return strcmp (name1, name2);
911       else if (name2)
912         return 1;               /* fn1 has no name, so it is "less".  */
913       else if (name1)           /* fn2 has no name, so it is "less".  */
914         return -1;
915       else
916         return (0);             /* Neither has a name, so they're equal.  */
917     }
918 }
919
920 /* Discard the currently collected minimal symbols, if any.  If we wish
921    to save them for later use, we must have already copied them somewhere
922    else before calling this function.
923
924    FIXME:  We could allocate the minimal symbol bunches on their own
925    obstack and then simply blow the obstack away when we are done with
926    it.  Is it worth the extra trouble though?  */
927
928 static void
929 do_discard_minimal_symbols_cleanup (void *arg)
930 {
931   struct msym_bunch *next;
932
933   while (msym_bunch != NULL)
934     {
935       next = msym_bunch->next;
936       xfree (msym_bunch);
937       msym_bunch = next;
938     }
939 }
940
941 struct cleanup *
942 make_cleanup_discard_minimal_symbols (void)
943 {
944   return make_cleanup (do_discard_minimal_symbols_cleanup, 0);
945 }
946
947
948
949 /* Compact duplicate entries out of a minimal symbol table by walking
950    through the table and compacting out entries with duplicate addresses
951    and matching names.  Return the number of entries remaining.
952
953    On entry, the table resides between msymbol[0] and msymbol[mcount].
954    On exit, it resides between msymbol[0] and msymbol[result_count].
955
956    When files contain multiple sources of symbol information, it is
957    possible for the minimal symbol table to contain many duplicate entries.
958    As an example, SVR4 systems use ELF formatted object files, which
959    usually contain at least two different types of symbol tables (a
960    standard ELF one and a smaller dynamic linking table), as well as
961    DWARF debugging information for files compiled with -g.
962
963    Without compacting, the minimal symbol table for gdb itself contains
964    over a 1000 duplicates, about a third of the total table size.  Aside
965    from the potential trap of not noticing that two successive entries
966    identify the same location, this duplication impacts the time required
967    to linearly scan the table, which is done in a number of places.  So we
968    just do one linear scan here and toss out the duplicates.
969
970    Note that we are not concerned here about recovering the space that
971    is potentially freed up, because the strings themselves are allocated
972    on the objfile_obstack, and will get automatically freed when the symbol
973    table is freed.  The caller can free up the unused minimal symbols at
974    the end of the compacted region if their allocation strategy allows it.
975
976    Also note we only go up to the next to last entry within the loop
977    and then copy the last entry explicitly after the loop terminates.
978
979    Since the different sources of information for each symbol may
980    have different levels of "completeness", we may have duplicates
981    that have one entry with type "mst_unknown" and the other with a
982    known type.  So if the one we are leaving alone has type mst_unknown,
983    overwrite its type with the type from the one we are compacting out.  */
984
985 static int
986 compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount,
987                          struct objfile *objfile)
988 {
989   struct minimal_symbol *copyfrom;
990   struct minimal_symbol *copyto;
991
992   if (mcount > 0)
993     {
994       copyfrom = copyto = msymbol;
995       while (copyfrom < msymbol + mcount - 1)
996         {
997           if (SYMBOL_VALUE_ADDRESS (copyfrom)
998               == SYMBOL_VALUE_ADDRESS ((copyfrom + 1))
999               && strcmp (SYMBOL_LINKAGE_NAME (copyfrom),
1000                          SYMBOL_LINKAGE_NAME ((copyfrom + 1))) == 0)
1001             {
1002               if (MSYMBOL_TYPE ((copyfrom + 1)) == mst_unknown)
1003                 {
1004                   MSYMBOL_TYPE ((copyfrom + 1)) = MSYMBOL_TYPE (copyfrom);
1005                 }
1006               copyfrom++;
1007             }
1008           else
1009             *copyto++ = *copyfrom++;
1010         }
1011       *copyto++ = *copyfrom++;
1012       mcount = copyto - msymbol;
1013     }
1014   return (mcount);
1015 }
1016
1017 /* Build (or rebuild) the minimal symbol hash tables.  This is necessary
1018    after compacting or sorting the table since the entries move around
1019    thus causing the internal minimal_symbol pointers to become jumbled.  */
1020   
1021 static void
1022 build_minimal_symbol_hash_tables (struct objfile *objfile)
1023 {
1024   int i;
1025   struct minimal_symbol *msym;
1026
1027   /* Clear the hash tables.  */
1028   for (i = 0; i < MINIMAL_SYMBOL_HASH_SIZE; i++)
1029     {
1030       objfile->msymbol_hash[i] = 0;
1031       objfile->msymbol_demangled_hash[i] = 0;
1032     }
1033
1034   /* Now, (re)insert the actual entries.  */
1035   for (i = objfile->minimal_symbol_count, msym = objfile->msymbols;
1036        i > 0;
1037        i--, msym++)
1038     {
1039       msym->hash_next = 0;
1040       add_minsym_to_hash_table (msym, objfile->msymbol_hash);
1041
1042       msym->demangled_hash_next = 0;
1043       if (SYMBOL_SEARCH_NAME (msym) != SYMBOL_LINKAGE_NAME (msym))
1044         add_minsym_to_demangled_hash_table (msym,
1045                                             objfile->msymbol_demangled_hash);
1046     }
1047 }
1048
1049 /* Add the minimal symbols in the existing bunches to the objfile's official
1050    minimal symbol table.  In most cases there is no minimal symbol table yet
1051    for this objfile, and the existing bunches are used to create one.  Once
1052    in a while (for shared libraries for example), we add symbols (e.g. common
1053    symbols) to an existing objfile.
1054
1055    Because of the way minimal symbols are collected, we generally have no way
1056    of knowing what source language applies to any particular minimal symbol.
1057    Specifically, we have no way of knowing if the minimal symbol comes from a
1058    C++ compilation unit or not.  So for the sake of supporting cached
1059    demangled C++ names, we have no choice but to try and demangle each new one
1060    that comes in.  If the demangling succeeds, then we assume it is a C++
1061    symbol and set the symbol's language and demangled name fields
1062    appropriately.  Note that in order to avoid unnecessary demanglings, and
1063    allocating obstack space that subsequently can't be freed for the demangled
1064    names, we mark all newly added symbols with language_auto.  After
1065    compaction of the minimal symbols, we go back and scan the entire minimal
1066    symbol table looking for these new symbols.  For each new symbol we attempt
1067    to demangle it, and if successful, record it as a language_cplus symbol
1068    and cache the demangled form on the symbol obstack.  Symbols which don't
1069    demangle are marked as language_unknown symbols, which inhibits future
1070    attempts to demangle them if we later add more minimal symbols.  */
1071
1072 void
1073 install_minimal_symbols (struct objfile *objfile)
1074 {
1075   int bindex;
1076   int mcount;
1077   struct msym_bunch *bunch;
1078   struct minimal_symbol *msymbols;
1079   int alloc_count;
1080
1081   if (msym_count > 0)
1082     {
1083       /* Allocate enough space in the obstack, into which we will gather the
1084          bunches of new and existing minimal symbols, sort them, and then
1085          compact out the duplicate entries.  Once we have a final table,
1086          we will give back the excess space.  */
1087
1088       alloc_count = msym_count + objfile->minimal_symbol_count + 1;
1089       obstack_blank (&objfile->objfile_obstack,
1090                      alloc_count * sizeof (struct minimal_symbol));
1091       msymbols = (struct minimal_symbol *)
1092         obstack_base (&objfile->objfile_obstack);
1093
1094       /* Copy in the existing minimal symbols, if there are any.  */
1095
1096       if (objfile->minimal_symbol_count)
1097         memcpy ((char *) msymbols, (char *) objfile->msymbols,
1098             objfile->minimal_symbol_count * sizeof (struct minimal_symbol));
1099
1100       /* Walk through the list of minimal symbol bunches, adding each symbol
1101          to the new contiguous array of symbols.  Note that we start with the
1102          current, possibly partially filled bunch (thus we use the current
1103          msym_bunch_index for the first bunch we copy over), and thereafter
1104          each bunch is full.  */
1105
1106       mcount = objfile->minimal_symbol_count;
1107
1108       for (bunch = msym_bunch; bunch != NULL; bunch = bunch->next)
1109         {
1110           for (bindex = 0; bindex < msym_bunch_index; bindex++, mcount++)
1111             msymbols[mcount] = bunch->contents[bindex];
1112           msym_bunch_index = BUNCH_SIZE;
1113         }
1114
1115       /* Sort the minimal symbols by address.  */
1116
1117       qsort (msymbols, mcount, sizeof (struct minimal_symbol),
1118              compare_minimal_symbols);
1119
1120       /* Compact out any duplicates, and free up whatever space we are
1121          no longer using.  */
1122
1123       mcount = compact_minimal_symbols (msymbols, mcount, objfile);
1124
1125       obstack_blank (&objfile->objfile_obstack,
1126                (mcount + 1 - alloc_count) * sizeof (struct minimal_symbol));
1127       msymbols = (struct minimal_symbol *)
1128         obstack_finish (&objfile->objfile_obstack);
1129
1130       /* We also terminate the minimal symbol table with a "null symbol",
1131          which is *not* included in the size of the table.  This makes it
1132          easier to find the end of the table when we are handed a pointer
1133          to some symbol in the middle of it.  Zero out the fields in the
1134          "null symbol" allocated at the end of the array.  Note that the
1135          symbol count does *not* include this null symbol, which is why it
1136          is indexed by mcount and not mcount-1.  */
1137
1138       SYMBOL_LINKAGE_NAME (&msymbols[mcount]) = NULL;
1139       SYMBOL_VALUE_ADDRESS (&msymbols[mcount]) = 0;
1140       MSYMBOL_TARGET_FLAG_1 (&msymbols[mcount]) = 0;
1141       MSYMBOL_TARGET_FLAG_2 (&msymbols[mcount]) = 0;
1142       MSYMBOL_SIZE (&msymbols[mcount]) = 0;
1143       MSYMBOL_TYPE (&msymbols[mcount]) = mst_unknown;
1144       SYMBOL_SET_LANGUAGE (&msymbols[mcount], language_unknown);
1145
1146       /* Attach the minimal symbol table to the specified objfile.
1147          The strings themselves are also located in the objfile_obstack
1148          of this objfile.  */
1149
1150       objfile->minimal_symbol_count = mcount;
1151       objfile->msymbols = msymbols;
1152
1153       /* Try to guess the appropriate C++ ABI by looking at the names 
1154          of the minimal symbols in the table.  */
1155       {
1156         int i;
1157
1158         for (i = 0; i < mcount; i++)
1159           {
1160             /* If a symbol's name starts with _Z and was successfully
1161                demangled, then we can assume we've found a GNU v3 symbol.
1162                For now we set the C++ ABI globally; if the user is
1163                mixing ABIs then the user will need to "set cp-abi"
1164                manually.  */
1165             const char *name = SYMBOL_LINKAGE_NAME (&objfile->msymbols[i]);
1166
1167             if (name[0] == '_' && name[1] == 'Z'
1168                 && SYMBOL_DEMANGLED_NAME (&objfile->msymbols[i]) != NULL)
1169               {
1170                 set_cp_abi_as_auto_default ("gnu-v3");
1171                 break;
1172               }
1173           }
1174       }
1175
1176       /* Now build the hash tables; we can't do this incrementally
1177          at an earlier point since we weren't finished with the obstack
1178          yet.  (And if the msymbol obstack gets moved, all the internal
1179          pointers to other msymbols need to be adjusted.)  */
1180       build_minimal_symbol_hash_tables (objfile);
1181     }
1182 }
1183
1184 /* Sort all the minimal symbols in OBJFILE.  */
1185
1186 void
1187 msymbols_sort (struct objfile *objfile)
1188 {
1189   qsort (objfile->msymbols, objfile->minimal_symbol_count,
1190          sizeof (struct minimal_symbol), compare_minimal_symbols);
1191   build_minimal_symbol_hash_tables (objfile);
1192 }
1193
1194 /* Check if PC is in a shared library trampoline code stub.
1195    Return minimal symbol for the trampoline entry or NULL if PC is not
1196    in a trampoline code stub.  */
1197
1198 struct minimal_symbol *
1199 lookup_solib_trampoline_symbol_by_pc (CORE_ADDR pc)
1200 {
1201   struct obj_section *section = find_pc_section (pc);
1202   struct minimal_symbol *msymbol;
1203
1204   if (section == NULL)
1205     return NULL;
1206   msymbol = lookup_minimal_symbol_by_pc_section_1 (pc, section, 1);
1207
1208   if (msymbol != NULL && MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
1209     return msymbol;
1210   return NULL;
1211 }
1212
1213 /* If PC is in a shared library trampoline code stub, return the
1214    address of the `real' function belonging to the stub.
1215    Return 0 if PC is not in a trampoline code stub or if the real
1216    function is not found in the minimal symbol table.
1217
1218    We may fail to find the right function if a function with the
1219    same name is defined in more than one shared library, but this
1220    is considered bad programming style.  We could return 0 if we find
1221    a duplicate function in case this matters someday.  */
1222
1223 CORE_ADDR
1224 find_solib_trampoline_target (struct frame_info *frame, CORE_ADDR pc)
1225 {
1226   struct objfile *objfile;
1227   struct minimal_symbol *msymbol;
1228   struct minimal_symbol *tsymbol = lookup_solib_trampoline_symbol_by_pc (pc);
1229
1230   if (tsymbol != NULL)
1231     {
1232       ALL_MSYMBOLS (objfile, msymbol)
1233       {
1234         if (MSYMBOL_TYPE (msymbol) == mst_text
1235             && strcmp (SYMBOL_LINKAGE_NAME (msymbol),
1236                        SYMBOL_LINKAGE_NAME (tsymbol)) == 0)
1237           return SYMBOL_VALUE_ADDRESS (msymbol);
1238
1239         /* Also handle minimal symbols pointing to function descriptors.  */
1240         if (MSYMBOL_TYPE (msymbol) == mst_data
1241             && strcmp (SYMBOL_LINKAGE_NAME (msymbol),
1242                        SYMBOL_LINKAGE_NAME (tsymbol)) == 0)
1243           {
1244             CORE_ADDR func;
1245
1246             func = gdbarch_convert_from_func_ptr_addr
1247                     (get_objfile_arch (objfile),
1248                      SYMBOL_VALUE_ADDRESS (msymbol),
1249                      &current_target);
1250
1251             /* Ignore data symbols that are not function descriptors.  */
1252             if (func != SYMBOL_VALUE_ADDRESS (msymbol))
1253               return func;
1254           }
1255       }
1256     }
1257   return 0;
1258 }