2009-10-23 Kai Tietz <kai.tietz@onevision.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
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
65a97ab3
PP
1116 /* This happens on detach/attach (e.g. in gdb.base/attach.exp). */
1117 if (alloc_size == 0)
1118 {
1119 *pmap = NULL;
1120 *pmap_size = 0;
1121 return;
1122 }
1123
6fbf07cd 1124 map = xmalloc (alloc_size * sizeof (*map));
a845f5cb 1125
3aad21cf 1126 i = 0;
6c95b8df
PA
1127 ALL_PSPACE_OBJFILES (pspace, objfile)
1128 ALL_OBJFILE_OSECTIONS (objfile, s)
1129 if (insert_section_p (objfile->obfd, s->the_bfd_section))
1130 map[i++] = s;
a845f5cb 1131
6fbf07cd
PP
1132 qsort (map, alloc_size, sizeof (*map), qsort_cmp);
1133 map_size = filter_debuginfo_sections(map, alloc_size);
1134 map_size = filter_overlapping_sections(map, map_size);
a845f5cb 1135
6fbf07cd
PP
1136 if (map_size < alloc_size)
1137 /* Some sections were eliminated. Trim excess space. */
1138 map = xrealloc (map, map_size * sizeof (*map));
3aad21cf 1139 else
6fbf07cd 1140 gdb_assert (alloc_size == map_size);
3aad21cf 1141
a845f5cb
PP
1142 *pmap = map;
1143 *pmap_size = map_size;
1144}
1145
1146/* Bsearch comparison function. */
1147
1148static int
1149bsearch_cmp (const void *key, const void *elt)
1150{
1151 const CORE_ADDR pc = *(CORE_ADDR *) key;
1152 const struct obj_section *section = *(const struct obj_section **) elt;
1153
1154 if (pc < obj_section_addr (section))
1155 return -1;
1156 if (pc < obj_section_endaddr (section))
1157 return 0;
1158 return 1;
1159}
1160
714835d5 1161/* Returns a section whose range includes PC or NULL if none found. */
c906108c
SS
1162
1163struct obj_section *
714835d5 1164find_pc_section (CORE_ADDR pc)
c906108c 1165{
6c95b8df 1166 struct objfile_pspace_info *pspace_info;
a845f5cb 1167 struct obj_section *s, **sp;
c5aa993b 1168
714835d5
UW
1169 /* Check for mapped overlay section first. */
1170 s = find_pc_mapped_section (pc);
1171 if (s)
1172 return s;
c906108c 1173
6c95b8df
PA
1174 pspace_info = get_objfile_pspace_data (current_program_space);
1175 if (pspace_info->objfiles_changed_p != 0)
a845f5cb 1176 {
6c95b8df
PA
1177 update_section_map (current_program_space,
1178 &pspace_info->sections,
1179 &pspace_info->num_sections);
c906108c 1180
6c95b8df
PA
1181 /* Don't need updates to section map until objfiles are added,
1182 removed or relocated. */
1183 pspace_info->objfiles_changed_p = 0;
a845f5cb
PP
1184 }
1185
65a97ab3
PP
1186 /* The C standard (ISO/IEC 9899:TC2) requires the BASE argument to
1187 bsearch be non-NULL. */
1188 if (pspace_info->sections == NULL)
1189 {
1190 gdb_assert (pspace_info->num_sections == 0);
1191 return NULL;
1192 }
1193
6c95b8df
PA
1194 sp = (struct obj_section **) bsearch (&pc,
1195 pspace_info->sections,
1196 pspace_info->num_sections,
1197 sizeof (*pspace_info->sections),
1198 bsearch_cmp);
a845f5cb
PP
1199 if (sp != NULL)
1200 return *sp;
714835d5 1201 return NULL;
c906108c 1202}
c5aa993b 1203
c906108c
SS
1204
1205/* In SVR4, we recognize a trampoline by it's section name.
1206 That is, if the pc is in a section named ".plt" then we are in
1207 a trampoline. */
1208
1209int
fba45db2 1210in_plt_section (CORE_ADDR pc, char *name)
c906108c
SS
1211{
1212 struct obj_section *s;
1213 int retval = 0;
c5aa993b
JM
1214
1215 s = find_pc_section (pc);
1216
c906108c
SS
1217 retval = (s != NULL
1218 && s->the_bfd_section->name != NULL
6314a349 1219 && strcmp (s->the_bfd_section->name, ".plt") == 0);
c5aa993b 1220 return (retval);
c906108c 1221}
0d0e1a63
MK
1222\f
1223
1224/* Keep a registry of per-objfile data-pointers required by other GDB
1225 modules. */
1226
1227struct objfile_data
1228{
1229 unsigned index;
c1bd65d0
DE
1230 void (*save) (struct objfile *, void *);
1231 void (*free) (struct objfile *, void *);
0d0e1a63
MK
1232};
1233
1234struct objfile_data_registration
1235{
1236 struct objfile_data *data;
1237 struct objfile_data_registration *next;
1238};
1239
1240struct objfile_data_registry
1241{
1242 struct objfile_data_registration *registrations;
1243 unsigned num_registrations;
1244};
1245
1246static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
1247
1248const struct objfile_data *
c1bd65d0
DE
1249register_objfile_data_with_cleanup (void (*save) (struct objfile *, void *),
1250 void (*free) (struct objfile *, void *))
0d0e1a63
MK
1251{
1252 struct objfile_data_registration **curr;
1253
1254 /* Append new registration. */
1255 for (curr = &objfile_data_registry.registrations;
1256 *curr != NULL; curr = &(*curr)->next);
7be570e7 1257
0d0e1a63
MK
1258 *curr = XMALLOC (struct objfile_data_registration);
1259 (*curr)->next = NULL;
1260 (*curr)->data = XMALLOC (struct objfile_data);
1261 (*curr)->data->index = objfile_data_registry.num_registrations++;
c1bd65d0
DE
1262 (*curr)->data->save = save;
1263 (*curr)->data->free = free;
0d0e1a63
MK
1264
1265 return (*curr)->data;
1266}
1267
60c5725c
DJ
1268const struct objfile_data *
1269register_objfile_data (void)
1270{
c1bd65d0 1271 return register_objfile_data_with_cleanup (NULL, NULL);
60c5725c
DJ
1272}
1273
0d0e1a63
MK
1274static void
1275objfile_alloc_data (struct objfile *objfile)
1276{
1277 gdb_assert (objfile->data == NULL);
1278 objfile->num_data = objfile_data_registry.num_registrations;
1279 objfile->data = XCALLOC (objfile->num_data, void *);
1280}
1281
1282static void
1283objfile_free_data (struct objfile *objfile)
1284{
1285 gdb_assert (objfile->data != NULL);
60c5725c 1286 clear_objfile_data (objfile);
0d0e1a63
MK
1287 xfree (objfile->data);
1288 objfile->data = NULL;
1289}
1290
7b097ae3
MK
1291void
1292clear_objfile_data (struct objfile *objfile)
1293{
60c5725c
DJ
1294 struct objfile_data_registration *registration;
1295 int i;
1296
7b097ae3 1297 gdb_assert (objfile->data != NULL);
60c5725c 1298
c1bd65d0
DE
1299 /* Process all the save handlers. */
1300
1301 for (registration = objfile_data_registry.registrations, i = 0;
1302 i < objfile->num_data;
1303 registration = registration->next, i++)
1304 if (objfile->data[i] != NULL && registration->data->save != NULL)
1305 registration->data->save (objfile, objfile->data[i]);
1306
1307 /* Now process all the free handlers. */
1308
60c5725c
DJ
1309 for (registration = objfile_data_registry.registrations, i = 0;
1310 i < objfile->num_data;
1311 registration = registration->next, i++)
c1bd65d0
DE
1312 if (objfile->data[i] != NULL && registration->data->free != NULL)
1313 registration->data->free (objfile, objfile->data[i]);
60c5725c 1314
7b097ae3
MK
1315 memset (objfile->data, 0, objfile->num_data * sizeof (void *));
1316}
1317
0d0e1a63
MK
1318void
1319set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
1320 void *value)
1321{
1322 gdb_assert (data->index < objfile->num_data);
1323 objfile->data[data->index] = value;
1324}
1325
1326void *
1327objfile_data (struct objfile *objfile, const struct objfile_data *data)
1328{
1329 gdb_assert (data->index < objfile->num_data);
1330 return objfile->data[data->index];
1331}
a845f5cb 1332
bb272892
PP
1333/* Set objfiles_changed_p so section map will be rebuilt next time it
1334 is used. Called by reread_symbols. */
a845f5cb
PP
1335
1336void
bb272892 1337objfiles_changed (void)
a845f5cb 1338{
6c95b8df
PA
1339 /* Rebuild section map next time we need it. */
1340 get_objfile_pspace_data (current_program_space)->objfiles_changed_p = 1;
a845f5cb 1341}
e3c69974 1342
3db741ef
PP
1343/* Add reference to ABFD. Returns ABFD. */
1344struct bfd *
1345gdb_bfd_ref (struct bfd *abfd)
1346{
1347 int *p_refcount = bfd_usrdata (abfd);
1348
1349 if (p_refcount != NULL)
1350 {
1351 *p_refcount += 1;
1352 return abfd;
1353 }
1354
1355 p_refcount = xmalloc (sizeof (*p_refcount));
1356 *p_refcount = 1;
1357 bfd_usrdata (abfd) = p_refcount;
1358
1359 return abfd;
1360}
1361
1362/* Unreference and possibly close ABFD. */
e3c69974
PP
1363void
1364gdb_bfd_unref (struct bfd *abfd)
1365{
1366 int *p_refcount;
1367 char *name;
1368
1369 if (abfd == NULL)
1370 return;
1371
4f6f9936 1372 p_refcount = bfd_usrdata (abfd);
e3c69974 1373
3db741ef
PP
1374 /* Valid range for p_refcount: a pointer to int counter, which has a
1375 value of 1 (single owner) or 2 (shared). */
1376 gdb_assert (*p_refcount == 1 || *p_refcount == 2);
1377
1378 *p_refcount -= 1;
1379 if (*p_refcount > 0)
1380 return;
e3c69974 1381
e3c69974 1382 xfree (p_refcount);
4f6f9936 1383 bfd_usrdata (abfd) = NULL; /* Paranoia. */
e3c69974
PP
1384
1385 name = bfd_get_filename (abfd);
1386 if (!bfd_close (abfd))
1387 warning (_("cannot close \"%s\": %s"),
1388 name, bfd_errmsg (bfd_get_error ()));
1389 xfree (name);
1390}
6c95b8df
PA
1391
1392/* Provide a prototype to silence -Wmissing-prototypes. */
1393extern initialize_file_ftype _initialize_objfiles;
1394
1395void
1396_initialize_objfiles (void)
1397{
1398 objfiles_pspace_data
1399 = register_program_space_data_with_cleanup (objfiles_pspace_data_cleanup);
1400}
This page took 1.859424 seconds and 4 git commands to generate.