6102091a0fd625cf2186ec90b1f46e9d8efa1c3e
[deliverable/binutils-gdb.git] / gdb / objfiles.c
1 /* GDB routines for manipulating objfiles.
2
3 Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5
6 Contributed by Cygnus Support, using pieces from other GDB modules.
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA. */
24
25 /* This file contains support routines for creating, manipulating, and
26 destroying objfile structures. */
27
28 #include "defs.h"
29 #include "bfd.h" /* Binary File Description */
30 #include "symtab.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "gdb-stabs.h"
34 #include "target.h"
35 #include "bcache.h"
36
37 #include "gdb_assert.h"
38 #include <sys/types.h>
39 #include "gdb_stat.h"
40 #include <fcntl.h>
41 #include "gdb_obstack.h"
42 #include "gdb_string.h"
43 #include "hashtab.h"
44
45 #include "breakpoint.h"
46 #include "block.h"
47 #include "dictionary.h"
48
49 /* Prototypes for local functions */
50
51 static void objfile_alloc_data (struct objfile *objfile);
52 static void objfile_free_data (struct objfile *objfile);
53
54 /* Externally visible variables that are owned by this module.
55 See declarations in objfile.h for more info. */
56
57 struct objfile *object_files; /* Linked list of all objfiles */
58 struct objfile *current_objfile; /* For symbol file being read in */
59 struct objfile *symfile_objfile; /* Main symbol table loaded from */
60 struct objfile *rt_common_objfile; /* For runtime common symbols */
61
62 /* Locate all mappable sections of a BFD file.
63 objfile_p_char is a char * to get it through
64 bfd_map_over_sections; we cast it back to its proper type. */
65
66 #ifndef TARGET_KEEP_SECTION
67 #define TARGET_KEEP_SECTION(ASECT) 0
68 #endif
69
70 /* Called via bfd_map_over_sections to build up the section table that
71 the objfile references. The objfile contains pointers to the start
72 of the table (objfile->sections) and to the first location after
73 the end of the table (objfile->sections_end). */
74
75 static void
76 add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
77 void *objfile_p_char)
78 {
79 struct objfile *objfile = (struct objfile *) objfile_p_char;
80 struct obj_section section;
81 flagword aflag;
82
83 aflag = bfd_get_section_flags (abfd, asect);
84
85 if (!(aflag & SEC_ALLOC) && !(TARGET_KEEP_SECTION (asect)))
86 return;
87
88 if (0 == bfd_section_size (abfd, asect))
89 return;
90 section.offset = 0;
91 section.objfile = objfile;
92 section.the_bfd_section = asect;
93 section.ovly_mapped = 0;
94 section.addr = bfd_section_vma (abfd, asect);
95 section.endaddr = section.addr + bfd_section_size (abfd, asect);
96 obstack_grow (&objfile->objfile_obstack, (char *) &section, sizeof (section));
97 objfile->sections_end = (struct obj_section *) (((unsigned long) objfile->sections_end) + 1);
98 }
99
100 /* Builds a section table for OBJFILE.
101 Returns 0 if OK, 1 on error (in which case bfd_error contains the
102 error).
103
104 Note that while we are building the table, which goes into the
105 psymbol obstack, we hijack the sections_end pointer to instead hold
106 a count of the number of sections. When bfd_map_over_sections
107 returns, this count is used to compute the pointer to the end of
108 the sections table, which then overwrites the count.
109
110 Also note that the OFFSET and OVLY_MAPPED in each table entry
111 are initialized to zero.
112
113 Also note that if anything else writes to the psymbol obstack while
114 we are building the table, we're pretty much hosed. */
115
116 int
117 build_objfile_section_table (struct objfile *objfile)
118 {
119 /* objfile->sections can be already set when reading a mapped symbol
120 file. I believe that we do need to rebuild the section table in
121 this case (we rebuild other things derived from the bfd), but we
122 can't free the old one (it's in the objfile_obstack). So we just
123 waste some memory. */
124
125 objfile->sections_end = 0;
126 bfd_map_over_sections (objfile->obfd, add_to_objfile_sections, (char *) objfile);
127 objfile->sections = (struct obj_section *)
128 obstack_finish (&objfile->objfile_obstack);
129 objfile->sections_end = objfile->sections + (unsigned long) objfile->sections_end;
130 return (0);
131 }
132
133 /* Given a pointer to an initialized bfd (ABFD) and some flag bits
134 allocate a new objfile struct, fill it in as best we can, link it
135 into the list of all known objfiles, and return a pointer to the
136 new objfile struct.
137
138 The FLAGS word contains various bits (OBJF_*) that can be taken as
139 requests for specific operations. Other bits like OBJF_SHARED are
140 simply copied through to the new objfile flags member. */
141
142 /* NOTE: carlton/2003-02-04: This function is called with args NULL, 0
143 by jv-lang.c, to create an artificial objfile used to hold
144 information about dynamically-loaded Java classes. Unfortunately,
145 that branch of this function doesn't get tested very frequently, so
146 it's prone to breakage. (E.g. at one time the name was set to NULL
147 in that situation, which broke a loop over all names in the dynamic
148 library loader.) If you change this function, please try to leave
149 things in a consistent state even if abfd is NULL. */
150
151 struct objfile *
152 allocate_objfile (bfd *abfd, int flags)
153 {
154 struct objfile *objfile = NULL;
155 struct objfile *last_one = NULL;
156
157 /* If we don't support mapped symbol files, didn't ask for the file to be
158 mapped, or failed to open the mapped file for some reason, then revert
159 back to an unmapped objfile. */
160
161 if (objfile == NULL)
162 {
163 objfile = (struct objfile *) xmalloc (sizeof (struct objfile));
164 memset (objfile, 0, sizeof (struct objfile));
165 objfile->md = NULL;
166 objfile->psymbol_cache = bcache_xmalloc ();
167 objfile->macro_cache = bcache_xmalloc ();
168 obstack_specify_allocation (&objfile->objfile_obstack, 0, 0, xmalloc,
169 xfree);
170 obstack_specify_allocation (&objfile->symbol_obstack, 0, 0, xmalloc,
171 xfree);
172
173 terminate_minimal_symbol_table (objfile);
174 }
175
176 objfile_alloc_data (objfile);
177
178 /* Update the per-objfile information that comes from the bfd, ensuring
179 that any data that is reference is saved in the per-objfile data
180 region. */
181
182 objfile->obfd = abfd;
183 if (objfile->name != NULL)
184 {
185 xmfree (objfile->md, objfile->name);
186 }
187 if (abfd != NULL)
188 {
189 objfile->name = mstrsave (objfile->md, bfd_get_filename (abfd));
190 objfile->mtime = bfd_get_mtime (abfd);
191
192 /* Build section table. */
193
194 if (build_objfile_section_table (objfile))
195 {
196 error ("Can't find the file sections in `%s': %s",
197 objfile->name, bfd_errmsg (bfd_get_error ()));
198 }
199 }
200 else
201 {
202 objfile->name = mstrsave (objfile->md, "<<anonymous objfile>>");
203 }
204
205 /* Initialize the section indexes for this objfile, so that we can
206 later detect if they are used w/o being properly assigned to. */
207
208 objfile->sect_index_text = -1;
209 objfile->sect_index_data = -1;
210 objfile->sect_index_bss = -1;
211 objfile->sect_index_rodata = -1;
212
213 /* We don't yet have a C++-specific namespace symtab. */
214
215 objfile->cp_namespace_symtab = NULL;
216
217 /* Add this file onto the tail of the linked list of other such files. */
218
219 objfile->next = NULL;
220 if (object_files == NULL)
221 object_files = objfile;
222 else
223 {
224 for (last_one = object_files;
225 last_one->next;
226 last_one = last_one->next);
227 last_one->next = objfile;
228 }
229
230 /* Save passed in flag bits. */
231 objfile->flags |= flags;
232
233 return (objfile);
234 }
235
236
237 /* Create the terminating entry of OBJFILE's minimal symbol table.
238 If OBJFILE->msymbols is zero, allocate a single entry from
239 OBJFILE->symbol_obstack; otherwise, just initialize
240 OBJFILE->msymbols[OBJFILE->minimal_symbol_count]. */
241 void
242 terminate_minimal_symbol_table (struct objfile *objfile)
243 {
244 if (! objfile->msymbols)
245 objfile->msymbols = ((struct minimal_symbol *)
246 obstack_alloc (&objfile->symbol_obstack,
247 sizeof (objfile->msymbols[0])));
248
249 {
250 struct minimal_symbol *m
251 = &objfile->msymbols[objfile->minimal_symbol_count];
252
253 memset (m, 0, sizeof (*m));
254 DEPRECATED_SYMBOL_NAME (m) = NULL;
255 SYMBOL_VALUE_ADDRESS (m) = 0;
256 MSYMBOL_INFO (m) = NULL;
257 MSYMBOL_SIZE (m) = 0;
258 MSYMBOL_TYPE (m) = mst_unknown;
259 SYMBOL_INIT_LANGUAGE_SPECIFIC (m, language_unknown);
260 }
261 }
262
263
264 /* Put one object file before a specified on in the global list.
265 This can be used to make sure an object file is destroyed before
266 another when using ALL_OBJFILES_SAFE to free all objfiles. */
267 void
268 put_objfile_before (struct objfile *objfile, struct objfile *before_this)
269 {
270 struct objfile **objp;
271
272 unlink_objfile (objfile);
273
274 for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
275 {
276 if (*objp == before_this)
277 {
278 objfile->next = *objp;
279 *objp = objfile;
280 return;
281 }
282 }
283
284 internal_error (__FILE__, __LINE__,
285 "put_objfile_before: before objfile not in list");
286 }
287
288 /* Put OBJFILE at the front of the list. */
289
290 void
291 objfile_to_front (struct objfile *objfile)
292 {
293 struct objfile **objp;
294 for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
295 {
296 if (*objp == objfile)
297 {
298 /* Unhook it from where it is. */
299 *objp = objfile->next;
300 /* Put it in the front. */
301 objfile->next = object_files;
302 object_files = objfile;
303 break;
304 }
305 }
306 }
307
308 /* Unlink OBJFILE from the list of known objfiles, if it is found in the
309 list.
310
311 It is not a bug, or error, to call this function if OBJFILE is not known
312 to be in the current list. This is done in the case of mapped objfiles,
313 for example, just to ensure that the mapped objfile doesn't appear twice
314 in the list. Since the list is threaded, linking in a mapped objfile
315 twice would create a circular list.
316
317 If OBJFILE turns out to be in the list, we zap it's NEXT pointer after
318 unlinking it, just to ensure that we have completely severed any linkages
319 between the OBJFILE and the list. */
320
321 void
322 unlink_objfile (struct objfile *objfile)
323 {
324 struct objfile **objpp;
325
326 for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
327 {
328 if (*objpp == objfile)
329 {
330 *objpp = (*objpp)->next;
331 objfile->next = NULL;
332 return;
333 }
334 }
335
336 internal_error (__FILE__, __LINE__,
337 "unlink_objfile: objfile already unlinked");
338 }
339
340
341 /* Destroy an objfile and all the symtabs and psymtabs under it. Note
342 that as much as possible is allocated on the symbol_obstack and
343 objfile_obstack, so that the memory can be efficiently freed.
344
345 Things which we do NOT free because they are not in malloc'd memory
346 or not in memory specific to the objfile include:
347
348 objfile -> sf
349
350 FIXME: If the objfile is using reusable symbol information (via mmalloc),
351 then we need to take into account the fact that more than one process
352 may be using the symbol information at the same time (when mmalloc is
353 extended to support cooperative locking). When more than one process
354 is using the mapped symbol info, we need to be more careful about when
355 we free objects in the reusable area. */
356
357 void
358 free_objfile (struct objfile *objfile)
359 {
360 if (objfile->separate_debug_objfile)
361 {
362 free_objfile (objfile->separate_debug_objfile);
363 }
364
365 if (objfile->separate_debug_objfile_backlink)
366 {
367 /* We freed the separate debug file, make sure the base objfile
368 doesn't reference it. */
369 objfile->separate_debug_objfile_backlink->separate_debug_objfile = NULL;
370 }
371
372 /* First do any symbol file specific actions required when we are
373 finished with a particular symbol file. Note that if the objfile
374 is using reusable symbol information (via mmalloc) then each of
375 these routines is responsible for doing the correct thing, either
376 freeing things which are valid only during this particular gdb
377 execution, or leaving them to be reused during the next one. */
378
379 if (objfile->sf != NULL)
380 {
381 (*objfile->sf->sym_finish) (objfile);
382 }
383
384 /* We always close the bfd. */
385
386 if (objfile->obfd != NULL)
387 {
388 char *name = bfd_get_filename (objfile->obfd);
389 if (!bfd_close (objfile->obfd))
390 warning ("cannot close \"%s\": %s",
391 name, bfd_errmsg (bfd_get_error ()));
392 xfree (name);
393 }
394
395 /* Remove it from the chain of all objfiles. */
396
397 unlink_objfile (objfile);
398
399 /* If we are going to free the runtime common objfile, mark it
400 as unallocated. */
401
402 if (objfile == rt_common_objfile)
403 rt_common_objfile = NULL;
404
405 /* Before the symbol table code was redone to make it easier to
406 selectively load and remove information particular to a specific
407 linkage unit, gdb used to do these things whenever the monolithic
408 symbol table was blown away. How much still needs to be done
409 is unknown, but we play it safe for now and keep each action until
410 it is shown to be no longer needed. */
411
412 /* I *think* all our callers call clear_symtab_users. If so, no need
413 to call this here. */
414 clear_pc_function_cache ();
415
416 /* The last thing we do is free the objfile struct itself. */
417
418 objfile_free_data (objfile);
419 if (objfile->name != NULL)
420 {
421 xmfree (objfile->md, objfile->name);
422 }
423 if (objfile->global_psymbols.list)
424 xmfree (objfile->md, objfile->global_psymbols.list);
425 if (objfile->static_psymbols.list)
426 xmfree (objfile->md, objfile->static_psymbols.list);
427 /* Free the obstacks for non-reusable objfiles */
428 bcache_xfree (objfile->psymbol_cache);
429 bcache_xfree (objfile->macro_cache);
430 if (objfile->demangled_names_hash)
431 htab_delete (objfile->demangled_names_hash);
432 obstack_free (&objfile->objfile_obstack, 0);
433 obstack_free (&objfile->symbol_obstack, 0);
434
435 xmfree (objfile->md, objfile);
436 objfile = NULL;
437 }
438
439 static void
440 do_free_objfile_cleanup (void *obj)
441 {
442 free_objfile (obj);
443 }
444
445 struct cleanup *
446 make_cleanup_free_objfile (struct objfile *obj)
447 {
448 return make_cleanup (do_free_objfile_cleanup, obj);
449 }
450
451 /* Free all the object files at once and clean up their users. */
452
453 void
454 free_all_objfiles (void)
455 {
456 struct objfile *objfile, *temp;
457
458 ALL_OBJFILES_SAFE (objfile, temp)
459 {
460 free_objfile (objfile);
461 }
462 clear_symtab_users ();
463 }
464 \f
465 /* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
466 entries in new_offsets. */
467 void
468 objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
469 {
470 struct section_offsets *delta =
471 ((struct section_offsets *)
472 alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)));
473
474 {
475 int i;
476 int something_changed = 0;
477 for (i = 0; i < objfile->num_sections; ++i)
478 {
479 delta->offsets[i] =
480 ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
481 if (ANOFFSET (delta, i) != 0)
482 something_changed = 1;
483 }
484 if (!something_changed)
485 return;
486 }
487
488 /* OK, get all the symtabs. */
489 {
490 struct symtab *s;
491
492 ALL_OBJFILE_SYMTABS (objfile, s)
493 {
494 struct linetable *l;
495 struct blockvector *bv;
496 int i;
497
498 /* First the line table. */
499 l = LINETABLE (s);
500 if (l)
501 {
502 for (i = 0; i < l->nitems; ++i)
503 l->item[i].pc += ANOFFSET (delta, s->block_line_section);
504 }
505
506 /* Don't relocate a shared blockvector more than once. */
507 if (!s->primary)
508 continue;
509
510 bv = BLOCKVECTOR (s);
511 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
512 {
513 struct block *b;
514 struct symbol *sym;
515 struct dict_iterator iter;
516
517 b = BLOCKVECTOR_BLOCK (bv, i);
518 BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
519 BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
520
521 ALL_BLOCK_SYMBOLS (b, iter, sym)
522 {
523 fixup_symbol_section (sym, objfile);
524
525 /* The RS6000 code from which this was taken skipped
526 any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
527 But I'm leaving out that test, on the theory that
528 they can't possibly pass the tests below. */
529 if ((SYMBOL_CLASS (sym) == LOC_LABEL
530 || SYMBOL_CLASS (sym) == LOC_STATIC
531 || SYMBOL_CLASS (sym) == LOC_INDIRECT)
532 && SYMBOL_SECTION (sym) >= 0)
533 {
534 SYMBOL_VALUE_ADDRESS (sym) +=
535 ANOFFSET (delta, SYMBOL_SECTION (sym));
536 }
537 #ifdef MIPS_EFI_SYMBOL_NAME
538 /* Relocate Extra Function Info for ecoff. */
539
540 else if (SYMBOL_CLASS (sym) == LOC_CONST
541 && SYMBOL_DOMAIN (sym) == LABEL_DOMAIN
542 && strcmp (DEPRECATED_SYMBOL_NAME (sym), MIPS_EFI_SYMBOL_NAME) == 0)
543 ecoff_relocate_efi (sym, ANOFFSET (delta,
544 s->block_line_section));
545 #endif
546 }
547 }
548 }
549 }
550
551 {
552 struct partial_symtab *p;
553
554 ALL_OBJFILE_PSYMTABS (objfile, p)
555 {
556 p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
557 p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
558 }
559 }
560
561 {
562 struct partial_symbol **psym;
563
564 for (psym = objfile->global_psymbols.list;
565 psym < objfile->global_psymbols.next;
566 psym++)
567 {
568 fixup_psymbol_section (*psym, objfile);
569 if (SYMBOL_SECTION (*psym) >= 0)
570 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
571 SYMBOL_SECTION (*psym));
572 }
573 for (psym = objfile->static_psymbols.list;
574 psym < objfile->static_psymbols.next;
575 psym++)
576 {
577 fixup_psymbol_section (*psym, objfile);
578 if (SYMBOL_SECTION (*psym) >= 0)
579 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
580 SYMBOL_SECTION (*psym));
581 }
582 }
583
584 {
585 struct minimal_symbol *msym;
586 ALL_OBJFILE_MSYMBOLS (objfile, msym)
587 if (SYMBOL_SECTION (msym) >= 0)
588 SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
589 }
590 /* Relocating different sections by different amounts may cause the symbols
591 to be out of order. */
592 msymbols_sort (objfile);
593
594 {
595 int i;
596 for (i = 0; i < objfile->num_sections; ++i)
597 (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
598 }
599
600 if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
601 {
602 /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
603 only as a fallback. */
604 struct obj_section *s;
605 s = find_pc_section (objfile->ei.entry_point);
606 if (s)
607 objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
608 else
609 objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
610 }
611
612 {
613 struct obj_section *s;
614 bfd *abfd;
615
616 abfd = objfile->obfd;
617
618 ALL_OBJFILE_OSECTIONS (objfile, s)
619 {
620 int idx = s->the_bfd_section->index;
621
622 s->addr += ANOFFSET (delta, idx);
623 s->endaddr += ANOFFSET (delta, idx);
624 }
625 }
626
627 if (objfile->ei.entry_func_lowpc != INVALID_ENTRY_LOWPC)
628 {
629 objfile->ei.entry_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
630 objfile->ei.entry_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
631 }
632
633 if (objfile->ei.deprecated_entry_file_lowpc != INVALID_ENTRY_LOWPC)
634 {
635 objfile->ei.deprecated_entry_file_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
636 objfile->ei.deprecated_entry_file_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
637 }
638
639 if (objfile->ei.main_func_lowpc != INVALID_ENTRY_LOWPC)
640 {
641 objfile->ei.main_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
642 objfile->ei.main_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
643 }
644
645 /* Relocate breakpoints as necessary, after things are relocated. */
646 breakpoint_re_set ();
647 }
648 \f
649 /* Many places in gdb want to test just to see if we have any partial
650 symbols available. This function returns zero if none are currently
651 available, nonzero otherwise. */
652
653 int
654 have_partial_symbols (void)
655 {
656 struct objfile *ofp;
657
658 ALL_OBJFILES (ofp)
659 {
660 if (ofp->psymtabs != NULL)
661 {
662 return 1;
663 }
664 }
665 return 0;
666 }
667
668 /* Many places in gdb want to test just to see if we have any full
669 symbols available. This function returns zero if none are currently
670 available, nonzero otherwise. */
671
672 int
673 have_full_symbols (void)
674 {
675 struct objfile *ofp;
676
677 ALL_OBJFILES (ofp)
678 {
679 if (ofp->symtabs != NULL)
680 {
681 return 1;
682 }
683 }
684 return 0;
685 }
686
687
688 /* This operations deletes all objfile entries that represent solibs that
689 weren't explicitly loaded by the user, via e.g., the add-symbol-file
690 command.
691 */
692 void
693 objfile_purge_solibs (void)
694 {
695 struct objfile *objf;
696 struct objfile *temp;
697
698 ALL_OBJFILES_SAFE (objf, temp)
699 {
700 /* We assume that the solib package has been purged already, or will
701 be soon.
702 */
703 if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
704 free_objfile (objf);
705 }
706 }
707
708
709 /* Many places in gdb want to test just to see if we have any minimal
710 symbols available. This function returns zero if none are currently
711 available, nonzero otherwise. */
712
713 int
714 have_minimal_symbols (void)
715 {
716 struct objfile *ofp;
717
718 ALL_OBJFILES (ofp)
719 {
720 if (ofp->minimal_symbol_count > 0)
721 {
722 return 1;
723 }
724 }
725 return 0;
726 }
727
728 /* Returns a section whose range includes PC and SECTION, or NULL if
729 none found. Note the distinction between the return type, struct
730 obj_section (which is defined in gdb), and the input type "struct
731 bfd_section" (which is a bfd-defined data type). The obj_section
732 contains a pointer to the "struct bfd_section". */
733
734 struct obj_section *
735 find_pc_sect_section (CORE_ADDR pc, struct bfd_section *section)
736 {
737 struct obj_section *s;
738 struct objfile *objfile;
739
740 ALL_OBJSECTIONS (objfile, s)
741 if ((section == 0 || section == s->the_bfd_section) &&
742 s->addr <= pc && pc < s->endaddr)
743 return (s);
744
745 return (NULL);
746 }
747
748 /* Returns a section whose range includes PC or NULL if none found.
749 Backward compatibility, no section. */
750
751 struct obj_section *
752 find_pc_section (CORE_ADDR pc)
753 {
754 return find_pc_sect_section (pc, find_pc_mapped_section (pc));
755 }
756
757
758 /* In SVR4, we recognize a trampoline by it's section name.
759 That is, if the pc is in a section named ".plt" then we are in
760 a trampoline. */
761
762 int
763 in_plt_section (CORE_ADDR pc, char *name)
764 {
765 struct obj_section *s;
766 int retval = 0;
767
768 s = find_pc_section (pc);
769
770 retval = (s != NULL
771 && s->the_bfd_section->name != NULL
772 && strcmp (s->the_bfd_section->name, ".plt") == 0);
773 return (retval);
774 }
775
776 /* Return nonzero if NAME is in the import list of OBJFILE. Else
777 return zero. */
778
779 int
780 is_in_import_list (char *name, struct objfile *objfile)
781 {
782 int i;
783
784 if (!objfile || !name || !*name)
785 return 0;
786
787 for (i = 0; i < objfile->import_list_size; i++)
788 if (objfile->import_list[i] && DEPRECATED_STREQ (name, objfile->import_list[i]))
789 return 1;
790 return 0;
791 }
792 \f
793
794 /* Keep a registry of per-objfile data-pointers required by other GDB
795 modules. */
796
797 struct objfile_data
798 {
799 unsigned index;
800 };
801
802 struct objfile_data_registration
803 {
804 struct objfile_data *data;
805 struct objfile_data_registration *next;
806 };
807
808 struct objfile_data_registry
809 {
810 struct objfile_data_registration *registrations;
811 unsigned num_registrations;
812 };
813
814 static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
815
816 const struct objfile_data *
817 register_objfile_data (void)
818 {
819 struct objfile_data_registration **curr;
820
821 /* Append new registration. */
822 for (curr = &objfile_data_registry.registrations;
823 *curr != NULL; curr = &(*curr)->next);
824
825 *curr = XMALLOC (struct objfile_data_registration);
826 (*curr)->next = NULL;
827 (*curr)->data = XMALLOC (struct objfile_data);
828 (*curr)->data->index = objfile_data_registry.num_registrations++;
829
830 return (*curr)->data;
831 }
832
833 static void
834 objfile_alloc_data (struct objfile *objfile)
835 {
836 gdb_assert (objfile->data == NULL);
837 objfile->num_data = objfile_data_registry.num_registrations;
838 objfile->data = XCALLOC (objfile->num_data, void *);
839 }
840
841 static void
842 objfile_free_data (struct objfile *objfile)
843 {
844 gdb_assert (objfile->data != NULL);
845 xfree (objfile->data);
846 objfile->data = NULL;
847 }
848
849 void
850 clear_objfile_data (struct objfile *objfile)
851 {
852 gdb_assert (objfile->data != NULL);
853 memset (objfile->data, 0, objfile->num_data * sizeof (void *));
854 }
855
856 void
857 set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
858 void *value)
859 {
860 gdb_assert (data->index < objfile->num_data);
861 objfile->data[data->index] = value;
862 }
863
864 void *
865 objfile_data (struct objfile *objfile, const struct objfile_data *data)
866 {
867 gdb_assert (data->index < objfile->num_data);
868 return objfile->data[data->index];
869 }
This page took 0.046399 seconds and 4 git commands to generate.