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