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 #include "mdebugread.h"
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
add_to_objfile_sections(struct bfd * abfd,struct bfd_section * asect,void * objfile_p_char)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
build_objfile_section_table(struct objfile * objfile)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 *
allocate_objfile(bfd * abfd,int flags)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
init_entry_point_info(struct objfile * objfile)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
entry_point_address(void)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
terminate_minimal_symbol_table(struct objfile * objfile)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
put_objfile_before(struct objfile * objfile,struct objfile * before_this)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
objfile_to_front(struct objfile * objfile)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
unlink_objfile(struct objfile * objfile)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
free_objfile(struct objfile * objfile)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
do_free_objfile_cleanup(void * obj)461 do_free_objfile_cleanup (void *obj)
462 {
463   free_objfile (obj);
464 }
465 
466 struct cleanup *
make_cleanup_free_objfile(struct objfile * obj)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
free_all_objfiles(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
objfile_relocate(struct objfile * objfile,struct section_offsets * new_offsets)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 	    }
559 	}
560     }
561   }
562 
563   {
564     struct partial_symtab *p;
565 
566     ALL_OBJFILE_PSYMTABS (objfile, p)
567     {
568       p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
569       p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
570     }
571   }
572 
573   {
574     struct partial_symbol **psym;
575 
576     for (psym = objfile->global_psymbols.list;
577 	 psym < objfile->global_psymbols.next;
578 	 psym++)
579       {
580 	fixup_psymbol_section (*psym, objfile);
581 	if (SYMBOL_SECTION (*psym) >= 0)
582 	  SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
583 						    SYMBOL_SECTION (*psym));
584       }
585     for (psym = objfile->static_psymbols.list;
586 	 psym < objfile->static_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   }
595 
596   {
597     struct minimal_symbol *msym;
598     ALL_OBJFILE_MSYMBOLS (objfile, msym)
599       if (SYMBOL_SECTION (msym) >= 0)
600       SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
601   }
602   /* Relocating different sections by different amounts may cause the symbols
603      to be out of order.  */
604   msymbols_sort (objfile);
605 
606   {
607     int i;
608     for (i = 0; i < objfile->num_sections; ++i)
609       (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
610   }
611 
612   if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
613     {
614       /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
615 	 only as a fallback.  */
616       struct obj_section *s;
617       s = find_pc_section (objfile->ei.entry_point);
618       if (s)
619         objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
620       else
621         objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
622     }
623 
624   {
625     struct obj_section *s;
626     bfd *abfd;
627 
628     abfd = objfile->obfd;
629 
630     ALL_OBJFILE_OSECTIONS (objfile, s)
631       {
632       	int idx = s->the_bfd_section->index;
633 
634 	s->addr += ANOFFSET (delta, idx);
635 	s->endaddr += ANOFFSET (delta, idx);
636       }
637   }
638 
639   /* Relocate breakpoints as necessary, after things are relocated. */
640   breakpoint_re_set ();
641 }
642 
643 /* Many places in gdb want to test just to see if we have any partial
644    symbols available.  This function returns zero if none are currently
645    available, nonzero otherwise. */
646 
647 int
have_partial_symbols(void)648 have_partial_symbols (void)
649 {
650   struct objfile *ofp;
651 
652   ALL_OBJFILES (ofp)
653   {
654     if (ofp->psymtabs != NULL)
655       {
656 	return 1;
657       }
658   }
659   return 0;
660 }
661 
662 /* Many places in gdb want to test just to see if we have any full
663    symbols available.  This function returns zero if none are currently
664    available, nonzero otherwise. */
665 
666 int
have_full_symbols(void)667 have_full_symbols (void)
668 {
669   struct objfile *ofp;
670 
671   ALL_OBJFILES (ofp)
672   {
673     if (ofp->symtabs != NULL)
674       {
675 	return 1;
676       }
677   }
678   return 0;
679 }
680 
681 
682 /* This operations deletes all objfile entries that represent solibs that
683    weren't explicitly loaded by the user, via e.g., the add-symbol-file
684    command.
685  */
686 void
objfile_purge_solibs(void)687 objfile_purge_solibs (void)
688 {
689   struct objfile *objf;
690   struct objfile *temp;
691 
692   ALL_OBJFILES_SAFE (objf, temp)
693   {
694     /* We assume that the solib package has been purged already, or will
695        be soon.
696      */
697     if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
698       free_objfile (objf);
699   }
700 }
701 
702 
703 /* Many places in gdb want to test just to see if we have any minimal
704    symbols available.  This function returns zero if none are currently
705    available, nonzero otherwise. */
706 
707 int
have_minimal_symbols(void)708 have_minimal_symbols (void)
709 {
710   struct objfile *ofp;
711 
712   ALL_OBJFILES (ofp)
713   {
714     if (ofp->minimal_symbol_count > 0)
715       {
716 	return 1;
717       }
718   }
719   return 0;
720 }
721 
722 /* Returns a section whose range includes PC and SECTION, or NULL if
723    none found.  Note the distinction between the return type, struct
724    obj_section (which is defined in gdb), and the input type "struct
725    bfd_section" (which is a bfd-defined data type).  The obj_section
726    contains a pointer to the "struct bfd_section".  */
727 
728 struct obj_section *
find_pc_sect_section(CORE_ADDR pc,struct bfd_section * section)729 find_pc_sect_section (CORE_ADDR pc, struct bfd_section *section)
730 {
731   struct obj_section *s;
732   struct objfile *objfile;
733 
734   ALL_OBJSECTIONS (objfile, s)
735     if ((section == 0 || section == s->the_bfd_section) &&
736 	s->addr <= pc && pc < s->endaddr)
737       return (s);
738 
739   return (NULL);
740 }
741 
742 /* Returns a section whose range includes PC or NULL if none found.
743    Backward compatibility, no section.  */
744 
745 struct obj_section *
find_pc_section(CORE_ADDR pc)746 find_pc_section (CORE_ADDR pc)
747 {
748   return find_pc_sect_section (pc, find_pc_mapped_section (pc));
749 }
750 
751 
752 /* In SVR4, we recognize a trampoline by it's section name.
753    That is, if the pc is in a section named ".plt" then we are in
754    a trampoline.  */
755 
756 int
in_plt_section(CORE_ADDR pc,char * name)757 in_plt_section (CORE_ADDR pc, char *name)
758 {
759   struct obj_section *s;
760   int retval = 0;
761 
762   s = find_pc_section (pc);
763 
764   retval = (s != NULL
765 	    && s->the_bfd_section->name != NULL
766 	    && strcmp (s->the_bfd_section->name, ".plt") == 0);
767   return (retval);
768 }
769 
770 /* Return nonzero if NAME is in the import list of OBJFILE.  Else
771    return zero.  */
772 
773 int
is_in_import_list(char * name,struct objfile * objfile)774 is_in_import_list (char *name, struct objfile *objfile)
775 {
776   int i;
777 
778   if (!objfile || !name || !*name)
779     return 0;
780 
781   for (i = 0; i < objfile->import_list_size; i++)
782     if (objfile->import_list[i] && DEPRECATED_STREQ (name, objfile->import_list[i]))
783       return 1;
784   return 0;
785 }
786 
787 
788 /* Keep a registry of per-objfile data-pointers required by other GDB
789    modules.  */
790 
791 struct objfile_data
792 {
793   unsigned index;
794 };
795 
796 struct objfile_data_registration
797 {
798   struct objfile_data *data;
799   struct objfile_data_registration *next;
800 };
801 
802 struct objfile_data_registry
803 {
804   struct objfile_data_registration *registrations;
805   unsigned num_registrations;
806 };
807 
808 static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
809 
810 const struct objfile_data *
register_objfile_data(void)811 register_objfile_data (void)
812 {
813   struct objfile_data_registration **curr;
814 
815   /* Append new registration.  */
816   for (curr = &objfile_data_registry.registrations;
817        *curr != NULL; curr = &(*curr)->next);
818 
819   *curr = XMALLOC (struct objfile_data_registration);
820   (*curr)->next = NULL;
821   (*curr)->data = XMALLOC (struct objfile_data);
822   (*curr)->data->index = objfile_data_registry.num_registrations++;
823 
824   return (*curr)->data;
825 }
826 
827 static void
objfile_alloc_data(struct objfile * objfile)828 objfile_alloc_data (struct objfile *objfile)
829 {
830   gdb_assert (objfile->data == NULL);
831   objfile->num_data = objfile_data_registry.num_registrations;
832   objfile->data = XCALLOC (objfile->num_data, void *);
833 }
834 
835 static void
objfile_free_data(struct objfile * objfile)836 objfile_free_data (struct objfile *objfile)
837 {
838   gdb_assert (objfile->data != NULL);
839   xfree (objfile->data);
840   objfile->data = NULL;
841 }
842 
843 void
clear_objfile_data(struct objfile * objfile)844 clear_objfile_data (struct objfile *objfile)
845 {
846   gdb_assert (objfile->data != NULL);
847   memset (objfile->data, 0, objfile->num_data * sizeof (void *));
848 }
849 
850 void
set_objfile_data(struct objfile * objfile,const struct objfile_data * data,void * value)851 set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
852 		  void *value)
853 {
854   gdb_assert (data->index < objfile->num_data);
855   objfile->data[data->index] = value;
856 }
857 
858 void *
objfile_data(struct objfile * objfile,const struct objfile_data * data)859 objfile_data (struct objfile *objfile, const struct objfile_data *data)
860 {
861   gdb_assert (data->index < objfile->num_data);
862   return objfile->data[data->index];
863 }
864