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