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