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