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