gas/testsuite/
[external/binutils.git] / gdb / objfiles.c
1 /* GDB routines for manipulating objfiles.
2
3    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
4    2002, 2003, 2004, 2007 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., 51 Franklin Street, Fifth Floor,
23    Boston, MA 02110-1301, 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 "expression.h"
38 #include "parser-defs.h"
39
40 #include "gdb_assert.h"
41 #include <sys/types.h>
42 #include "gdb_stat.h"
43 #include <fcntl.h>
44 #include "gdb_obstack.h"
45 #include "gdb_string.h"
46 #include "hashtab.h"
47
48 #include "breakpoint.h"
49 #include "block.h"
50 #include "dictionary.h"
51 #include "source.h"
52
53 /* Prototypes for local functions */
54
55 static void objfile_alloc_data (struct objfile *objfile);
56 static void objfile_free_data (struct objfile *objfile);
57
58 /* Externally visible variables that are owned by this module.
59    See declarations in objfile.h for more info. */
60
61 struct objfile *object_files;   /* Linked list of all objfiles */
62 struct objfile *current_objfile;        /* For symbol file being read in */
63 struct objfile *symfile_objfile;        /* Main symbol table loaded from */
64 struct objfile *rt_common_objfile;      /* For runtime common symbols */
65
66 /* Locate all mappable sections of a BFD file. 
67    objfile_p_char is a char * to get it through
68    bfd_map_over_sections; we cast it back to its proper type.  */
69
70 #ifndef TARGET_KEEP_SECTION
71 #define TARGET_KEEP_SECTION(ASECT)      0
72 #endif
73
74 /* Called via bfd_map_over_sections to build up the section table that
75    the objfile references.  The objfile contains pointers to the start
76    of the table (objfile->sections) and to the first location after
77    the end of the table (objfile->sections_end). */
78
79 static void
80 add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
81                          void *objfile_p_char)
82 {
83   struct objfile *objfile = (struct objfile *) objfile_p_char;
84   struct obj_section section;
85   flagword aflag;
86
87   aflag = bfd_get_section_flags (abfd, asect);
88
89   if (!(aflag & SEC_ALLOC) && !(TARGET_KEEP_SECTION (asect)))
90     return;
91
92   if (0 == bfd_section_size (abfd, asect))
93     return;
94   section.offset = 0;
95   section.objfile = objfile;
96   section.the_bfd_section = asect;
97   section.ovly_mapped = 0;
98   section.addr = bfd_section_vma (abfd, asect);
99   section.endaddr = section.addr + bfd_section_size (abfd, asect);
100   obstack_grow (&objfile->objfile_obstack, (char *) &section, sizeof (section));
101   objfile->sections_end = (struct obj_section *) (((unsigned long) objfile->sections_end) + 1);
102 }
103
104 /* Builds a section table for OBJFILE.
105    Returns 0 if OK, 1 on error (in which case bfd_error contains the
106    error).
107
108    Note that while we are building the table, which goes into the
109    psymbol obstack, we hijack the sections_end pointer to instead hold
110    a count of the number of sections.  When bfd_map_over_sections
111    returns, this count is used to compute the pointer to the end of
112    the sections table, which then overwrites the count.
113
114    Also note that the OFFSET and OVLY_MAPPED in each table entry
115    are initialized to zero.
116
117    Also note that if anything else writes to the psymbol obstack while
118    we are building the table, we're pretty much hosed. */
119
120 int
121 build_objfile_section_table (struct objfile *objfile)
122 {
123   /* objfile->sections can be already set when reading a mapped symbol
124      file.  I believe that we do need to rebuild the section table in
125      this case (we rebuild other things derived from the bfd), but we
126      can't free the old one (it's in the objfile_obstack).  So we just
127      waste some memory.  */
128
129   objfile->sections_end = 0;
130   bfd_map_over_sections (objfile->obfd, add_to_objfile_sections, (char *) objfile);
131   objfile->sections = (struct obj_section *)
132     obstack_finish (&objfile->objfile_obstack);
133   objfile->sections_end = objfile->sections + (unsigned long) objfile->sections_end;
134   return (0);
135 }
136
137 /* Given a pointer to an initialized bfd (ABFD) and some flag bits
138    allocate a new objfile struct, fill it in as best we can, link it
139    into the list of all known objfiles, and return a pointer to the
140    new objfile struct.
141
142    The FLAGS word contains various bits (OBJF_*) that can be taken as
143    requests for specific operations.  Other bits like OBJF_SHARED are
144    simply copied through to the new objfile flags member. */
145
146 /* NOTE: carlton/2003-02-04: This function is called with args NULL, 0
147    by jv-lang.c, to create an artificial objfile used to hold
148    information about dynamically-loaded Java classes.  Unfortunately,
149    that branch of this function doesn't get tested very frequently, so
150    it's prone to breakage.  (E.g. at one time the name was set to NULL
151    in that situation, which broke a loop over all names in the dynamic
152    library loader.)  If you change this function, please try to leave
153    things in a consistent state even if abfd is NULL.  */
154
155 struct objfile *
156 allocate_objfile (bfd *abfd, int flags)
157 {
158   struct objfile *objfile = NULL;
159   struct objfile *last_one = NULL;
160
161   /* If we don't support mapped symbol files, didn't ask for the file to be
162      mapped, or failed to open the mapped file for some reason, then revert
163      back to an unmapped objfile. */
164
165   if (objfile == NULL)
166     {
167       objfile = (struct objfile *) xmalloc (sizeof (struct objfile));
168       memset (objfile, 0, sizeof (struct objfile));
169       objfile->md = NULL;
170       objfile->psymbol_cache = bcache_xmalloc ();
171       objfile->macro_cache = bcache_xmalloc ();
172       /* We could use obstack_specify_allocation here instead, but
173          gdb_obstack.h specifies the alloc/dealloc functions.  */
174       obstack_init (&objfile->objfile_obstack);
175       terminate_minimal_symbol_table (objfile);
176     }
177
178   objfile_alloc_data (objfile);
179
180   /* Update the per-objfile information that comes from the bfd, ensuring
181      that any data that is reference is saved in the per-objfile data
182      region. */
183
184   objfile->obfd = abfd;
185   if (objfile->name != NULL)
186     {
187       xfree (objfile->name);
188     }
189   if (abfd != NULL)
190     {
191       objfile->name = xstrdup (bfd_get_filename (abfd));
192       objfile->mtime = bfd_get_mtime (abfd);
193
194       /* Build section table.  */
195
196       if (build_objfile_section_table (objfile))
197         {
198           error (_("Can't find the file sections in `%s': %s"),
199                  objfile->name, bfd_errmsg (bfd_get_error ()));
200         }
201     }
202   else
203     {
204       objfile->name = xstrdup ("<<anonymous objfile>>");
205     }
206
207   /* Initialize the section indexes for this objfile, so that we can
208      later detect if they are used w/o being properly assigned to. */
209
210   objfile->sect_index_text = -1;
211   objfile->sect_index_data = -1;
212   objfile->sect_index_bss = -1;
213   objfile->sect_index_rodata = -1;
214
215   /* We don't yet have a C++-specific namespace symtab.  */
216
217   objfile->cp_namespace_symtab = NULL;
218
219   /* Add this file onto the tail of the linked list of other such files. */
220
221   objfile->next = NULL;
222   if (object_files == NULL)
223     object_files = objfile;
224   else
225     {
226       for (last_one = object_files;
227            last_one->next;
228            last_one = last_one->next);
229       last_one->next = objfile;
230     }
231
232   /* Save passed in flag bits. */
233   objfile->flags |= flags;
234
235   return (objfile);
236 }
237
238 /* Initialize entry point information for this objfile. */
239
240 void
241 init_entry_point_info (struct objfile *objfile)
242 {
243   /* Save startup file's range of PC addresses to help blockframe.c
244      decide where the bottom of the stack is.  */
245
246   if (bfd_get_file_flags (objfile->obfd) & EXEC_P)
247     {
248       /* Executable file -- record its entry point so we'll recognize
249          the startup file because it contains the entry point.  */
250       objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
251     }
252   else
253     {
254       /* Examination of non-executable.o files.  Short-circuit this stuff.  */
255       objfile->ei.entry_point = INVALID_ENTRY_POINT;
256     }
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   /* Remove any references to this objfile in the global value
400      lists.  */
401   preserve_values (objfile);
402
403   /* First do any symbol file specific actions required when we are
404      finished with a particular symbol file.  Note that if the objfile
405      is using reusable symbol information (via mmalloc) then each of
406      these routines is responsible for doing the correct thing, either
407      freeing things which are valid only during this particular gdb
408      execution, or leaving them to be reused during the next one. */
409
410   if (objfile->sf != NULL)
411     {
412       (*objfile->sf->sym_finish) (objfile);
413     }
414
415   /* We always close the bfd. */
416
417   if (objfile->obfd != NULL)
418     {
419       char *name = bfd_get_filename (objfile->obfd);
420       if (!bfd_close (objfile->obfd))
421         warning (_("cannot close \"%s\": %s"),
422                  name, bfd_errmsg (bfd_get_error ()));
423       xfree (name);
424     }
425
426   /* Remove it from the chain of all objfiles. */
427
428   unlink_objfile (objfile);
429
430   /* If we are going to free the runtime common objfile, mark it
431      as unallocated.  */
432
433   if (objfile == rt_common_objfile)
434     rt_common_objfile = NULL;
435
436   /* Before the symbol table code was redone to make it easier to
437      selectively load and remove information particular to a specific
438      linkage unit, gdb used to do these things whenever the monolithic
439      symbol table was blown away.  How much still needs to be done
440      is unknown, but we play it safe for now and keep each action until
441      it is shown to be no longer needed. */
442
443   /* Not all our callers call clear_symtab_users (objfile_purge_solibs,
444      for example), so we need to call this here.  */
445   clear_pc_function_cache ();
446
447   /* Clear globals which might have pointed into a removed objfile.
448      FIXME: It's not clear which of these are supposed to persist
449      between expressions and which ought to be reset each time.  */
450   expression_context_block = NULL;
451   innermost_block = NULL;
452
453   /* Check to see if the current_source_symtab belongs to this objfile,
454      and if so, call clear_current_source_symtab_and_line. */
455
456   {
457     struct symtab_and_line cursal = get_current_source_symtab_and_line ();
458     struct symtab *s;
459
460     ALL_OBJFILE_SYMTABS (objfile, s)
461       {
462         if (s == cursal.symtab)
463           clear_current_source_symtab_and_line ();
464       }
465   }
466
467   /* The last thing we do is free the objfile struct itself. */
468
469   objfile_free_data (objfile);
470   if (objfile->name != NULL)
471     {
472       xfree (objfile->name);
473     }
474   if (objfile->global_psymbols.list)
475     xfree (objfile->global_psymbols.list);
476   if (objfile->static_psymbols.list)
477     xfree (objfile->static_psymbols.list);
478   /* Free the obstacks for non-reusable objfiles */
479   bcache_xfree (objfile->psymbol_cache);
480   bcache_xfree (objfile->macro_cache);
481   if (objfile->demangled_names_hash)
482     htab_delete (objfile->demangled_names_hash);
483   obstack_free (&objfile->objfile_obstack, 0);
484   xfree (objfile);
485   objfile = NULL;
486 }
487
488 static void
489 do_free_objfile_cleanup (void *obj)
490 {
491   free_objfile (obj);
492 }
493
494 struct cleanup *
495 make_cleanup_free_objfile (struct objfile *obj)
496 {
497   return make_cleanup (do_free_objfile_cleanup, obj);
498 }
499
500 /* Free all the object files at once and clean up their users.  */
501
502 void
503 free_all_objfiles (void)
504 {
505   struct objfile *objfile, *temp;
506
507   ALL_OBJFILES_SAFE (objfile, temp)
508   {
509     free_objfile (objfile);
510   }
511   clear_symtab_users ();
512 }
513 \f
514 /* Relocate OBJFILE to NEW_OFFSETS.  There should be OBJFILE->NUM_SECTIONS
515    entries in new_offsets.  */
516 void
517 objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
518 {
519   struct section_offsets *delta =
520     ((struct section_offsets *) 
521      alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)));
522
523   {
524     int i;
525     int something_changed = 0;
526     for (i = 0; i < objfile->num_sections; ++i)
527       {
528         delta->offsets[i] =
529           ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
530         if (ANOFFSET (delta, i) != 0)
531           something_changed = 1;
532       }
533     if (!something_changed)
534       return;
535   }
536
537   /* OK, get all the symtabs.  */
538   {
539     struct symtab *s;
540
541     ALL_OBJFILE_SYMTABS (objfile, s)
542     {
543       struct linetable *l;
544       struct blockvector *bv;
545       int i;
546
547       /* First the line table.  */
548       l = LINETABLE (s);
549       if (l)
550         {
551           for (i = 0; i < l->nitems; ++i)
552             l->item[i].pc += ANOFFSET (delta, s->block_line_section);
553         }
554
555       /* Don't relocate a shared blockvector more than once.  */
556       if (!s->primary)
557         continue;
558
559       bv = BLOCKVECTOR (s);
560       for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
561         {
562           struct block *b;
563           struct symbol *sym;
564           struct dict_iterator iter;
565
566           b = BLOCKVECTOR_BLOCK (bv, i);
567           BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
568           BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
569
570           ALL_BLOCK_SYMBOLS (b, iter, sym)
571             {
572               fixup_symbol_section (sym, objfile);
573
574               /* The RS6000 code from which this was taken skipped
575                  any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
576                  But I'm leaving out that test, on the theory that
577                  they can't possibly pass the tests below.  */
578               if ((SYMBOL_CLASS (sym) == LOC_LABEL
579                    || SYMBOL_CLASS (sym) == LOC_STATIC
580                    || SYMBOL_CLASS (sym) == LOC_INDIRECT)
581                   && SYMBOL_SECTION (sym) >= 0)
582                 {
583                   SYMBOL_VALUE_ADDRESS (sym) +=
584                     ANOFFSET (delta, SYMBOL_SECTION (sym));
585                 }
586             }
587         }
588     }
589   }
590
591   {
592     struct partial_symtab *p;
593
594     ALL_OBJFILE_PSYMTABS (objfile, p)
595     {
596       p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
597       p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
598     }
599   }
600
601   {
602     struct partial_symbol **psym;
603
604     for (psym = objfile->global_psymbols.list;
605          psym < objfile->global_psymbols.next;
606          psym++)
607       {
608         fixup_psymbol_section (*psym, objfile);
609         if (SYMBOL_SECTION (*psym) >= 0)
610           SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
611                                                     SYMBOL_SECTION (*psym));
612       }
613     for (psym = objfile->static_psymbols.list;
614          psym < objfile->static_psymbols.next;
615          psym++)
616       {
617         fixup_psymbol_section (*psym, objfile);
618         if (SYMBOL_SECTION (*psym) >= 0)
619           SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
620                                                     SYMBOL_SECTION (*psym));
621       }
622   }
623
624   {
625     struct minimal_symbol *msym;
626     ALL_OBJFILE_MSYMBOLS (objfile, msym)
627       if (SYMBOL_SECTION (msym) >= 0)
628       SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
629   }
630   /* Relocating different sections by different amounts may cause the symbols
631      to be out of order.  */
632   msymbols_sort (objfile);
633
634   {
635     int i;
636     for (i = 0; i < objfile->num_sections; ++i)
637       (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
638   }
639
640   if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
641     {
642       /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
643          only as a fallback.  */
644       struct obj_section *s;
645       s = find_pc_section (objfile->ei.entry_point);
646       if (s)
647         objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
648       else
649         objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
650     }
651
652   {
653     struct obj_section *s;
654     bfd *abfd;
655
656     abfd = objfile->obfd;
657
658     ALL_OBJFILE_OSECTIONS (objfile, s)
659       {
660         int idx = s->the_bfd_section->index;
661         
662         s->addr += ANOFFSET (delta, idx);
663         s->endaddr += ANOFFSET (delta, idx);
664       }
665   }
666
667   /* Relocate breakpoints as necessary, after things are relocated. */
668   breakpoint_re_set ();
669 }
670 \f
671 /* Many places in gdb want to test just to see if we have any partial
672    symbols available.  This function returns zero if none are currently
673    available, nonzero otherwise. */
674
675 int
676 have_partial_symbols (void)
677 {
678   struct objfile *ofp;
679
680   ALL_OBJFILES (ofp)
681   {
682     if (ofp->psymtabs != NULL)
683       {
684         return 1;
685       }
686   }
687   return 0;
688 }
689
690 /* Many places in gdb want to test just to see if we have any full
691    symbols available.  This function returns zero if none are currently
692    available, nonzero otherwise. */
693
694 int
695 have_full_symbols (void)
696 {
697   struct objfile *ofp;
698
699   ALL_OBJFILES (ofp)
700   {
701     if (ofp->symtabs != NULL)
702       {
703         return 1;
704       }
705   }
706   return 0;
707 }
708
709
710 /* This operations deletes all objfile entries that represent solibs that
711    weren't explicitly loaded by the user, via e.g., the add-symbol-file
712    command.
713  */
714 void
715 objfile_purge_solibs (void)
716 {
717   struct objfile *objf;
718   struct objfile *temp;
719
720   ALL_OBJFILES_SAFE (objf, temp)
721   {
722     /* We assume that the solib package has been purged already, or will
723        be soon.
724      */
725     if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
726       free_objfile (objf);
727   }
728 }
729
730
731 /* Many places in gdb want to test just to see if we have any minimal
732    symbols available.  This function returns zero if none are currently
733    available, nonzero otherwise. */
734
735 int
736 have_minimal_symbols (void)
737 {
738   struct objfile *ofp;
739
740   ALL_OBJFILES (ofp)
741   {
742     if (ofp->minimal_symbol_count > 0)
743       {
744         return 1;
745       }
746   }
747   return 0;
748 }
749
750 /* Returns a section whose range includes PC and SECTION, or NULL if
751    none found.  Note the distinction between the return type, struct
752    obj_section (which is defined in gdb), and the input type "struct
753    bfd_section" (which is a bfd-defined data type).  The obj_section
754    contains a pointer to the "struct bfd_section".  */
755
756 struct obj_section *
757 find_pc_sect_section (CORE_ADDR pc, struct bfd_section *section)
758 {
759   struct obj_section *s;
760   struct objfile *objfile;
761
762   ALL_OBJSECTIONS (objfile, s)
763     if ((section == 0 || section == s->the_bfd_section) &&
764         s->addr <= pc && pc < s->endaddr)
765       return (s);
766
767   return (NULL);
768 }
769
770 /* Returns a section whose range includes PC or NULL if none found. 
771    Backward compatibility, no section.  */
772
773 struct obj_section *
774 find_pc_section (CORE_ADDR pc)
775 {
776   return find_pc_sect_section (pc, find_pc_mapped_section (pc));
777 }
778
779
780 /* In SVR4, we recognize a trampoline by it's section name. 
781    That is, if the pc is in a section named ".plt" then we are in
782    a trampoline.  */
783
784 int
785 in_plt_section (CORE_ADDR pc, char *name)
786 {
787   struct obj_section *s;
788   int retval = 0;
789
790   s = find_pc_section (pc);
791
792   retval = (s != NULL
793             && s->the_bfd_section->name != NULL
794             && strcmp (s->the_bfd_section->name, ".plt") == 0);
795   return (retval);
796 }
797
798 /* Return nonzero if NAME is in the import list of OBJFILE.  Else
799    return zero.  */
800
801 int
802 is_in_import_list (char *name, struct objfile *objfile)
803 {
804   int i;
805
806   if (!objfile || !name || !*name)
807     return 0;
808
809   for (i = 0; i < objfile->import_list_size; i++)
810     if (objfile->import_list[i] && DEPRECATED_STREQ (name, objfile->import_list[i]))
811       return 1;
812   return 0;
813 }
814 \f
815
816 /* Keep a registry of per-objfile data-pointers required by other GDB
817    modules.  */
818
819 struct objfile_data
820 {
821   unsigned index;
822 };
823
824 struct objfile_data_registration
825 {
826   struct objfile_data *data;
827   struct objfile_data_registration *next;
828 };
829   
830 struct objfile_data_registry
831 {
832   struct objfile_data_registration *registrations;
833   unsigned num_registrations;
834 };
835
836 static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
837
838 const struct objfile_data *
839 register_objfile_data (void)
840 {
841   struct objfile_data_registration **curr;
842
843   /* Append new registration.  */
844   for (curr = &objfile_data_registry.registrations;
845        *curr != NULL; curr = &(*curr)->next);
846
847   *curr = XMALLOC (struct objfile_data_registration);
848   (*curr)->next = NULL;
849   (*curr)->data = XMALLOC (struct objfile_data);
850   (*curr)->data->index = objfile_data_registry.num_registrations++;
851
852   return (*curr)->data;
853 }
854
855 static void
856 objfile_alloc_data (struct objfile *objfile)
857 {
858   gdb_assert (objfile->data == NULL);
859   objfile->num_data = objfile_data_registry.num_registrations;
860   objfile->data = XCALLOC (objfile->num_data, void *);
861 }
862
863 static void
864 objfile_free_data (struct objfile *objfile)
865 {
866   gdb_assert (objfile->data != NULL);
867   xfree (objfile->data);
868   objfile->data = NULL;
869 }
870
871 void
872 clear_objfile_data (struct objfile *objfile)
873 {
874   gdb_assert (objfile->data != NULL);
875   memset (objfile->data, 0, objfile->num_data * sizeof (void *));
876 }
877
878 void
879 set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
880                   void *value)
881 {
882   gdb_assert (data->index < objfile->num_data);
883   objfile->data[data->index] = value;
884 }
885
886 void *
887 objfile_data (struct objfile *objfile, const struct objfile_data *data)
888 {
889   gdb_assert (data->index < objfile->num_data);
890   return objfile->data[data->index];
891 }