1/* Generic symbol file reading for the GNU debugger, GDB.
2
3   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4   1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5
6   Contributed by Cygnus Support, using pieces from other GDB modules.
7
8   This file is part of GDB.
9
10   This program is free software; you can redistribute it and/or modify
11   it under the terms of the GNU General Public License as published by
12   the Free Software Foundation; either version 2 of the License, or
13   (at your option) any later version.
14
15   This program is distributed in the hope that it will be useful,
16   but WITHOUT ANY WARRANTY; without even the implied warranty of
17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18   GNU General Public License for more details.
19
20   You should have received a copy of the GNU General Public License
21   along with this program; if not, write to the Free Software
22   Foundation, Inc., 59 Temple Place - Suite 330,
23   Boston, MA 02111-1307, USA.  */
24
25#include "defs.h"
26#include "bfdlink.h"
27#include "symtab.h"
28#include "gdbtypes.h"
29#include "gdbcore.h"
30#include "frame.h"
31#include "target.h"
32#include "value.h"
33#include "symfile.h"
34#include "objfiles.h"
35#include "source.h"
36#include "gdbcmd.h"
37#include "breakpoint.h"
38#include "language.h"
39#include "complaints.h"
40#include "demangle.h"
41#include "inferior.h"		/* for write_pc */
42#include "filenames.h"		/* for DOSish file names */
43#include "gdb-stabs.h"
44#include "gdb_obstack.h"
45#include "completer.h"
46#include "bcache.h"
47#include "hashtab.h"
48#include "readline/readline.h"
49#include "gdb_assert.h"
50#include "block.h"
51
52#include <sys/types.h>
53#include <fcntl.h>
54#include "gdb_string.h"
55#include "gdb_stat.h"
56#include <ctype.h>
57#include <time.h>
58
59#ifndef O_BINARY
60#define O_BINARY 0
61#endif
62
63#ifdef HPUXHPPA
64
65/* Some HP-UX related globals to clear when a new "main"
66   symbol file is loaded. HP-specific.  */
67
68extern int hp_som_som_object_present;
69extern int hp_cxx_exception_support_initialized;
70#define RESET_HP_UX_GLOBALS() do {\
71                                    hp_som_som_object_present = 0;             /* indicates HP-compiled code */        \
72                                    hp_cxx_exception_support_initialized = 0;  /* must reinitialize exception stuff */ \
73                              } while (0)
74#endif
75
76int (*ui_load_progress_hook) (const char *section, unsigned long num);
77void (*show_load_progress) (const char *section,
78			    unsigned long section_sent,
79			    unsigned long section_size,
80			    unsigned long total_sent,
81			    unsigned long total_size);
82void (*pre_add_symbol_hook) (char *);
83void (*post_add_symbol_hook) (void);
84void (*target_new_objfile_hook) (struct objfile *);
85
86static void clear_symtab_users_cleanup (void *ignore);
87
88/* Global variables owned by this file */
89int readnow_symbol_files;	/* Read full symbols immediately */
90
91/* External variables and functions referenced. */
92
93extern void report_transfer_performance (unsigned long, time_t, time_t);
94
95/* Functions this file defines */
96
97#if 0
98static int simple_read_overlay_region_table (void);
99static void simple_free_overlay_region_table (void);
100#endif
101
102static void set_initial_language (void);
103
104static void load_command (char *, int);
105
106static void symbol_file_add_main_1 (char *args, int from_tty, int flags);
107
108static void add_symbol_file_command (char *, int);
109
110static void add_shared_symbol_files_command (char *, int);
111
112static void reread_separate_symbols (struct objfile *objfile);
113
114static void cashier_psymtab (struct partial_symtab *);
115
116bfd *symfile_bfd_open (char *);
117
118int get_section_index (struct objfile *, char *);
119
120static void find_sym_fns (struct objfile *);
121
122static void decrement_reading_symtab (void *);
123
124static void overlay_invalidate_all (void);
125
126static int overlay_is_mapped (struct obj_section *);
127
128void list_overlays_command (char *, int);
129
130void map_overlay_command (char *, int);
131
132void unmap_overlay_command (char *, int);
133
134static void overlay_auto_command (char *, int);
135
136static void overlay_manual_command (char *, int);
137
138static void overlay_off_command (char *, int);
139
140static void overlay_load_command (char *, int);
141
142static void overlay_command (char *, int);
143
144static void simple_free_overlay_table (void);
145
146static void read_target_long_array (CORE_ADDR, unsigned int *, int);
147
148static int simple_read_overlay_table (void);
149
150static int simple_overlay_update_1 (struct obj_section *);
151
152static void add_filename_language (char *ext, enum language lang);
153
154static void set_ext_lang_command (char *args, int from_tty);
155
156static void info_ext_lang_command (char *args, int from_tty);
157
158static char *find_separate_debug_file (struct objfile *objfile);
159
160static void init_filename_language_table (void);
161
162void _initialize_symfile (void);
163
164/* List of all available sym_fns.  On gdb startup, each object file reader
165   calls add_symtab_fns() to register information on each format it is
166   prepared to read. */
167
168static struct sym_fns *symtab_fns = NULL;
169
170/* Flag for whether user will be reloading symbols multiple times.
171   Defaults to ON for VxWorks, otherwise OFF.  */
172
173#ifdef SYMBOL_RELOADING_DEFAULT
174int symbol_reloading = SYMBOL_RELOADING_DEFAULT;
175#else
176int symbol_reloading = 0;
177#endif
178
179/* If non-zero, shared library symbols will be added automatically
180   when the inferior is created, new libraries are loaded, or when
181   attaching to the inferior.  This is almost always what users will
182   want to have happen; but for very large programs, the startup time
183   will be excessive, and so if this is a problem, the user can clear
184   this flag and then add the shared library symbols as needed.  Note
185   that there is a potential for confusion, since if the shared
186   library symbols are not loaded, commands like "info fun" will *not*
187   report all the functions that are actually present. */
188
189int auto_solib_add = 1;
190
191/* For systems that support it, a threshold size in megabytes.  If
192   automatically adding a new library's symbol table to those already
193   known to the debugger would cause the total shared library symbol
194   size to exceed this threshhold, then the shlib's symbols are not
195   added.  The threshold is ignored if the user explicitly asks for a
196   shlib to be added, such as when using the "sharedlibrary"
197   command. */
198
199int auto_solib_limit;
200
201
202/* This compares two partial symbols by names, using strcmp_iw_ordered
203   for the comparison.  */
204
205static int
206compare_psymbols (const void *s1p, const void *s2p)
207{
208  struct partial_symbol *const *s1 = s1p;
209  struct partial_symbol *const *s2 = s2p;
210
211  return strcmp_iw_ordered (SYMBOL_NATURAL_NAME (*s1),
212			    SYMBOL_NATURAL_NAME (*s2));
213}
214
215void
216sort_pst_symbols (struct partial_symtab *pst)
217{
218  /* Sort the global list; don't sort the static list */
219
220  qsort (pst->objfile->global_psymbols.list + pst->globals_offset,
221	 pst->n_global_syms, sizeof (struct partial_symbol *),
222	 compare_psymbols);
223}
224
225/* Make a null terminated copy of the string at PTR with SIZE characters in
226   the obstack pointed to by OBSTACKP .  Returns the address of the copy.
227   Note that the string at PTR does not have to be null terminated, I.E. it
228   may be part of a larger string and we are only saving a substring. */
229
230char *
231obsavestring (const char *ptr, int size, struct obstack *obstackp)
232{
233  char *p = (char *) obstack_alloc (obstackp, size + 1);
234  /* Open-coded memcpy--saves function call time.  These strings are usually
235     short.  FIXME: Is this really still true with a compiler that can
236     inline memcpy? */
237  {
238    const char *p1 = ptr;
239    char *p2 = p;
240    const char *end = ptr + size;
241    while (p1 != end)
242      *p2++ = *p1++;
243  }
244  p[size] = 0;
245  return p;
246}
247
248/* Concatenate strings S1, S2 and S3; return the new string.  Space is found
249   in the obstack pointed to by OBSTACKP.  */
250
251char *
252obconcat (struct obstack *obstackp, const char *s1, const char *s2,
253	  const char *s3)
254{
255  int len = strlen (s1) + strlen (s2) + strlen (s3) + 1;
256  char *val = (char *) obstack_alloc (obstackp, len);
257  strcpy (val, s1);
258  strcat (val, s2);
259  strcat (val, s3);
260  return val;
261}
262
263/* True if we are nested inside psymtab_to_symtab. */
264
265int currently_reading_symtab = 0;
266
267static void
268decrement_reading_symtab (void *dummy)
269{
270  currently_reading_symtab--;
271}
272
273/* Get the symbol table that corresponds to a partial_symtab.
274   This is fast after the first time you do it.  In fact, there
275   is an even faster macro PSYMTAB_TO_SYMTAB that does the fast
276   case inline.  */
277
278struct symtab *
279psymtab_to_symtab (struct partial_symtab *pst)
280{
281  /* If it's been looked up before, return it. */
282  if (pst->symtab)
283    return pst->symtab;
284
285  /* If it has not yet been read in, read it.  */
286  if (!pst->readin)
287    {
288      struct cleanup *back_to = make_cleanup (decrement_reading_symtab, NULL);
289      currently_reading_symtab++;
290      (*pst->read_symtab) (pst);
291      do_cleanups (back_to);
292    }
293
294  return pst->symtab;
295}
296
297/* Remember the lowest-addressed loadable section we've seen.
298   This function is called via bfd_map_over_sections.
299
300   In case of equal vmas, the section with the largest size becomes the
301   lowest-addressed loadable section.
302
303   If the vmas and sizes are equal, the last section is considered the
304   lowest-addressed loadable section.  */
305
306void
307find_lowest_section (bfd *abfd, asection *sect, void *obj)
308{
309  asection **lowest = (asection **) obj;
310
311  if (0 == (bfd_get_section_flags (abfd, sect) & SEC_LOAD))
312    return;
313  if (!*lowest)
314    *lowest = sect;		/* First loadable section */
315  else if (bfd_section_vma (abfd, *lowest) > bfd_section_vma (abfd, sect))
316    *lowest = sect;		/* A lower loadable section */
317  else if (bfd_section_vma (abfd, *lowest) == bfd_section_vma (abfd, sect)
318	   && (bfd_section_size (abfd, (*lowest))
319	       <= bfd_section_size (abfd, sect)))
320    *lowest = sect;
321}
322
323/* Create a new section_addr_info, with room for NUM_SECTIONS.  */
324
325struct section_addr_info *
326alloc_section_addr_info (size_t num_sections)
327{
328  struct section_addr_info *sap;
329  size_t size;
330
331  size = (sizeof (struct section_addr_info)
332	  +  sizeof (struct other_sections) * (num_sections - 1));
333  sap = (struct section_addr_info *) xmalloc (size);
334  memset (sap, 0, size);
335  sap->num_sections = num_sections;
336
337  return sap;
338}
339
340/* Build (allocate and populate) a section_addr_info struct from
341   an existing section table. */
342
343extern struct section_addr_info *
344build_section_addr_info_from_section_table (const struct section_table *start,
345                                            const struct section_table *end)
346{
347  struct section_addr_info *sap;
348  const struct section_table *stp;
349  int oidx;
350
351  sap = alloc_section_addr_info (end - start);
352
353  for (stp = start, oidx = 0; stp != end; stp++)
354    {
355      if (bfd_get_section_flags (stp->bfd,
356				 stp->the_bfd_section) & (SEC_ALLOC | SEC_LOAD)
357	  && oidx < end - start)
358	{
359	  sap->other[oidx].addr = stp->addr;
360	  sap->other[oidx].name
361	    = xstrdup (bfd_section_name (stp->bfd, stp->the_bfd_section));
362	  sap->other[oidx].sectindex = stp->the_bfd_section->index;
363	  oidx++;
364	}
365    }
366
367  return sap;
368}
369
370
371/* Free all memory allocated by build_section_addr_info_from_section_table. */
372
373extern void
374free_section_addr_info (struct section_addr_info *sap)
375{
376  int idx;
377
378  for (idx = 0; idx < sap->num_sections; idx++)
379    if (sap->other[idx].name)
380      xfree (sap->other[idx].name);
381  xfree (sap);
382}
383
384
385/* Initialize OBJFILE's sect_index_* members.  */
386static void
387init_objfile_sect_indices (struct objfile *objfile)
388{
389  asection *sect;
390  int i;
391
392  sect = bfd_get_section_by_name (objfile->obfd, ".text");
393  if (sect)
394    objfile->sect_index_text = sect->index;
395
396  sect = bfd_get_section_by_name (objfile->obfd, ".data");
397  if (sect)
398    objfile->sect_index_data = sect->index;
399
400  sect = bfd_get_section_by_name (objfile->obfd, ".bss");
401  if (sect)
402    objfile->sect_index_bss = sect->index;
403
404  sect = bfd_get_section_by_name (objfile->obfd, ".rodata");
405  if (sect)
406    objfile->sect_index_rodata = sect->index;
407
408  /* This is where things get really weird...  We MUST have valid
409     indices for the various sect_index_* members or gdb will abort.
410     So if for example, there is no ".text" section, we have to
411     accomodate that.  Except when explicitly adding symbol files at
412     some address, section_offsets contains nothing but zeros, so it
413     doesn't matter which slot in section_offsets the individual
414     sect_index_* members index into.  So if they are all zero, it is
415     safe to just point all the currently uninitialized indices to the
416     first slot. */
417
418  for (i = 0; i < objfile->num_sections; i++)
419    {
420      if (ANOFFSET (objfile->section_offsets, i) != 0)
421	{
422	  break;
423	}
424    }
425  if (i == objfile->num_sections)
426    {
427      if (objfile->sect_index_text == -1)
428	objfile->sect_index_text = 0;
429      if (objfile->sect_index_data == -1)
430	objfile->sect_index_data = 0;
431      if (objfile->sect_index_bss == -1)
432	objfile->sect_index_bss = 0;
433      if (objfile->sect_index_rodata == -1)
434	objfile->sect_index_rodata = 0;
435    }
436}
437
438
439/* Parse the user's idea of an offset for dynamic linking, into our idea
440   of how to represent it for fast symbol reading.  This is the default
441   version of the sym_fns.sym_offsets function for symbol readers that
442   don't need to do anything special.  It allocates a section_offsets table
443   for the objectfile OBJFILE and stuffs ADDR into all of the offsets.  */
444
445void
446default_symfile_offsets (struct objfile *objfile,
447			 struct section_addr_info *addrs)
448{
449  int i;
450
451  objfile->num_sections = bfd_count_sections (objfile->obfd);
452  objfile->section_offsets = (struct section_offsets *)
453    obstack_alloc (&objfile->objfile_obstack,
454		   SIZEOF_N_SECTION_OFFSETS (objfile->num_sections));
455  memset (objfile->section_offsets, 0,
456	  SIZEOF_N_SECTION_OFFSETS (objfile->num_sections));
457
458  /* Now calculate offsets for section that were specified by the
459     caller. */
460  for (i = 0; i < addrs->num_sections && addrs->other[i].name; i++)
461    {
462      struct other_sections *osp ;
463
464      osp = &addrs->other[i] ;
465      if (osp->addr == 0)
466  	continue;
467
468      /* Record all sections in offsets */
469      /* The section_offsets in the objfile are here filled in using
470         the BFD index. */
471      (objfile->section_offsets)->offsets[osp->sectindex] = osp->addr;
472    }
473
474  /* Remember the bfd indexes for the .text, .data, .bss and
475     .rodata sections. */
476  init_objfile_sect_indices (objfile);
477}
478
479
480/* Process a symbol file, as either the main file or as a dynamically
481   loaded file.
482
483   OBJFILE is where the symbols are to be read from.
484
485   ADDRS is the list of section load addresses.  If the user has given
486   an 'add-symbol-file' command, then this is the list of offsets and
487   addresses he or she provided as arguments to the command; or, if
488   we're handling a shared library, these are the actual addresses the
489   sections are loaded at, according to the inferior's dynamic linker
490   (as gleaned by GDB's shared library code).  We convert each address
491   into an offset from the section VMA's as it appears in the object
492   file, and then call the file's sym_offsets function to convert this
493   into a format-specific offset table --- a `struct section_offsets'.
494   If ADDRS is non-zero, OFFSETS must be zero.
495
496   OFFSETS is a table of section offsets already in the right
497   format-specific representation.  NUM_OFFSETS is the number of
498   elements present in OFFSETS->offsets.  If OFFSETS is non-zero, we
499   assume this is the proper table the call to sym_offsets described
500   above would produce.  Instead of calling sym_offsets, we just dump
501   it right into objfile->section_offsets.  (When we're re-reading
502   symbols from an objfile, we don't have the original load address
503   list any more; all we have is the section offset table.)  If
504   OFFSETS is non-zero, ADDRS must be zero.
505
506   MAINLINE is nonzero if this is the main symbol file, or zero if
507   it's an extra symbol file such as dynamically loaded code.
508
509   VERBO is nonzero if the caller has printed a verbose message about
510   the symbol reading (and complaints can be more terse about it).  */
511
512void
513syms_from_objfile (struct objfile *objfile,
514                   struct section_addr_info *addrs,
515                   struct section_offsets *offsets,
516                   int num_offsets,
517		   int mainline,
518                   int verbo)
519{
520  struct section_addr_info *local_addr = NULL;
521  struct cleanup *old_chain;
522
523  gdb_assert (! (addrs && offsets));
524
525  init_entry_point_info (objfile);
526  find_sym_fns (objfile);
527
528  if (objfile->sf == NULL)
529    return;	/* No symbols. */
530
531  /* Make sure that partially constructed symbol tables will be cleaned up
532     if an error occurs during symbol reading.  */
533  old_chain = make_cleanup_free_objfile (objfile);
534
535  /* If ADDRS and OFFSETS are both NULL, put together a dummy address
536     list.  We now establish the convention that an addr of zero means
537     no load address was specified. */
538  if (! addrs && ! offsets)
539    {
540      local_addr
541	= alloc_section_addr_info (bfd_count_sections (objfile->obfd));
542      make_cleanup (xfree, local_addr);
543      addrs = local_addr;
544    }
545
546  /* Now either addrs or offsets is non-zero.  */
547
548  if (mainline)
549    {
550      /* We will modify the main symbol table, make sure that all its users
551         will be cleaned up if an error occurs during symbol reading.  */
552      make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
553
554      /* Since no error yet, throw away the old symbol table.  */
555
556      if (symfile_objfile != NULL)
557	{
558	  free_objfile (symfile_objfile);
559	  symfile_objfile = NULL;
560	}
561
562      /* Currently we keep symbols from the add-symbol-file command.
563         If the user wants to get rid of them, they should do "symbol-file"
564         without arguments first.  Not sure this is the best behavior
565         (PR 2207).  */
566
567      (*objfile->sf->sym_new_init) (objfile);
568    }
569
570  /* Convert addr into an offset rather than an absolute address.
571     We find the lowest address of a loaded segment in the objfile,
572     and assume that <addr> is where that got loaded.
573
574     We no longer warn if the lowest section is not a text segment (as
575     happens for the PA64 port.  */
576  if (!mainline && addrs && addrs->other[0].name)
577    {
578      asection *lower_sect;
579      asection *sect;
580      CORE_ADDR lower_offset;
581      int i;
582
583      /* Find lowest loadable section to be used as starting point for
584         continguous sections. FIXME!! won't work without call to find
585	 .text first, but this assumes text is lowest section. */
586      lower_sect = bfd_get_section_by_name (objfile->obfd, ".text");
587      if (lower_sect == NULL)
588	bfd_map_over_sections (objfile->obfd, find_lowest_section,
589			       &lower_sect);
590      if (lower_sect == NULL)
591	warning ("no loadable sections found in added symbol-file %s",
592		 objfile->name);
593      else
594	if ((bfd_get_section_flags (objfile->obfd, lower_sect) & SEC_CODE) == 0)
595	  warning ("Lowest section in %s is %s at %s",
596		   objfile->name,
597		   bfd_section_name (objfile->obfd, lower_sect),
598		   paddr (bfd_section_vma (objfile->obfd, lower_sect)));
599      if (lower_sect != NULL)
600 	lower_offset = bfd_section_vma (objfile->obfd, lower_sect);
601      else
602 	lower_offset = 0;
603
604      /* Calculate offsets for the loadable sections.
605 	 FIXME! Sections must be in order of increasing loadable section
606 	 so that contiguous sections can use the lower-offset!!!
607
608         Adjust offsets if the segments are not contiguous.
609         If the section is contiguous, its offset should be set to
610 	 the offset of the highest loadable section lower than it
611 	 (the loadable section directly below it in memory).
612 	 this_offset = lower_offset = lower_addr - lower_orig_addr */
613
614        for (i = 0; i < addrs->num_sections && addrs->other[i].name; i++)
615          {
616            if (addrs->other[i].addr != 0)
617              {
618                sect = bfd_get_section_by_name (objfile->obfd,
619                                                addrs->other[i].name);
620                if (sect)
621                  {
622                    addrs->other[i].addr
623                      -= bfd_section_vma (objfile->obfd, sect);
624                    lower_offset = addrs->other[i].addr;
625                    /* This is the index used by BFD. */
626                    addrs->other[i].sectindex = sect->index ;
627                  }
628                else
629                  {
630                    warning ("section %s not found in %s",
631                             addrs->other[i].name,
632                             objfile->name);
633                    addrs->other[i].addr = 0;
634                  }
635              }
636            else
637              addrs->other[i].addr = lower_offset;
638          }
639    }
640
641  /* Initialize symbol reading routines for this objfile, allow complaints to
642     appear for this new file, and record how verbose to be, then do the
643     initial symbol reading for this file. */
644
645  (*objfile->sf->sym_init) (objfile);
646  clear_complaints (&symfile_complaints, 1, verbo);
647
648  if (addrs)
649    (*objfile->sf->sym_offsets) (objfile, addrs);
650  else
651    {
652      size_t size = SIZEOF_N_SECTION_OFFSETS (num_offsets);
653
654      /* Just copy in the offset table directly as given to us.  */
655      objfile->num_sections = num_offsets;
656      objfile->section_offsets
657        = ((struct section_offsets *)
658           obstack_alloc (&objfile->objfile_obstack, size));
659      memcpy (objfile->section_offsets, offsets, size);
660
661      init_objfile_sect_indices (objfile);
662    }
663
664#ifndef DEPRECATED_IBM6000_TARGET
665  /* This is a SVR4/SunOS specific hack, I think.  In any event, it
666     screws RS/6000.  sym_offsets should be doing this sort of thing,
667     because it knows the mapping between bfd sections and
668     section_offsets.  */
669  /* This is a hack.  As far as I can tell, section offsets are not
670     target dependent.  They are all set to addr with a couple of
671     exceptions.  The exceptions are sysvr4 shared libraries, whose
672     offsets are kept in solib structures anyway and rs6000 xcoff
673     which handles shared libraries in a completely unique way.
674
675     Section offsets are built similarly, except that they are built
676     by adding addr in all cases because there is no clear mapping
677     from section_offsets into actual sections.  Note that solib.c
678     has a different algorithm for finding section offsets.
679
680     These should probably all be collapsed into some target
681     independent form of shared library support.  FIXME.  */
682
683  if (addrs)
684    {
685      struct obj_section *s;
686
687 	/* Map section offsets in "addr" back to the object's
688 	   sections by comparing the section names with bfd's
689 	   section names.  Then adjust the section address by
690 	   the offset. */ /* for gdb/13815 */
691
692      ALL_OBJFILE_OSECTIONS (objfile, s)
693	{
694	  CORE_ADDR s_addr = 0;
695	  int i;
696
697 	    for (i = 0;
698	         !s_addr && i < addrs->num_sections && addrs->other[i].name;
699		 i++)
700 	      if (strcmp (bfd_section_name (s->objfile->obfd,
701					    s->the_bfd_section),
702			  addrs->other[i].name) == 0)
703 	        s_addr = addrs->other[i].addr; /* end added for gdb/13815 */
704
705	  s->addr -= s->offset;
706	  s->addr += s_addr;
707	  s->endaddr -= s->offset;
708	  s->endaddr += s_addr;
709	  s->offset += s_addr;
710	}
711    }
712#endif /* not DEPRECATED_IBM6000_TARGET */
713
714  (*objfile->sf->sym_read) (objfile, mainline);
715
716  /* Don't allow char * to have a typename (else would get caddr_t).
717     Ditto void *.  FIXME: Check whether this is now done by all the
718     symbol readers themselves (many of them now do), and if so remove
719     it from here.  */
720
721  TYPE_NAME (lookup_pointer_type (builtin_type_char)) = 0;
722  TYPE_NAME (lookup_pointer_type (builtin_type_void)) = 0;
723
724  /* Mark the objfile has having had initial symbol read attempted.  Note
725     that this does not mean we found any symbols... */
726
727  objfile->flags |= OBJF_SYMS;
728
729  /* Discard cleanups as symbol reading was successful.  */
730
731  discard_cleanups (old_chain);
732}
733
734/* Perform required actions after either reading in the initial
735   symbols for a new objfile, or mapping in the symbols from a reusable
736   objfile. */
737
738void
739new_symfile_objfile (struct objfile *objfile, int mainline, int verbo)
740{
741
742  /* If this is the main symbol file we have to clean up all users of the
743     old main symbol file. Otherwise it is sufficient to fixup all the
744     breakpoints that may have been redefined by this symbol file.  */
745  if (mainline)
746    {
747      /* OK, make it the "real" symbol file.  */
748      symfile_objfile = objfile;
749
750      clear_symtab_users ();
751    }
752  else
753    {
754      breakpoint_re_set ();
755    }
756
757  /* We're done reading the symbol file; finish off complaints.  */
758  clear_complaints (&symfile_complaints, 0, verbo);
759}
760
761/* Process a symbol file, as either the main file or as a dynamically
762   loaded file.
763
764   NAME is the file name (which will be tilde-expanded and made
765   absolute herein) (but we don't free or modify NAME itself).
766
767   FROM_TTY says how verbose to be.
768
769   MAINLINE specifies whether this is the main symbol file, or whether
770   it's an extra symbol file such as dynamically loaded code.
771
772   ADDRS, OFFSETS, and NUM_OFFSETS are as described for
773   syms_from_objfile, above.  ADDRS is ignored when MAINLINE is
774   non-zero.
775
776   Upon success, returns a pointer to the objfile that was added.
777   Upon failure, jumps back to command level (never returns). */
778static struct objfile *
779symbol_file_add_with_addrs_or_offsets (char *name, int from_tty,
780                                       struct section_addr_info *addrs,
781                                       struct section_offsets *offsets,
782                                       int num_offsets,
783                                       int mainline, int flags)
784{
785  struct objfile *objfile;
786  struct partial_symtab *psymtab;
787  char *debugfile;
788  bfd *abfd;
789  struct section_addr_info *orig_addrs;
790  struct cleanup *my_cleanups;
791
792  /* Open a bfd for the file, and give user a chance to burp if we'd be
793     interactively wiping out any existing symbols.  */
794
795  abfd = symfile_bfd_open (name);
796
797  if ((have_full_symbols () || have_partial_symbols ())
798      && mainline
799      && from_tty
800      && !query ("Load new symbol table from \"%s\"? ", name))
801    error ("Not confirmed.");
802
803  objfile = allocate_objfile (abfd, flags);
804
805  orig_addrs = alloc_section_addr_info (bfd_count_sections (abfd));
806  my_cleanups = make_cleanup (xfree, orig_addrs);
807  if (addrs)
808    {
809      int i;
810      orig_addrs->num_sections = addrs->num_sections;
811      for (i = 0; i < addrs->num_sections; i++)
812	orig_addrs->other[i] = addrs->other[i];
813    }
814
815  /* We either created a new mapped symbol table, mapped an existing
816     symbol table file which has not had initial symbol reading
817     performed, or need to read an unmapped symbol table. */
818  if (from_tty || info_verbose)
819    {
820      if (pre_add_symbol_hook)
821	pre_add_symbol_hook (name);
822      else
823	{
824	  printf_unfiltered ("Reading symbols from %s...", name);
825	  wrap_here ("");
826	  gdb_flush (gdb_stdout);
827	}
828    }
829  syms_from_objfile (objfile, addrs, offsets, num_offsets,
830		     mainline, from_tty);
831
832  /* We now have at least a partial symbol table.  Check to see if the
833     user requested that all symbols be read on initial access via either
834     the gdb startup command line or on a per symbol file basis.  Expand
835     all partial symbol tables for this objfile if so. */
836
837  if ((flags & OBJF_READNOW) || readnow_symbol_files)
838    {
839      if (from_tty || info_verbose)
840	{
841	  printf_unfiltered ("expanding to full symbols...");
842	  wrap_here ("");
843	  gdb_flush (gdb_stdout);
844	}
845
846      for (psymtab = objfile->psymtabs;
847	   psymtab != NULL;
848	   psymtab = psymtab->next)
849	{
850	  psymtab_to_symtab (psymtab);
851	}
852    }
853
854  debugfile = find_separate_debug_file (objfile);
855  if (debugfile)
856    {
857      if (addrs != NULL)
858	{
859	  objfile->separate_debug_objfile
860            = symbol_file_add (debugfile, from_tty, orig_addrs, 0, flags);
861	}
862      else
863	{
864	  objfile->separate_debug_objfile
865            = symbol_file_add (debugfile, from_tty, NULL, 0, flags);
866	}
867      objfile->separate_debug_objfile->separate_debug_objfile_backlink
868        = objfile;
869
870      /* Put the separate debug object before the normal one, this is so that
871         usage of the ALL_OBJFILES_SAFE macro will stay safe. */
872      put_objfile_before (objfile->separate_debug_objfile, objfile);
873
874      xfree (debugfile);
875    }
876
877  if (!have_partial_symbols () && !have_full_symbols ())
878    {
879      wrap_here ("");
880      printf_unfiltered ("(no debugging symbols found)...");
881      wrap_here ("");
882    }
883
884  if (from_tty || info_verbose)
885    {
886      if (post_add_symbol_hook)
887	post_add_symbol_hook ();
888      else
889	{
890	  printf_unfiltered ("done.\n");
891	}
892    }
893
894  /* We print some messages regardless of whether 'from_tty ||
895     info_verbose' is true, so make sure they go out at the right
896     time.  */
897  gdb_flush (gdb_stdout);
898
899  do_cleanups (my_cleanups);
900
901  if (objfile->sf == NULL)
902    return objfile;	/* No symbols. */
903
904  new_symfile_objfile (objfile, mainline, from_tty);
905
906  if (target_new_objfile_hook)
907    target_new_objfile_hook (objfile);
908
909  return (objfile);
910}
911
912
913/* Process a symbol file, as either the main file or as a dynamically
914   loaded file.  See symbol_file_add_with_addrs_or_offsets's comments
915   for details.  */
916struct objfile *
917symbol_file_add (char *name, int from_tty, struct section_addr_info *addrs,
918		 int mainline, int flags)
919{
920  return symbol_file_add_with_addrs_or_offsets (name, from_tty, addrs, 0, 0,
921                                                mainline, flags);
922}
923
924
925/* Call symbol_file_add() with default values and update whatever is
926   affected by the loading of a new main().
927   Used when the file is supplied in the gdb command line
928   and by some targets with special loading requirements.
929   The auxiliary function, symbol_file_add_main_1(), has the flags
930   argument for the switches that can only be specified in the symbol_file
931   command itself.  */
932
933void
934symbol_file_add_main (char *args, int from_tty)
935{
936  symbol_file_add_main_1 (args, from_tty, 0);
937}
938
939static void
940symbol_file_add_main_1 (char *args, int from_tty, int flags)
941{
942  symbol_file_add (args, from_tty, NULL, 1, flags);
943
944#ifdef HPUXHPPA
945  RESET_HP_UX_GLOBALS ();
946#endif
947
948  /* Getting new symbols may change our opinion about
949     what is frameless.  */
950  reinit_frame_cache ();
951
952  set_initial_language ();
953}
954
955void
956symbol_file_clear (int from_tty)
957{
958  if ((have_full_symbols () || have_partial_symbols ())
959      && from_tty
960      && !query ("Discard symbol table from `%s'? ",
961		 symfile_objfile->name))
962    error ("Not confirmed.");
963    free_all_objfiles ();
964
965    /* solib descriptors may have handles to objfiles.  Since their
966       storage has just been released, we'd better wipe the solib
967       descriptors as well.
968     */
969#if defined(SOLIB_RESTART)
970    SOLIB_RESTART ();
971#endif
972
973    symfile_objfile = NULL;
974    if (from_tty)
975      printf_unfiltered ("No symbol file now.\n");
976#ifdef HPUXHPPA
977    RESET_HP_UX_GLOBALS ();
978#endif
979}
980
981static char *
982get_debug_link_info (struct objfile *objfile, unsigned long *crc32_out)
983{
984  asection *sect;
985  bfd_size_type debuglink_size;
986  unsigned long crc32;
987  char *contents;
988  int crc_offset;
989  unsigned char *p;
990
991  sect = bfd_get_section_by_name (objfile->obfd, ".gnu_debuglink");
992
993  if (sect == NULL)
994    return NULL;
995
996  debuglink_size = bfd_section_size (objfile->obfd, sect);
997
998  contents = xmalloc (debuglink_size);
999  bfd_get_section_contents (objfile->obfd, sect, contents,
1000			    (file_ptr)0, (bfd_size_type)debuglink_size);
1001
1002  /* Crc value is stored after the filename, aligned up to 4 bytes. */
1003  crc_offset = strlen (contents) + 1;
1004  crc_offset = (crc_offset + 3) & ~3;
1005
1006  crc32 = bfd_get_32 (objfile->obfd, (bfd_byte *) (contents + crc_offset));
1007
1008  *crc32_out = crc32;
1009  return contents;
1010}
1011
1012static int
1013separate_debug_file_exists (const char *name, unsigned long crc)
1014{
1015  unsigned long file_crc = 0;
1016  int fd;
1017  char buffer[8*1024];
1018  int count;
1019
1020  fd = open (name, O_RDONLY | O_BINARY);
1021  if (fd < 0)
1022    return 0;
1023
1024  while ((count = read (fd, buffer, sizeof (buffer))) > 0)
1025    file_crc = gnu_debuglink_crc32 (file_crc, buffer, count);
1026
1027  close (fd);
1028
1029  return crc == file_crc;
1030}
1031
1032static char *debug_file_directory = NULL;
1033
1034#if ! defined (DEBUG_SUBDIRECTORY)
1035#define DEBUG_SUBDIRECTORY ".debug"
1036#endif
1037
1038static char *
1039find_separate_debug_file (struct objfile *objfile)
1040{
1041  asection *sect;
1042  char *basename;
1043  char *dir;
1044  char *debugfile;
1045  char *name_copy;
1046  bfd_size_type debuglink_size;
1047  unsigned long crc32;
1048  int i;
1049
1050  basename = get_debug_link_info (objfile, &crc32);
1051
1052  if (basename == NULL)
1053    return NULL;
1054
1055  dir = xstrdup (objfile->name);
1056
1057  /* Strip off the final filename part, leaving the directory name,
1058     followed by a slash.  Objfile names should always be absolute and
1059     tilde-expanded, so there should always be a slash in there
1060     somewhere.  */
1061  for (i = strlen(dir) - 1; i >= 0; i--)
1062    {
1063      if (IS_DIR_SEPARATOR (dir[i]))
1064	break;
1065    }
1066  gdb_assert (i >= 0 && IS_DIR_SEPARATOR (dir[i]));
1067  dir[i+1] = '\0';
1068
1069  debugfile = alloca (strlen (debug_file_directory) + 1
1070                      + strlen (dir)
1071                      + strlen (DEBUG_SUBDIRECTORY)
1072                      + strlen ("/")
1073                      + strlen (basename)
1074                      + 1);
1075
1076  /* First try in the same directory as the original file.  */
1077  strcpy (debugfile, dir);
1078  strcat (debugfile, basename);
1079
1080  if (separate_debug_file_exists (debugfile, crc32))
1081    {
1082      xfree (basename);
1083      xfree (dir);
1084      return xstrdup (debugfile);
1085    }
1086
1087  /* Then try in the subdirectory named DEBUG_SUBDIRECTORY.  */
1088  strcpy (debugfile, dir);
1089  strcat (debugfile, DEBUG_SUBDIRECTORY);
1090  strcat (debugfile, "/");
1091  strcat (debugfile, basename);
1092
1093  if (separate_debug_file_exists (debugfile, crc32))
1094    {
1095      xfree (basename);
1096      xfree (dir);
1097      return xstrdup (debugfile);
1098    }
1099
1100  /* Then try in the global debugfile directory.  */
1101  strcpy (debugfile, debug_file_directory);
1102  strcat (debugfile, "/");
1103  strcat (debugfile, dir);
1104  strcat (debugfile, basename);
1105
1106  if (separate_debug_file_exists (debugfile, crc32))
1107    {
1108      xfree (basename);
1109      xfree (dir);
1110      return xstrdup (debugfile);
1111    }
1112
1113  xfree (basename);
1114  xfree (dir);
1115  return NULL;
1116}
1117
1118
1119/* This is the symbol-file command.  Read the file, analyze its
1120   symbols, and add a struct symtab to a symtab list.  The syntax of
1121   the command is rather bizarre--(1) buildargv implements various
1122   quoting conventions which are undocumented and have little or
1123   nothing in common with the way things are quoted (or not quoted)
1124   elsewhere in GDB, (2) options are used, which are not generally
1125   used in GDB (perhaps "set mapped on", "set readnow on" would be
1126   better), (3) the order of options matters, which is contrary to GNU
1127   conventions (because it is confusing and inconvenient).  */
1128/* Note: ezannoni 2000-04-17. This function used to have support for
1129   rombug (see remote-os9k.c). It consisted of a call to target_link()
1130   (target.c) to get the address of the text segment from the target,
1131   and pass that to symbol_file_add(). This is no longer supported. */
1132
1133void
1134symbol_file_command (char *args, int from_tty)
1135{
1136  char **argv;
1137  char *name = NULL;
1138  struct cleanup *cleanups;
1139  int flags = OBJF_USERLOADED;
1140
1141  dont_repeat ();
1142
1143  if (args == NULL)
1144    {
1145      symbol_file_clear (from_tty);
1146    }
1147  else
1148    {
1149      if ((argv = buildargv (args)) == NULL)
1150	{
1151	  nomem (0);
1152	}
1153      cleanups = make_cleanup_freeargv (argv);
1154      while (*argv != NULL)
1155	{
1156	  if (strcmp (*argv, "-readnow") == 0)
1157	    flags |= OBJF_READNOW;
1158	  else if (**argv == '-')
1159	    error ("unknown option `%s'", *argv);
1160	  else
1161	    {
1162	      name = *argv;
1163
1164	      symbol_file_add_main_1 (name, from_tty, flags);
1165	    }
1166	  argv++;
1167	}
1168
1169      if (name == NULL)
1170	{
1171	  error ("no symbol file name was specified");
1172	}
1173      do_cleanups (cleanups);
1174    }
1175}
1176
1177/* Set the initial language.
1178
1179   A better solution would be to record the language in the psymtab when reading
1180   partial symbols, and then use it (if known) to set the language.  This would
1181   be a win for formats that encode the language in an easily discoverable place,
1182   such as DWARF.  For stabs, we can jump through hoops looking for specially
1183   named symbols or try to intuit the language from the specific type of stabs
1184   we find, but we can't do that until later when we read in full symbols.
1185   FIXME.  */
1186
1187static void
1188set_initial_language (void)
1189{
1190  struct partial_symtab *pst;
1191  enum language lang = language_unknown;
1192
1193  pst = find_main_psymtab ();
1194  if (pst != NULL)
1195    {
1196      if (pst->filename != NULL)
1197	{
1198	  lang = deduce_language_from_filename (pst->filename);
1199	}
1200      if (lang == language_unknown)
1201	{
1202	  /* Make C the default language */
1203	  lang = language_c;
1204	}
1205      set_language (lang);
1206      expected_language = current_language;	/* Don't warn the user */
1207    }
1208}
1209
1210/* Open file specified by NAME and hand it off to BFD for preliminary
1211   analysis.  Result is a newly initialized bfd *, which includes a newly
1212   malloc'd` copy of NAME (tilde-expanded and made absolute).
1213   In case of trouble, error() is called.  */
1214
1215bfd *
1216symfile_bfd_open (char *name)
1217{
1218  bfd *sym_bfd;
1219  int desc;
1220  char *absolute_name;
1221
1222
1223
1224  name = tilde_expand (name);	/* Returns 1st new malloc'd copy */
1225
1226  /* Look down path for it, allocate 2nd new malloc'd copy.  */
1227  desc = openp (getenv ("PATH"), 1, name, O_RDONLY | O_BINARY, 0, &absolute_name);
1228#if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)
1229  if (desc < 0)
1230    {
1231      char *exename = alloca (strlen (name) + 5);
1232      strcat (strcpy (exename, name), ".exe");
1233      desc = openp (getenv ("PATH"), 1, exename, O_RDONLY | O_BINARY,
1234		    0, &absolute_name);
1235    }
1236#endif
1237  if (desc < 0)
1238    {
1239      make_cleanup (xfree, name);
1240      perror_with_name (name);
1241    }
1242  xfree (name);			/* Free 1st new malloc'd copy */
1243  name = absolute_name;		/* Keep 2nd malloc'd copy in bfd */
1244  /* It'll be freed in free_objfile(). */
1245
1246  sym_bfd = bfd_fdopenr (name, gnutarget, desc);
1247  if (!sym_bfd)
1248    {
1249      close (desc);
1250      make_cleanup (xfree, name);
1251      error ("\"%s\": can't open to read symbols: %s.", name,
1252	     bfd_errmsg (bfd_get_error ()));
1253    }
1254  bfd_set_cacheable (sym_bfd, 1);
1255
1256  if (!bfd_check_format (sym_bfd, bfd_object))
1257    {
1258      /* FIXME: should be checking for errors from bfd_close (for one thing,
1259         on error it does not free all the storage associated with the
1260         bfd).  */
1261      bfd_close (sym_bfd);	/* This also closes desc */
1262      make_cleanup (xfree, name);
1263      error ("\"%s\": can't read symbols: %s.", name,
1264	     bfd_errmsg (bfd_get_error ()));
1265    }
1266  return (sym_bfd);
1267}
1268
1269/* Return the section index for the given section name. Return -1 if
1270   the section was not found. */
1271int
1272get_section_index (struct objfile *objfile, char *section_name)
1273{
1274  asection *sect = bfd_get_section_by_name (objfile->obfd, section_name);
1275  if (sect)
1276    return sect->index;
1277  else
1278    return -1;
1279}
1280
1281/* Link a new symtab_fns into the global symtab_fns list.  Called on gdb
1282   startup by the _initialize routine in each object file format reader,
1283   to register information about each format the the reader is prepared
1284   to handle. */
1285
1286void
1287add_symtab_fns (struct sym_fns *sf)
1288{
1289  sf->next = symtab_fns;
1290  symtab_fns = sf;
1291}
1292
1293
1294/* Initialize to read symbols from the symbol file sym_bfd.  It either
1295   returns or calls error().  The result is an initialized struct sym_fns
1296   in the objfile structure, that contains cached information about the
1297   symbol file.  */
1298
1299static void
1300find_sym_fns (struct objfile *objfile)
1301{
1302  struct sym_fns *sf;
1303  enum bfd_flavour our_flavour = bfd_get_flavour (objfile->obfd);
1304  char *our_target = bfd_get_target (objfile->obfd);
1305
1306  if (our_flavour == bfd_target_srec_flavour
1307      || our_flavour == bfd_target_ihex_flavour
1308      || our_flavour == bfd_target_tekhex_flavour)
1309    return;	/* No symbols. */
1310
1311  for (sf = symtab_fns; sf != NULL; sf = sf->next)
1312    {
1313      if (our_flavour == sf->sym_flavour)
1314	{
1315	  objfile->sf = sf;
1316	  return;
1317	}
1318    }
1319  error ("I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown.",
1320	 bfd_get_target (objfile->obfd));
1321}
1322
1323/* This function runs the load command of our current target.  */
1324
1325static void
1326load_command (char *arg, int from_tty)
1327{
1328  if (arg == NULL)
1329    arg = get_exec_file (1);
1330  target_load (arg, from_tty);
1331
1332  /* After re-loading the executable, we don't really know which
1333     overlays are mapped any more.  */
1334  overlay_cache_invalid = 1;
1335}
1336
1337/* This version of "load" should be usable for any target.  Currently
1338   it is just used for remote targets, not inftarg.c or core files,
1339   on the theory that only in that case is it useful.
1340
1341   Avoiding xmodem and the like seems like a win (a) because we don't have
1342   to worry about finding it, and (b) On VMS, fork() is very slow and so
1343   we don't want to run a subprocess.  On the other hand, I'm not sure how
1344   performance compares.  */
1345
1346static int download_write_size = 512;
1347static int validate_download = 0;
1348
1349/* Callback service function for generic_load (bfd_map_over_sections).  */
1350
1351static void
1352add_section_size_callback (bfd *abfd, asection *asec, void *data)
1353{
1354  bfd_size_type *sum = data;
1355
1356  *sum += bfd_get_section_size (asec);
1357}
1358
1359/* Opaque data for load_section_callback.  */
1360struct load_section_data {
1361  unsigned long load_offset;
1362  unsigned long write_count;
1363  unsigned long data_count;
1364  bfd_size_type total_size;
1365};
1366
1367/* Callback service function for generic_load (bfd_map_over_sections).  */
1368
1369static void
1370load_section_callback (bfd *abfd, asection *asec, void *data)
1371{
1372  struct load_section_data *args = data;
1373
1374  if (bfd_get_section_flags (abfd, asec) & SEC_LOAD)
1375    {
1376      bfd_size_type size = bfd_get_section_size (asec);
1377      if (size > 0)
1378	{
1379	  char *buffer;
1380	  struct cleanup *old_chain;
1381	  CORE_ADDR lma = bfd_section_lma (abfd, asec) + args->load_offset;
1382	  bfd_size_type block_size;
1383	  int err;
1384	  const char *sect_name = bfd_get_section_name (abfd, asec);
1385	  bfd_size_type sent;
1386
1387	  if (download_write_size > 0 && size > download_write_size)
1388	    block_size = download_write_size;
1389	  else
1390	    block_size = size;
1391
1392	  buffer = xmalloc (size);
1393	  old_chain = make_cleanup (xfree, buffer);
1394
1395	  /* Is this really necessary?  I guess it gives the user something
1396	     to look at during a long download.  */
1397	  ui_out_message (uiout, 0, "Loading section %s, size 0x%s lma 0x%s\n",
1398			  sect_name, paddr_nz (size), paddr_nz (lma));
1399
1400	  bfd_get_section_contents (abfd, asec, buffer, 0, size);
1401
1402	  sent = 0;
1403	  do
1404	    {
1405	      int len;
1406	      bfd_size_type this_transfer = size - sent;
1407
1408	      if (this_transfer >= block_size)
1409		this_transfer = block_size;
1410	      len = target_write_memory_partial (lma, buffer,
1411						 this_transfer, &err);
1412	      if (err)
1413		break;
1414	      if (validate_download)
1415		{
1416		  /* Broken memories and broken monitors manifest
1417		     themselves here when bring new computers to
1418		     life.  This doubles already slow downloads.  */
1419		  /* NOTE: cagney/1999-10-18: A more efficient
1420		     implementation might add a verify_memory()
1421		     method to the target vector and then use
1422		     that.  remote.c could implement that method
1423		     using the ``qCRC'' packet.  */
1424		  char *check = xmalloc (len);
1425		  struct cleanup *verify_cleanups =
1426		    make_cleanup (xfree, check);
1427
1428		  if (target_read_memory (lma, check, len) != 0)
1429		    error ("Download verify read failed at 0x%s",
1430			   paddr (lma));
1431		  if (memcmp (buffer, check, len) != 0)
1432		    error ("Download verify compare failed at 0x%s",
1433			   paddr (lma));
1434		  do_cleanups (verify_cleanups);
1435		}
1436	      args->data_count += len;
1437	      lma += len;
1438	      buffer += len;
1439	      args->write_count += 1;
1440	      sent += len;
1441	      if (quit_flag
1442		  || (ui_load_progress_hook != NULL
1443		      && ui_load_progress_hook (sect_name, sent)))
1444		error ("Canceled the download");
1445
1446	      if (show_load_progress != NULL)
1447		show_load_progress (sect_name, sent, size,
1448				    args->data_count, args->total_size);
1449	    }
1450	  while (sent < size);
1451
1452	  if (err != 0)
1453	    error ("Memory access error while loading section %s.", sect_name);
1454
1455	  do_cleanups (old_chain);
1456	}
1457    }
1458}
1459
1460void
1461generic_load (char *args, int from_tty)
1462{
1463  asection *s;
1464  bfd *loadfile_bfd;
1465  time_t start_time, end_time;	/* Start and end times of download */
1466  char *filename;
1467  struct cleanup *old_cleanups;
1468  char *offptr;
1469  struct load_section_data cbdata;
1470  CORE_ADDR entry;
1471
1472  cbdata.load_offset = 0;	/* Offset to add to vma for each section. */
1473  cbdata.write_count = 0;	/* Number of writes needed. */
1474  cbdata.data_count = 0;	/* Number of bytes written to target memory. */
1475  cbdata.total_size = 0;	/* Total size of all bfd sectors. */
1476
1477  /* Parse the input argument - the user can specify a load offset as
1478     a second argument. */
1479  filename = xmalloc (strlen (args) + 1);
1480  old_cleanups = make_cleanup (xfree, filename);
1481  strcpy (filename, args);
1482  offptr = strchr (filename, ' ');
1483  if (offptr != NULL)
1484    {
1485      char *endptr;
1486
1487      cbdata.load_offset = strtoul (offptr, &endptr, 0);
1488      if (offptr == endptr)
1489	error ("Invalid download offset:%s\n", offptr);
1490      *offptr = '\0';
1491    }
1492  else
1493    cbdata.load_offset = 0;
1494
1495  /* Open the file for loading. */
1496  loadfile_bfd = bfd_openr (filename, gnutarget);
1497  if (loadfile_bfd == NULL)
1498    {
1499      perror_with_name (filename);
1500      return;
1501    }
1502
1503  /* FIXME: should be checking for errors from bfd_close (for one thing,
1504     on error it does not free all the storage associated with the
1505     bfd).  */
1506  make_cleanup_bfd_close (loadfile_bfd);
1507
1508  if (!bfd_check_format (loadfile_bfd, bfd_object))
1509    {
1510      error ("\"%s\" is not an object file: %s", filename,
1511	     bfd_errmsg (bfd_get_error ()));
1512    }
1513
1514  bfd_map_over_sections (loadfile_bfd, add_section_size_callback,
1515			 (void *) &cbdata.total_size);
1516
1517  start_time = time (NULL);
1518
1519  bfd_map_over_sections (loadfile_bfd, load_section_callback, &cbdata);
1520
1521  end_time = time (NULL);
1522
1523  entry = bfd_get_start_address (loadfile_bfd);
1524  ui_out_text (uiout, "Start address ");
1525  ui_out_field_fmt (uiout, "address", "0x%s", paddr_nz (entry));
1526  ui_out_text (uiout, ", load size ");
1527  ui_out_field_fmt (uiout, "load-size", "%lu", cbdata.data_count);
1528  ui_out_text (uiout, "\n");
1529  /* We were doing this in remote-mips.c, I suspect it is right
1530     for other targets too.  */
1531  write_pc (entry);
1532
1533  /* FIXME: are we supposed to call symbol_file_add or not?  According
1534     to a comment from remote-mips.c (where a call to symbol_file_add
1535     was commented out), making the call confuses GDB if more than one
1536     file is loaded in.  Some targets do (e.g., remote-vx.c) but
1537     others don't (or didn't - perhaphs they have all been deleted).  */
1538
1539  print_transfer_performance (gdb_stdout, cbdata.data_count,
1540			      cbdata.write_count, end_time - start_time);
1541
1542  do_cleanups (old_cleanups);
1543}
1544
1545/* Report how fast the transfer went. */
1546
1547/* DEPRECATED: cagney/1999-10-18: report_transfer_performance is being
1548   replaced by print_transfer_performance (with a very different
1549   function signature). */
1550
1551void
1552report_transfer_performance (unsigned long data_count, time_t start_time,
1553			     time_t end_time)
1554{
1555  print_transfer_performance (gdb_stdout, data_count,
1556			      end_time - start_time, 0);
1557}
1558
1559void
1560print_transfer_performance (struct ui_file *stream,
1561			    unsigned long data_count,
1562			    unsigned long write_count,
1563			    unsigned long time_count)
1564{
1565  ui_out_text (uiout, "Transfer rate: ");
1566  if (time_count > 0)
1567    {
1568      ui_out_field_fmt (uiout, "transfer-rate", "%lu",
1569			(data_count * 8) / time_count);
1570      ui_out_text (uiout, " bits/sec");
1571    }
1572  else
1573    {
1574      ui_out_field_fmt (uiout, "transferred-bits", "%lu", (data_count * 8));
1575      ui_out_text (uiout, " bits in <1 sec");
1576    }
1577  if (write_count > 0)
1578    {
1579      ui_out_text (uiout, ", ");
1580      ui_out_field_fmt (uiout, "write-rate", "%lu", data_count / write_count);
1581      ui_out_text (uiout, " bytes/write");
1582    }
1583  ui_out_text (uiout, ".\n");
1584}
1585
1586/* This function allows the addition of incrementally linked object files.
1587   It does not modify any state in the target, only in the debugger.  */
1588/* Note: ezannoni 2000-04-13 This function/command used to have a
1589   special case syntax for the rombug target (Rombug is the boot
1590   monitor for Microware's OS-9 / OS-9000, see remote-os9k.c). In the
1591   rombug case, the user doesn't need to supply a text address,
1592   instead a call to target_link() (in target.c) would supply the
1593   value to use. We are now discontinuing this type of ad hoc syntax. */
1594
1595static void
1596add_symbol_file_command (char *args, int from_tty)
1597{
1598  char *filename = NULL;
1599  int flags = OBJF_USERLOADED;
1600  char *arg;
1601  int expecting_option = 0;
1602  int section_index = 0;
1603  int argcnt = 0;
1604  int sec_num = 0;
1605  int i;
1606  int expecting_sec_name = 0;
1607  int expecting_sec_addr = 0;
1608
1609  struct sect_opt
1610  {
1611    char *name;
1612    char *value;
1613  };
1614
1615  struct section_addr_info *section_addrs;
1616  struct sect_opt *sect_opts = NULL;
1617  size_t num_sect_opts = 0;
1618  struct cleanup *my_cleanups = make_cleanup (null_cleanup, NULL);
1619
1620  num_sect_opts = 16;
1621  sect_opts = (struct sect_opt *) xmalloc (num_sect_opts
1622					   * sizeof (struct sect_opt));
1623
1624  dont_repeat ();
1625
1626  if (args == NULL)
1627    error ("add-symbol-file takes a file name and an address");
1628
1629  /* Make a copy of the string that we can safely write into. */
1630  args = xstrdup (args);
1631
1632  while (*args != '\000')
1633    {
1634      /* Any leading spaces? */
1635      while (isspace (*args))
1636	args++;
1637
1638      /* Point arg to the beginning of the argument. */
1639      arg = args;
1640
1641      /* Move args pointer over the argument. */
1642      while ((*args != '\000') && !isspace (*args))
1643	args++;
1644
1645      /* If there are more arguments, terminate arg and
1646         proceed past it. */
1647      if (*args != '\000')
1648	*args++ = '\000';
1649
1650      /* Now process the argument. */
1651      if (argcnt == 0)
1652	{
1653	  /* The first argument is the file name. */
1654	  filename = tilde_expand (arg);
1655	  make_cleanup (xfree, filename);
1656	}
1657      else
1658	if (argcnt == 1)
1659	  {
1660	    /* The second argument is always the text address at which
1661               to load the program. */
1662	    sect_opts[section_index].name = ".text";
1663	    sect_opts[section_index].value = arg;
1664	    if (++section_index > num_sect_opts)
1665	      {
1666		num_sect_opts *= 2;
1667		sect_opts = ((struct sect_opt *)
1668			     xrealloc (sect_opts,
1669				       num_sect_opts
1670				       * sizeof (struct sect_opt)));
1671	      }
1672	  }
1673	else
1674	  {
1675	    /* It's an option (starting with '-') or it's an argument
1676	       to an option */
1677
1678	    if (*arg == '-')
1679	      {
1680		if (strcmp (arg, "-readnow") == 0)
1681		  flags |= OBJF_READNOW;
1682		else if (strcmp (arg, "-s") == 0)
1683		  {
1684		    expecting_sec_name = 1;
1685		    expecting_sec_addr = 1;
1686		  }
1687	      }
1688	    else
1689	      {
1690		if (expecting_sec_name)
1691		  {
1692		    sect_opts[section_index].name = arg;
1693		    expecting_sec_name = 0;
1694		  }
1695		else
1696		  if (expecting_sec_addr)
1697		    {
1698		      sect_opts[section_index].value = arg;
1699		      expecting_sec_addr = 0;
1700		      if (++section_index > num_sect_opts)
1701			{
1702			  num_sect_opts *= 2;
1703			  sect_opts = ((struct sect_opt *)
1704				       xrealloc (sect_opts,
1705						 num_sect_opts
1706						 * sizeof (struct sect_opt)));
1707			}
1708		    }
1709		  else
1710		    error ("USAGE: add-symbol-file <filename> <textaddress> [-mapped] [-readnow] [-s <secname> <addr>]*");
1711	      }
1712	  }
1713      argcnt++;
1714    }
1715
1716  /* Print the prompt for the query below. And save the arguments into
1717     a sect_addr_info structure to be passed around to other
1718     functions.  We have to split this up into separate print
1719     statements because local_hex_string returns a local static
1720     string. */
1721
1722  printf_unfiltered ("add symbol table from file \"%s\" at\n", filename);
1723  section_addrs = alloc_section_addr_info (section_index);
1724  make_cleanup (xfree, section_addrs);
1725  for (i = 0; i < section_index; i++)
1726    {
1727      CORE_ADDR addr;
1728      char *val = sect_opts[i].value;
1729      char *sec = sect_opts[i].name;
1730
1731      addr = parse_and_eval_address (val);
1732
1733      /* Here we store the section offsets in the order they were
1734         entered on the command line. */
1735      section_addrs->other[sec_num].name = sec;
1736      section_addrs->other[sec_num].addr = addr;
1737      printf_unfiltered ("\t%s_addr = %s\n",
1738		       sec,
1739		       local_hex_string ((unsigned long)addr));
1740      sec_num++;
1741
1742      /* The object's sections are initialized when a
1743	 call is made to build_objfile_section_table (objfile).
1744	 This happens in reread_symbols.
1745	 At this point, we don't know what file type this is,
1746	 so we can't determine what section names are valid.  */
1747    }
1748
1749  if (from_tty && (!query ("%s", "")))
1750    error ("Not confirmed.");
1751
1752  symbol_file_add (filename, from_tty, section_addrs, 0, flags);
1753
1754  /* Getting new symbols may change our opinion about what is
1755     frameless.  */
1756  reinit_frame_cache ();
1757  do_cleanups (my_cleanups);
1758}
1759
1760static void
1761add_shared_symbol_files_command (char *args, int from_tty)
1762{
1763#ifdef ADD_SHARED_SYMBOL_FILES
1764  ADD_SHARED_SYMBOL_FILES (args, from_tty);
1765#else
1766  error ("This command is not available in this configuration of GDB.");
1767#endif
1768}
1769
1770/* Re-read symbols if a symbol-file has changed.  */
1771void
1772reread_symbols (void)
1773{
1774  struct objfile *objfile;
1775  long new_modtime;
1776  int reread_one = 0;
1777  struct stat new_statbuf;
1778  int res;
1779
1780  /* With the addition of shared libraries, this should be modified,
1781     the load time should be saved in the partial symbol tables, since
1782     different tables may come from different source files.  FIXME.
1783     This routine should then walk down each partial symbol table
1784     and see if the symbol table that it originates from has been changed */
1785
1786  for (objfile = object_files; objfile; objfile = objfile->next)
1787    {
1788      if (objfile->obfd)
1789	{
1790#ifdef DEPRECATED_IBM6000_TARGET
1791	  /* If this object is from a shared library, then you should
1792	     stat on the library name, not member name. */
1793
1794	  if (objfile->obfd->my_archive)
1795	    res = stat (objfile->obfd->my_archive->filename, &new_statbuf);
1796	  else
1797#endif
1798	    res = stat (objfile->name, &new_statbuf);
1799	  if (res != 0)
1800	    {
1801	      /* FIXME, should use print_sys_errmsg but it's not filtered. */
1802	      printf_unfiltered ("`%s' has disappeared; keeping its symbols.\n",
1803			       objfile->name);
1804	      continue;
1805	    }
1806	  new_modtime = new_statbuf.st_mtime;
1807	  if (new_modtime != objfile->mtime)
1808	    {
1809	      struct cleanup *old_cleanups;
1810	      struct section_offsets *offsets;
1811	      int num_offsets;
1812	      char *obfd_filename;
1813
1814	      printf_unfiltered ("`%s' has changed; re-reading symbols.\n",
1815			       objfile->name);
1816
1817	      /* There are various functions like symbol_file_add,
1818	         symfile_bfd_open, syms_from_objfile, etc., which might
1819	         appear to do what we want.  But they have various other
1820	         effects which we *don't* want.  So we just do stuff
1821	         ourselves.  We don't worry about mapped files (for one thing,
1822	         any mapped file will be out of date).  */
1823
1824	      /* If we get an error, blow away this objfile (not sure if
1825	         that is the correct response for things like shared
1826	         libraries).  */
1827	      old_cleanups = make_cleanup_free_objfile (objfile);
1828	      /* We need to do this whenever any symbols go away.  */
1829	      make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
1830
1831	      /* Clean up any state BFD has sitting around.  We don't need
1832	         to close the descriptor but BFD lacks a way of closing the
1833	         BFD without closing the descriptor.  */
1834	      obfd_filename = bfd_get_filename (objfile->obfd);
1835	      if (!bfd_close (objfile->obfd))
1836		error ("Can't close BFD for %s: %s", objfile->name,
1837		       bfd_errmsg (bfd_get_error ()));
1838	      objfile->obfd = bfd_openr (obfd_filename, gnutarget);
1839	      if (objfile->obfd == NULL)
1840		error ("Can't open %s to read symbols.", objfile->name);
1841	      /* bfd_openr sets cacheable to true, which is what we want.  */
1842	      if (!bfd_check_format (objfile->obfd, bfd_object))
1843		error ("Can't read symbols from %s: %s.", objfile->name,
1844		       bfd_errmsg (bfd_get_error ()));
1845
1846	      /* Save the offsets, we will nuke them with the rest of the
1847	         objfile_obstack.  */
1848	      num_offsets = objfile->num_sections;
1849	      offsets = ((struct section_offsets *)
1850			 alloca (SIZEOF_N_SECTION_OFFSETS (num_offsets)));
1851	      memcpy (offsets, objfile->section_offsets,
1852		      SIZEOF_N_SECTION_OFFSETS (num_offsets));
1853
1854	      /* Nuke all the state that we will re-read.  Much of the following
1855	         code which sets things to NULL really is necessary to tell
1856	         other parts of GDB that there is nothing currently there.  */
1857
1858	      /* FIXME: Do we have to free a whole linked list, or is this
1859	         enough?  */
1860	      if (objfile->global_psymbols.list)
1861		xmfree (objfile->md, objfile->global_psymbols.list);
1862	      memset (&objfile->global_psymbols, 0,
1863		      sizeof (objfile->global_psymbols));
1864	      if (objfile->static_psymbols.list)
1865		xmfree (objfile->md, objfile->static_psymbols.list);
1866	      memset (&objfile->static_psymbols, 0,
1867		      sizeof (objfile->static_psymbols));
1868
1869	      /* Free the obstacks for non-reusable objfiles */
1870	      bcache_xfree (objfile->psymbol_cache);
1871	      objfile->psymbol_cache = bcache_xmalloc ();
1872	      bcache_xfree (objfile->macro_cache);
1873	      objfile->macro_cache = bcache_xmalloc ();
1874	      if (objfile->demangled_names_hash != NULL)
1875		{
1876		  htab_delete (objfile->demangled_names_hash);
1877		  objfile->demangled_names_hash = NULL;
1878		}
1879	      obstack_free (&objfile->objfile_obstack, 0);
1880	      objfile->sections = NULL;
1881	      objfile->symtabs = NULL;
1882	      objfile->psymtabs = NULL;
1883	      objfile->free_psymtabs = NULL;
1884	      objfile->cp_namespace_symtab = NULL;
1885	      objfile->msymbols = NULL;
1886	      objfile->sym_private = NULL;
1887	      objfile->minimal_symbol_count = 0;
1888	      memset (&objfile->msymbol_hash, 0,
1889		      sizeof (objfile->msymbol_hash));
1890	      memset (&objfile->msymbol_demangled_hash, 0,
1891		      sizeof (objfile->msymbol_demangled_hash));
1892	      objfile->fundamental_types = NULL;
1893	      clear_objfile_data (objfile);
1894	      if (objfile->sf != NULL)
1895		{
1896		  (*objfile->sf->sym_finish) (objfile);
1897		}
1898
1899	      /* We never make this a mapped file.  */
1900	      objfile->md = NULL;
1901	      objfile->psymbol_cache = bcache_xmalloc ();
1902	      objfile->macro_cache = bcache_xmalloc ();
1903	      /* obstack_init also initializes the obstack so it is
1904	         empty.  We could use obstack_specify_allocation but
1905	         gdb_obstack.h specifies the alloc/dealloc
1906	         functions.  */
1907	      obstack_init (&objfile->objfile_obstack);
1908	      if (build_objfile_section_table (objfile))
1909		{
1910		  error ("Can't find the file sections in `%s': %s",
1911			 objfile->name, bfd_errmsg (bfd_get_error ()));
1912		}
1913              terminate_minimal_symbol_table (objfile);
1914
1915	      /* We use the same section offsets as from last time.  I'm not
1916	         sure whether that is always correct for shared libraries.  */
1917	      objfile->section_offsets = (struct section_offsets *)
1918		obstack_alloc (&objfile->objfile_obstack,
1919			       SIZEOF_N_SECTION_OFFSETS (num_offsets));
1920	      memcpy (objfile->section_offsets, offsets,
1921		      SIZEOF_N_SECTION_OFFSETS (num_offsets));
1922	      objfile->num_sections = num_offsets;
1923
1924	      /* What the hell is sym_new_init for, anyway?  The concept of
1925	         distinguishing between the main file and additional files
1926	         in this way seems rather dubious.  */
1927	      if (objfile == symfile_objfile)
1928		{
1929		  (*objfile->sf->sym_new_init) (objfile);
1930#ifdef HPUXHPPA
1931		  RESET_HP_UX_GLOBALS ();
1932#endif
1933		}
1934
1935	      (*objfile->sf->sym_init) (objfile);
1936	      clear_complaints (&symfile_complaints, 1, 1);
1937	      /* The "mainline" parameter is a hideous hack; I think leaving it
1938	         zero is OK since dbxread.c also does what it needs to do if
1939	         objfile->global_psymbols.size is 0.  */
1940	      (*objfile->sf->sym_read) (objfile, 0);
1941	      if (!have_partial_symbols () && !have_full_symbols ())
1942		{
1943		  wrap_here ("");
1944		  printf_unfiltered ("(no debugging symbols found)\n");
1945		  wrap_here ("");
1946		}
1947	      objfile->flags |= OBJF_SYMS;
1948
1949	      /* We're done reading the symbol file; finish off complaints.  */
1950	      clear_complaints (&symfile_complaints, 0, 1);
1951
1952	      /* Getting new symbols may change our opinion about what is
1953	         frameless.  */
1954
1955	      reinit_frame_cache ();
1956
1957	      /* Discard cleanups as symbol reading was successful.  */
1958	      discard_cleanups (old_cleanups);
1959
1960	      /* If the mtime has changed between the time we set new_modtime
1961	         and now, we *want* this to be out of date, so don't call stat
1962	         again now.  */
1963	      objfile->mtime = new_modtime;
1964	      reread_one = 1;
1965              reread_separate_symbols (objfile);
1966	    }
1967	}
1968    }
1969
1970  if (reread_one)
1971    clear_symtab_users ();
1972}
1973
1974
1975/* Handle separate debug info for OBJFILE, which has just been
1976   re-read:
1977   - If we had separate debug info before, but now we don't, get rid
1978     of the separated objfile.
1979   - If we didn't have separated debug info before, but now we do,
1980     read in the new separated debug info file.
1981   - If the debug link points to a different file, toss the old one
1982     and read the new one.
1983   This function does *not* handle the case where objfile is still
1984   using the same separate debug info file, but that file's timestamp
1985   has changed.  That case should be handled by the loop in
1986   reread_symbols already.  */
1987static void
1988reread_separate_symbols (struct objfile *objfile)
1989{
1990  char *debug_file;
1991  unsigned long crc32;
1992
1993  /* Does the updated objfile's debug info live in a
1994     separate file?  */
1995  debug_file = find_separate_debug_file (objfile);
1996
1997  if (objfile->separate_debug_objfile)
1998    {
1999      /* There are two cases where we need to get rid of
2000         the old separated debug info objfile:
2001         - if the new primary objfile doesn't have
2002         separated debug info, or
2003         - if the new primary objfile has separate debug
2004         info, but it's under a different filename.
2005
2006         If the old and new objfiles both have separate
2007         debug info, under the same filename, then we're
2008         okay --- if the separated file's contents have
2009         changed, we will have caught that when we
2010         visited it in this function's outermost
2011         loop.  */
2012      if (! debug_file
2013          || strcmp (debug_file, objfile->separate_debug_objfile->name) != 0)
2014        free_objfile (objfile->separate_debug_objfile);
2015    }
2016
2017  /* If the new objfile has separate debug info, and we
2018     haven't loaded it already, do so now.  */
2019  if (debug_file
2020      && ! objfile->separate_debug_objfile)
2021    {
2022      /* Use the same section offset table as objfile itself.
2023         Preserve the flags from objfile that make sense.  */
2024      objfile->separate_debug_objfile
2025        = (symbol_file_add_with_addrs_or_offsets
2026           (debug_file,
2027            info_verbose, /* from_tty: Don't override the default. */
2028            0, /* No addr table.  */
2029            objfile->section_offsets, objfile->num_sections,
2030            0, /* Not mainline.  See comments about this above.  */
2031            objfile->flags & (OBJF_REORDERED | OBJF_SHARED | OBJF_READNOW
2032                              | OBJF_USERLOADED)));
2033      objfile->separate_debug_objfile->separate_debug_objfile_backlink
2034        = objfile;
2035    }
2036}
2037
2038
2039
2040
2041
2042typedef struct
2043{
2044  char *ext;
2045  enum language lang;
2046}
2047filename_language;
2048
2049static filename_language *filename_language_table;
2050static int fl_table_size, fl_table_next;
2051
2052static void
2053add_filename_language (char *ext, enum language lang)
2054{
2055  if (fl_table_next >= fl_table_size)
2056    {
2057      fl_table_size += 10;
2058      filename_language_table =
2059	xrealloc (filename_language_table,
2060		  fl_table_size * sizeof (*filename_language_table));
2061    }
2062
2063  filename_language_table[fl_table_next].ext = xstrdup (ext);
2064  filename_language_table[fl_table_next].lang = lang;
2065  fl_table_next++;
2066}
2067
2068static char *ext_args;
2069
2070static void
2071set_ext_lang_command (char *args, int from_tty)
2072{
2073  int i;
2074  char *cp = ext_args;
2075  enum language lang;
2076
2077  /* First arg is filename extension, starting with '.' */
2078  if (*cp != '.')
2079    error ("'%s': Filename extension must begin with '.'", ext_args);
2080
2081  /* Find end of first arg.  */
2082  while (*cp && !isspace (*cp))
2083    cp++;
2084
2085  if (*cp == '\0')
2086    error ("'%s': two arguments required -- filename extension and language",
2087	   ext_args);
2088
2089  /* Null-terminate first arg */
2090  *cp++ = '\0';
2091
2092  /* Find beginning of second arg, which should be a source language.  */
2093  while (*cp && isspace (*cp))
2094    cp++;
2095
2096  if (*cp == '\0')
2097    error ("'%s': two arguments required -- filename extension and language",
2098	   ext_args);
2099
2100  /* Lookup the language from among those we know.  */
2101  lang = language_enum (cp);
2102
2103  /* Now lookup the filename extension: do we already know it?  */
2104  for (i = 0; i < fl_table_next; i++)
2105    if (0 == strcmp (ext_args, filename_language_table[i].ext))
2106      break;
2107
2108  if (i >= fl_table_next)
2109    {
2110      /* new file extension */
2111      add_filename_language (ext_args, lang);
2112    }
2113  else
2114    {
2115      /* redefining a previously known filename extension */
2116
2117      /* if (from_tty) */
2118      /*   query ("Really make files of type %s '%s'?", */
2119      /*          ext_args, language_str (lang));           */
2120
2121      xfree (filename_language_table[i].ext);
2122      filename_language_table[i].ext = xstrdup (ext_args);
2123      filename_language_table[i].lang = lang;
2124    }
2125}
2126
2127static void
2128info_ext_lang_command (char *args, int from_tty)
2129{
2130  int i;
2131
2132  printf_filtered ("Filename extensions and the languages they represent:");
2133  printf_filtered ("\n\n");
2134  for (i = 0; i < fl_table_next; i++)
2135    printf_filtered ("\t%s\t- %s\n",
2136		     filename_language_table[i].ext,
2137		     language_str (filename_language_table[i].lang));
2138}
2139
2140static void
2141init_filename_language_table (void)
2142{
2143  if (fl_table_size == 0)	/* protect against repetition */
2144    {
2145      fl_table_size = 20;
2146      fl_table_next = 0;
2147      filename_language_table =
2148	xmalloc (fl_table_size * sizeof (*filename_language_table));
2149      add_filename_language (".c", language_c);
2150      add_filename_language (".C", language_cplus);
2151      add_filename_language (".cc", language_cplus);
2152      add_filename_language (".cp", language_cplus);
2153      add_filename_language (".cpp", language_cplus);
2154      add_filename_language (".cxx", language_cplus);
2155      add_filename_language (".c++", language_cplus);
2156      add_filename_language (".java", language_java);
2157      add_filename_language (".class", language_java);
2158      add_filename_language (".m", language_objc);
2159      add_filename_language (".f", language_fortran);
2160      add_filename_language (".F", language_fortran);
2161      add_filename_language (".s", language_asm);
2162      add_filename_language (".S", language_asm);
2163      add_filename_language (".pas", language_pascal);
2164      add_filename_language (".p", language_pascal);
2165      add_filename_language (".pp", language_pascal);
2166    }
2167}
2168
2169enum language
2170deduce_language_from_filename (char *filename)
2171{
2172  int i;
2173  char *cp;
2174
2175  if (filename != NULL)
2176    if ((cp = strrchr (filename, '.')) != NULL)
2177      for (i = 0; i < fl_table_next; i++)
2178	if (strcmp (cp, filename_language_table[i].ext) == 0)
2179	  return filename_language_table[i].lang;
2180
2181  return language_unknown;
2182}
2183
2184/* allocate_symtab:
2185
2186   Allocate and partly initialize a new symbol table.  Return a pointer
2187   to it.  error() if no space.
2188
2189   Caller must set these fields:
2190   LINETABLE(symtab)
2191   symtab->blockvector
2192   symtab->dirname
2193   symtab->free_code
2194   symtab->free_ptr
2195   possibly free_named_symtabs (symtab->filename);
2196 */
2197
2198struct symtab *
2199allocate_symtab (char *filename, struct objfile *objfile)
2200{
2201  struct symtab *symtab;
2202
2203  symtab = (struct symtab *)
2204    obstack_alloc (&objfile->objfile_obstack, sizeof (struct symtab));
2205  memset (symtab, 0, sizeof (*symtab));
2206  symtab->filename = obsavestring (filename, strlen (filename),
2207				   &objfile->objfile_obstack);
2208  symtab->fullname = NULL;
2209  symtab->language = deduce_language_from_filename (filename);
2210  symtab->debugformat = obsavestring ("unknown", 7,
2211				      &objfile->objfile_obstack);
2212
2213  /* Hook it to the objfile it comes from */
2214
2215  symtab->objfile = objfile;
2216  symtab->next = objfile->symtabs;
2217  objfile->symtabs = symtab;
2218
2219  /* FIXME: This should go away.  It is only defined for the Z8000,
2220     and the Z8000 definition of this macro doesn't have anything to
2221     do with the now-nonexistent EXTRA_SYMTAB_INFO macro, it's just
2222     here for convenience.  */
2223#ifdef INIT_EXTRA_SYMTAB_INFO
2224  INIT_EXTRA_SYMTAB_INFO (symtab);
2225#endif
2226
2227  return (symtab);
2228}
2229
2230struct partial_symtab *
2231allocate_psymtab (char *filename, struct objfile *objfile)
2232{
2233  struct partial_symtab *psymtab;
2234
2235  if (objfile->free_psymtabs)
2236    {
2237      psymtab = objfile->free_psymtabs;
2238      objfile->free_psymtabs = psymtab->next;
2239    }
2240  else
2241    psymtab = (struct partial_symtab *)
2242      obstack_alloc (&objfile->objfile_obstack,
2243		     sizeof (struct partial_symtab));
2244
2245  memset (psymtab, 0, sizeof (struct partial_symtab));
2246  psymtab->filename = obsavestring (filename, strlen (filename),
2247				    &objfile->objfile_obstack);
2248  psymtab->symtab = NULL;
2249
2250  /* Prepend it to the psymtab list for the objfile it belongs to.
2251     Psymtabs are searched in most recent inserted -> least recent
2252     inserted order. */
2253
2254  psymtab->objfile = objfile;
2255  psymtab->next = objfile->psymtabs;
2256  objfile->psymtabs = psymtab;
2257#if 0
2258  {
2259    struct partial_symtab **prev_pst;
2260    psymtab->objfile = objfile;
2261    psymtab->next = NULL;
2262    prev_pst = &(objfile->psymtabs);
2263    while ((*prev_pst) != NULL)
2264      prev_pst = &((*prev_pst)->next);
2265    (*prev_pst) = psymtab;
2266  }
2267#endif
2268
2269  return (psymtab);
2270}
2271
2272void
2273discard_psymtab (struct partial_symtab *pst)
2274{
2275  struct partial_symtab **prev_pst;
2276
2277  /* From dbxread.c:
2278     Empty psymtabs happen as a result of header files which don't
2279     have any symbols in them.  There can be a lot of them.  But this
2280     check is wrong, in that a psymtab with N_SLINE entries but
2281     nothing else is not empty, but we don't realize that.  Fixing
2282     that without slowing things down might be tricky.  */
2283
2284  /* First, snip it out of the psymtab chain */
2285
2286  prev_pst = &(pst->objfile->psymtabs);
2287  while ((*prev_pst) != pst)
2288    prev_pst = &((*prev_pst)->next);
2289  (*prev_pst) = pst->next;
2290
2291  /* Next, put it on a free list for recycling */
2292
2293  pst->next = pst->objfile->free_psymtabs;
2294  pst->objfile->free_psymtabs = pst;
2295}
2296
2297
2298/* Reset all data structures in gdb which may contain references to symbol
2299   table data.  */
2300
2301void
2302clear_symtab_users (void)
2303{
2304  /* Someday, we should do better than this, by only blowing away
2305     the things that really need to be blown.  */
2306  clear_value_history ();
2307  clear_displays ();
2308  clear_internalvars ();
2309  breakpoint_re_set ();
2310  set_default_breakpoint (0, 0, 0, 0);
2311  clear_current_source_symtab_and_line ();
2312  clear_pc_function_cache ();
2313  if (target_new_objfile_hook)
2314    target_new_objfile_hook (NULL);
2315}
2316
2317static void
2318clear_symtab_users_cleanup (void *ignore)
2319{
2320  clear_symtab_users ();
2321}
2322
2323/* clear_symtab_users_once:
2324
2325   This function is run after symbol reading, or from a cleanup.
2326   If an old symbol table was obsoleted, the old symbol table
2327   has been blown away, but the other GDB data structures that may
2328   reference it have not yet been cleared or re-directed.  (The old
2329   symtab was zapped, and the cleanup queued, in free_named_symtab()
2330   below.)
2331
2332   This function can be queued N times as a cleanup, or called
2333   directly; it will do all the work the first time, and then will be a
2334   no-op until the next time it is queued.  This works by bumping a
2335   counter at queueing time.  Much later when the cleanup is run, or at
2336   the end of symbol processing (in case the cleanup is discarded), if
2337   the queued count is greater than the "done-count", we do the work
2338   and set the done-count to the queued count.  If the queued count is
2339   less than or equal to the done-count, we just ignore the call.  This
2340   is needed because reading a single .o file will often replace many
2341   symtabs (one per .h file, for example), and we don't want to reset
2342   the breakpoints N times in the user's face.
2343
2344   The reason we both queue a cleanup, and call it directly after symbol
2345   reading, is because the cleanup protects us in case of errors, but is
2346   discarded if symbol reading is successful.  */
2347
2348#if 0
2349/* FIXME:  As free_named_symtabs is currently a big noop this function
2350   is no longer needed.  */
2351static void clear_symtab_users_once (void);
2352
2353static int clear_symtab_users_queued;
2354static int clear_symtab_users_done;
2355
2356static void
2357clear_symtab_users_once (void)
2358{
2359  /* Enforce once-per-`do_cleanups'-semantics */
2360  if (clear_symtab_users_queued <= clear_symtab_users_done)
2361    return;
2362  clear_symtab_users_done = clear_symtab_users_queued;
2363
2364  clear_symtab_users ();
2365}
2366#endif
2367
2368/* Delete the specified psymtab, and any others that reference it.  */
2369
2370static void
2371cashier_psymtab (struct partial_symtab *pst)
2372{
2373  struct partial_symtab *ps, *pprev = NULL;
2374  int i;
2375
2376  /* Find its previous psymtab in the chain */
2377  for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2378    {
2379      if (ps == pst)
2380	break;
2381      pprev = ps;
2382    }
2383
2384  if (ps)
2385    {
2386      /* Unhook it from the chain.  */
2387      if (ps == pst->objfile->psymtabs)
2388	pst->objfile->psymtabs = ps->next;
2389      else
2390	pprev->next = ps->next;
2391
2392      /* FIXME, we can't conveniently deallocate the entries in the
2393         partial_symbol lists (global_psymbols/static_psymbols) that
2394         this psymtab points to.  These just take up space until all
2395         the psymtabs are reclaimed.  Ditto the dependencies list and
2396         filename, which are all in the objfile_obstack.  */
2397
2398      /* We need to cashier any psymtab that has this one as a dependency... */
2399    again:
2400      for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2401	{
2402	  for (i = 0; i < ps->number_of_dependencies; i++)
2403	    {
2404	      if (ps->dependencies[i] == pst)
2405		{
2406		  cashier_psymtab (ps);
2407		  goto again;	/* Must restart, chain has been munged. */
2408		}
2409	    }
2410	}
2411    }
2412}
2413
2414/* If a symtab or psymtab for filename NAME is found, free it along
2415   with any dependent breakpoints, displays, etc.
2416   Used when loading new versions of object modules with the "add-file"
2417   command.  This is only called on the top-level symtab or psymtab's name;
2418   it is not called for subsidiary files such as .h files.
2419
2420   Return value is 1 if we blew away the environment, 0 if not.
2421   FIXME.  The return value appears to never be used.
2422
2423   FIXME.  I think this is not the best way to do this.  We should
2424   work on being gentler to the environment while still cleaning up
2425   all stray pointers into the freed symtab.  */
2426
2427int
2428free_named_symtabs (char *name)
2429{
2430#if 0
2431  /* FIXME:  With the new method of each objfile having it's own
2432     psymtab list, this function needs serious rethinking.  In particular,
2433     why was it ever necessary to toss psymtabs with specific compilation
2434     unit filenames, as opposed to all psymtabs from a particular symbol
2435     file?  -- fnf
2436     Well, the answer is that some systems permit reloading of particular
2437     compilation units.  We want to blow away any old info about these
2438     compilation units, regardless of which objfiles they arrived in. --gnu.  */
2439
2440  struct symtab *s;
2441  struct symtab *prev;
2442  struct partial_symtab *ps;
2443  struct blockvector *bv;
2444  int blewit = 0;
2445
2446  /* We only wack things if the symbol-reload switch is set.  */
2447  if (!symbol_reloading)
2448    return 0;
2449
2450  /* Some symbol formats have trouble providing file names... */
2451  if (name == 0 || *name == '\0')
2452    return 0;
2453
2454  /* Look for a psymtab with the specified name.  */
2455
2456again2:
2457  for (ps = partial_symtab_list; ps; ps = ps->next)
2458    {
2459      if (strcmp (name, ps->filename) == 0)
2460	{
2461	  cashier_psymtab (ps);	/* Blow it away...and its little dog, too.  */
2462	  goto again2;		/* Must restart, chain has been munged */
2463	}
2464    }
2465
2466  /* Look for a symtab with the specified name.  */
2467
2468  for (s = symtab_list; s; s = s->next)
2469    {
2470      if (strcmp (name, s->filename) == 0)
2471	break;
2472      prev = s;
2473    }
2474
2475  if (s)
2476    {
2477      if (s == symtab_list)
2478	symtab_list = s->next;
2479      else
2480	prev->next = s->next;
2481
2482      /* For now, queue a delete for all breakpoints, displays, etc., whether
2483         or not they depend on the symtab being freed.  This should be
2484         changed so that only those data structures affected are deleted.  */
2485
2486      /* But don't delete anything if the symtab is empty.
2487         This test is necessary due to a bug in "dbxread.c" that
2488         causes empty symtabs to be created for N_SO symbols that
2489         contain the pathname of the object file.  (This problem
2490         has been fixed in GDB 3.9x).  */
2491
2492      bv = BLOCKVECTOR (s);
2493      if (BLOCKVECTOR_NBLOCKS (bv) > 2
2494	  || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
2495	  || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)))
2496	{
2497	  complaint (&symfile_complaints, "Replacing old symbols for `%s'",
2498		     name);
2499	  clear_symtab_users_queued++;
2500	  make_cleanup (clear_symtab_users_once, 0);
2501	  blewit = 1;
2502	}
2503      else
2504	{
2505	  complaint (&symfile_complaints, "Empty symbol table found for `%s'",
2506		     name);
2507	}
2508
2509      free_symtab (s);
2510    }
2511  else
2512    {
2513      /* It is still possible that some breakpoints will be affected
2514         even though no symtab was found, since the file might have
2515         been compiled without debugging, and hence not be associated
2516         with a symtab.  In order to handle this correctly, we would need
2517         to keep a list of text address ranges for undebuggable files.
2518         For now, we do nothing, since this is a fairly obscure case.  */
2519      ;
2520    }
2521
2522  /* FIXME, what about the minimal symbol table? */
2523  return blewit;
2524#else
2525  return (0);
2526#endif
2527}
2528
2529/* Allocate and partially fill a partial symtab.  It will be
2530   completely filled at the end of the symbol list.
2531
2532   FILENAME is the name of the symbol-file we are reading from. */
2533
2534struct partial_symtab *
2535start_psymtab_common (struct objfile *objfile,
2536		      struct section_offsets *section_offsets, char *filename,
2537		      CORE_ADDR textlow, struct partial_symbol **global_syms,
2538		      struct partial_symbol **static_syms)
2539{
2540  struct partial_symtab *psymtab;
2541
2542  psymtab = allocate_psymtab (filename, objfile);
2543  psymtab->section_offsets = section_offsets;
2544  psymtab->textlow = textlow;
2545  psymtab->texthigh = psymtab->textlow;		/* default */
2546  psymtab->globals_offset = global_syms - objfile->global_psymbols.list;
2547  psymtab->statics_offset = static_syms - objfile->static_psymbols.list;
2548  return (psymtab);
2549}
2550
2551/* Add a symbol with a long value to a psymtab.
2552   Since one arg is a struct, we pass in a ptr and deref it (sigh).
2553   Return the partial symbol that has been added.  */
2554
2555/* NOTE: carlton/2003-09-11: The reason why we return the partial
2556   symbol is so that callers can get access to the symbol's demangled
2557   name, which they don't have any cheap way to determine otherwise.
2558   (Currenly, dwarf2read.c is the only file who uses that information,
2559   though it's possible that other readers might in the future.)
2560   Elena wasn't thrilled about that, and I don't blame her, but we
2561   couldn't come up with a better way to get that information.  If
2562   it's needed in other situations, we could consider breaking up
2563   SYMBOL_SET_NAMES to provide access to the demangled name lookup
2564   cache.  */
2565
2566const struct partial_symbol *
2567add_psymbol_to_list (char *name, int namelength, domain_enum domain,
2568		     enum address_class class,
2569		     struct psymbol_allocation_list *list, long val,	/* Value as a long */
2570		     CORE_ADDR coreaddr,	/* Value as a CORE_ADDR */
2571		     enum language language, struct objfile *objfile)
2572{
2573  struct partial_symbol *psym;
2574  char *buf = alloca (namelength + 1);
2575  /* psymbol is static so that there will be no uninitialized gaps in the
2576     structure which might contain random data, causing cache misses in
2577     bcache. */
2578  static struct partial_symbol psymbol;
2579
2580  /* Create local copy of the partial symbol */
2581  memcpy (buf, name, namelength);
2582  buf[namelength] = '\0';
2583  /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2584  if (val != 0)
2585    {
2586      SYMBOL_VALUE (&psymbol) = val;
2587    }
2588  else
2589    {
2590      SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2591    }
2592  SYMBOL_SECTION (&psymbol) = 0;
2593  SYMBOL_LANGUAGE (&psymbol) = language;
2594  PSYMBOL_DOMAIN (&psymbol) = domain;
2595  PSYMBOL_CLASS (&psymbol) = class;
2596
2597  SYMBOL_SET_NAMES (&psymbol, buf, namelength, objfile);
2598
2599  /* Stash the partial symbol away in the cache */
2600  psym = deprecated_bcache (&psymbol, sizeof (struct partial_symbol),
2601			    objfile->psymbol_cache);
2602
2603  /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2604  if (list->next >= list->list + list->size)
2605    {
2606      extend_psymbol_list (list, objfile);
2607    }
2608  *list->next++ = psym;
2609  OBJSTAT (objfile, n_psyms++);
2610
2611  return psym;
2612}
2613
2614/* Add a symbol with a long value to a psymtab. This differs from
2615 * add_psymbol_to_list above in taking both a mangled and a demangled
2616 * name. */
2617
2618void
2619add_psymbol_with_dem_name_to_list (char *name, int namelength, char *dem_name,
2620				   int dem_namelength, domain_enum domain,
2621				   enum address_class class,
2622				   struct psymbol_allocation_list *list, long val,	/* Value as a long */
2623				   CORE_ADDR coreaddr,	/* Value as a CORE_ADDR */
2624				   enum language language,
2625				   struct objfile *objfile)
2626{
2627  struct partial_symbol *psym;
2628  char *buf = alloca (namelength + 1);
2629  /* psymbol is static so that there will be no uninitialized gaps in the
2630     structure which might contain random data, causing cache misses in
2631     bcache. */
2632  static struct partial_symbol psymbol;
2633
2634  /* Create local copy of the partial symbol */
2635
2636  memcpy (buf, name, namelength);
2637  buf[namelength] = '\0';
2638  DEPRECATED_SYMBOL_NAME (&psymbol) = deprecated_bcache (buf, namelength + 1,
2639							 objfile->psymbol_cache);
2640
2641  buf = alloca (dem_namelength + 1);
2642  memcpy (buf, dem_name, dem_namelength);
2643  buf[dem_namelength] = '\0';
2644
2645  switch (language)
2646    {
2647    case language_c:
2648    case language_cplus:
2649      SYMBOL_CPLUS_DEMANGLED_NAME (&psymbol) =
2650	deprecated_bcache (buf, dem_namelength + 1, objfile->psymbol_cache);
2651      break;
2652      /* FIXME What should be done for the default case? Ignoring for now. */
2653    }
2654
2655  /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2656  if (val != 0)
2657    {
2658      SYMBOL_VALUE (&psymbol) = val;
2659    }
2660  else
2661    {
2662      SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2663    }
2664  SYMBOL_SECTION (&psymbol) = 0;
2665  SYMBOL_LANGUAGE (&psymbol) = language;
2666  PSYMBOL_DOMAIN (&psymbol) = domain;
2667  PSYMBOL_CLASS (&psymbol) = class;
2668  SYMBOL_INIT_LANGUAGE_SPECIFIC (&psymbol, language);
2669
2670  /* Stash the partial symbol away in the cache */
2671  psym = deprecated_bcache (&psymbol, sizeof (struct partial_symbol),
2672			    objfile->psymbol_cache);
2673
2674  /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2675  if (list->next >= list->list + list->size)
2676    {
2677      extend_psymbol_list (list, objfile);
2678    }
2679  *list->next++ = psym;
2680  OBJSTAT (objfile, n_psyms++);
2681}
2682
2683/* Initialize storage for partial symbols.  */
2684
2685void
2686init_psymbol_list (struct objfile *objfile, int total_symbols)
2687{
2688  /* Free any previously allocated psymbol lists.  */
2689
2690  if (objfile->global_psymbols.list)
2691    {
2692      xmfree (objfile->md, objfile->global_psymbols.list);
2693    }
2694  if (objfile->static_psymbols.list)
2695    {
2696      xmfree (objfile->md, objfile->static_psymbols.list);
2697    }
2698
2699  /* Current best guess is that approximately a twentieth
2700     of the total symbols (in a debugging file) are global or static
2701     oriented symbols */
2702
2703  objfile->global_psymbols.size = total_symbols / 10;
2704  objfile->static_psymbols.size = total_symbols / 10;
2705
2706  if (objfile->global_psymbols.size > 0)
2707    {
2708      objfile->global_psymbols.next =
2709	objfile->global_psymbols.list = (struct partial_symbol **)
2710	xmmalloc (objfile->md, (objfile->global_psymbols.size
2711				* sizeof (struct partial_symbol *)));
2712    }
2713  if (objfile->static_psymbols.size > 0)
2714    {
2715      objfile->static_psymbols.next =
2716	objfile->static_psymbols.list = (struct partial_symbol **)
2717	xmmalloc (objfile->md, (objfile->static_psymbols.size
2718				* sizeof (struct partial_symbol *)));
2719    }
2720}
2721
2722/* OVERLAYS:
2723   The following code implements an abstraction for debugging overlay sections.
2724
2725   The target model is as follows:
2726   1) The gnu linker will permit multiple sections to be mapped into the
2727   same VMA, each with its own unique LMA (or load address).
2728   2) It is assumed that some runtime mechanism exists for mapping the
2729   sections, one by one, from the load address into the VMA address.
2730   3) This code provides a mechanism for gdb to keep track of which
2731   sections should be considered to be mapped from the VMA to the LMA.
2732   This information is used for symbol lookup, and memory read/write.
2733   For instance, if a section has been mapped then its contents
2734   should be read from the VMA, otherwise from the LMA.
2735
2736   Two levels of debugger support for overlays are available.  One is
2737   "manual", in which the debugger relies on the user to tell it which
2738   overlays are currently mapped.  This level of support is
2739   implemented entirely in the core debugger, and the information about
2740   whether a section is mapped is kept in the objfile->obj_section table.
2741
2742   The second level of support is "automatic", and is only available if
2743   the target-specific code provides functionality to read the target's
2744   overlay mapping table, and translate its contents for the debugger
2745   (by updating the mapped state information in the obj_section tables).
2746
2747   The interface is as follows:
2748   User commands:
2749   overlay map <name>   -- tell gdb to consider this section mapped
2750   overlay unmap <name> -- tell gdb to consider this section unmapped
2751   overlay list         -- list the sections that GDB thinks are mapped
2752   overlay read-target  -- get the target's state of what's mapped
2753   overlay off/manual/auto -- set overlay debugging state
2754   Functional interface:
2755   find_pc_mapped_section(pc):    if the pc is in the range of a mapped
2756   section, return that section.
2757   find_pc_overlay(pc):       find any overlay section that contains
2758   the pc, either in its VMA or its LMA
2759   overlay_is_mapped(sect):       true if overlay is marked as mapped
2760   section_is_overlay(sect):      true if section's VMA != LMA
2761   pc_in_mapped_range(pc,sec):    true if pc belongs to section's VMA
2762   pc_in_unmapped_range(...):     true if pc belongs to section's LMA
2763   sections_overlap(sec1, sec2):  true if mapped sec1 and sec2 ranges overlap
2764   overlay_mapped_address(...):   map an address from section's LMA to VMA
2765   overlay_unmapped_address(...): map an address from section's VMA to LMA
2766   symbol_overlayed_address(...): Return a "current" address for symbol:
2767   either in VMA or LMA depending on whether
2768   the symbol's section is currently mapped
2769 */
2770
2771/* Overlay debugging state: */
2772
2773enum overlay_debugging_state overlay_debugging = ovly_off;
2774int overlay_cache_invalid = 0;	/* True if need to refresh mapped state */
2775
2776/* Target vector for refreshing overlay mapped state */
2777static void simple_overlay_update (struct obj_section *);
2778void (*target_overlay_update) (struct obj_section *) = simple_overlay_update;
2779
2780/* Function: section_is_overlay (SECTION)
2781   Returns true if SECTION has VMA not equal to LMA, ie.
2782   SECTION is loaded at an address different from where it will "run".  */
2783
2784int
2785section_is_overlay (asection *section)
2786{
2787  /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2788
2789  if (overlay_debugging)
2790    if (section && section->lma != 0 &&
2791	section->vma != section->lma)
2792      return 1;
2793
2794  return 0;
2795}
2796
2797/* Function: overlay_invalidate_all (void)
2798   Invalidate the mapped state of all overlay sections (mark it as stale).  */
2799
2800static void
2801overlay_invalidate_all (void)
2802{
2803  struct objfile *objfile;
2804  struct obj_section *sect;
2805
2806  ALL_OBJSECTIONS (objfile, sect)
2807    if (section_is_overlay (sect->the_bfd_section))
2808    sect->ovly_mapped = -1;
2809}
2810
2811/* Function: overlay_is_mapped (SECTION)
2812   Returns true if section is an overlay, and is currently mapped.
2813   Private: public access is thru function section_is_mapped.
2814
2815   Access to the ovly_mapped flag is restricted to this function, so
2816   that we can do automatic update.  If the global flag
2817   OVERLAY_CACHE_INVALID is set (by wait_for_inferior), then call
2818   overlay_invalidate_all.  If the mapped state of the particular
2819   section is stale, then call TARGET_OVERLAY_UPDATE to refresh it.  */
2820
2821static int
2822overlay_is_mapped (struct obj_section *osect)
2823{
2824  if (osect == 0 || !section_is_overlay (osect->the_bfd_section))
2825    return 0;
2826
2827  switch (overlay_debugging)
2828    {
2829    default:
2830    case ovly_off:
2831      return 0;			/* overlay debugging off */
2832    case ovly_auto:		/* overlay debugging automatic */
2833      /* Unles there is a target_overlay_update function,
2834         there's really nothing useful to do here (can't really go auto)  */
2835      if (target_overlay_update)
2836	{
2837	  if (overlay_cache_invalid)
2838	    {
2839	      overlay_invalidate_all ();
2840	      overlay_cache_invalid = 0;
2841	    }
2842	  if (osect->ovly_mapped == -1)
2843	    (*target_overlay_update) (osect);
2844	}
2845      /* fall thru to manual case */
2846    case ovly_on:		/* overlay debugging manual */
2847      return osect->ovly_mapped == 1;
2848    }
2849}
2850
2851/* Function: section_is_mapped
2852   Returns true if section is an overlay, and is currently mapped.  */
2853
2854int
2855section_is_mapped (asection *section)
2856{
2857  struct objfile *objfile;
2858  struct obj_section *osect;
2859
2860  if (overlay_debugging)
2861    if (section && section_is_overlay (section))
2862      ALL_OBJSECTIONS (objfile, osect)
2863	if (osect->the_bfd_section == section)
2864	return overlay_is_mapped (osect);
2865
2866  return 0;
2867}
2868
2869/* Function: pc_in_unmapped_range
2870   If PC falls into the lma range of SECTION, return true, else false.  */
2871
2872CORE_ADDR
2873pc_in_unmapped_range (CORE_ADDR pc, asection *section)
2874{
2875  /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2876
2877  int size;
2878
2879  if (overlay_debugging)
2880    if (section && section_is_overlay (section))
2881      {
2882	size = bfd_get_section_size (section);
2883	if (section->lma <= pc && pc < section->lma + size)
2884	  return 1;
2885      }
2886  return 0;
2887}
2888
2889/* Function: pc_in_mapped_range
2890   If PC falls into the vma range of SECTION, return true, else false.  */
2891
2892CORE_ADDR
2893pc_in_mapped_range (CORE_ADDR pc, asection *section)
2894{
2895  /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2896
2897  int size;
2898
2899  if (overlay_debugging)
2900    if (section && section_is_overlay (section))
2901      {
2902	size = bfd_get_section_size (section);
2903	if (section->vma <= pc && pc < section->vma + size)
2904	  return 1;
2905      }
2906  return 0;
2907}
2908
2909
2910/* Return true if the mapped ranges of sections A and B overlap, false
2911   otherwise.  */
2912static int
2913sections_overlap (asection *a, asection *b)
2914{
2915  /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2916
2917  CORE_ADDR a_start = a->vma;
2918  CORE_ADDR a_end = a->vma + bfd_get_section_size (a);
2919  CORE_ADDR b_start = b->vma;
2920  CORE_ADDR b_end = b->vma + bfd_get_section_size (b);
2921
2922  return (a_start < b_end && b_start < a_end);
2923}
2924
2925/* Function: overlay_unmapped_address (PC, SECTION)
2926   Returns the address corresponding to PC in the unmapped (load) range.
2927   May be the same as PC.  */
2928
2929CORE_ADDR
2930overlay_unmapped_address (CORE_ADDR pc, asection *section)
2931{
2932  /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2933
2934  if (overlay_debugging)
2935    if (section && section_is_overlay (section) &&
2936	pc_in_mapped_range (pc, section))
2937      return pc + section->lma - section->vma;
2938
2939  return pc;
2940}
2941
2942/* Function: overlay_mapped_address (PC, SECTION)
2943   Returns the address corresponding to PC in the mapped (runtime) range.
2944   May be the same as PC.  */
2945
2946CORE_ADDR
2947overlay_mapped_address (CORE_ADDR pc, asection *section)
2948{
2949  /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2950
2951  if (overlay_debugging)
2952    if (section && section_is_overlay (section) &&
2953	pc_in_unmapped_range (pc, section))
2954      return pc + section->vma - section->lma;
2955
2956  return pc;
2957}
2958
2959
2960/* Function: symbol_overlayed_address
2961   Return one of two addresses (relative to the VMA or to the LMA),
2962   depending on whether the section is mapped or not.  */
2963
2964CORE_ADDR
2965symbol_overlayed_address (CORE_ADDR address, asection *section)
2966{
2967  if (overlay_debugging)
2968    {
2969      /* If the symbol has no section, just return its regular address. */
2970      if (section == 0)
2971	return address;
2972      /* If the symbol's section is not an overlay, just return its address */
2973      if (!section_is_overlay (section))
2974	return address;
2975      /* If the symbol's section is mapped, just return its address */
2976      if (section_is_mapped (section))
2977	return address;
2978      /*
2979       * HOWEVER: if the symbol is in an overlay section which is NOT mapped,
2980       * then return its LOADED address rather than its vma address!!
2981       */
2982      return overlay_unmapped_address (address, section);
2983    }
2984  return address;
2985}
2986
2987/* Function: find_pc_overlay (PC)
2988   Return the best-match overlay section for PC:
2989   If PC matches a mapped overlay section's VMA, return that section.
2990   Else if PC matches an unmapped section's VMA, return that section.
2991   Else if PC matches an unmapped section's LMA, return that section.  */
2992
2993asection *
2994find_pc_overlay (CORE_ADDR pc)
2995{
2996  struct objfile *objfile;
2997  struct obj_section *osect, *best_match = NULL;
2998
2999  if (overlay_debugging)
3000    ALL_OBJSECTIONS (objfile, osect)
3001      if (section_is_overlay (osect->the_bfd_section))
3002      {
3003	if (pc_in_mapped_range (pc, osect->the_bfd_section))
3004	  {
3005	    if (overlay_is_mapped (osect))
3006	      return osect->the_bfd_section;
3007	    else
3008	      best_match = osect;
3009	  }
3010	else if (pc_in_unmapped_range (pc, osect->the_bfd_section))
3011	  best_match = osect;
3012      }
3013  return best_match ? best_match->the_bfd_section : NULL;
3014}
3015
3016/* Function: find_pc_mapped_section (PC)
3017   If PC falls into the VMA address range of an overlay section that is
3018   currently marked as MAPPED, return that section.  Else return NULL.  */
3019
3020asection *
3021find_pc_mapped_section (CORE_ADDR pc)
3022{
3023  struct objfile *objfile;
3024  struct obj_section *osect;
3025
3026  if (overlay_debugging)
3027    ALL_OBJSECTIONS (objfile, osect)
3028      if (pc_in_mapped_range (pc, osect->the_bfd_section) &&
3029	  overlay_is_mapped (osect))
3030      return osect->the_bfd_section;
3031
3032  return NULL;
3033}
3034
3035/* Function: list_overlays_command
3036   Print a list of mapped sections and their PC ranges */
3037
3038void
3039list_overlays_command (char *args, int from_tty)
3040{
3041  int nmapped = 0;
3042  struct objfile *objfile;
3043  struct obj_section *osect;
3044
3045  if (overlay_debugging)
3046    ALL_OBJSECTIONS (objfile, osect)
3047      if (overlay_is_mapped (osect))
3048      {
3049	const char *name;
3050	bfd_vma lma, vma;
3051	int size;
3052
3053	vma = bfd_section_vma (objfile->obfd, osect->the_bfd_section);
3054	lma = bfd_section_lma (objfile->obfd, osect->the_bfd_section);
3055	size = bfd_get_section_size (osect->the_bfd_section);
3056	name = bfd_section_name (objfile->obfd, osect->the_bfd_section);
3057
3058	printf_filtered ("Section %s, loaded at ", name);
3059	print_address_numeric (lma, 1, gdb_stdout);
3060	puts_filtered (" - ");
3061	print_address_numeric (lma + size, 1, gdb_stdout);
3062	printf_filtered (", mapped at ");
3063	print_address_numeric (vma, 1, gdb_stdout);
3064	puts_filtered (" - ");
3065	print_address_numeric (vma + size, 1, gdb_stdout);
3066	puts_filtered ("\n");
3067
3068	nmapped++;
3069      }
3070  if (nmapped == 0)
3071    printf_filtered ("No sections are mapped.\n");
3072}
3073
3074/* Function: map_overlay_command
3075   Mark the named section as mapped (ie. residing at its VMA address).  */
3076
3077void
3078map_overlay_command (char *args, int from_tty)
3079{
3080  struct objfile *objfile, *objfile2;
3081  struct obj_section *sec, *sec2;
3082  asection *bfdsec;
3083
3084  if (!overlay_debugging)
3085    error ("\
3086Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3087the 'overlay manual' command.");
3088
3089  if (args == 0 || *args == 0)
3090    error ("Argument required: name of an overlay section");
3091
3092  /* First, find a section matching the user supplied argument */
3093  ALL_OBJSECTIONS (objfile, sec)
3094    if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3095    {
3096      /* Now, check to see if the section is an overlay. */
3097      bfdsec = sec->the_bfd_section;
3098      if (!section_is_overlay (bfdsec))
3099	continue;		/* not an overlay section */
3100
3101      /* Mark the overlay as "mapped" */
3102      sec->ovly_mapped = 1;
3103
3104      /* Next, make a pass and unmap any sections that are
3105         overlapped by this new section: */
3106      ALL_OBJSECTIONS (objfile2, sec2)
3107	if (sec2->ovly_mapped
3108            && sec != sec2
3109            && sec->the_bfd_section != sec2->the_bfd_section
3110            && sections_overlap (sec->the_bfd_section,
3111                                 sec2->the_bfd_section))
3112	{
3113	  if (info_verbose)
3114	    printf_unfiltered ("Note: section %s unmapped by overlap\n",
3115			     bfd_section_name (objfile->obfd,
3116					       sec2->the_bfd_section));
3117	  sec2->ovly_mapped = 0;	/* sec2 overlaps sec: unmap sec2 */
3118	}
3119      return;
3120    }
3121  error ("No overlay section called %s", args);
3122}
3123
3124/* Function: unmap_overlay_command
3125   Mark the overlay section as unmapped
3126   (ie. resident in its LMA address range, rather than the VMA range).  */
3127
3128void
3129unmap_overlay_command (char *args, int from_tty)
3130{
3131  struct objfile *objfile;
3132  struct obj_section *sec;
3133
3134  if (!overlay_debugging)
3135    error ("\
3136Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3137the 'overlay manual' command.");
3138
3139  if (args == 0 || *args == 0)
3140    error ("Argument required: name of an overlay section");
3141
3142  /* First, find a section matching the user supplied argument */
3143  ALL_OBJSECTIONS (objfile, sec)
3144    if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3145    {
3146      if (!sec->ovly_mapped)
3147	error ("Section %s is not mapped", args);
3148      sec->ovly_mapped = 0;
3149      return;
3150    }
3151  error ("No overlay section called %s", args);
3152}
3153
3154/* Function: overlay_auto_command
3155   A utility command to turn on overlay debugging.
3156   Possibly this should be done via a set/show command. */
3157
3158static void
3159overlay_auto_command (char *args, int from_tty)
3160{
3161  overlay_debugging = ovly_auto;
3162  enable_overlay_breakpoints ();
3163  if (info_verbose)
3164    printf_unfiltered ("Automatic overlay debugging enabled.");
3165}
3166
3167/* Function: overlay_manual_command
3168   A utility command to turn on overlay debugging.
3169   Possibly this should be done via a set/show command. */
3170
3171static void
3172overlay_manual_command (char *args, int from_tty)
3173{
3174  overlay_debugging = ovly_on;
3175  disable_overlay_breakpoints ();
3176  if (info_verbose)
3177    printf_unfiltered ("Overlay debugging enabled.");
3178}
3179
3180/* Function: overlay_off_command
3181   A utility command to turn on overlay debugging.
3182   Possibly this should be done via a set/show command. */
3183
3184static void
3185overlay_off_command (char *args, int from_tty)
3186{
3187  overlay_debugging = ovly_off;
3188  disable_overlay_breakpoints ();
3189  if (info_verbose)
3190    printf_unfiltered ("Overlay debugging disabled.");
3191}
3192
3193static void
3194overlay_load_command (char *args, int from_tty)
3195{
3196  if (target_overlay_update)
3197    (*target_overlay_update) (NULL);
3198  else
3199    error ("This target does not know how to read its overlay state.");
3200}
3201
3202/* Function: overlay_command
3203   A place-holder for a mis-typed command */
3204
3205/* Command list chain containing all defined "overlay" subcommands. */
3206struct cmd_list_element *overlaylist;
3207
3208static void
3209overlay_command (char *args, int from_tty)
3210{
3211  printf_unfiltered
3212    ("\"overlay\" must be followed by the name of an overlay command.\n");
3213  help_list (overlaylist, "overlay ", -1, gdb_stdout);
3214}
3215
3216
3217/* Target Overlays for the "Simplest" overlay manager:
3218
3219   This is GDB's default target overlay layer.  It works with the
3220   minimal overlay manager supplied as an example by Cygnus.  The
3221   entry point is via a function pointer "target_overlay_update",
3222   so targets that use a different runtime overlay manager can
3223   substitute their own overlay_update function and take over the
3224   function pointer.
3225
3226   The overlay_update function pokes around in the target's data structures
3227   to see what overlays are mapped, and updates GDB's overlay mapping with
3228   this information.
3229
3230   In this simple implementation, the target data structures are as follows:
3231   unsigned _novlys;            /# number of overlay sections #/
3232   unsigned _ovly_table[_novlys][4] = {
3233   {VMA, SIZE, LMA, MAPPED},    /# one entry per overlay section #/
3234   {..., ...,  ..., ...},
3235   }
3236   unsigned _novly_regions;     /# number of overlay regions #/
3237   unsigned _ovly_region_table[_novly_regions][3] = {
3238   {VMA, SIZE, MAPPED_TO_LMA},  /# one entry per overlay region #/
3239   {..., ...,  ...},
3240   }
3241   These functions will attempt to update GDB's mappedness state in the
3242   symbol section table, based on the target's mappedness state.
3243
3244   To do this, we keep a cached copy of the target's _ovly_table, and
3245   attempt to detect when the cached copy is invalidated.  The main
3246   entry point is "simple_overlay_update(SECT), which looks up SECT in
3247   the cached table and re-reads only the entry for that section from
3248   the target (whenever possible).
3249 */
3250
3251/* Cached, dynamically allocated copies of the target data structures: */
3252static unsigned (*cache_ovly_table)[4] = 0;
3253#if 0
3254static unsigned (*cache_ovly_region_table)[3] = 0;
3255#endif
3256static unsigned cache_novlys = 0;
3257#if 0
3258static unsigned cache_novly_regions = 0;
3259#endif
3260static CORE_ADDR cache_ovly_table_base = 0;
3261#if 0
3262static CORE_ADDR cache_ovly_region_table_base = 0;
3263#endif
3264enum ovly_index
3265  {
3266    VMA, SIZE, LMA, MAPPED
3267  };
3268#define TARGET_LONG_BYTES (TARGET_LONG_BIT / TARGET_CHAR_BIT)
3269
3270/* Throw away the cached copy of _ovly_table */
3271static void
3272simple_free_overlay_table (void)
3273{
3274  if (cache_ovly_table)
3275    xfree (cache_ovly_table);
3276  cache_novlys = 0;
3277  cache_ovly_table = NULL;
3278  cache_ovly_table_base = 0;
3279}
3280
3281#if 0
3282/* Throw away the cached copy of _ovly_region_table */
3283static void
3284simple_free_overlay_region_table (void)
3285{
3286  if (cache_ovly_region_table)
3287    xfree (cache_ovly_region_table);
3288  cache_novly_regions = 0;
3289  cache_ovly_region_table = NULL;
3290  cache_ovly_region_table_base = 0;
3291}
3292#endif
3293
3294/* Read an array of ints from the target into a local buffer.
3295   Convert to host order.  int LEN is number of ints  */
3296static void
3297read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr, int len)
3298{
3299  /* FIXME (alloca): Not safe if array is very large. */
3300  char *buf = alloca (len * TARGET_LONG_BYTES);
3301  int i;
3302
3303  read_memory (memaddr, buf, len * TARGET_LONG_BYTES);
3304  for (i = 0; i < len; i++)
3305    myaddr[i] = extract_unsigned_integer (TARGET_LONG_BYTES * i + buf,
3306					  TARGET_LONG_BYTES);
3307}
3308
3309/* Find and grab a copy of the target _ovly_table
3310   (and _novlys, which is needed for the table's size) */
3311static int
3312simple_read_overlay_table (void)
3313{
3314  struct minimal_symbol *novlys_msym, *ovly_table_msym;
3315
3316  simple_free_overlay_table ();
3317  novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
3318  if (! novlys_msym)
3319    {
3320      error ("Error reading inferior's overlay table: "
3321             "couldn't find `_novlys' variable\n"
3322             "in inferior.  Use `overlay manual' mode.");
3323      return 0;
3324    }
3325
3326  ovly_table_msym = lookup_minimal_symbol ("_ovly_table", NULL, NULL);
3327  if (! ovly_table_msym)
3328    {
3329      error ("Error reading inferior's overlay table: couldn't find "
3330             "`_ovly_table' array\n"
3331             "in inferior.  Use `overlay manual' mode.");
3332      return 0;
3333    }
3334
3335  cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym), 4);
3336  cache_ovly_table
3337    = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
3338  cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
3339  read_target_long_array (cache_ovly_table_base,
3340                          (int *) cache_ovly_table,
3341                          cache_novlys * 4);
3342
3343  return 1;			/* SUCCESS */
3344}
3345
3346#if 0
3347/* Find and grab a copy of the target _ovly_region_table
3348   (and _novly_regions, which is needed for the table's size) */
3349static int
3350simple_read_overlay_region_table (void)
3351{
3352  struct minimal_symbol *msym;
3353
3354  simple_free_overlay_region_table ();
3355  msym = lookup_minimal_symbol ("_novly_regions", NULL, NULL);
3356  if (msym != NULL)
3357    cache_novly_regions = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4);
3358  else
3359    return 0;			/* failure */
3360  cache_ovly_region_table = (void *) xmalloc (cache_novly_regions * 12);
3361  if (cache_ovly_region_table != NULL)
3362    {
3363      msym = lookup_minimal_symbol ("_ovly_region_table", NULL, NULL);
3364      if (msym != NULL)
3365	{
3366	  cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
3367	  read_target_long_array (cache_ovly_region_table_base,
3368				  (int *) cache_ovly_region_table,
3369				  cache_novly_regions * 3);
3370	}
3371      else
3372	return 0;		/* failure */
3373    }
3374  else
3375    return 0;			/* failure */
3376  return 1;			/* SUCCESS */
3377}
3378#endif
3379
3380/* Function: simple_overlay_update_1
3381   A helper function for simple_overlay_update.  Assuming a cached copy
3382   of _ovly_table exists, look through it to find an entry whose vma,
3383   lma and size match those of OSECT.  Re-read the entry and make sure
3384   it still matches OSECT (else the table may no longer be valid).
3385   Set OSECT's mapped state to match the entry.  Return: 1 for
3386   success, 0 for failure.  */
3387
3388static int
3389simple_overlay_update_1 (struct obj_section *osect)
3390{
3391  int i, size;
3392  bfd *obfd = osect->objfile->obfd;
3393  asection *bsect = osect->the_bfd_section;
3394
3395  size = bfd_get_section_size (osect->the_bfd_section);
3396  for (i = 0; i < cache_novlys; i++)
3397    if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3398	&& cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3399	/* && cache_ovly_table[i][SIZE] == size */ )
3400      {
3401	read_target_long_array (cache_ovly_table_base + i * TARGET_LONG_BYTES,
3402				(int *) cache_ovly_table[i], 4);
3403	if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3404	    && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3405	    /* && cache_ovly_table[i][SIZE] == size */ )
3406	  {
3407	    osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3408	    return 1;
3409	  }
3410	else	/* Warning!  Warning!  Target's ovly table has changed! */
3411	  return 0;
3412      }
3413  return 0;
3414}
3415
3416/* Function: simple_overlay_update
3417   If OSECT is NULL, then update all sections' mapped state
3418   (after re-reading the entire target _ovly_table).
3419   If OSECT is non-NULL, then try to find a matching entry in the
3420   cached ovly_table and update only OSECT's mapped state.
3421   If a cached entry can't be found or the cache isn't valid, then
3422   re-read the entire cache, and go ahead and update all sections.  */
3423
3424static void
3425simple_overlay_update (struct obj_section *osect)
3426{
3427  struct objfile *objfile;
3428
3429  /* Were we given an osect to look up?  NULL means do all of them. */
3430  if (osect)
3431    /* Have we got a cached copy of the target's overlay table? */
3432    if (cache_ovly_table != NULL)
3433      /* Does its cached location match what's currently in the symtab? */
3434      if (cache_ovly_table_base ==
3435	  SYMBOL_VALUE_ADDRESS (lookup_minimal_symbol ("_ovly_table", NULL, NULL)))
3436	/* Then go ahead and try to look up this single section in the cache */
3437	if (simple_overlay_update_1 (osect))
3438	  /* Found it!  We're done. */
3439	  return;
3440
3441  /* Cached table no good: need to read the entire table anew.
3442     Or else we want all the sections, in which case it's actually
3443     more efficient to read the whole table in one block anyway.  */
3444
3445  if (! simple_read_overlay_table ())
3446    return;
3447
3448  /* Now may as well update all sections, even if only one was requested. */
3449  ALL_OBJSECTIONS (objfile, osect)
3450    if (section_is_overlay (osect->the_bfd_section))
3451    {
3452      int i, size;
3453      bfd *obfd = osect->objfile->obfd;
3454      asection *bsect = osect->the_bfd_section;
3455
3456      size = bfd_get_section_size (osect->the_bfd_section);
3457      for (i = 0; i < cache_novlys; i++)
3458	if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3459	    && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3460	    /* && cache_ovly_table[i][SIZE] == size */ )
3461	  { /* obj_section matches i'th entry in ovly_table */
3462	    osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3463	    break;		/* finished with inner for loop: break out */
3464	  }
3465    }
3466}
3467
3468/* Set the output sections and output offsets for section SECTP in
3469   ABFD.  The relocation code in BFD will read these offsets, so we
3470   need to be sure they're initialized.  We map each section to itself,
3471   with no offset; this means that SECTP->vma will be honored.  */
3472
3473static void
3474symfile_dummy_outputs (bfd *abfd, asection *sectp, void *dummy)
3475{
3476  sectp->output_section = sectp;
3477  sectp->output_offset = 0;
3478}
3479
3480/* Relocate the contents of a debug section SECTP in ABFD.  The
3481   contents are stored in BUF if it is non-NULL, or returned in a
3482   malloc'd buffer otherwise.
3483
3484   For some platforms and debug info formats, shared libraries contain
3485   relocations against the debug sections (particularly for DWARF-2;
3486   one affected platform is PowerPC GNU/Linux, although it depends on
3487   the version of the linker in use).  Also, ELF object files naturally
3488   have unresolved relocations for their debug sections.  We need to apply
3489   the relocations in order to get the locations of symbols correct.  */
3490
3491bfd_byte *
3492symfile_relocate_debug_section (bfd *abfd, asection *sectp, bfd_byte *buf)
3493{
3494  /* We're only interested in debugging sections with relocation
3495     information.  */
3496  if ((sectp->flags & SEC_RELOC) == 0)
3497    return NULL;
3498  if ((sectp->flags & SEC_DEBUGGING) == 0)
3499    return NULL;
3500
3501  /* We will handle section offsets properly elsewhere, so relocate as if
3502     all sections begin at 0.  */
3503  bfd_map_over_sections (abfd, symfile_dummy_outputs, NULL);
3504
3505  return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
3506}
3507
3508void
3509_initialize_symfile (void)
3510{
3511  struct cmd_list_element *c;
3512
3513  c = add_cmd ("symbol-file", class_files, symbol_file_command,
3514	       "Load symbol table from executable file FILE.\n\
3515The `file' command can also load symbol tables, as well as setting the file\n\
3516to execute.", &cmdlist);
3517  set_cmd_completer (c, filename_completer);
3518
3519  c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command,
3520	       "Usage: add-symbol-file FILE ADDR [-s <SECT> <SECT_ADDR> -s <SECT> <SECT_ADDR> ...]\n\
3521Load the symbols from FILE, assuming FILE has been dynamically loaded.\n\
3522ADDR is the starting address of the file's text.\n\
3523The optional arguments are section-name section-address pairs and\n\
3524should be specified if the data and bss segments are not contiguous\n\
3525with the text.  SECT is a section name to be loaded at SECT_ADDR.",
3526	       &cmdlist);
3527  set_cmd_completer (c, filename_completer);
3528
3529  c = add_cmd ("add-shared-symbol-files", class_files,
3530	       add_shared_symbol_files_command,
3531   "Load the symbols from shared objects in the dynamic linker's link map.",
3532	       &cmdlist);
3533  c = add_alias_cmd ("assf", "add-shared-symbol-files", class_files, 1,
3534		     &cmdlist);
3535
3536  c = add_cmd ("load", class_files, load_command,
3537	       "Dynamically load FILE into the running program, and record its symbols\n\
3538for access from GDB.", &cmdlist);
3539  set_cmd_completer (c, filename_completer);
3540
3541  add_show_from_set
3542    (add_set_cmd ("symbol-reloading", class_support, var_boolean,
3543		  (char *) &symbol_reloading,
3544	    "Set dynamic symbol table reloading multiple times in one run.",
3545		  &setlist),
3546     &showlist);
3547
3548  add_prefix_cmd ("overlay", class_support, overlay_command,
3549		  "Commands for debugging overlays.", &overlaylist,
3550		  "overlay ", 0, &cmdlist);
3551
3552  add_com_alias ("ovly", "overlay", class_alias, 1);
3553  add_com_alias ("ov", "overlay", class_alias, 1);
3554
3555  add_cmd ("map-overlay", class_support, map_overlay_command,
3556	   "Assert that an overlay section is mapped.", &overlaylist);
3557
3558  add_cmd ("unmap-overlay", class_support, unmap_overlay_command,
3559	   "Assert that an overlay section is unmapped.", &overlaylist);
3560
3561  add_cmd ("list-overlays", class_support, list_overlays_command,
3562	   "List mappings of overlay sections.", &overlaylist);
3563
3564  add_cmd ("manual", class_support, overlay_manual_command,
3565	   "Enable overlay debugging.", &overlaylist);
3566  add_cmd ("off", class_support, overlay_off_command,
3567	   "Disable overlay debugging.", &overlaylist);
3568  add_cmd ("auto", class_support, overlay_auto_command,
3569	   "Enable automatic overlay debugging.", &overlaylist);
3570  add_cmd ("load-target", class_support, overlay_load_command,
3571	   "Read the overlay mapping state from the target.", &overlaylist);
3572
3573  /* Filename extension to source language lookup table: */
3574  init_filename_language_table ();
3575  c = add_set_cmd ("extension-language", class_files, var_string_noescape,
3576		   (char *) &ext_args,
3577		   "Set mapping between filename extension and source language.\n\
3578Usage: set extension-language .foo bar",
3579		   &setlist);
3580  set_cmd_cfunc (c, set_ext_lang_command);
3581
3582  add_info ("extensions", info_ext_lang_command,
3583	    "All filename extensions associated with a source language.");
3584
3585  add_show_from_set
3586    (add_set_cmd ("download-write-size", class_obscure,
3587		  var_integer, (char *) &download_write_size,
3588		  "Set the write size used when downloading a program.\n"
3589		  "Only used when downloading a program onto a remote\n"
3590		  "target. Specify zero, or a negative value, to disable\n"
3591		  "blocked writes. The actual size of each transfer is also\n"
3592		  "limited by the size of the target packet and the memory\n"
3593		  "cache.\n",
3594		  &setlist),
3595     &showlist);
3596
3597  debug_file_directory = xstrdup (DEBUGDIR);
3598  c = (add_set_cmd
3599       ("debug-file-directory", class_support, var_string,
3600        (char *) &debug_file_directory,
3601        "Set the directory where separate debug symbols are searched for.\n"
3602        "Separate debug symbols are first searched for in the same\n"
3603        "directory as the binary, then in the `" DEBUG_SUBDIRECTORY
3604        "' subdirectory,\n"
3605        "and lastly at the path of the directory of the binary with\n"
3606        "the global debug-file directory prepended\n",
3607        &setlist));
3608  add_show_from_set (c, &showlist);
3609  set_cmd_completer (c, filename_completer);
3610}
3611