Fix formatting
[deliverable/binutils-gdb.git] / gdb / objfiles.c
1 /* GDB routines for manipulating objfiles.
2 Copyright 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3 Contributed by Cygnus Support, using pieces from other GDB modules.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
21
22 /* This file contains support routines for creating, manipulating, and
23 destroying objfile structures. */
24
25 #include "defs.h"
26 #include "bfd.h" /* Binary File Description */
27 #include "symtab.h"
28 #include "symfile.h"
29 #include "objfiles.h"
30 #include "gdb-stabs.h"
31 #include "target.h"
32
33 #include <sys/types.h>
34 #include "gdb_stat.h"
35 #include <fcntl.h>
36 #include "obstack.h"
37 #include "gdb_string.h"
38
39 #include "breakpoint.h"
40
41 /* Prototypes for local functions */
42
43 #if defined(USE_MMALLOC) && defined(HAVE_MMAP)
44
45 static int open_existing_mapped_file (char *, long, int);
46
47 static int open_mapped_file (char *filename, long mtime, int flags);
48
49 static PTR map_to_file (int);
50
51 #endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
52
53 static void add_to_objfile_sections (bfd *, sec_ptr, PTR);
54
55 /* Externally visible variables that are owned by this module.
56 See declarations in objfile.h for more info. */
57
58 struct objfile *object_files; /* Linked list of all objfiles */
59 struct objfile *current_objfile; /* For symbol file being read in */
60 struct objfile *symfile_objfile; /* Main symbol table loaded from */
61 struct objfile *rt_common_objfile; /* For runtime common symbols */
62
63 int mapped_symbol_files; /* Try to use mapped symbol files */
64
65 /* Locate all mappable sections of a BFD file.
66 objfile_p_char is a char * to get it through
67 bfd_map_over_sections; we cast it back to its proper type. */
68
69 #ifndef TARGET_KEEP_SECTION
70 #define TARGET_KEEP_SECTION(ASECT) 0
71 #endif
72
73 /* Called via bfd_map_over_sections to build up the section table that
74 the objfile references. The objfile contains pointers to the start
75 of the table (objfile->sections) and to the first location after
76 the end of the table (objfile->sections_end). */
77
78 static void
79 add_to_objfile_sections (abfd, asect, objfile_p_char)
80 bfd *abfd;
81 sec_ptr asect;
82 PTR objfile_p_char;
83 {
84 struct objfile *objfile = (struct objfile *) objfile_p_char;
85 struct obj_section section;
86 flagword aflag;
87
88 aflag = bfd_get_section_flags (abfd, asect);
89
90 if (!(aflag & SEC_ALLOC) && !(TARGET_KEEP_SECTION (asect)))
91 return;
92
93 if (0 == bfd_section_size (abfd, asect))
94 return;
95 section.offset = 0;
96 section.objfile = objfile;
97 section.the_bfd_section = asect;
98 section.ovly_mapped = 0;
99 section.addr = bfd_section_vma (abfd, asect);
100 section.endaddr = section.addr + bfd_section_size (abfd, asect);
101 obstack_grow (&objfile->psymbol_obstack, (char *) &section, sizeof (section));
102 objfile->sections_end = (struct obj_section *) (((unsigned long) objfile->sections_end) + 1);
103 }
104
105 /* Builds a section table for OBJFILE.
106 Returns 0 if OK, 1 on error (in which case bfd_error contains the
107 error).
108
109 Note that while we are building the table, which goes into the
110 psymbol obstack, we hijack the sections_end pointer to instead hold
111 a count of the number of sections. When bfd_map_over_sections
112 returns, this count is used to compute the pointer to the end of
113 the sections table, which then overwrites the count.
114
115 Also note that the OFFSET and OVLY_MAPPED in each table entry
116 are initialized to zero.
117
118 Also note that if anything else writes to the psymbol obstack while
119 we are building the table, we're pretty much hosed. */
120
121 int
122 build_objfile_section_table (objfile)
123 struct objfile *objfile;
124 {
125 /* objfile->sections can be already set when reading a mapped symbol
126 file. I believe that we do need to rebuild the section table in
127 this case (we rebuild other things derived from the bfd), but we
128 can't free the old one (it's in the psymbol_obstack). So we just
129 waste some memory. */
130
131 objfile->sections_end = 0;
132 bfd_map_over_sections (objfile->obfd, add_to_objfile_sections, (char *) objfile);
133 objfile->sections = (struct obj_section *)
134 obstack_finish (&objfile->psymbol_obstack);
135 objfile->sections_end = objfile->sections + (unsigned long) objfile->sections_end;
136 return (0);
137 }
138
139 /* Given a pointer to an initialized bfd (ABFD) and some flag bits
140 allocate a new objfile struct, fill it in as best we can, link it
141 into the list of all known objfiles, and return a pointer to the
142 new objfile struct.
143
144 The FLAGS word contains various bits (OBJF_*) that can be taken as
145 requests for specific operations, like trying to open a mapped
146 version of the objfile (OBJF_MAPPED). Other bits like
147 OBJF_SHARED are simply copied through to the new objfile flags
148 member. */
149
150 struct objfile *
151 allocate_objfile (abfd, flags)
152 bfd *abfd;
153 int flags;
154 {
155 struct objfile *objfile = NULL;
156 struct objfile *last_one = NULL;
157
158 if (mapped_symbol_files)
159 flags |= OBJF_MAPPED;
160
161 #if defined(USE_MMALLOC) && defined(HAVE_MMAP)
162 if (abfd != NULL)
163 {
164
165 /* If we can support mapped symbol files, try to open/reopen the
166 mapped file that corresponds to the file from which we wish to
167 read symbols. If the objfile is to be mapped, we must malloc
168 the structure itself using the mmap version, and arrange that
169 all memory allocation for the objfile uses the mmap routines.
170 If we are reusing an existing mapped file, from which we get
171 our objfile pointer, we have to make sure that we update the
172 pointers to the alloc/free functions in the obstack, in case
173 these functions have moved within the current gdb. */
174
175 int fd;
176
177 fd = open_mapped_file (bfd_get_filename (abfd), bfd_get_mtime (abfd),
178 flags);
179 if (fd >= 0)
180 {
181 PTR md;
182
183 if ((md = map_to_file (fd)) == NULL)
184 {
185 close (fd);
186 }
187 else if ((objfile = (struct objfile *) mmalloc_getkey (md, 0)) != NULL)
188 {
189 /* Update memory corruption handler function addresses. */
190 init_malloc (md);
191 objfile->md = md;
192 objfile->mmfd = fd;
193 /* Update pointers to functions to *our* copies */
194 obstack_chunkfun (&objfile->psymbol_cache.cache, xmmalloc);
195 obstack_freefun (&objfile->psymbol_cache.cache, mfree);
196 obstack_chunkfun (&objfile->psymbol_obstack, xmmalloc);
197 obstack_freefun (&objfile->psymbol_obstack, mfree);
198 obstack_chunkfun (&objfile->symbol_obstack, xmmalloc);
199 obstack_freefun (&objfile->symbol_obstack, mfree);
200 obstack_chunkfun (&objfile->type_obstack, xmmalloc);
201 obstack_freefun (&objfile->type_obstack, mfree);
202 /* If already in objfile list, unlink it. */
203 unlink_objfile (objfile);
204 /* Forget things specific to a particular gdb, may have changed. */
205 objfile->sf = NULL;
206 }
207 else
208 {
209
210 /* Set up to detect internal memory corruption. MUST be
211 done before the first malloc. See comments in
212 init_malloc() and mmcheck(). */
213
214 init_malloc (md);
215
216 objfile = (struct objfile *)
217 xmmalloc (md, sizeof (struct objfile));
218 memset (objfile, 0, sizeof (struct objfile));
219 objfile->md = md;
220 objfile->mmfd = fd;
221 objfile->flags |= OBJF_MAPPED;
222 mmalloc_setkey (objfile->md, 0, objfile);
223 obstack_specify_allocation_with_arg (&objfile->psymbol_cache.cache,
224 0, 0, xmmalloc, mfree,
225 objfile->md);
226 obstack_specify_allocation_with_arg (&objfile->psymbol_obstack,
227 0, 0, xmmalloc, mfree,
228 objfile->md);
229 obstack_specify_allocation_with_arg (&objfile->symbol_obstack,
230 0, 0, xmmalloc, mfree,
231 objfile->md);
232 obstack_specify_allocation_with_arg (&objfile->type_obstack,
233 0, 0, xmmalloc, mfree,
234 objfile->md);
235 }
236 }
237
238 if ((flags & OBJF_MAPPED) && (objfile == NULL))
239 {
240 warning ("symbol table for '%s' will not be mapped",
241 bfd_get_filename (abfd));
242 flags &= ~OBJF_MAPPED;
243 }
244 }
245 #else /* !defined(USE_MMALLOC) || !defined(HAVE_MMAP) */
246
247 if (flags & OBJF_MAPPED)
248 {
249 warning ("mapped symbol tables are not supported on this machine; missing or broken mmap().");
250
251 /* Turn off the global flag so we don't try to do mapped symbol tables
252 any more, which shuts up gdb unless the user specifically gives the
253 "mapped" keyword again. */
254
255 mapped_symbol_files = 0;
256 flags &= ~OBJF_MAPPED;
257 }
258
259 #endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
260
261 /* If we don't support mapped symbol files, didn't ask for the file to be
262 mapped, or failed to open the mapped file for some reason, then revert
263 back to an unmapped objfile. */
264
265 if (objfile == NULL)
266 {
267 objfile = (struct objfile *) xmalloc (sizeof (struct objfile));
268 memset (objfile, 0, sizeof (struct objfile));
269 objfile->md = NULL;
270 obstack_specify_allocation (&objfile->psymbol_cache.cache, 0, 0,
271 xmalloc, free);
272 obstack_specify_allocation (&objfile->psymbol_obstack, 0, 0, xmalloc,
273 free);
274 obstack_specify_allocation (&objfile->symbol_obstack, 0, 0, xmalloc,
275 free);
276 obstack_specify_allocation (&objfile->type_obstack, 0, 0, xmalloc,
277 free);
278 flags &= ~OBJF_MAPPED;
279 }
280
281 /* Update the per-objfile information that comes from the bfd, ensuring
282 that any data that is reference is saved in the per-objfile data
283 region. */
284
285 objfile->obfd = abfd;
286 if (objfile->name != NULL)
287 {
288 mfree (objfile->md, objfile->name);
289 }
290 if (abfd != NULL)
291 {
292 objfile->name = mstrsave (objfile->md, bfd_get_filename (abfd));
293 objfile->mtime = bfd_get_mtime (abfd);
294
295 /* Build section table. */
296
297 if (build_objfile_section_table (objfile))
298 {
299 error ("Can't find the file sections in `%s': %s",
300 objfile->name, bfd_errmsg (bfd_get_error ()));
301 }
302 }
303
304 /* Initialize the section indexes for this objfile, so that we can
305 later detect if they are used w/o being properly assigned to. */
306
307 objfile->sect_index_text = -1;
308 objfile->sect_index_data = -1;
309 objfile->sect_index_bss = -1;
310 objfile->sect_index_rodata = -1;
311
312 /* Add this file onto the tail of the linked list of other such files. */
313
314 objfile->next = NULL;
315 if (object_files == NULL)
316 object_files = objfile;
317 else
318 {
319 for (last_one = object_files;
320 last_one->next;
321 last_one = last_one->next);
322 last_one->next = objfile;
323 }
324
325 /* Save passed in flag bits. */
326 objfile->flags |= flags;
327
328 return (objfile);
329 }
330
331 /* Put OBJFILE at the front of the list. */
332
333 void
334 objfile_to_front (objfile)
335 struct objfile *objfile;
336 {
337 struct objfile **objp;
338 for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
339 {
340 if (*objp == objfile)
341 {
342 /* Unhook it from where it is. */
343 *objp = objfile->next;
344 /* Put it in the front. */
345 objfile->next = object_files;
346 object_files = objfile;
347 break;
348 }
349 }
350 }
351
352 /* Unlink OBJFILE from the list of known objfiles, if it is found in the
353 list.
354
355 It is not a bug, or error, to call this function if OBJFILE is not known
356 to be in the current list. This is done in the case of mapped objfiles,
357 for example, just to ensure that the mapped objfile doesn't appear twice
358 in the list. Since the list is threaded, linking in a mapped objfile
359 twice would create a circular list.
360
361 If OBJFILE turns out to be in the list, we zap it's NEXT pointer after
362 unlinking it, just to ensure that we have completely severed any linkages
363 between the OBJFILE and the list. */
364
365 void
366 unlink_objfile (objfile)
367 struct objfile *objfile;
368 {
369 struct objfile **objpp;
370
371 for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
372 {
373 if (*objpp == objfile)
374 {
375 *objpp = (*objpp)->next;
376 objfile->next = NULL;
377 return;
378 }
379 }
380
381 internal_error ("objfiles.c (unlink_objfile): objfile already unlinked");
382 }
383
384
385 /* Destroy an objfile and all the symtabs and psymtabs under it. Note
386 that as much as possible is allocated on the symbol_obstack and
387 psymbol_obstack, so that the memory can be efficiently freed.
388
389 Things which we do NOT free because they are not in malloc'd memory
390 or not in memory specific to the objfile include:
391
392 objfile -> sf
393
394 FIXME: If the objfile is using reusable symbol information (via mmalloc),
395 then we need to take into account the fact that more than one process
396 may be using the symbol information at the same time (when mmalloc is
397 extended to support cooperative locking). When more than one process
398 is using the mapped symbol info, we need to be more careful about when
399 we free objects in the reusable area. */
400
401 void
402 free_objfile (objfile)
403 struct objfile *objfile;
404 {
405 /* First do any symbol file specific actions required when we are
406 finished with a particular symbol file. Note that if the objfile
407 is using reusable symbol information (via mmalloc) then each of
408 these routines is responsible for doing the correct thing, either
409 freeing things which are valid only during this particular gdb
410 execution, or leaving them to be reused during the next one. */
411
412 if (objfile->sf != NULL)
413 {
414 (*objfile->sf->sym_finish) (objfile);
415 }
416
417 /* We always close the bfd. */
418
419 if (objfile->obfd != NULL)
420 {
421 char *name = bfd_get_filename (objfile->obfd);
422 if (!bfd_close (objfile->obfd))
423 warning ("cannot close \"%s\": %s",
424 name, bfd_errmsg (bfd_get_error ()));
425 free (name);
426 }
427
428 /* Remove it from the chain of all objfiles. */
429
430 unlink_objfile (objfile);
431
432 /* If we are going to free the runtime common objfile, mark it
433 as unallocated. */
434
435 if (objfile == rt_common_objfile)
436 rt_common_objfile = NULL;
437
438 /* Before the symbol table code was redone to make it easier to
439 selectively load and remove information particular to a specific
440 linkage unit, gdb used to do these things whenever the monolithic
441 symbol table was blown away. How much still needs to be done
442 is unknown, but we play it safe for now and keep each action until
443 it is shown to be no longer needed. */
444
445 /* I *think* all our callers call clear_symtab_users. If so, no need
446 to call this here. */
447 clear_pc_function_cache ();
448
449 /* The last thing we do is free the objfile struct itself for the
450 non-reusable case, or detach from the mapped file for the reusable
451 case. Note that the mmalloc_detach or the mfree is the last thing
452 we can do with this objfile. */
453
454 #if defined(USE_MMALLOC) && defined(HAVE_MMAP)
455
456 if (objfile->flags & OBJF_MAPPED)
457 {
458 /* Remember the fd so we can close it. We can't close it before
459 doing the detach, and after the detach the objfile is gone. */
460 int mmfd;
461
462 mmfd = objfile->mmfd;
463 mmalloc_detach (objfile->md);
464 objfile = NULL;
465 close (mmfd);
466 }
467
468 #endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
469
470 /* If we still have an objfile, then either we don't support reusable
471 objfiles or this one was not reusable. So free it normally. */
472
473 if (objfile != NULL)
474 {
475 if (objfile->name != NULL)
476 {
477 mfree (objfile->md, objfile->name);
478 }
479 if (objfile->global_psymbols.list)
480 mfree (objfile->md, objfile->global_psymbols.list);
481 if (objfile->static_psymbols.list)
482 mfree (objfile->md, objfile->static_psymbols.list);
483 /* Free the obstacks for non-reusable objfiles */
484 free_bcache (&objfile->psymbol_cache);
485 obstack_free (&objfile->psymbol_obstack, 0);
486 obstack_free (&objfile->symbol_obstack, 0);
487 obstack_free (&objfile->type_obstack, 0);
488 mfree (objfile->md, objfile);
489 objfile = NULL;
490 }
491 }
492
493 static void
494 do_free_objfile_cleanup (void *obj)
495 {
496 free_objfile (obj);
497 }
498
499 struct cleanup *
500 make_cleanup_free_objfile (struct objfile *obj)
501 {
502 return make_cleanup (do_free_objfile_cleanup, obj);
503 }
504
505 /* Free all the object files at once and clean up their users. */
506
507 void
508 free_all_objfiles ()
509 {
510 struct objfile *objfile, *temp;
511
512 ALL_OBJFILES_SAFE (objfile, temp)
513 {
514 free_objfile (objfile);
515 }
516 clear_symtab_users ();
517 }
518 \f
519 /* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
520 entries in new_offsets. */
521 void
522 objfile_relocate (objfile, new_offsets)
523 struct objfile *objfile;
524 struct section_offsets *new_offsets;
525 {
526 struct section_offsets *delta =
527 (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
528
529 {
530 int i;
531 int something_changed = 0;
532 for (i = 0; i < objfile->num_sections; ++i)
533 {
534 ANOFFSET (delta, i) =
535 ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
536 if (ANOFFSET (delta, i) != 0)
537 something_changed = 1;
538 }
539 if (!something_changed)
540 return;
541 }
542
543 /* OK, get all the symtabs. */
544 {
545 struct symtab *s;
546
547 ALL_OBJFILE_SYMTABS (objfile, s)
548 {
549 struct linetable *l;
550 struct blockvector *bv;
551 int i;
552
553 /* First the line table. */
554 l = LINETABLE (s);
555 if (l)
556 {
557 for (i = 0; i < l->nitems; ++i)
558 l->item[i].pc += ANOFFSET (delta, s->block_line_section);
559 }
560
561 /* Don't relocate a shared blockvector more than once. */
562 if (!s->primary)
563 continue;
564
565 bv = BLOCKVECTOR (s);
566 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
567 {
568 struct block *b;
569 int j;
570
571 b = BLOCKVECTOR_BLOCK (bv, i);
572 BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
573 BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
574
575 for (j = 0; j < BLOCK_NSYMS (b); ++j)
576 {
577 struct symbol *sym = BLOCK_SYM (b, j);
578 /* The RS6000 code from which this was taken skipped
579 any symbols in STRUCT_NAMESPACE or UNDEF_NAMESPACE.
580 But I'm leaving out that test, on the theory that
581 they can't possibly pass the tests below. */
582 if ((SYMBOL_CLASS (sym) == LOC_LABEL
583 || SYMBOL_CLASS (sym) == LOC_STATIC
584 || SYMBOL_CLASS (sym) == LOC_INDIRECT)
585 && SYMBOL_SECTION (sym) >= 0)
586 {
587 SYMBOL_VALUE_ADDRESS (sym) +=
588 ANOFFSET (delta, SYMBOL_SECTION (sym));
589 }
590 #ifdef MIPS_EFI_SYMBOL_NAME
591 /* Relocate Extra Function Info for ecoff. */
592
593 else if (SYMBOL_CLASS (sym) == LOC_CONST
594 && SYMBOL_NAMESPACE (sym) == LABEL_NAMESPACE
595 && STRCMP (SYMBOL_NAME (sym), MIPS_EFI_SYMBOL_NAME) == 0)
596 ecoff_relocate_efi (sym, ANOFFSET (delta,
597 s->block_line_section));
598 #endif
599 }
600 }
601 }
602 }
603
604 {
605 struct partial_symtab *p;
606
607 ALL_OBJFILE_PSYMTABS (objfile, p)
608 {
609 p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
610 p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
611 }
612 }
613
614 {
615 struct partial_symbol **psym;
616
617 for (psym = objfile->global_psymbols.list;
618 psym < objfile->global_psymbols.next;
619 psym++)
620 if (SYMBOL_SECTION (*psym) >= 0)
621 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
622 SYMBOL_SECTION (*psym));
623 for (psym = objfile->static_psymbols.list;
624 psym < objfile->static_psymbols.next;
625 psym++)
626 if (SYMBOL_SECTION (*psym) >= 0)
627 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
628 SYMBOL_SECTION (*psym));
629 }
630
631 {
632 struct minimal_symbol *msym;
633 ALL_OBJFILE_MSYMBOLS (objfile, msym)
634 if (SYMBOL_SECTION (msym) >= 0)
635 SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
636 }
637 /* Relocating different sections by different amounts may cause the symbols
638 to be out of order. */
639 msymbols_sort (objfile);
640
641 {
642 int i;
643 for (i = 0; i < objfile->num_sections; ++i)
644 ANOFFSET (objfile->section_offsets, i) = ANOFFSET (new_offsets, i);
645 }
646
647 {
648 struct obj_section *s;
649 bfd *abfd;
650
651 abfd = objfile->obfd;
652
653 ALL_OBJFILE_OSECTIONS (objfile, s)
654 {
655 flagword flags;
656
657 flags = bfd_get_section_flags (abfd, s->the_bfd_section);
658
659 if (flags & SEC_CODE)
660 {
661 s->addr += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
662 s->endaddr += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
663 }
664 else if (flags & (SEC_DATA | SEC_LOAD))
665 {
666 s->addr += ANOFFSET (delta, SECT_OFF_DATA (objfile));
667 s->endaddr += ANOFFSET (delta, SECT_OFF_DATA (objfile));
668 }
669 else if (flags & SEC_ALLOC)
670 {
671 s->addr += ANOFFSET (delta, SECT_OFF_BSS (objfile));
672 s->endaddr += ANOFFSET (delta, SECT_OFF_BSS (objfile));
673 }
674 }
675 }
676
677 if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
678 objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
679
680 if (objfile->ei.entry_func_lowpc != INVALID_ENTRY_LOWPC)
681 {
682 objfile->ei.entry_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
683 objfile->ei.entry_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
684 }
685
686 if (objfile->ei.entry_file_lowpc != INVALID_ENTRY_LOWPC)
687 {
688 objfile->ei.entry_file_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
689 objfile->ei.entry_file_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
690 }
691
692 if (objfile->ei.main_func_lowpc != INVALID_ENTRY_LOWPC)
693 {
694 objfile->ei.main_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
695 objfile->ei.main_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
696 }
697
698 /* Relocate breakpoints as necessary, after things are relocated. */
699 breakpoint_re_set ();
700 }
701 \f
702 /* Many places in gdb want to test just to see if we have any partial
703 symbols available. This function returns zero if none are currently
704 available, nonzero otherwise. */
705
706 int
707 have_partial_symbols ()
708 {
709 struct objfile *ofp;
710
711 ALL_OBJFILES (ofp)
712 {
713 if (ofp->psymtabs != NULL)
714 {
715 return 1;
716 }
717 }
718 return 0;
719 }
720
721 /* Many places in gdb want to test just to see if we have any full
722 symbols available. This function returns zero if none are currently
723 available, nonzero otherwise. */
724
725 int
726 have_full_symbols ()
727 {
728 struct objfile *ofp;
729
730 ALL_OBJFILES (ofp)
731 {
732 if (ofp->symtabs != NULL)
733 {
734 return 1;
735 }
736 }
737 return 0;
738 }
739
740
741 /* This operations deletes all objfile entries that represent solibs that
742 weren't explicitly loaded by the user, via e.g., the add-symbol-file
743 command.
744 */
745 void
746 objfile_purge_solibs ()
747 {
748 struct objfile *objf;
749 struct objfile *temp;
750
751 ALL_OBJFILES_SAFE (objf, temp)
752 {
753 /* We assume that the solib package has been purged already, or will
754 be soon.
755 */
756 if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
757 free_objfile (objf);
758 }
759 }
760
761
762 /* Many places in gdb want to test just to see if we have any minimal
763 symbols available. This function returns zero if none are currently
764 available, nonzero otherwise. */
765
766 int
767 have_minimal_symbols ()
768 {
769 struct objfile *ofp;
770
771 ALL_OBJFILES (ofp)
772 {
773 if (ofp->msymbols != NULL)
774 {
775 return 1;
776 }
777 }
778 return 0;
779 }
780
781 #if defined(USE_MMALLOC) && defined(HAVE_MMAP)
782
783 /* Given the name of a mapped symbol file in SYMSFILENAME, and the timestamp
784 of the corresponding symbol file in MTIME, try to open an existing file
785 with the name SYMSFILENAME and verify it is more recent than the base
786 file by checking it's timestamp against MTIME.
787
788 If SYMSFILENAME does not exist (or can't be stat'd), simply returns -1.
789
790 If SYMSFILENAME does exist, but is out of date, we check to see if the
791 user has specified creation of a mapped file. If so, we don't issue
792 any warning message because we will be creating a new mapped file anyway,
793 overwriting the old one. If not, then we issue a warning message so that
794 the user will know why we aren't using this existing mapped symbol file.
795 In either case, we return -1.
796
797 If SYMSFILENAME does exist and is not out of date, but can't be opened for
798 some reason, then prints an appropriate system error message and returns -1.
799
800 Otherwise, returns the open file descriptor. */
801
802 static int
803 open_existing_mapped_file (symsfilename, mtime, flags)
804 char *symsfilename;
805 long mtime;
806 int flags;
807 {
808 int fd = -1;
809 struct stat sbuf;
810
811 if (stat (symsfilename, &sbuf) == 0)
812 {
813 if (sbuf.st_mtime < mtime)
814 {
815 if (!(flags & OBJF_MAPPED))
816 {
817 warning ("mapped symbol file `%s' is out of date, ignored it",
818 symsfilename);
819 }
820 }
821 else if ((fd = open (symsfilename, O_RDWR)) < 0)
822 {
823 if (error_pre_print)
824 {
825 printf_unfiltered (error_pre_print);
826 }
827 print_sys_errmsg (symsfilename, errno);
828 }
829 }
830 return (fd);
831 }
832
833 /* Look for a mapped symbol file that corresponds to FILENAME and is more
834 recent than MTIME. If MAPPED is nonzero, the user has asked that gdb
835 use a mapped symbol file for this file, so create a new one if one does
836 not currently exist.
837
838 If found, then return an open file descriptor for the file, otherwise
839 return -1.
840
841 This routine is responsible for implementing the policy that generates
842 the name of the mapped symbol file from the name of a file containing
843 symbols that gdb would like to read. Currently this policy is to append
844 ".syms" to the name of the file.
845
846 This routine is also responsible for implementing the policy that
847 determines where the mapped symbol file is found (the search path).
848 This policy is that when reading an existing mapped file, a file of
849 the correct name in the current directory takes precedence over a
850 file of the correct name in the same directory as the symbol file.
851 When creating a new mapped file, it is always created in the current
852 directory. This helps to minimize the chances of a user unknowingly
853 creating big mapped files in places like /bin and /usr/local/bin, and
854 allows a local copy to override a manually installed global copy (in
855 /bin for example). */
856
857 static int
858 open_mapped_file (filename, mtime, flags)
859 char *filename;
860 long mtime;
861 int flags;
862 {
863 int fd;
864 char *symsfilename;
865
866 /* First try to open an existing file in the current directory, and
867 then try the directory where the symbol file is located. */
868
869 symsfilename = concat ("./", basename (filename), ".syms", (char *) NULL);
870 if ((fd = open_existing_mapped_file (symsfilename, mtime, flags)) < 0)
871 {
872 free (symsfilename);
873 symsfilename = concat (filename, ".syms", (char *) NULL);
874 fd = open_existing_mapped_file (symsfilename, mtime, flags);
875 }
876
877 /* If we don't have an open file by now, then either the file does not
878 already exist, or the base file has changed since it was created. In
879 either case, if the user has specified use of a mapped file, then
880 create a new mapped file, truncating any existing one. If we can't
881 create one, print a system error message saying why we can't.
882
883 By default the file is rw for everyone, with the user's umask taking
884 care of turning off the permissions the user wants off. */
885
886 if ((fd < 0) && (flags & OBJF_MAPPED))
887 {
888 free (symsfilename);
889 symsfilename = concat ("./", basename (filename), ".syms",
890 (char *) NULL);
891 if ((fd = open (symsfilename, O_RDWR | O_CREAT | O_TRUNC, 0666)) < 0)
892 {
893 if (error_pre_print)
894 {
895 printf_unfiltered (error_pre_print);
896 }
897 print_sys_errmsg (symsfilename, errno);
898 }
899 }
900
901 free (symsfilename);
902 return (fd);
903 }
904
905 static PTR
906 map_to_file (fd)
907 int fd;
908 {
909 PTR md;
910 CORE_ADDR mapto;
911
912 md = mmalloc_attach (fd, (PTR) 0);
913 if (md != NULL)
914 {
915 mapto = (CORE_ADDR) mmalloc_getkey (md, 1);
916 md = mmalloc_detach (md);
917 if (md != NULL)
918 {
919 /* FIXME: should figure out why detach failed */
920 md = NULL;
921 }
922 else if (mapto != (CORE_ADDR) NULL)
923 {
924 /* This mapping file needs to be remapped at "mapto" */
925 md = mmalloc_attach (fd, (PTR) mapto);
926 }
927 else
928 {
929 /* This is a freshly created mapping file. */
930 mapto = (CORE_ADDR) mmalloc_findbase (20 * 1024 * 1024);
931 if (mapto != 0)
932 {
933 /* To avoid reusing the freshly created mapping file, at the
934 address selected by mmap, we must truncate it before trying
935 to do an attach at the address we want. */
936 ftruncate (fd, 0);
937 md = mmalloc_attach (fd, (PTR) mapto);
938 if (md != NULL)
939 {
940 mmalloc_setkey (md, 1, (PTR) mapto);
941 }
942 }
943 }
944 }
945 return (md);
946 }
947
948 #endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
949
950 /* Returns a section whose range includes PC and SECTION,
951 or NULL if none found. Note the distinction between the return type,
952 struct obj_section (which is defined in gdb), and the input type
953 struct sec (which is a bfd-defined data type). The obj_section
954 contains a pointer to the bfd struct sec section. */
955
956 struct obj_section *
957 find_pc_sect_section (pc, section)
958 CORE_ADDR pc;
959 struct sec *section;
960 {
961 struct obj_section *s;
962 struct objfile *objfile;
963
964 ALL_OBJSECTIONS (objfile, s)
965 if ((section == 0 || section == s->the_bfd_section) &&
966 s->addr <= pc && pc < s->endaddr)
967 return (s);
968
969 return (NULL);
970 }
971
972 /* Returns a section whose range includes PC or NULL if none found.
973 Backward compatibility, no section. */
974
975 struct obj_section *
976 find_pc_section (pc)
977 CORE_ADDR pc;
978 {
979 return find_pc_sect_section (pc, find_pc_mapped_section (pc));
980 }
981
982
983 /* In SVR4, we recognize a trampoline by it's section name.
984 That is, if the pc is in a section named ".plt" then we are in
985 a trampoline. */
986
987 int
988 in_plt_section (pc, name)
989 CORE_ADDR pc;
990 char *name;
991 {
992 struct obj_section *s;
993 int retval = 0;
994
995 s = find_pc_section (pc);
996
997 retval = (s != NULL
998 && s->the_bfd_section->name != NULL
999 && STREQ (s->the_bfd_section->name, ".plt"));
1000 return (retval);
1001 }
1002
1003 /* Return nonzero if NAME is in the import list of OBJFILE. Else
1004 return zero. */
1005
1006 int
1007 is_in_import_list (name, objfile)
1008 char *name;
1009 struct objfile *objfile;
1010 {
1011 register int i;
1012
1013 if (!objfile || !name || !*name)
1014 return 0;
1015
1016 for (i = 0; i < objfile->import_list_size; i++)
1017 if (objfile->import_list[i] && STREQ (name, objfile->import_list[i]))
1018 return 1;
1019 return 0;
1020 }
1021
This page took 0.053513 seconds and 5 git commands to generate.