2010-05-11 Pierre Muller <muller@ics.u-strasbg.fr>
[platform/upstream/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, 2008, 2009, 2010 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 3 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, see <http://www.gnu.org/licenses/>.  */
22
23 /* This file contains support routines for creating, manipulating, and
24    destroying objfile structures. */
25
26 #include "defs.h"
27 #include "bfd.h"                /* Binary File Description */
28 #include "symtab.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "gdb-stabs.h"
32 #include "target.h"
33 #include "bcache.h"
34 #include "mdebugread.h"
35 #include "expression.h"
36 #include "parser-defs.h"
37
38 #include "gdb_assert.h"
39 #include <sys/types.h>
40 #include "gdb_stat.h"
41 #include <fcntl.h>
42 #include "gdb_obstack.h"
43 #include "gdb_string.h"
44 #include "hashtab.h"
45
46 #include "breakpoint.h"
47 #include "block.h"
48 #include "dictionary.h"
49 #include "source.h"
50 #include "addrmap.h"
51 #include "arch-utils.h"
52 #include "exec.h"
53 #include "observer.h"
54 #include "complaints.h"
55 #include "psymtab.h"
56 #include "solist.h"
57
58 /* Prototypes for local functions */
59
60 static void objfile_alloc_data (struct objfile *objfile);
61 static void objfile_free_data (struct objfile *objfile);
62
63 /* Externally visible variables that are owned by this module.
64    See declarations in objfile.h for more info. */
65
66 struct objfile *current_objfile;        /* For symbol file being read in */
67 struct objfile *rt_common_objfile;      /* For runtime common symbols */
68
69 struct objfile_pspace_info
70 {
71   int objfiles_changed_p;
72   struct obj_section **sections;
73   int num_sections;
74 };
75
76 /* Per-program-space data key.  */
77 static const struct program_space_data *objfiles_pspace_data;
78
79 static void
80 objfiles_pspace_data_cleanup (struct program_space *pspace, void *arg)
81 {
82   struct objfile_pspace_info *info;
83
84   info = program_space_data (pspace, objfiles_pspace_data);
85   if (info != NULL)
86     {
87       xfree (info->sections);
88       xfree (info);
89     }
90 }
91
92 /* Get the current svr4 data.  If none is found yet, add it now.  This
93    function always returns a valid object.  */
94
95 static struct objfile_pspace_info *
96 get_objfile_pspace_data (struct program_space *pspace)
97 {
98   struct objfile_pspace_info *info;
99
100   info = program_space_data (pspace, objfiles_pspace_data);
101   if (info == NULL)
102     {
103       info = XZALLOC (struct objfile_pspace_info);
104       set_program_space_data (pspace, objfiles_pspace_data, info);
105     }
106
107   return info;
108 }
109
110 /* Records whether any objfiles appeared or disappeared since we last updated
111    address to obj section map.  */
112
113 /* Locate all mappable sections of a BFD file. 
114    objfile_p_char is a char * to get it through
115    bfd_map_over_sections; we cast it back to its proper type.  */
116
117 /* Called via bfd_map_over_sections to build up the section table that
118    the objfile references.  The objfile contains pointers to the start
119    of the table (objfile->sections) and to the first location after
120    the end of the table (objfile->sections_end). */
121
122 static void
123 add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
124                          void *objfile_p_char)
125 {
126   struct objfile *objfile = (struct objfile *) objfile_p_char;
127   struct obj_section section;
128   flagword aflag;
129
130   aflag = bfd_get_section_flags (abfd, asect);
131
132   if (!(aflag & SEC_ALLOC))
133     return;
134
135   if (0 == bfd_section_size (abfd, asect))
136     return;
137   section.objfile = objfile;
138   section.the_bfd_section = asect;
139   section.ovly_mapped = 0;
140   obstack_grow (&objfile->objfile_obstack, (char *) &section, sizeof (section));
141   objfile->sections_end
142     = (struct obj_section *) (((size_t) objfile->sections_end) + 1);
143 }
144
145 /* Builds a section table for OBJFILE.
146    Returns 0 if OK, 1 on error (in which case bfd_error contains the
147    error).
148
149    Note that while we are building the table, which goes into the
150    psymbol obstack, we hijack the sections_end pointer to instead hold
151    a count of the number of sections.  When bfd_map_over_sections
152    returns, this count is used to compute the pointer to the end of
153    the sections table, which then overwrites the count.
154
155    Also note that the OFFSET and OVLY_MAPPED in each table entry
156    are initialized to zero.
157
158    Also note that if anything else writes to the psymbol obstack while
159    we are building the table, we're pretty much hosed. */
160
161 int
162 build_objfile_section_table (struct objfile *objfile)
163 {
164   /* objfile->sections can be already set when reading a mapped symbol
165      file.  I believe that we do need to rebuild the section table in
166      this case (we rebuild other things derived from the bfd), but we
167      can't free the old one (it's in the objfile_obstack).  So we just
168      waste some memory.  */
169
170   objfile->sections_end = 0;
171   bfd_map_over_sections (objfile->obfd,
172                          add_to_objfile_sections, (void *) objfile);
173   objfile->sections = obstack_finish (&objfile->objfile_obstack);
174   objfile->sections_end = objfile->sections + (size_t) objfile->sections_end;
175   return (0);
176 }
177
178 /* Given a pointer to an initialized bfd (ABFD) and some flag bits
179    allocate a new objfile struct, fill it in as best we can, link it
180    into the list of all known objfiles, and return a pointer to the
181    new objfile struct.
182
183    The FLAGS word contains various bits (OBJF_*) that can be taken as
184    requests for specific operations.  Other bits like OBJF_SHARED are
185    simply copied through to the new objfile flags member. */
186
187 /* NOTE: carlton/2003-02-04: This function is called with args NULL, 0
188    by jv-lang.c, to create an artificial objfile used to hold
189    information about dynamically-loaded Java classes.  Unfortunately,
190    that branch of this function doesn't get tested very frequently, so
191    it's prone to breakage.  (E.g. at one time the name was set to NULL
192    in that situation, which broke a loop over all names in the dynamic
193    library loader.)  If you change this function, please try to leave
194    things in a consistent state even if abfd is NULL.  */
195
196 struct objfile *
197 allocate_objfile (bfd *abfd, int flags)
198 {
199   struct objfile *objfile;
200
201   objfile = (struct objfile *) xzalloc (sizeof (struct objfile));
202   objfile->psymbol_cache = bcache_xmalloc ();
203   objfile->macro_cache = bcache_xmalloc ();
204   objfile->filename_cache = bcache_xmalloc ();
205   /* We could use obstack_specify_allocation here instead, but
206      gdb_obstack.h specifies the alloc/dealloc functions.  */
207   obstack_init (&objfile->objfile_obstack);
208   terminate_minimal_symbol_table (objfile);
209
210   objfile_alloc_data (objfile);
211
212   /* Update the per-objfile information that comes from the bfd, ensuring
213      that any data that is reference is saved in the per-objfile data
214      region. */
215
216   objfile->obfd = gdb_bfd_ref (abfd);
217   if (objfile->name != NULL)
218     {
219       xfree (objfile->name);
220     }
221   if (abfd != NULL)
222     {
223       /* Look up the gdbarch associated with the BFD.  */
224       objfile->gdbarch = gdbarch_from_bfd (abfd);
225
226       objfile->name = xstrdup (bfd_get_filename (abfd));
227       objfile->mtime = bfd_get_mtime (abfd);
228
229       /* Build section table.  */
230
231       if (build_objfile_section_table (objfile))
232         {
233           error (_("Can't find the file sections in `%s': %s"),
234                  objfile->name, bfd_errmsg (bfd_get_error ()));
235         }
236     }
237   else
238     {
239       objfile->name = xstrdup ("<<anonymous objfile>>");
240     }
241
242   objfile->pspace = current_program_space;
243
244   /* Initialize the section indexes for this objfile, so that we can
245      later detect if they are used w/o being properly assigned to. */
246
247   objfile->sect_index_text = -1;
248   objfile->sect_index_data = -1;
249   objfile->sect_index_bss = -1;
250   objfile->sect_index_rodata = -1;
251
252   /* We don't yet have a C++-specific namespace symtab.  */
253
254   objfile->cp_namespace_symtab = NULL;
255
256   /* Add this file onto the tail of the linked list of other such files. */
257
258   objfile->next = NULL;
259   if (object_files == NULL)
260     object_files = objfile;
261   else
262     {
263       struct objfile *last_one;
264
265       for (last_one = object_files;
266            last_one->next;
267            last_one = last_one->next);
268       last_one->next = objfile;
269     }
270
271   /* Save passed in flag bits. */
272   objfile->flags |= flags;
273
274   /* Rebuild section map next time we need it.  */
275   get_objfile_pspace_data (objfile->pspace)->objfiles_changed_p = 1;
276
277   return objfile;
278 }
279
280 /* Retrieve the gdbarch associated with OBJFILE.  */
281 struct gdbarch *
282 get_objfile_arch (struct objfile *objfile)
283 {
284   return objfile->gdbarch;
285 }
286
287 /* Initialize entry point information for this objfile. */
288
289 void
290 init_entry_point_info (struct objfile *objfile)
291 {
292   /* Save startup file's range of PC addresses to help blockframe.c
293      decide where the bottom of the stack is.  */
294
295   if (bfd_get_file_flags (objfile->obfd) & EXEC_P)
296     {
297       /* Executable file -- record its entry point so we'll recognize
298          the startup file because it contains the entry point.  */
299       objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
300       objfile->ei.entry_point_p = 1;
301     }
302   else if (bfd_get_file_flags (objfile->obfd) & DYNAMIC
303            && bfd_get_start_address (objfile->obfd) != 0)
304     {
305       /* Some shared libraries may have entry points set and be
306          runnable.  There's no clear way to indicate this, so just check
307          for values other than zero.  */
308       objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);    
309       objfile->ei.entry_point_p = 1;
310     }
311   else
312     {
313       /* Examination of non-executable.o files.  Short-circuit this stuff.  */
314       objfile->ei.entry_point_p = 0;
315     }
316 }
317
318 /* If there is a valid and known entry point, function fills *ENTRY_P with it
319    and returns non-zero; otherwise it returns zero.  */
320
321 int
322 entry_point_address_query (CORE_ADDR *entry_p)
323 {
324   struct gdbarch *gdbarch;
325   CORE_ADDR entry_point;
326
327   if (symfile_objfile == NULL || !symfile_objfile->ei.entry_point_p)
328     return 0;
329
330   gdbarch = get_objfile_arch (symfile_objfile);
331
332   entry_point = symfile_objfile->ei.entry_point;
333
334   /* Make certain that the address points at real code, and not a
335      function descriptor.  */
336   entry_point = gdbarch_convert_from_func_ptr_addr (gdbarch, entry_point,
337                                                     &current_target);
338
339   /* Remove any ISA markers, so that this matches entries in the
340      symbol table.  */
341   entry_point = gdbarch_addr_bits_remove (gdbarch, entry_point);
342
343   *entry_p = entry_point;
344   return 1;
345 }
346
347 /* Get current entry point address.  Call error if it is not known.  */
348
349 CORE_ADDR
350 entry_point_address (void)
351 {
352   CORE_ADDR retval;
353
354   if (!entry_point_address_query (&retval))
355     error (_("Entry point address is not known."));
356
357   return retval;
358 }
359
360 /* Create the terminating entry of OBJFILE's minimal symbol table.
361    If OBJFILE->msymbols is zero, allocate a single entry from
362    OBJFILE->objfile_obstack; otherwise, just initialize
363    OBJFILE->msymbols[OBJFILE->minimal_symbol_count].  */
364 void
365 terminate_minimal_symbol_table (struct objfile *objfile)
366 {
367   if (! objfile->msymbols)
368     objfile->msymbols = ((struct minimal_symbol *)
369                          obstack_alloc (&objfile->objfile_obstack,
370                                         sizeof (objfile->msymbols[0])));
371
372   {
373     struct minimal_symbol *m
374       = &objfile->msymbols[objfile->minimal_symbol_count];
375
376     memset (m, 0, sizeof (*m));
377     /* Don't rely on these enumeration values being 0's.  */
378     MSYMBOL_TYPE (m) = mst_unknown;
379     SYMBOL_INIT_LANGUAGE_SPECIFIC (m, language_unknown);
380   }
381 }
382
383 /* Iterator on PARENT and every separate debug objfile of PARENT.
384    The usage pattern is:
385      for (objfile = parent;
386           objfile;
387           objfile = objfile_separate_debug_iterate (parent, objfile))
388        ...
389 */
390
391 struct objfile *
392 objfile_separate_debug_iterate (const struct objfile *parent,
393                                 const struct objfile *objfile)
394 {
395   struct objfile *res;
396
397   /* If any, return the first child.  */
398   res = objfile->separate_debug_objfile;
399   if (res)
400     return res;
401
402   /* Common case where there is no separate debug objfile.  */
403   if (objfile == parent)
404     return NULL;
405
406   /* Return the brother if any.  Note that we don't iterate on brothers of
407      the parents.  */
408   res = objfile->separate_debug_objfile_link;
409   if (res)
410     return res;
411
412   for (res = objfile->separate_debug_objfile_backlink;
413        res != parent;
414        res = res->separate_debug_objfile_backlink)
415     {
416       gdb_assert (res != NULL);
417       if (res->separate_debug_objfile_link)
418         return res->separate_debug_objfile_link;
419     }
420   return NULL;
421 }
422
423 /* Put one object file before a specified on in the global list.
424    This can be used to make sure an object file is destroyed before
425    another when using ALL_OBJFILES_SAFE to free all objfiles. */
426 void
427 put_objfile_before (struct objfile *objfile, struct objfile *before_this)
428 {
429   struct objfile **objp;
430
431   unlink_objfile (objfile);
432   
433   for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
434     {
435       if (*objp == before_this)
436         {
437           objfile->next = *objp;
438           *objp = objfile;
439           return;
440         }
441     }
442   
443   internal_error (__FILE__, __LINE__,
444                   _("put_objfile_before: before objfile not in list"));
445 }
446
447 /* Put OBJFILE at the front of the list.  */
448
449 void
450 objfile_to_front (struct objfile *objfile)
451 {
452   struct objfile **objp;
453   for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
454     {
455       if (*objp == objfile)
456         {
457           /* Unhook it from where it is.  */
458           *objp = objfile->next;
459           /* Put it in the front.  */
460           objfile->next = object_files;
461           object_files = objfile;
462           break;
463         }
464     }
465 }
466
467 /* Unlink OBJFILE from the list of known objfiles, if it is found in the
468    list.
469
470    It is not a bug, or error, to call this function if OBJFILE is not known
471    to be in the current list.  This is done in the case of mapped objfiles,
472    for example, just to ensure that the mapped objfile doesn't appear twice
473    in the list.  Since the list is threaded, linking in a mapped objfile
474    twice would create a circular list.
475
476    If OBJFILE turns out to be in the list, we zap it's NEXT pointer after
477    unlinking it, just to ensure that we have completely severed any linkages
478    between the OBJFILE and the list. */
479
480 void
481 unlink_objfile (struct objfile *objfile)
482 {
483   struct objfile **objpp;
484
485   for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
486     {
487       if (*objpp == objfile)
488         {
489           *objpp = (*objpp)->next;
490           objfile->next = NULL;
491           return;
492         }
493     }
494
495   internal_error (__FILE__, __LINE__,
496                   _("unlink_objfile: objfile already unlinked"));
497 }
498
499 /* Add OBJFILE as a separate debug objfile of PARENT.  */
500
501 void
502 add_separate_debug_objfile (struct objfile *objfile, struct objfile *parent)
503 {
504   gdb_assert (objfile && parent);
505
506   /* Must not be already in a list.  */
507   gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
508   gdb_assert (objfile->separate_debug_objfile_link == NULL);
509
510   objfile->separate_debug_objfile_backlink = parent;
511   objfile->separate_debug_objfile_link = parent->separate_debug_objfile;
512   parent->separate_debug_objfile = objfile;
513
514   /* Put the separate debug object before the normal one, this is so that
515      usage of the ALL_OBJFILES_SAFE macro will stay safe. */
516   put_objfile_before (objfile, parent);
517 }
518
519 /* Free all separate debug objfile of OBJFILE, but don't free OBJFILE
520    itself.  */
521
522 void
523 free_objfile_separate_debug (struct objfile *objfile)
524 {
525   struct objfile *child;
526
527   for (child = objfile->separate_debug_objfile; child;)
528     {
529       struct objfile *next_child = child->separate_debug_objfile_link;
530       free_objfile (child);
531       child = next_child;
532     }
533 }
534
535 /* Destroy an objfile and all the symtabs and psymtabs under it.  Note
536    that as much as possible is allocated on the objfile_obstack 
537    so that the memory can be efficiently freed.
538
539    Things which we do NOT free because they are not in malloc'd memory
540    or not in memory specific to the objfile include:
541
542    objfile -> sf
543
544    FIXME:  If the objfile is using reusable symbol information (via mmalloc),
545    then we need to take into account the fact that more than one process
546    may be using the symbol information at the same time (when mmalloc is
547    extended to support cooperative locking).  When more than one process
548    is using the mapped symbol info, we need to be more careful about when
549    we free objects in the reusable area. */
550
551 void
552 free_objfile (struct objfile *objfile)
553 {
554   /* Free all separate debug objfiles.  */
555   free_objfile_separate_debug (objfile);
556
557   if (objfile->separate_debug_objfile_backlink)
558     {
559       /* We freed the separate debug file, make sure the base objfile
560          doesn't reference it.  */
561       struct objfile *child;
562
563       child = objfile->separate_debug_objfile_backlink->separate_debug_objfile;
564
565       if (child == objfile)
566         {
567           /* OBJFILE is the first child.  */
568           objfile->separate_debug_objfile_backlink->separate_debug_objfile =
569             objfile->separate_debug_objfile_link;
570         }
571       else
572         {
573           /* Find OBJFILE in the list.  */
574           while (1)
575             {
576               if (child->separate_debug_objfile_link == objfile)
577                 {
578                   child->separate_debug_objfile_link =
579                     objfile->separate_debug_objfile_link;
580                   break;
581                 }
582               child = child->separate_debug_objfile_link;
583               gdb_assert (child);
584             }
585         }
586     }
587   
588   /* Remove any references to this objfile in the global value
589      lists.  */
590   preserve_values (objfile);
591
592   /* First do any symbol file specific actions required when we are
593      finished with a particular symbol file.  Note that if the objfile
594      is using reusable symbol information (via mmalloc) then each of
595      these routines is responsible for doing the correct thing, either
596      freeing things which are valid only during this particular gdb
597      execution, or leaving them to be reused during the next one. */
598
599   if (objfile->sf != NULL)
600     {
601       (*objfile->sf->sym_finish) (objfile);
602     }
603
604   /* Discard any data modules have associated with the objfile.  */
605   objfile_free_data (objfile);
606
607   gdb_bfd_unref (objfile->obfd);
608
609   /* Remove it from the chain of all objfiles. */
610
611   unlink_objfile (objfile);
612
613   if (objfile == symfile_objfile)
614     symfile_objfile = NULL;
615
616   if (objfile == rt_common_objfile)
617     rt_common_objfile = NULL;
618
619   /* Before the symbol table code was redone to make it easier to
620      selectively load and remove information particular to a specific
621      linkage unit, gdb used to do these things whenever the monolithic
622      symbol table was blown away.  How much still needs to be done
623      is unknown, but we play it safe for now and keep each action until
624      it is shown to be no longer needed. */
625
626   /* Not all our callers call clear_symtab_users (objfile_purge_solibs,
627      for example), so we need to call this here.  */
628   clear_pc_function_cache ();
629
630   /* Clear globals which might have pointed into a removed objfile.
631      FIXME: It's not clear which of these are supposed to persist
632      between expressions and which ought to be reset each time.  */
633   expression_context_block = NULL;
634   innermost_block = NULL;
635
636   /* Check to see if the current_source_symtab belongs to this objfile,
637      and if so, call clear_current_source_symtab_and_line. */
638
639   {
640     struct symtab_and_line cursal = get_current_source_symtab_and_line ();
641     struct symtab *s;
642
643     ALL_OBJFILE_SYMTABS (objfile, s)
644       {
645         if (s == cursal.symtab)
646           clear_current_source_symtab_and_line ();
647       }
648   }
649
650   /* The last thing we do is free the objfile struct itself. */
651
652   if (objfile->name != NULL)
653     {
654       xfree (objfile->name);
655     }
656   if (objfile->global_psymbols.list)
657     xfree (objfile->global_psymbols.list);
658   if (objfile->static_psymbols.list)
659     xfree (objfile->static_psymbols.list);
660   /* Free the obstacks for non-reusable objfiles */
661   bcache_xfree (objfile->psymbol_cache);
662   bcache_xfree (objfile->macro_cache);
663   bcache_xfree (objfile->filename_cache);
664   if (objfile->demangled_names_hash)
665     htab_delete (objfile->demangled_names_hash);
666   obstack_free (&objfile->objfile_obstack, 0);
667
668   /* Rebuild section map next time we need it.  */
669   get_objfile_pspace_data (objfile->pspace)->objfiles_changed_p = 1;
670
671   xfree (objfile);
672 }
673
674 static void
675 do_free_objfile_cleanup (void *obj)
676 {
677   free_objfile (obj);
678 }
679
680 struct cleanup *
681 make_cleanup_free_objfile (struct objfile *obj)
682 {
683   return make_cleanup (do_free_objfile_cleanup, obj);
684 }
685
686 /* Free all the object files at once and clean up their users.  */
687
688 void
689 free_all_objfiles (void)
690 {
691   struct objfile *objfile, *temp;
692   struct so_list *so;
693
694   /* Any objfile referencewould become stale.  */
695   for (so = master_so_list (); so; so = so->next)
696     gdb_assert (so->objfile == NULL);
697
698   ALL_OBJFILES_SAFE (objfile, temp)
699   {
700     free_objfile (objfile);
701   }
702   clear_symtab_users ();
703 }
704 \f
705 /* Relocate OBJFILE to NEW_OFFSETS.  There should be OBJFILE->NUM_SECTIONS
706    entries in new_offsets.  SEPARATE_DEBUG_OBJFILE is not touched here.
707    Return non-zero iff any change happened.  */
708
709 static int
710 objfile_relocate1 (struct objfile *objfile, struct section_offsets *new_offsets)
711 {
712   struct obj_section *s;
713   struct section_offsets *delta =
714     ((struct section_offsets *) 
715      alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)));
716
717   {
718     int i;
719     int something_changed = 0;
720     for (i = 0; i < objfile->num_sections; ++i)
721       {
722         delta->offsets[i] =
723           ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
724         if (ANOFFSET (delta, i) != 0)
725           something_changed = 1;
726       }
727     if (!something_changed)
728       return 0;
729   }
730
731   /* OK, get all the symtabs.  */
732   {
733     struct symtab *s;
734
735     ALL_OBJFILE_SYMTABS (objfile, s)
736     {
737       struct linetable *l;
738       struct blockvector *bv;
739       int i;
740
741       /* First the line table.  */
742       l = LINETABLE (s);
743       if (l)
744         {
745           for (i = 0; i < l->nitems; ++i)
746             l->item[i].pc += ANOFFSET (delta, s->block_line_section);
747         }
748
749       /* Don't relocate a shared blockvector more than once.  */
750       if (!s->primary)
751         continue;
752
753       bv = BLOCKVECTOR (s);
754       if (BLOCKVECTOR_MAP (bv))
755         addrmap_relocate (BLOCKVECTOR_MAP (bv),
756                           ANOFFSET (delta, s->block_line_section));
757
758       for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
759         {
760           struct block *b;
761           struct symbol *sym;
762           struct dict_iterator iter;
763
764           b = BLOCKVECTOR_BLOCK (bv, i);
765           BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
766           BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
767
768           ALL_BLOCK_SYMBOLS (b, iter, sym)
769             {
770               fixup_symbol_section (sym, objfile);
771
772               /* The RS6000 code from which this was taken skipped
773                  any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
774                  But I'm leaving out that test, on the theory that
775                  they can't possibly pass the tests below.  */
776               if ((SYMBOL_CLASS (sym) == LOC_LABEL
777                    || SYMBOL_CLASS (sym) == LOC_STATIC)
778                   && SYMBOL_SECTION (sym) >= 0)
779                 {
780                   SYMBOL_VALUE_ADDRESS (sym) +=
781                     ANOFFSET (delta, SYMBOL_SECTION (sym));
782                 }
783             }
784         }
785     }
786   }
787
788   if (objfile->psymtabs_addrmap)
789     addrmap_relocate (objfile->psymtabs_addrmap,
790                       ANOFFSET (delta, SECT_OFF_TEXT (objfile)));
791
792   if (objfile->sf)
793     objfile->sf->qf->relocate (objfile, new_offsets, delta);
794
795   {
796     struct minimal_symbol *msym;
797     ALL_OBJFILE_MSYMBOLS (objfile, msym)
798       if (SYMBOL_SECTION (msym) >= 0)
799       SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
800   }
801   /* Relocating different sections by different amounts may cause the symbols
802      to be out of order.  */
803   msymbols_sort (objfile);
804
805   if (objfile->ei.entry_point_p)
806     {
807       /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
808          only as a fallback.  */
809       struct obj_section *s;
810       s = find_pc_section (objfile->ei.entry_point);
811       if (s)
812         objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
813       else
814         objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
815     }
816
817   {
818     int i;
819     for (i = 0; i < objfile->num_sections; ++i)
820       (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
821   }
822
823   /* Rebuild section map next time we need it.  */
824   get_objfile_pspace_data (objfile->pspace)->objfiles_changed_p = 1;
825
826   /* Update the table in exec_ops, used to read memory.  */
827   ALL_OBJFILE_OSECTIONS (objfile, s)
828     {
829       int idx = s->the_bfd_section->index;
830
831       exec_set_section_address (bfd_get_filename (objfile->obfd), idx,
832                                 obj_section_addr (s));
833     }
834
835   /* Data changed.  */
836   return 1;
837 }
838
839 /* Relocate OBJFILE to NEW_OFFSETS.  There should be OBJFILE->NUM_SECTIONS
840    entries in new_offsets.  Process also OBJFILE's SEPARATE_DEBUG_OBJFILEs.
841
842    The number and ordering of sections does differ between the two objfiles.
843    Only their names match.  Also the file offsets will differ (objfile being
844    possibly prelinked but separate_debug_objfile is probably not prelinked) but
845    the in-memory absolute address as specified by NEW_OFFSETS must match both
846    files.  */
847
848 void
849 objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
850 {
851   struct objfile *debug_objfile;
852   int changed = 0;
853
854   changed |= objfile_relocate1 (objfile, new_offsets);
855
856   for (debug_objfile = objfile->separate_debug_objfile;
857        debug_objfile;
858        debug_objfile = objfile_separate_debug_iterate (objfile, debug_objfile))
859     {
860       struct section_addr_info *objfile_addrs;
861       struct section_offsets *new_debug_offsets;
862       struct cleanup *my_cleanups;
863
864       objfile_addrs = build_section_addr_info_from_objfile (objfile);
865       my_cleanups = make_cleanup (xfree, objfile_addrs);
866
867       /* Here OBJFILE_ADDRS contain the correct absolute addresses, the
868          relative ones must be already created according to debug_objfile.  */
869
870       addr_info_make_relative (objfile_addrs, debug_objfile->obfd);
871
872       gdb_assert (debug_objfile->num_sections
873                   == bfd_count_sections (debug_objfile->obfd));
874       new_debug_offsets = 
875         xmalloc (SIZEOF_N_SECTION_OFFSETS (debug_objfile->num_sections));
876       make_cleanup (xfree, new_debug_offsets);
877       relative_addr_info_to_section_offsets (new_debug_offsets,
878                                              debug_objfile->num_sections,
879                                              objfile_addrs);
880
881       changed |= objfile_relocate1 (debug_objfile, new_debug_offsets);
882
883       do_cleanups (my_cleanups);
884     }
885
886   /* Relocate breakpoints as necessary, after things are relocated. */
887   if (changed)
888     breakpoint_re_set ();
889 }
890 \f
891 /* Return non-zero if OBJFILE has partial symbols.  */
892
893 int
894 objfile_has_partial_symbols (struct objfile *objfile)
895 {
896   return objfile->sf ? objfile->sf->qf->has_symbols (objfile) : 0;
897 }
898
899 /* Return non-zero if OBJFILE has full symbols.  */
900
901 int
902 objfile_has_full_symbols (struct objfile *objfile)
903 {
904   return objfile->symtabs != NULL;
905 }
906
907 /* Return non-zero if OBJFILE has full or partial symbols, either directly
908    or through a separate debug file.  */
909
910 int
911 objfile_has_symbols (struct objfile *objfile)
912 {
913   struct objfile *o;
914
915   for (o = objfile; o; o = objfile_separate_debug_iterate (objfile, o))
916     if (objfile_has_partial_symbols (o) || objfile_has_full_symbols (o))
917       return 1;
918   return 0;
919 }
920
921
922 /* Many places in gdb want to test just to see if we have any partial
923    symbols available.  This function returns zero if none are currently
924    available, nonzero otherwise. */
925
926 int
927 have_partial_symbols (void)
928 {
929   struct objfile *ofp;
930
931   ALL_OBJFILES (ofp)
932   {
933     if (objfile_has_partial_symbols (ofp))
934       return 1;
935   }
936   return 0;
937 }
938
939 /* Many places in gdb want to test just to see if we have any full
940    symbols available.  This function returns zero if none are currently
941    available, nonzero otherwise. */
942
943 int
944 have_full_symbols (void)
945 {
946   struct objfile *ofp;
947
948   ALL_OBJFILES (ofp)
949   {
950     if (objfile_has_full_symbols (ofp))
951       return 1;
952   }
953   return 0;
954 }
955
956
957 /* This operations deletes all objfile entries that represent solibs that
958    weren't explicitly loaded by the user, via e.g., the add-symbol-file
959    command.
960  */
961 void
962 objfile_purge_solibs (void)
963 {
964   struct objfile *objf;
965   struct objfile *temp;
966
967   ALL_OBJFILES_SAFE (objf, temp)
968   {
969     /* We assume that the solib package has been purged already, or will
970        be soon.
971      */
972     if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
973       free_objfile (objf);
974   }
975 }
976
977
978 /* Many places in gdb want to test just to see if we have any minimal
979    symbols available.  This function returns zero if none are currently
980    available, nonzero otherwise. */
981
982 int
983 have_minimal_symbols (void)
984 {
985   struct objfile *ofp;
986
987   ALL_OBJFILES (ofp)
988   {
989     if (ofp->minimal_symbol_count > 0)
990       {
991         return 1;
992       }
993   }
994   return 0;
995 }
996
997 /* Qsort comparison function.  */
998
999 static int
1000 qsort_cmp (const void *a, const void *b)
1001 {
1002   const struct obj_section *sect1 = *(const struct obj_section **) a;
1003   const struct obj_section *sect2 = *(const struct obj_section **) b;
1004   const CORE_ADDR sect1_addr = obj_section_addr (sect1);
1005   const CORE_ADDR sect2_addr = obj_section_addr (sect2);
1006
1007   if (sect1_addr < sect2_addr)
1008     return -1;
1009   else if (sect1_addr > sect2_addr)
1010     return 1;
1011   else
1012    {
1013      /* Sections are at the same address.  This could happen if
1014         A) we have an objfile and a separate debuginfo.
1015         B) we are confused, and have added sections without proper relocation,
1016         or something like that. */
1017
1018      const struct objfile *const objfile1 = sect1->objfile;
1019      const struct objfile *const objfile2 = sect2->objfile;
1020
1021      if (objfile1->separate_debug_objfile == objfile2
1022          || objfile2->separate_debug_objfile == objfile1)
1023        {
1024          /* Case A.  The ordering doesn't matter: separate debuginfo files
1025             will be filtered out later.  */
1026
1027          return 0;
1028        }
1029
1030      /* Case B.  Maintain stable sort order, so bugs in GDB are easier to
1031         triage.  This section could be slow (since we iterate over all
1032         objfiles in each call to qsort_cmp), but this shouldn't happen
1033         very often (GDB is already in a confused state; one hopes this
1034         doesn't happen at all).  If you discover that significant time is
1035         spent in the loops below, do 'set complaints 100' and examine the
1036         resulting complaints.  */
1037
1038      if (objfile1 == objfile2)
1039        {
1040          /* Both sections came from the same objfile.  We are really confused.
1041             Sort on sequence order of sections within the objfile.  */
1042
1043          const struct obj_section *osect;
1044
1045          ALL_OBJFILE_OSECTIONS (objfile1, osect)
1046            if (osect == sect1)
1047              return -1;
1048            else if (osect == sect2)
1049              return 1;
1050
1051          /* We should have found one of the sections before getting here.  */
1052          gdb_assert (0);
1053        }
1054      else
1055        {
1056          /* Sort on sequence number of the objfile in the chain.  */
1057
1058          const struct objfile *objfile;
1059
1060          ALL_OBJFILES (objfile)
1061            if (objfile == objfile1)
1062              return -1;
1063            else if (objfile == objfile2)
1064              return 1;
1065
1066          /* We should have found one of the objfiles before getting here.  */
1067          gdb_assert (0);
1068        }
1069
1070    }
1071
1072   /* Unreachable.  */
1073   gdb_assert (0);
1074   return 0;
1075 }
1076
1077 /* Select "better" obj_section to keep.  We prefer the one that came from
1078    the real object, rather than the one from separate debuginfo.
1079    Most of the time the two sections are exactly identical, but with
1080    prelinking the .rel.dyn section in the real object may have different
1081    size.  */
1082
1083 static struct obj_section *
1084 preferred_obj_section (struct obj_section *a, struct obj_section *b)
1085 {
1086   gdb_assert (obj_section_addr (a) == obj_section_addr (b));
1087   gdb_assert ((a->objfile->separate_debug_objfile == b->objfile)
1088               || (b->objfile->separate_debug_objfile == a->objfile));
1089   gdb_assert ((a->objfile->separate_debug_objfile_backlink == b->objfile)
1090               || (b->objfile->separate_debug_objfile_backlink == a->objfile));
1091
1092   if (a->objfile->separate_debug_objfile != NULL)
1093     return a;
1094   return b;
1095 }
1096
1097 /* Return 1 if SECTION should be inserted into the section map.
1098    We want to insert only non-overlay and non-TLS section.  */
1099
1100 static int
1101 insert_section_p (const struct bfd *abfd,
1102                   const struct bfd_section *section)
1103 {
1104   const bfd_vma lma = bfd_section_lma (abfd, section);
1105
1106   if (lma != 0 && lma != bfd_section_vma (abfd, section)
1107       && (bfd_get_file_flags (abfd) & BFD_IN_MEMORY) == 0)
1108     /* This is an overlay section.  IN_MEMORY check is needed to avoid
1109        discarding sections from the "system supplied DSO" (aka vdso)
1110        on some Linux systems (e.g. Fedora 11).  */
1111     return 0;
1112   if ((bfd_get_section_flags (abfd, section) & SEC_THREAD_LOCAL) != 0)
1113     /* This is a TLS section.  */
1114     return 0;
1115
1116   return 1;
1117 }
1118
1119 /* Filter out overlapping sections where one section came from the real
1120    objfile, and the other from a separate debuginfo file.
1121    Return the size of table after redundant sections have been eliminated.  */
1122
1123 static int
1124 filter_debuginfo_sections (struct obj_section **map, int map_size)
1125 {
1126   int i, j;
1127
1128   for (i = 0, j = 0; i < map_size - 1; i++)
1129     {
1130       struct obj_section *const sect1 = map[i];
1131       struct obj_section *const sect2 = map[i + 1];
1132       const struct objfile *const objfile1 = sect1->objfile;
1133       const struct objfile *const objfile2 = sect2->objfile;
1134       const CORE_ADDR sect1_addr = obj_section_addr (sect1);
1135       const CORE_ADDR sect2_addr = obj_section_addr (sect2);
1136
1137       if (sect1_addr == sect2_addr
1138           && (objfile1->separate_debug_objfile == objfile2
1139               || objfile2->separate_debug_objfile == objfile1))
1140         {
1141           map[j++] = preferred_obj_section (sect1, sect2);
1142           ++i;
1143         }
1144       else
1145         map[j++] = sect1;
1146     }
1147
1148   if (i < map_size)
1149     {
1150       gdb_assert (i == map_size - 1);
1151       map[j++] = map[i];
1152     }
1153
1154   /* The map should not have shrunk to less than half the original size.  */
1155   gdb_assert (map_size / 2 <= j);
1156
1157   return j;
1158 }
1159
1160 /* Filter out overlapping sections, issuing a warning if any are found.
1161    Overlapping sections could really be overlay sections which we didn't
1162    classify as such in insert_section_p, or we could be dealing with a
1163    corrupt binary.  */
1164
1165 static int
1166 filter_overlapping_sections (struct obj_section **map, int map_size)
1167 {
1168   int i, j;
1169
1170   for (i = 0, j = 0; i < map_size - 1; )
1171     {
1172       int k;
1173
1174       map[j++] = map[i];
1175       for (k = i + 1; k < map_size; k++)
1176         {
1177           struct obj_section *const sect1 = map[i];
1178           struct obj_section *const sect2 = map[k];
1179           const CORE_ADDR sect1_addr = obj_section_addr (sect1);
1180           const CORE_ADDR sect2_addr = obj_section_addr (sect2);
1181           const CORE_ADDR sect1_endaddr = obj_section_endaddr (sect1);
1182
1183           gdb_assert (sect1_addr <= sect2_addr);
1184
1185           if (sect1_endaddr <= sect2_addr)
1186             break;
1187           else
1188             {
1189               /* We have an overlap.  Report it.  */
1190
1191               struct objfile *const objf1 = sect1->objfile;
1192               struct objfile *const objf2 = sect2->objfile;
1193
1194               const struct bfd *const abfd1 = objf1->obfd;
1195               const struct bfd *const abfd2 = objf2->obfd;
1196
1197               const struct bfd_section *const bfds1 = sect1->the_bfd_section;
1198               const struct bfd_section *const bfds2 = sect2->the_bfd_section;
1199
1200               const CORE_ADDR sect2_endaddr = obj_section_endaddr (sect2);
1201
1202               struct gdbarch *const gdbarch = get_objfile_arch (objf1);
1203
1204               complaint (&symfile_complaints,
1205                          _("unexpected overlap between:\n"
1206                            " (A) section `%s' from `%s' [%s, %s)\n"
1207                            " (B) section `%s' from `%s' [%s, %s).\n"
1208                            "Will ignore section B"),
1209                          bfd_section_name (abfd1, bfds1), objf1->name,
1210                          paddress (gdbarch, sect1_addr),
1211                          paddress (gdbarch, sect1_endaddr),
1212                          bfd_section_name (abfd2, bfds2), objf2->name,
1213                          paddress (gdbarch, sect2_addr),
1214                          paddress (gdbarch, sect2_endaddr));
1215             }
1216         }
1217       i = k;
1218     }
1219
1220   if (i < map_size)
1221     {
1222       gdb_assert (i == map_size - 1);
1223       map[j++] = map[i];
1224     }
1225
1226   return j;
1227 }
1228
1229
1230 /* Update PMAP, PMAP_SIZE with sections from all objfiles, excluding any
1231    TLS, overlay and overlapping sections.  */
1232
1233 static void
1234 update_section_map (struct program_space *pspace,
1235                     struct obj_section ***pmap, int *pmap_size)
1236 {
1237   int alloc_size, map_size, i;
1238   struct obj_section *s, **map;
1239   struct objfile *objfile;
1240
1241   gdb_assert (get_objfile_pspace_data (pspace)->objfiles_changed_p != 0);
1242
1243   map = *pmap;
1244   xfree (map);
1245
1246   alloc_size = 0;
1247   ALL_PSPACE_OBJFILES (pspace, objfile)
1248     ALL_OBJFILE_OSECTIONS (objfile, s)
1249       if (insert_section_p (objfile->obfd, s->the_bfd_section))
1250         alloc_size += 1;
1251
1252   /* This happens on detach/attach (e.g. in gdb.base/attach.exp).  */
1253   if (alloc_size == 0)
1254     {
1255       *pmap = NULL;
1256       *pmap_size = 0;
1257       return;
1258     }
1259
1260   map = xmalloc (alloc_size * sizeof (*map));
1261
1262   i = 0;
1263   ALL_PSPACE_OBJFILES (pspace, objfile)
1264     ALL_OBJFILE_OSECTIONS (objfile, s)
1265       if (insert_section_p (objfile->obfd, s->the_bfd_section))
1266         map[i++] = s;
1267
1268   qsort (map, alloc_size, sizeof (*map), qsort_cmp);
1269   map_size = filter_debuginfo_sections(map, alloc_size);
1270   map_size = filter_overlapping_sections(map, map_size);
1271
1272   if (map_size < alloc_size)
1273     /* Some sections were eliminated.  Trim excess space.  */
1274     map = xrealloc (map, map_size * sizeof (*map));
1275   else
1276     gdb_assert (alloc_size == map_size);
1277
1278   *pmap = map;
1279   *pmap_size = map_size;
1280 }
1281
1282 /* Bsearch comparison function. */
1283
1284 static int
1285 bsearch_cmp (const void *key, const void *elt)
1286 {
1287   const CORE_ADDR pc = *(CORE_ADDR *) key;
1288   const struct obj_section *section = *(const struct obj_section **) elt;
1289
1290   if (pc < obj_section_addr (section))
1291     return -1;
1292   if (pc < obj_section_endaddr (section))
1293     return 0;
1294   return 1;
1295 }
1296
1297 /* Returns a section whose range includes PC or NULL if none found.   */
1298
1299 struct obj_section *
1300 find_pc_section (CORE_ADDR pc)
1301 {
1302   struct objfile_pspace_info *pspace_info;
1303   struct obj_section *s, **sp;
1304
1305   /* Check for mapped overlay section first.  */
1306   s = find_pc_mapped_section (pc);
1307   if (s)
1308     return s;
1309
1310   pspace_info = get_objfile_pspace_data (current_program_space);
1311   if (pspace_info->objfiles_changed_p != 0)
1312     {
1313       update_section_map (current_program_space,
1314                           &pspace_info->sections,
1315                           &pspace_info->num_sections);
1316
1317       /* Don't need updates to section map until objfiles are added,
1318          removed or relocated.  */
1319       pspace_info->objfiles_changed_p = 0;
1320     }
1321
1322   /* The C standard (ISO/IEC 9899:TC2) requires the BASE argument to
1323      bsearch be non-NULL.  */
1324   if (pspace_info->sections == NULL)
1325     {
1326       gdb_assert (pspace_info->num_sections == 0);
1327       return NULL;
1328     }
1329
1330   sp = (struct obj_section **) bsearch (&pc,
1331                                         pspace_info->sections,
1332                                         pspace_info->num_sections,
1333                                         sizeof (*pspace_info->sections),
1334                                         bsearch_cmp);
1335   if (sp != NULL)
1336     return *sp;
1337   return NULL;
1338 }
1339
1340
1341 /* In SVR4, we recognize a trampoline by it's section name. 
1342    That is, if the pc is in a section named ".plt" then we are in
1343    a trampoline.  */
1344
1345 int
1346 in_plt_section (CORE_ADDR pc, char *name)
1347 {
1348   struct obj_section *s;
1349   int retval = 0;
1350
1351   s = find_pc_section (pc);
1352
1353   retval = (s != NULL
1354             && s->the_bfd_section->name != NULL
1355             && strcmp (s->the_bfd_section->name, ".plt") == 0);
1356   return (retval);
1357 }
1358 \f
1359
1360 /* Keep a registry of per-objfile data-pointers required by other GDB
1361    modules.  */
1362
1363 struct objfile_data
1364 {
1365   unsigned index;
1366   void (*save) (struct objfile *, void *);
1367   void (*free) (struct objfile *, void *);
1368 };
1369
1370 struct objfile_data_registration
1371 {
1372   struct objfile_data *data;
1373   struct objfile_data_registration *next;
1374 };
1375   
1376 struct objfile_data_registry
1377 {
1378   struct objfile_data_registration *registrations;
1379   unsigned num_registrations;
1380 };
1381
1382 static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
1383
1384 const struct objfile_data *
1385 register_objfile_data_with_cleanup (void (*save) (struct objfile *, void *),
1386                                     void (*free) (struct objfile *, void *))
1387 {
1388   struct objfile_data_registration **curr;
1389
1390   /* Append new registration.  */
1391   for (curr = &objfile_data_registry.registrations;
1392        *curr != NULL; curr = &(*curr)->next);
1393
1394   *curr = XMALLOC (struct objfile_data_registration);
1395   (*curr)->next = NULL;
1396   (*curr)->data = XMALLOC (struct objfile_data);
1397   (*curr)->data->index = objfile_data_registry.num_registrations++;
1398   (*curr)->data->save = save;
1399   (*curr)->data->free = free;
1400
1401   return (*curr)->data;
1402 }
1403
1404 const struct objfile_data *
1405 register_objfile_data (void)
1406 {
1407   return register_objfile_data_with_cleanup (NULL, NULL);
1408 }
1409
1410 static void
1411 objfile_alloc_data (struct objfile *objfile)
1412 {
1413   gdb_assert (objfile->data == NULL);
1414   objfile->num_data = objfile_data_registry.num_registrations;
1415   objfile->data = XCALLOC (objfile->num_data, void *);
1416 }
1417
1418 static void
1419 objfile_free_data (struct objfile *objfile)
1420 {
1421   gdb_assert (objfile->data != NULL);
1422   clear_objfile_data (objfile);
1423   xfree (objfile->data);
1424   objfile->data = NULL;
1425 }
1426
1427 void
1428 clear_objfile_data (struct objfile *objfile)
1429 {
1430   struct objfile_data_registration *registration;
1431   int i;
1432
1433   gdb_assert (objfile->data != NULL);
1434
1435   /* Process all the save handlers.  */
1436
1437   for (registration = objfile_data_registry.registrations, i = 0;
1438        i < objfile->num_data;
1439        registration = registration->next, i++)
1440     if (objfile->data[i] != NULL && registration->data->save != NULL)
1441       registration->data->save (objfile, objfile->data[i]);
1442
1443   /* Now process all the free handlers.  */
1444
1445   for (registration = objfile_data_registry.registrations, i = 0;
1446        i < objfile->num_data;
1447        registration = registration->next, i++)
1448     if (objfile->data[i] != NULL && registration->data->free != NULL)
1449       registration->data->free (objfile, objfile->data[i]);
1450
1451   memset (objfile->data, 0, objfile->num_data * sizeof (void *));
1452 }
1453
1454 void
1455 set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
1456                   void *value)
1457 {
1458   gdb_assert (data->index < objfile->num_data);
1459   objfile->data[data->index] = value;
1460 }
1461
1462 void *
1463 objfile_data (struct objfile *objfile, const struct objfile_data *data)
1464 {
1465   gdb_assert (data->index < objfile->num_data);
1466   return objfile->data[data->index];
1467 }
1468
1469 /* Set objfiles_changed_p so section map will be rebuilt next time it
1470    is used.  Called by reread_symbols.  */
1471
1472 void
1473 objfiles_changed (void)
1474 {
1475   /* Rebuild section map next time we need it.  */
1476   get_objfile_pspace_data (current_program_space)->objfiles_changed_p = 1;
1477 }
1478
1479 /* Close ABFD, and warn if that fails.  */
1480
1481 int
1482 gdb_bfd_close_or_warn (struct bfd *abfd)
1483 {
1484   int ret;
1485   char *name = bfd_get_filename (abfd);
1486
1487   ret = bfd_close (abfd);
1488
1489   if (!ret)
1490     warning (_("cannot close \"%s\": %s"),
1491              name, bfd_errmsg (bfd_get_error ()));
1492
1493   return ret;
1494 }
1495
1496 /* Add reference to ABFD.  Returns ABFD.  */
1497 struct bfd *
1498 gdb_bfd_ref (struct bfd *abfd)
1499 {
1500   int *p_refcount;
1501
1502   if (abfd == NULL)
1503     return NULL;
1504
1505   p_refcount = bfd_usrdata (abfd);
1506
1507   if (p_refcount != NULL)
1508     {
1509       *p_refcount += 1;
1510       return abfd;
1511     }
1512
1513   p_refcount = xmalloc (sizeof (*p_refcount));
1514   *p_refcount = 1;
1515   bfd_usrdata (abfd) = p_refcount;
1516
1517   return abfd;
1518 }
1519
1520 /* Unreference and possibly close ABFD.  */
1521 void
1522 gdb_bfd_unref (struct bfd *abfd)
1523 {
1524   int *p_refcount;
1525   char *name;
1526
1527   if (abfd == NULL)
1528     return;
1529
1530   p_refcount = bfd_usrdata (abfd);
1531
1532   /* Valid range for p_refcount: a pointer to int counter, which has a
1533      value of 1 (single owner) or 2 (shared).  */
1534   gdb_assert (*p_refcount == 1 || *p_refcount == 2);
1535
1536   *p_refcount -= 1;
1537   if (*p_refcount > 0)
1538     return;
1539
1540   xfree (p_refcount);
1541   bfd_usrdata (abfd) = NULL;  /* Paranoia.  */
1542
1543   name = bfd_get_filename (abfd);
1544   gdb_bfd_close_or_warn (abfd);
1545   xfree (name);
1546 }
1547
1548 /* Provide a prototype to silence -Wmissing-prototypes.  */
1549 extern initialize_file_ftype _initialize_objfiles;
1550
1551 void
1552 _initialize_objfiles (void)
1553 {
1554   objfiles_pspace_data
1555     = register_program_space_data_with_cleanup (objfiles_pspace_data_cleanup);
1556 }