xref: /openbsd-src/gnu/usr.bin/binutils/gdb/objfiles.c (revision daf88648c0e349d5c02e1504293082072c981640)
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       xfree (objfile->name);
184     }
185   if (abfd != NULL)
186     {
187       objfile->name = xstrdup (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 = xstrdup ("<<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 }
254 
255 /* Get current entry point address.  */
256 
257 CORE_ADDR
258 entry_point_address (void)
259 {
260   return symfile_objfile ? symfile_objfile->ei.entry_point : 0;
261 }
262 
263 /* Create the terminating entry of OBJFILE's minimal symbol table.
264    If OBJFILE->msymbols is zero, allocate a single entry from
265    OBJFILE->objfile_obstack; otherwise, just initialize
266    OBJFILE->msymbols[OBJFILE->minimal_symbol_count].  */
267 void
268 terminate_minimal_symbol_table (struct objfile *objfile)
269 {
270   if (! objfile->msymbols)
271     objfile->msymbols = ((struct minimal_symbol *)
272                          obstack_alloc (&objfile->objfile_obstack,
273                                         sizeof (objfile->msymbols[0])));
274 
275   {
276     struct minimal_symbol *m
277       = &objfile->msymbols[objfile->minimal_symbol_count];
278 
279     memset (m, 0, sizeof (*m));
280     /* Don't rely on these enumeration values being 0's.  */
281     MSYMBOL_TYPE (m) = mst_unknown;
282     SYMBOL_INIT_LANGUAGE_SPECIFIC (m, language_unknown);
283   }
284 }
285 
286 
287 /* Put one object file before a specified on in the global list.
288    This can be used to make sure an object file is destroyed before
289    another when using ALL_OBJFILES_SAFE to free all objfiles. */
290 void
291 put_objfile_before (struct objfile *objfile, struct objfile *before_this)
292 {
293   struct objfile **objp;
294 
295   unlink_objfile (objfile);
296 
297   for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
298     {
299       if (*objp == before_this)
300 	{
301 	  objfile->next = *objp;
302 	  *objp = objfile;
303 	  return;
304 	}
305     }
306 
307   internal_error (__FILE__, __LINE__,
308 		  "put_objfile_before: before objfile not in list");
309 }
310 
311 /* Put OBJFILE at the front of the list.  */
312 
313 void
314 objfile_to_front (struct objfile *objfile)
315 {
316   struct objfile **objp;
317   for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
318     {
319       if (*objp == objfile)
320 	{
321 	  /* Unhook it from where it is.  */
322 	  *objp = objfile->next;
323 	  /* Put it in the front.  */
324 	  objfile->next = object_files;
325 	  object_files = objfile;
326 	  break;
327 	}
328     }
329 }
330 
331 /* Unlink OBJFILE from the list of known objfiles, if it is found in the
332    list.
333 
334    It is not a bug, or error, to call this function if OBJFILE is not known
335    to be in the current list.  This is done in the case of mapped objfiles,
336    for example, just to ensure that the mapped objfile doesn't appear twice
337    in the list.  Since the list is threaded, linking in a mapped objfile
338    twice would create a circular list.
339 
340    If OBJFILE turns out to be in the list, we zap it's NEXT pointer after
341    unlinking it, just to ensure that we have completely severed any linkages
342    between the OBJFILE and the list. */
343 
344 void
345 unlink_objfile (struct objfile *objfile)
346 {
347   struct objfile **objpp;
348 
349   for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
350     {
351       if (*objpp == objfile)
352 	{
353 	  *objpp = (*objpp)->next;
354 	  objfile->next = NULL;
355 	  return;
356 	}
357     }
358 
359   internal_error (__FILE__, __LINE__,
360 		  "unlink_objfile: objfile already unlinked");
361 }
362 
363 
364 /* Destroy an objfile and all the symtabs and psymtabs under it.  Note
365    that as much as possible is allocated on the objfile_obstack
366    so that the memory can be efficiently freed.
367 
368    Things which we do NOT free because they are not in malloc'd memory
369    or not in memory specific to the objfile include:
370 
371    objfile -> sf
372 
373    FIXME:  If the objfile is using reusable symbol information (via mmalloc),
374    then we need to take into account the fact that more than one process
375    may be using the symbol information at the same time (when mmalloc is
376    extended to support cooperative locking).  When more than one process
377    is using the mapped symbol info, we need to be more careful about when
378    we free objects in the reusable area. */
379 
380 void
381 free_objfile (struct objfile *objfile)
382 {
383   if (objfile->separate_debug_objfile)
384     {
385       free_objfile (objfile->separate_debug_objfile);
386     }
387 
388   if (objfile->separate_debug_objfile_backlink)
389     {
390       /* We freed the separate debug file, make sure the base objfile
391 	 doesn't reference it.  */
392       objfile->separate_debug_objfile_backlink->separate_debug_objfile = NULL;
393     }
394 
395   /* First do any symbol file specific actions required when we are
396      finished with a particular symbol file.  Note that if the objfile
397      is using reusable symbol information (via mmalloc) then each of
398      these routines is responsible for doing the correct thing, either
399      freeing things which are valid only during this particular gdb
400      execution, or leaving them to be reused during the next one. */
401 
402   if (objfile->sf != NULL)
403     {
404       (*objfile->sf->sym_finish) (objfile);
405     }
406 
407   /* We always close the bfd. */
408 
409   if (objfile->obfd != NULL)
410     {
411       char *name = bfd_get_filename (objfile->obfd);
412       if (!bfd_close (objfile->obfd))
413 	warning ("cannot close \"%s\": %s",
414 		 name, bfd_errmsg (bfd_get_error ()));
415       xfree (name);
416     }
417 
418   /* Remove it from the chain of all objfiles. */
419 
420   unlink_objfile (objfile);
421 
422   /* If we are going to free the runtime common objfile, mark it
423      as unallocated.  */
424 
425   if (objfile == rt_common_objfile)
426     rt_common_objfile = NULL;
427 
428   /* Before the symbol table code was redone to make it easier to
429      selectively load and remove information particular to a specific
430      linkage unit, gdb used to do these things whenever the monolithic
431      symbol table was blown away.  How much still needs to be done
432      is unknown, but we play it safe for now and keep each action until
433      it is shown to be no longer needed. */
434 
435   /* I *think* all our callers call clear_symtab_users.  If so, no need
436      to call this here.  */
437   clear_pc_function_cache ();
438 
439   /* The last thing we do is free the objfile struct itself. */
440 
441   objfile_free_data (objfile);
442   if (objfile->name != NULL)
443     {
444       xfree (objfile->name);
445     }
446   if (objfile->global_psymbols.list)
447     xfree (objfile->global_psymbols.list);
448   if (objfile->static_psymbols.list)
449     xfree (objfile->static_psymbols.list);
450   /* Free the obstacks for non-reusable objfiles */
451   bcache_xfree (objfile->psymbol_cache);
452   bcache_xfree (objfile->macro_cache);
453   if (objfile->demangled_names_hash)
454     htab_delete (objfile->demangled_names_hash);
455   obstack_free (&objfile->objfile_obstack, 0);
456   xfree (objfile);
457   objfile = NULL;
458 }
459 
460 static void
461 do_free_objfile_cleanup (void *obj)
462 {
463   free_objfile (obj);
464 }
465 
466 struct cleanup *
467 make_cleanup_free_objfile (struct objfile *obj)
468 {
469   return make_cleanup (do_free_objfile_cleanup, obj);
470 }
471 
472 /* Free all the object files at once and clean up their users.  */
473 
474 void
475 free_all_objfiles (void)
476 {
477   struct objfile *objfile, *temp;
478 
479   ALL_OBJFILES_SAFE (objfile, temp)
480   {
481     free_objfile (objfile);
482   }
483   clear_symtab_users ();
484 }
485 
486 /* Relocate OBJFILE to NEW_OFFSETS.  There should be OBJFILE->NUM_SECTIONS
487    entries in new_offsets.  */
488 void
489 objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
490 {
491   struct section_offsets *delta =
492     ((struct section_offsets *)
493      alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)));
494 
495   {
496     int i;
497     int something_changed = 0;
498     for (i = 0; i < objfile->num_sections; ++i)
499       {
500 	delta->offsets[i] =
501 	  ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
502 	if (ANOFFSET (delta, i) != 0)
503 	  something_changed = 1;
504       }
505     if (!something_changed)
506       return;
507   }
508 
509   /* OK, get all the symtabs.  */
510   {
511     struct symtab *s;
512 
513     ALL_OBJFILE_SYMTABS (objfile, s)
514     {
515       struct linetable *l;
516       struct blockvector *bv;
517       int i;
518 
519       /* First the line table.  */
520       l = LINETABLE (s);
521       if (l)
522 	{
523 	  for (i = 0; i < l->nitems; ++i)
524 	    l->item[i].pc += ANOFFSET (delta, s->block_line_section);
525 	}
526 
527       /* Don't relocate a shared blockvector more than once.  */
528       if (!s->primary)
529 	continue;
530 
531       bv = BLOCKVECTOR (s);
532       for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
533 	{
534 	  struct block *b;
535 	  struct symbol *sym;
536 	  struct dict_iterator iter;
537 
538 	  b = BLOCKVECTOR_BLOCK (bv, i);
539 	  BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
540 	  BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
541 
542 	  ALL_BLOCK_SYMBOLS (b, iter, sym)
543 	    {
544 	      fixup_symbol_section (sym, objfile);
545 
546 	      /* The RS6000 code from which this was taken skipped
547 	         any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
548 	         But I'm leaving out that test, on the theory that
549 	         they can't possibly pass the tests below.  */
550 	      if ((SYMBOL_CLASS (sym) == LOC_LABEL
551 		   || SYMBOL_CLASS (sym) == LOC_STATIC
552 		   || SYMBOL_CLASS (sym) == LOC_INDIRECT)
553 		  && SYMBOL_SECTION (sym) >= 0)
554 		{
555 		  SYMBOL_VALUE_ADDRESS (sym) +=
556 		    ANOFFSET (delta, SYMBOL_SECTION (sym));
557 		}
558 #ifdef MIPS_EFI_SYMBOL_NAME
559 	      /* Relocate Extra Function Info for ecoff.  */
560 
561 	      else if (SYMBOL_CLASS (sym) == LOC_CONST
562 		       && SYMBOL_DOMAIN (sym) == LABEL_DOMAIN
563 		       && strcmp (DEPRECATED_SYMBOL_NAME (sym), MIPS_EFI_SYMBOL_NAME) == 0)
564 		ecoff_relocate_efi (sym, ANOFFSET (delta,
565 						   s->block_line_section));
566 #endif
567 	    }
568 	}
569     }
570   }
571 
572   {
573     struct partial_symtab *p;
574 
575     ALL_OBJFILE_PSYMTABS (objfile, p)
576     {
577       p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
578       p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
579     }
580   }
581 
582   {
583     struct partial_symbol **psym;
584 
585     for (psym = objfile->global_psymbols.list;
586 	 psym < objfile->global_psymbols.next;
587 	 psym++)
588       {
589 	fixup_psymbol_section (*psym, objfile);
590 	if (SYMBOL_SECTION (*psym) >= 0)
591 	  SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
592 						    SYMBOL_SECTION (*psym));
593       }
594     for (psym = objfile->static_psymbols.list;
595 	 psym < objfile->static_psymbols.next;
596 	 psym++)
597       {
598 	fixup_psymbol_section (*psym, objfile);
599 	if (SYMBOL_SECTION (*psym) >= 0)
600 	  SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
601 						    SYMBOL_SECTION (*psym));
602       }
603   }
604 
605   {
606     struct minimal_symbol *msym;
607     ALL_OBJFILE_MSYMBOLS (objfile, msym)
608       if (SYMBOL_SECTION (msym) >= 0)
609       SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
610   }
611   /* Relocating different sections by different amounts may cause the symbols
612      to be out of order.  */
613   msymbols_sort (objfile);
614 
615   {
616     int i;
617     for (i = 0; i < objfile->num_sections; ++i)
618       (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
619   }
620 
621   if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
622     {
623       /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
624 	 only as a fallback.  */
625       struct obj_section *s;
626       s = find_pc_section (objfile->ei.entry_point);
627       if (s)
628         objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
629       else
630         objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
631     }
632 
633   {
634     struct obj_section *s;
635     bfd *abfd;
636 
637     abfd = objfile->obfd;
638 
639     ALL_OBJFILE_OSECTIONS (objfile, s)
640       {
641       	int idx = s->the_bfd_section->index;
642 
643 	s->addr += ANOFFSET (delta, idx);
644 	s->endaddr += ANOFFSET (delta, idx);
645       }
646   }
647 
648   /* Relocate breakpoints as necessary, after things are relocated. */
649   breakpoint_re_set ();
650 }
651 
652 /* Many places in gdb want to test just to see if we have any partial
653    symbols available.  This function returns zero if none are currently
654    available, nonzero otherwise. */
655 
656 int
657 have_partial_symbols (void)
658 {
659   struct objfile *ofp;
660 
661   ALL_OBJFILES (ofp)
662   {
663     if (ofp->psymtabs != NULL)
664       {
665 	return 1;
666       }
667   }
668   return 0;
669 }
670 
671 /* Many places in gdb want to test just to see if we have any full
672    symbols available.  This function returns zero if none are currently
673    available, nonzero otherwise. */
674 
675 int
676 have_full_symbols (void)
677 {
678   struct objfile *ofp;
679 
680   ALL_OBJFILES (ofp)
681   {
682     if (ofp->symtabs != NULL)
683       {
684 	return 1;
685       }
686   }
687   return 0;
688 }
689 
690 
691 /* This operations deletes all objfile entries that represent solibs that
692    weren't explicitly loaded by the user, via e.g., the add-symbol-file
693    command.
694  */
695 void
696 objfile_purge_solibs (void)
697 {
698   struct objfile *objf;
699   struct objfile *temp;
700 
701   ALL_OBJFILES_SAFE (objf, temp)
702   {
703     /* We assume that the solib package has been purged already, or will
704        be soon.
705      */
706     if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
707       free_objfile (objf);
708   }
709 }
710 
711 
712 /* Many places in gdb want to test just to see if we have any minimal
713    symbols available.  This function returns zero if none are currently
714    available, nonzero otherwise. */
715 
716 int
717 have_minimal_symbols (void)
718 {
719   struct objfile *ofp;
720 
721   ALL_OBJFILES (ofp)
722   {
723     if (ofp->minimal_symbol_count > 0)
724       {
725 	return 1;
726       }
727   }
728   return 0;
729 }
730 
731 /* Returns a section whose range includes PC and SECTION, or NULL if
732    none found.  Note the distinction between the return type, struct
733    obj_section (which is defined in gdb), and the input type "struct
734    bfd_section" (which is a bfd-defined data type).  The obj_section
735    contains a pointer to the "struct bfd_section".  */
736 
737 struct obj_section *
738 find_pc_sect_section (CORE_ADDR pc, struct bfd_section *section)
739 {
740   struct obj_section *s;
741   struct objfile *objfile;
742 
743   ALL_OBJSECTIONS (objfile, s)
744     if ((section == 0 || section == s->the_bfd_section) &&
745 	s->addr <= pc && pc < s->endaddr)
746       return (s);
747 
748   return (NULL);
749 }
750 
751 /* Returns a section whose range includes PC or NULL if none found.
752    Backward compatibility, no section.  */
753 
754 struct obj_section *
755 find_pc_section (CORE_ADDR pc)
756 {
757   return find_pc_sect_section (pc, find_pc_mapped_section (pc));
758 }
759 
760 
761 /* In SVR4, we recognize a trampoline by it's section name.
762    That is, if the pc is in a section named ".plt" then we are in
763    a trampoline.  */
764 
765 int
766 in_plt_section (CORE_ADDR pc, char *name)
767 {
768   struct obj_section *s;
769   int retval = 0;
770 
771   s = find_pc_section (pc);
772 
773   retval = (s != NULL
774 	    && s->the_bfd_section->name != NULL
775 	    && strcmp (s->the_bfd_section->name, ".plt") == 0);
776   return (retval);
777 }
778 
779 /* Return nonzero if NAME is in the import list of OBJFILE.  Else
780    return zero.  */
781 
782 int
783 is_in_import_list (char *name, struct objfile *objfile)
784 {
785   int i;
786 
787   if (!objfile || !name || !*name)
788     return 0;
789 
790   for (i = 0; i < objfile->import_list_size; i++)
791     if (objfile->import_list[i] && DEPRECATED_STREQ (name, objfile->import_list[i]))
792       return 1;
793   return 0;
794 }
795 
796 
797 /* Keep a registry of per-objfile data-pointers required by other GDB
798    modules.  */
799 
800 struct objfile_data
801 {
802   unsigned index;
803 };
804 
805 struct objfile_data_registration
806 {
807   struct objfile_data *data;
808   struct objfile_data_registration *next;
809 };
810 
811 struct objfile_data_registry
812 {
813   struct objfile_data_registration *registrations;
814   unsigned num_registrations;
815 };
816 
817 static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
818 
819 const struct objfile_data *
820 register_objfile_data (void)
821 {
822   struct objfile_data_registration **curr;
823 
824   /* Append new registration.  */
825   for (curr = &objfile_data_registry.registrations;
826        *curr != NULL; curr = &(*curr)->next);
827 
828   *curr = XMALLOC (struct objfile_data_registration);
829   (*curr)->next = NULL;
830   (*curr)->data = XMALLOC (struct objfile_data);
831   (*curr)->data->index = objfile_data_registry.num_registrations++;
832 
833   return (*curr)->data;
834 }
835 
836 static void
837 objfile_alloc_data (struct objfile *objfile)
838 {
839   gdb_assert (objfile->data == NULL);
840   objfile->num_data = objfile_data_registry.num_registrations;
841   objfile->data = XCALLOC (objfile->num_data, void *);
842 }
843 
844 static void
845 objfile_free_data (struct objfile *objfile)
846 {
847   gdb_assert (objfile->data != NULL);
848   xfree (objfile->data);
849   objfile->data = NULL;
850 }
851 
852 void
853 clear_objfile_data (struct objfile *objfile)
854 {
855   gdb_assert (objfile->data != NULL);
856   memset (objfile->data, 0, objfile->num_data * sizeof (void *));
857 }
858 
859 void
860 set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
861 		  void *value)
862 {
863   gdb_assert (data->index < objfile->num_data);
864   objfile->data[data->index] = value;
865 }
866 
867 void *
868 objfile_data (struct objfile *objfile, const struct objfile_data *data)
869 {
870   gdb_assert (data->index < objfile->num_data);
871   return objfile->data[data->index];
872 }
873