* hppa-tdep.h (hppa_regnum): Add HPPA_R31_REGNUM.
[platform/upstream/binutils.git] / gdb / objfiles.c
1 /* GDB routines for manipulating objfiles.
2
3    Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4    2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5
6    Contributed by Cygnus Support, using pieces from other GDB modules.
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 2 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 59 Temple Place - Suite 330,
23    Boston, MA 02111-1307, USA.  */
24
25 /* This file contains support routines for creating, manipulating, and
26    destroying objfile structures. */
27
28 #include "defs.h"
29 #include "bfd.h"                /* Binary File Description */
30 #include "symtab.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "gdb-stabs.h"
34 #include "target.h"
35 #include "bcache.h"
36
37 #include "gdb_assert.h"
38 #include <sys/types.h>
39 #include "gdb_stat.h"
40 #include <fcntl.h>
41 #include "gdb_obstack.h"
42 #include "gdb_string.h"
43 #include "hashtab.h"
44
45 #include "breakpoint.h"
46 #include "block.h"
47 #include "dictionary.h"
48
49 /* Prototypes for local functions */
50
51 static void objfile_alloc_data (struct objfile *objfile);
52 static void objfile_free_data (struct objfile *objfile);
53
54 /* Externally visible variables that are owned by this module.
55    See declarations in objfile.h for more info. */
56
57 struct objfile *object_files;   /* Linked list of all objfiles */
58 struct objfile *current_objfile;        /* For symbol file being read in */
59 struct objfile *symfile_objfile;        /* Main symbol table loaded from */
60 struct objfile *rt_common_objfile;      /* For runtime common symbols */
61
62 /* Locate all mappable sections of a BFD file. 
63    objfile_p_char is a char * to get it through
64    bfd_map_over_sections; we cast it back to its proper type.  */
65
66 #ifndef TARGET_KEEP_SECTION
67 #define TARGET_KEEP_SECTION(ASECT)      0
68 #endif
69
70 /* Called via bfd_map_over_sections to build up the section table that
71    the objfile references.  The objfile contains pointers to the start
72    of the table (objfile->sections) and to the first location after
73    the end of the table (objfile->sections_end). */
74
75 static void
76 add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
77                          void *objfile_p_char)
78 {
79   struct objfile *objfile = (struct objfile *) objfile_p_char;
80   struct obj_section section;
81   flagword aflag;
82
83   aflag = bfd_get_section_flags (abfd, asect);
84
85   if (!(aflag & SEC_ALLOC) && !(TARGET_KEEP_SECTION (asect)))
86     return;
87
88   if (0 == bfd_section_size (abfd, asect))
89     return;
90   section.offset = 0;
91   section.objfile = objfile;
92   section.the_bfd_section = asect;
93   section.ovly_mapped = 0;
94   section.addr = bfd_section_vma (abfd, asect);
95   section.endaddr = section.addr + bfd_section_size (abfd, asect);
96   obstack_grow (&objfile->objfile_obstack, (char *) &section, sizeof (section));
97   objfile->sections_end = (struct obj_section *) (((unsigned long) objfile->sections_end) + 1);
98 }
99
100 /* Builds a section table for OBJFILE.
101    Returns 0 if OK, 1 on error (in which case bfd_error contains the
102    error).
103
104    Note that while we are building the table, which goes into the
105    psymbol obstack, we hijack the sections_end pointer to instead hold
106    a count of the number of sections.  When bfd_map_over_sections
107    returns, this count is used to compute the pointer to the end of
108    the sections table, which then overwrites the count.
109
110    Also note that the OFFSET and OVLY_MAPPED in each table entry
111    are initialized to zero.
112
113    Also note that if anything else writes to the psymbol obstack while
114    we are building the table, we're pretty much hosed. */
115
116 int
117 build_objfile_section_table (struct objfile *objfile)
118 {
119   /* objfile->sections can be already set when reading a mapped symbol
120      file.  I believe that we do need to rebuild the section table in
121      this case (we rebuild other things derived from the bfd), but we
122      can't free the old one (it's in the objfile_obstack).  So we just
123      waste some memory.  */
124
125   objfile->sections_end = 0;
126   bfd_map_over_sections (objfile->obfd, add_to_objfile_sections, (char *) objfile);
127   objfile->sections = (struct obj_section *)
128     obstack_finish (&objfile->objfile_obstack);
129   objfile->sections_end = objfile->sections + (unsigned long) objfile->sections_end;
130   return (0);
131 }
132
133 /* Given a pointer to an initialized bfd (ABFD) and some flag bits
134    allocate a new objfile struct, fill it in as best we can, link it
135    into the list of all known objfiles, and return a pointer to the
136    new objfile struct.
137
138    The FLAGS word contains various bits (OBJF_*) that can be taken as
139    requests for specific operations.  Other bits like OBJF_SHARED are
140    simply copied through to the new objfile flags member. */
141
142 /* NOTE: carlton/2003-02-04: This function is called with args NULL, 0
143    by jv-lang.c, to create an artificial objfile used to hold
144    information about dynamically-loaded Java classes.  Unfortunately,
145    that branch of this function doesn't get tested very frequently, so
146    it's prone to breakage.  (E.g. at one time the name was set to NULL
147    in that situation, which broke a loop over all names in the dynamic
148    library loader.)  If you change this function, please try to leave
149    things in a consistent state even if abfd is NULL.  */
150
151 struct objfile *
152 allocate_objfile (bfd *abfd, int flags)
153 {
154   struct objfile *objfile = NULL;
155   struct objfile *last_one = NULL;
156
157   /* If we don't support mapped symbol files, didn't ask for the file to be
158      mapped, or failed to open the mapped file for some reason, then revert
159      back to an unmapped objfile. */
160
161   if (objfile == NULL)
162     {
163       objfile = (struct objfile *) xmalloc (sizeof (struct objfile));
164       memset (objfile, 0, sizeof (struct objfile));
165       objfile->md = NULL;
166       objfile->psymbol_cache = bcache_xmalloc ();
167       objfile->macro_cache = bcache_xmalloc ();
168       /* We could use obstack_specify_allocation here instead, but
169          gdb_obstack.h specifies the alloc/dealloc functions.  */
170       obstack_init (&objfile->objfile_obstack);
171       terminate_minimal_symbol_table (objfile);
172     }
173
174   objfile_alloc_data (objfile);
175
176   /* Update the per-objfile information that comes from the bfd, ensuring
177      that any data that is reference is saved in the per-objfile data
178      region. */
179
180   objfile->obfd = abfd;
181   if (objfile->name != NULL)
182     {
183       xmfree (objfile->md, objfile->name);
184     }
185   if (abfd != NULL)
186     {
187       objfile->name = mstrsave (objfile->md, bfd_get_filename (abfd));
188       objfile->mtime = bfd_get_mtime (abfd);
189
190       /* Build section table.  */
191
192       if (build_objfile_section_table (objfile))
193         {
194           error ("Can't find the file sections in `%s': %s",
195                  objfile->name, bfd_errmsg (bfd_get_error ()));
196         }
197     }
198   else
199     {
200       objfile->name = mstrsave (objfile->md, "<<anonymous objfile>>");
201     }
202
203   /* Initialize the section indexes for this objfile, so that we can
204      later detect if they are used w/o being properly assigned to. */
205
206   objfile->sect_index_text = -1;
207   objfile->sect_index_data = -1;
208   objfile->sect_index_bss = -1;
209   objfile->sect_index_rodata = -1;
210
211   /* We don't yet have a C++-specific namespace symtab.  */
212
213   objfile->cp_namespace_symtab = NULL;
214
215   /* Add this file onto the tail of the linked list of other such files. */
216
217   objfile->next = NULL;
218   if (object_files == NULL)
219     object_files = objfile;
220   else
221     {
222       for (last_one = object_files;
223            last_one->next;
224            last_one = last_one->next);
225       last_one->next = objfile;
226     }
227
228   /* Save passed in flag bits. */
229   objfile->flags |= flags;
230
231   return (objfile);
232 }
233
234 /* Initialize entry point information for this objfile. */
235
236 void
237 init_entry_point_info (struct objfile *objfile)
238 {
239   /* Save startup file's range of PC addresses to help blockframe.c
240      decide where the bottom of the stack is.  */
241
242   if (bfd_get_file_flags (objfile->obfd) & EXEC_P)
243     {
244       /* Executable file -- record its entry point so we'll recognize
245          the startup file because it contains the entry point.  */
246       objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
247     }
248   else
249     {
250       /* Examination of non-executable.o files.  Short-circuit this stuff.  */
251       objfile->ei.entry_point = INVALID_ENTRY_POINT;
252     }
253   objfile->ei.entry_func_lowpc = INVALID_ENTRY_LOWPC;
254   objfile->ei.entry_func_highpc = INVALID_ENTRY_HIGHPC;
255   objfile->ei.main_func_lowpc = INVALID_ENTRY_LOWPC;
256   objfile->ei.main_func_highpc = INVALID_ENTRY_HIGHPC;
257 }
258
259 /* Get current entry point address.  */
260
261 CORE_ADDR
262 entry_point_address (void)
263 {
264   return symfile_objfile ? symfile_objfile->ei.entry_point : 0;
265 }
266
267 /* Create the terminating entry of OBJFILE's minimal symbol table.
268    If OBJFILE->msymbols is zero, allocate a single entry from
269    OBJFILE->objfile_obstack; otherwise, just initialize
270    OBJFILE->msymbols[OBJFILE->minimal_symbol_count].  */
271 void
272 terminate_minimal_symbol_table (struct objfile *objfile)
273 {
274   if (! objfile->msymbols)
275     objfile->msymbols = ((struct minimal_symbol *)
276                          obstack_alloc (&objfile->objfile_obstack,
277                                         sizeof (objfile->msymbols[0])));
278
279   {
280     struct minimal_symbol *m
281       = &objfile->msymbols[objfile->minimal_symbol_count];
282
283     memset (m, 0, sizeof (*m));
284     /* Don't rely on these enumeration values being 0's.  */
285     MSYMBOL_TYPE (m) = mst_unknown;
286     SYMBOL_INIT_LANGUAGE_SPECIFIC (m, language_unknown);
287   }
288 }
289
290
291 /* Put one object file before a specified on in the global list.
292    This can be used to make sure an object file is destroyed before
293    another when using ALL_OBJFILES_SAFE to free all objfiles. */
294 void
295 put_objfile_before (struct objfile *objfile, struct objfile *before_this)
296 {
297   struct objfile **objp;
298
299   unlink_objfile (objfile);
300   
301   for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
302     {
303       if (*objp == before_this)
304         {
305           objfile->next = *objp;
306           *objp = objfile;
307           return;
308         }
309     }
310   
311   internal_error (__FILE__, __LINE__,
312                   "put_objfile_before: before objfile not in list");
313 }
314
315 /* Put OBJFILE at the front of the list.  */
316
317 void
318 objfile_to_front (struct objfile *objfile)
319 {
320   struct objfile **objp;
321   for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
322     {
323       if (*objp == objfile)
324         {
325           /* Unhook it from where it is.  */
326           *objp = objfile->next;
327           /* Put it in the front.  */
328           objfile->next = object_files;
329           object_files = objfile;
330           break;
331         }
332     }
333 }
334
335 /* Unlink OBJFILE from the list of known objfiles, if it is found in the
336    list.
337
338    It is not a bug, or error, to call this function if OBJFILE is not known
339    to be in the current list.  This is done in the case of mapped objfiles,
340    for example, just to ensure that the mapped objfile doesn't appear twice
341    in the list.  Since the list is threaded, linking in a mapped objfile
342    twice would create a circular list.
343
344    If OBJFILE turns out to be in the list, we zap it's NEXT pointer after
345    unlinking it, just to ensure that we have completely severed any linkages
346    between the OBJFILE and the list. */
347
348 void
349 unlink_objfile (struct objfile *objfile)
350 {
351   struct objfile **objpp;
352
353   for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
354     {
355       if (*objpp == objfile)
356         {
357           *objpp = (*objpp)->next;
358           objfile->next = NULL;
359           return;
360         }
361     }
362
363   internal_error (__FILE__, __LINE__,
364                   "unlink_objfile: objfile already unlinked");
365 }
366
367
368 /* Destroy an objfile and all the symtabs and psymtabs under it.  Note
369    that as much as possible is allocated on the objfile_obstack 
370    so that the memory can be efficiently freed.
371
372    Things which we do NOT free because they are not in malloc'd memory
373    or not in memory specific to the objfile include:
374
375    objfile -> sf
376
377    FIXME:  If the objfile is using reusable symbol information (via mmalloc),
378    then we need to take into account the fact that more than one process
379    may be using the symbol information at the same time (when mmalloc is
380    extended to support cooperative locking).  When more than one process
381    is using the mapped symbol info, we need to be more careful about when
382    we free objects in the reusable area. */
383
384 void
385 free_objfile (struct objfile *objfile)
386 {
387   if (objfile->separate_debug_objfile)
388     {
389       free_objfile (objfile->separate_debug_objfile);
390     }
391   
392   if (objfile->separate_debug_objfile_backlink)
393     {
394       /* We freed the separate debug file, make sure the base objfile
395          doesn't reference it.  */
396       objfile->separate_debug_objfile_backlink->separate_debug_objfile = NULL;
397     }
398   
399   /* First do any symbol file specific actions required when we are
400      finished with a particular symbol file.  Note that if the objfile
401      is using reusable symbol information (via mmalloc) then each of
402      these routines is responsible for doing the correct thing, either
403      freeing things which are valid only during this particular gdb
404      execution, or leaving them to be reused during the next one. */
405
406   if (objfile->sf != NULL)
407     {
408       (*objfile->sf->sym_finish) (objfile);
409     }
410
411   /* We always close the bfd. */
412
413   if (objfile->obfd != NULL)
414     {
415       char *name = bfd_get_filename (objfile->obfd);
416       if (!bfd_close (objfile->obfd))
417         warning ("cannot close \"%s\": %s",
418                  name, bfd_errmsg (bfd_get_error ()));
419       xfree (name);
420     }
421
422   /* Remove it from the chain of all objfiles. */
423
424   unlink_objfile (objfile);
425
426   /* If we are going to free the runtime common objfile, mark it
427      as unallocated.  */
428
429   if (objfile == rt_common_objfile)
430     rt_common_objfile = NULL;
431
432   /* Before the symbol table code was redone to make it easier to
433      selectively load and remove information particular to a specific
434      linkage unit, gdb used to do these things whenever the monolithic
435      symbol table was blown away.  How much still needs to be done
436      is unknown, but we play it safe for now and keep each action until
437      it is shown to be no longer needed. */
438
439   /* I *think* all our callers call clear_symtab_users.  If so, no need
440      to call this here.  */
441   clear_pc_function_cache ();
442
443   /* The last thing we do is free the objfile struct itself. */
444
445   objfile_free_data (objfile);
446   if (objfile->name != NULL)
447     {
448       xmfree (objfile->md, objfile->name);
449     }
450   if (objfile->global_psymbols.list)
451     xmfree (objfile->md, objfile->global_psymbols.list);
452   if (objfile->static_psymbols.list)
453     xmfree (objfile->md, objfile->static_psymbols.list);
454   /* Free the obstacks for non-reusable objfiles */
455   bcache_xfree (objfile->psymbol_cache);
456   bcache_xfree (objfile->macro_cache);
457   if (objfile->demangled_names_hash)
458     htab_delete (objfile->demangled_names_hash);
459   obstack_free (&objfile->objfile_obstack, 0);
460   xmfree (objfile->md, objfile);
461   objfile = NULL;
462 }
463
464 static void
465 do_free_objfile_cleanup (void *obj)
466 {
467   free_objfile (obj);
468 }
469
470 struct cleanup *
471 make_cleanup_free_objfile (struct objfile *obj)
472 {
473   return make_cleanup (do_free_objfile_cleanup, obj);
474 }
475
476 /* Free all the object files at once and clean up their users.  */
477
478 void
479 free_all_objfiles (void)
480 {
481   struct objfile *objfile, *temp;
482
483   ALL_OBJFILES_SAFE (objfile, temp)
484   {
485     free_objfile (objfile);
486   }
487   clear_symtab_users ();
488 }
489 \f
490 /* Relocate OBJFILE to NEW_OFFSETS.  There should be OBJFILE->NUM_SECTIONS
491    entries in new_offsets.  */
492 void
493 objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
494 {
495   struct section_offsets *delta =
496     ((struct section_offsets *) 
497      alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)));
498
499   {
500     int i;
501     int something_changed = 0;
502     for (i = 0; i < objfile->num_sections; ++i)
503       {
504         delta->offsets[i] =
505           ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
506         if (ANOFFSET (delta, i) != 0)
507           something_changed = 1;
508       }
509     if (!something_changed)
510       return;
511   }
512
513   /* OK, get all the symtabs.  */
514   {
515     struct symtab *s;
516
517     ALL_OBJFILE_SYMTABS (objfile, s)
518     {
519       struct linetable *l;
520       struct blockvector *bv;
521       int i;
522
523       /* First the line table.  */
524       l = LINETABLE (s);
525       if (l)
526         {
527           for (i = 0; i < l->nitems; ++i)
528             l->item[i].pc += ANOFFSET (delta, s->block_line_section);
529         }
530
531       /* Don't relocate a shared blockvector more than once.  */
532       if (!s->primary)
533         continue;
534
535       bv = BLOCKVECTOR (s);
536       for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
537         {
538           struct block *b;
539           struct symbol *sym;
540           struct dict_iterator iter;
541
542           b = BLOCKVECTOR_BLOCK (bv, i);
543           BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
544           BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
545
546           ALL_BLOCK_SYMBOLS (b, iter, sym)
547             {
548               fixup_symbol_section (sym, objfile);
549
550               /* The RS6000 code from which this was taken skipped
551                  any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
552                  But I'm leaving out that test, on the theory that
553                  they can't possibly pass the tests below.  */
554               if ((SYMBOL_CLASS (sym) == LOC_LABEL
555                    || SYMBOL_CLASS (sym) == LOC_STATIC
556                    || SYMBOL_CLASS (sym) == LOC_INDIRECT)
557                   && SYMBOL_SECTION (sym) >= 0)
558                 {
559                   SYMBOL_VALUE_ADDRESS (sym) +=
560                     ANOFFSET (delta, SYMBOL_SECTION (sym));
561                 }
562 #ifdef MIPS_EFI_SYMBOL_NAME
563               /* Relocate Extra Function Info for ecoff.  */
564
565               else if (SYMBOL_CLASS (sym) == LOC_CONST
566                        && SYMBOL_DOMAIN (sym) == LABEL_DOMAIN
567                        && strcmp (DEPRECATED_SYMBOL_NAME (sym), MIPS_EFI_SYMBOL_NAME) == 0)
568                 ecoff_relocate_efi (sym, ANOFFSET (delta,
569                                                    s->block_line_section));
570 #endif
571             }
572         }
573     }
574   }
575
576   {
577     struct partial_symtab *p;
578
579     ALL_OBJFILE_PSYMTABS (objfile, p)
580     {
581       p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
582       p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
583     }
584   }
585
586   {
587     struct partial_symbol **psym;
588
589     for (psym = objfile->global_psymbols.list;
590          psym < objfile->global_psymbols.next;
591          psym++)
592       {
593         fixup_psymbol_section (*psym, objfile);
594         if (SYMBOL_SECTION (*psym) >= 0)
595           SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
596                                                     SYMBOL_SECTION (*psym));
597       }
598     for (psym = objfile->static_psymbols.list;
599          psym < objfile->static_psymbols.next;
600          psym++)
601       {
602         fixup_psymbol_section (*psym, objfile);
603         if (SYMBOL_SECTION (*psym) >= 0)
604           SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
605                                                     SYMBOL_SECTION (*psym));
606       }
607   }
608
609   {
610     struct minimal_symbol *msym;
611     ALL_OBJFILE_MSYMBOLS (objfile, msym)
612       if (SYMBOL_SECTION (msym) >= 0)
613       SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
614   }
615   /* Relocating different sections by different amounts may cause the symbols
616      to be out of order.  */
617   msymbols_sort (objfile);
618
619   {
620     int i;
621     for (i = 0; i < objfile->num_sections; ++i)
622       (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
623   }
624
625   if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
626     {
627       /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
628          only as a fallback.  */
629       struct obj_section *s;
630       s = find_pc_section (objfile->ei.entry_point);
631       if (s)
632         objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
633       else
634         objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
635     }
636
637   {
638     struct obj_section *s;
639     bfd *abfd;
640
641     abfd = objfile->obfd;
642
643     ALL_OBJFILE_OSECTIONS (objfile, s)
644       {
645         int idx = s->the_bfd_section->index;
646         
647         s->addr += ANOFFSET (delta, idx);
648         s->endaddr += ANOFFSET (delta, idx);
649       }
650   }
651
652   if (objfile->ei.entry_func_lowpc != INVALID_ENTRY_LOWPC)
653     {
654       objfile->ei.entry_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
655       objfile->ei.entry_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
656     }
657
658   if (objfile->ei.main_func_lowpc != INVALID_ENTRY_LOWPC)
659     {
660       objfile->ei.main_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
661       objfile->ei.main_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
662     }
663
664   /* Relocate breakpoints as necessary, after things are relocated. */
665   breakpoint_re_set ();
666 }
667 \f
668 /* Many places in gdb want to test just to see if we have any partial
669    symbols available.  This function returns zero if none are currently
670    available, nonzero otherwise. */
671
672 int
673 have_partial_symbols (void)
674 {
675   struct objfile *ofp;
676
677   ALL_OBJFILES (ofp)
678   {
679     if (ofp->psymtabs != NULL)
680       {
681         return 1;
682       }
683   }
684   return 0;
685 }
686
687 /* Many places in gdb want to test just to see if we have any full
688    symbols available.  This function returns zero if none are currently
689    available, nonzero otherwise. */
690
691 int
692 have_full_symbols (void)
693 {
694   struct objfile *ofp;
695
696   ALL_OBJFILES (ofp)
697   {
698     if (ofp->symtabs != NULL)
699       {
700         return 1;
701       }
702   }
703   return 0;
704 }
705
706
707 /* This operations deletes all objfile entries that represent solibs that
708    weren't explicitly loaded by the user, via e.g., the add-symbol-file
709    command.
710  */
711 void
712 objfile_purge_solibs (void)
713 {
714   struct objfile *objf;
715   struct objfile *temp;
716
717   ALL_OBJFILES_SAFE (objf, temp)
718   {
719     /* We assume that the solib package has been purged already, or will
720        be soon.
721      */
722     if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
723       free_objfile (objf);
724   }
725 }
726
727
728 /* Many places in gdb want to test just to see if we have any minimal
729    symbols available.  This function returns zero if none are currently
730    available, nonzero otherwise. */
731
732 int
733 have_minimal_symbols (void)
734 {
735   struct objfile *ofp;
736
737   ALL_OBJFILES (ofp)
738   {
739     if (ofp->minimal_symbol_count > 0)
740       {
741         return 1;
742       }
743   }
744   return 0;
745 }
746
747 /* Returns a section whose range includes PC and SECTION, or NULL if
748    none found.  Note the distinction between the return type, struct
749    obj_section (which is defined in gdb), and the input type "struct
750    bfd_section" (which is a bfd-defined data type).  The obj_section
751    contains a pointer to the "struct bfd_section".  */
752
753 struct obj_section *
754 find_pc_sect_section (CORE_ADDR pc, struct bfd_section *section)
755 {
756   struct obj_section *s;
757   struct objfile *objfile;
758
759   ALL_OBJSECTIONS (objfile, s)
760     if ((section == 0 || section == s->the_bfd_section) &&
761         s->addr <= pc && pc < s->endaddr)
762       return (s);
763
764   return (NULL);
765 }
766
767 /* Returns a section whose range includes PC or NULL if none found. 
768    Backward compatibility, no section.  */
769
770 struct obj_section *
771 find_pc_section (CORE_ADDR pc)
772 {
773   return find_pc_sect_section (pc, find_pc_mapped_section (pc));
774 }
775
776
777 /* In SVR4, we recognize a trampoline by it's section name. 
778    That is, if the pc is in a section named ".plt" then we are in
779    a trampoline.  */
780
781 int
782 in_plt_section (CORE_ADDR pc, char *name)
783 {
784   struct obj_section *s;
785   int retval = 0;
786
787   s = find_pc_section (pc);
788
789   retval = (s != NULL
790             && s->the_bfd_section->name != NULL
791             && strcmp (s->the_bfd_section->name, ".plt") == 0);
792   return (retval);
793 }
794
795 /* Return nonzero if NAME is in the import list of OBJFILE.  Else
796    return zero.  */
797
798 int
799 is_in_import_list (char *name, struct objfile *objfile)
800 {
801   int i;
802
803   if (!objfile || !name || !*name)
804     return 0;
805
806   for (i = 0; i < objfile->import_list_size; i++)
807     if (objfile->import_list[i] && DEPRECATED_STREQ (name, objfile->import_list[i]))
808       return 1;
809   return 0;
810 }
811 \f
812
813 /* Keep a registry of per-objfile data-pointers required by other GDB
814    modules.  */
815
816 struct objfile_data
817 {
818   unsigned index;
819 };
820
821 struct objfile_data_registration
822 {
823   struct objfile_data *data;
824   struct objfile_data_registration *next;
825 };
826   
827 struct objfile_data_registry
828 {
829   struct objfile_data_registration *registrations;
830   unsigned num_registrations;
831 };
832
833 static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
834
835 const struct objfile_data *
836 register_objfile_data (void)
837 {
838   struct objfile_data_registration **curr;
839
840   /* Append new registration.  */
841   for (curr = &objfile_data_registry.registrations;
842        *curr != NULL; curr = &(*curr)->next);
843
844   *curr = XMALLOC (struct objfile_data_registration);
845   (*curr)->next = NULL;
846   (*curr)->data = XMALLOC (struct objfile_data);
847   (*curr)->data->index = objfile_data_registry.num_registrations++;
848
849   return (*curr)->data;
850 }
851
852 static void
853 objfile_alloc_data (struct objfile *objfile)
854 {
855   gdb_assert (objfile->data == NULL);
856   objfile->num_data = objfile_data_registry.num_registrations;
857   objfile->data = XCALLOC (objfile->num_data, void *);
858 }
859
860 static void
861 objfile_free_data (struct objfile *objfile)
862 {
863   gdb_assert (objfile->data != NULL);
864   xfree (objfile->data);
865   objfile->data = NULL;
866 }
867
868 void
869 clear_objfile_data (struct objfile *objfile)
870 {
871   gdb_assert (objfile->data != NULL);
872   memset (objfile->data, 0, objfile->num_data * sizeof (void *));
873 }
874
875 void
876 set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
877                   void *value)
878 {
879   gdb_assert (data->index < objfile->num_data);
880   objfile->data[data->index] = value;
881 }
882
883 void *
884 objfile_data (struct objfile *objfile, const struct objfile_data *data)
885 {
886   gdb_assert (data->index < objfile->num_data);
887   return objfile->data[data->index];
888 }