* ld-elf/warn1.d: Do not run on sparc64-*-solaris2*.
[external/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 #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
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 \f
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             }
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 \f
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
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
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
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
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 *
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 *
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
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
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 \f
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 *
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
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
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
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
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 *
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 }