* language.c (local_hex_format_custom): Remove.
[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 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, hex_string ((unsigned long)addr));
1765       sec_num++;
1766
1767       /* The object's sections are initialized when a
1768          call is made to build_objfile_section_table (objfile).
1769          This happens in reread_symbols.
1770          At this point, we don't know what file type this is,
1771          so we can't determine what section names are valid.  */
1772     }
1773
1774   if (from_tty && (!query ("%s", "")))
1775     error ("Not confirmed.");
1776
1777   symbol_file_add (filename, from_tty, section_addrs, 0, flags);
1778
1779   /* Getting new symbols may change our opinion about what is
1780      frameless.  */
1781   reinit_frame_cache ();
1782   do_cleanups (my_cleanups);
1783 }
1784 \f
1785 static void
1786 add_shared_symbol_files_command (char *args, int from_tty)
1787 {
1788 #ifdef ADD_SHARED_SYMBOL_FILES
1789   ADD_SHARED_SYMBOL_FILES (args, from_tty);
1790 #else
1791   error ("This command is not available in this configuration of GDB.");
1792 #endif
1793 }
1794 \f
1795 /* Re-read symbols if a symbol-file has changed.  */
1796 void
1797 reread_symbols (void)
1798 {
1799   struct objfile *objfile;
1800   long new_modtime;
1801   int reread_one = 0;
1802   struct stat new_statbuf;
1803   int res;
1804
1805   /* With the addition of shared libraries, this should be modified,
1806      the load time should be saved in the partial symbol tables, since
1807      different tables may come from different source files.  FIXME.
1808      This routine should then walk down each partial symbol table
1809      and see if the symbol table that it originates from has been changed */
1810
1811   for (objfile = object_files; objfile; objfile = objfile->next)
1812     {
1813       if (objfile->obfd)
1814         {
1815 #ifdef DEPRECATED_IBM6000_TARGET
1816           /* If this object is from a shared library, then you should
1817              stat on the library name, not member name. */
1818
1819           if (objfile->obfd->my_archive)
1820             res = stat (objfile->obfd->my_archive->filename, &new_statbuf);
1821           else
1822 #endif
1823             res = stat (objfile->name, &new_statbuf);
1824           if (res != 0)
1825             {
1826               /* FIXME, should use print_sys_errmsg but it's not filtered. */
1827               printf_unfiltered ("`%s' has disappeared; keeping its symbols.\n",
1828                                objfile->name);
1829               continue;
1830             }
1831           new_modtime = new_statbuf.st_mtime;
1832           if (new_modtime != objfile->mtime)
1833             {
1834               struct cleanup *old_cleanups;
1835               struct section_offsets *offsets;
1836               int num_offsets;
1837               char *obfd_filename;
1838
1839               printf_unfiltered ("`%s' has changed; re-reading symbols.\n",
1840                                objfile->name);
1841
1842               /* There are various functions like symbol_file_add,
1843                  symfile_bfd_open, syms_from_objfile, etc., which might
1844                  appear to do what we want.  But they have various other
1845                  effects which we *don't* want.  So we just do stuff
1846                  ourselves.  We don't worry about mapped files (for one thing,
1847                  any mapped file will be out of date).  */
1848
1849               /* If we get an error, blow away this objfile (not sure if
1850                  that is the correct response for things like shared
1851                  libraries).  */
1852               old_cleanups = make_cleanup_free_objfile (objfile);
1853               /* We need to do this whenever any symbols go away.  */
1854               make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
1855
1856               /* Clean up any state BFD has sitting around.  We don't need
1857                  to close the descriptor but BFD lacks a way of closing the
1858                  BFD without closing the descriptor.  */
1859               obfd_filename = bfd_get_filename (objfile->obfd);
1860               if (!bfd_close (objfile->obfd))
1861                 error ("Can't close BFD for %s: %s", objfile->name,
1862                        bfd_errmsg (bfd_get_error ()));
1863               objfile->obfd = bfd_openr (obfd_filename, gnutarget);
1864               if (objfile->obfd == NULL)
1865                 error ("Can't open %s to read symbols.", objfile->name);
1866               /* bfd_openr sets cacheable to true, which is what we want.  */
1867               if (!bfd_check_format (objfile->obfd, bfd_object))
1868                 error ("Can't read symbols from %s: %s.", objfile->name,
1869                        bfd_errmsg (bfd_get_error ()));
1870
1871               /* Save the offsets, we will nuke them with the rest of the
1872                  objfile_obstack.  */
1873               num_offsets = objfile->num_sections;
1874               offsets = ((struct section_offsets *)
1875                          alloca (SIZEOF_N_SECTION_OFFSETS (num_offsets)));
1876               memcpy (offsets, objfile->section_offsets,
1877                       SIZEOF_N_SECTION_OFFSETS (num_offsets));
1878
1879               /* Nuke all the state that we will re-read.  Much of the following
1880                  code which sets things to NULL really is necessary to tell
1881                  other parts of GDB that there is nothing currently there.  */
1882
1883               /* FIXME: Do we have to free a whole linked list, or is this
1884                  enough?  */
1885               if (objfile->global_psymbols.list)
1886                 xfree (objfile->global_psymbols.list);
1887               memset (&objfile->global_psymbols, 0,
1888                       sizeof (objfile->global_psymbols));
1889               if (objfile->static_psymbols.list)
1890                 xfree (objfile->static_psymbols.list);
1891               memset (&objfile->static_psymbols, 0,
1892                       sizeof (objfile->static_psymbols));
1893
1894               /* Free the obstacks for non-reusable objfiles */
1895               bcache_xfree (objfile->psymbol_cache);
1896               objfile->psymbol_cache = bcache_xmalloc ();
1897               bcache_xfree (objfile->macro_cache);
1898               objfile->macro_cache = bcache_xmalloc ();
1899               if (objfile->demangled_names_hash != NULL)
1900                 {
1901                   htab_delete (objfile->demangled_names_hash);
1902                   objfile->demangled_names_hash = NULL;
1903                 }
1904               obstack_free (&objfile->objfile_obstack, 0);
1905               objfile->sections = NULL;
1906               objfile->symtabs = NULL;
1907               objfile->psymtabs = NULL;
1908               objfile->free_psymtabs = NULL;
1909               objfile->cp_namespace_symtab = NULL;
1910               objfile->msymbols = NULL;
1911               objfile->sym_private = NULL;
1912               objfile->minimal_symbol_count = 0;
1913               memset (&objfile->msymbol_hash, 0,
1914                       sizeof (objfile->msymbol_hash));
1915               memset (&objfile->msymbol_demangled_hash, 0,
1916                       sizeof (objfile->msymbol_demangled_hash));
1917               objfile->fundamental_types = NULL;
1918               clear_objfile_data (objfile);
1919               if (objfile->sf != NULL)
1920                 {
1921                   (*objfile->sf->sym_finish) (objfile);
1922                 }
1923
1924               /* We never make this a mapped file.  */
1925               objfile->md = NULL;
1926               objfile->psymbol_cache = bcache_xmalloc ();
1927               objfile->macro_cache = bcache_xmalloc ();
1928               /* obstack_init also initializes the obstack so it is
1929                  empty.  We could use obstack_specify_allocation but
1930                  gdb_obstack.h specifies the alloc/dealloc
1931                  functions.  */
1932               obstack_init (&objfile->objfile_obstack);
1933               if (build_objfile_section_table (objfile))
1934                 {
1935                   error ("Can't find the file sections in `%s': %s",
1936                          objfile->name, bfd_errmsg (bfd_get_error ()));
1937                 }
1938               terminate_minimal_symbol_table (objfile);
1939
1940               /* We use the same section offsets as from last time.  I'm not
1941                  sure whether that is always correct for shared libraries.  */
1942               objfile->section_offsets = (struct section_offsets *)
1943                 obstack_alloc (&objfile->objfile_obstack,
1944                                SIZEOF_N_SECTION_OFFSETS (num_offsets));
1945               memcpy (objfile->section_offsets, offsets,
1946                       SIZEOF_N_SECTION_OFFSETS (num_offsets));
1947               objfile->num_sections = num_offsets;
1948
1949               /* What the hell is sym_new_init for, anyway?  The concept of
1950                  distinguishing between the main file and additional files
1951                  in this way seems rather dubious.  */
1952               if (objfile == symfile_objfile)
1953                 {
1954                   (*objfile->sf->sym_new_init) (objfile);
1955                 }
1956
1957               (*objfile->sf->sym_init) (objfile);
1958               clear_complaints (&symfile_complaints, 1, 1);
1959               /* The "mainline" parameter is a hideous hack; I think leaving it
1960                  zero is OK since dbxread.c also does what it needs to do if
1961                  objfile->global_psymbols.size is 0.  */
1962               (*objfile->sf->sym_read) (objfile, 0);
1963               if (!have_partial_symbols () && !have_full_symbols ())
1964                 {
1965                   wrap_here ("");
1966                   printf_unfiltered ("(no debugging symbols found)\n");
1967                   wrap_here ("");
1968                 }
1969               objfile->flags |= OBJF_SYMS;
1970
1971               /* We're done reading the symbol file; finish off complaints.  */
1972               clear_complaints (&symfile_complaints, 0, 1);
1973
1974               /* Getting new symbols may change our opinion about what is
1975                  frameless.  */
1976
1977               reinit_frame_cache ();
1978
1979               /* Discard cleanups as symbol reading was successful.  */
1980               discard_cleanups (old_cleanups);
1981
1982               /* If the mtime has changed between the time we set new_modtime
1983                  and now, we *want* this to be out of date, so don't call stat
1984                  again now.  */
1985               objfile->mtime = new_modtime;
1986               reread_one = 1;
1987               reread_separate_symbols (objfile);
1988             }
1989         }
1990     }
1991
1992   if (reread_one)
1993     clear_symtab_users ();
1994 }
1995
1996
1997 /* Handle separate debug info for OBJFILE, which has just been
1998    re-read:
1999    - If we had separate debug info before, but now we don't, get rid
2000      of the separated objfile.
2001    - If we didn't have separated debug info before, but now we do,
2002      read in the new separated debug info file.
2003    - If the debug link points to a different file, toss the old one
2004      and read the new one.
2005    This function does *not* handle the case where objfile is still
2006    using the same separate debug info file, but that file's timestamp
2007    has changed.  That case should be handled by the loop in
2008    reread_symbols already.  */
2009 static void
2010 reread_separate_symbols (struct objfile *objfile)
2011 {
2012   char *debug_file;
2013   unsigned long crc32;
2014
2015   /* Does the updated objfile's debug info live in a
2016      separate file?  */
2017   debug_file = find_separate_debug_file (objfile);
2018
2019   if (objfile->separate_debug_objfile)
2020     {
2021       /* There are two cases where we need to get rid of
2022          the old separated debug info objfile:
2023          - if the new primary objfile doesn't have
2024          separated debug info, or
2025          - if the new primary objfile has separate debug
2026          info, but it's under a different filename.
2027
2028          If the old and new objfiles both have separate
2029          debug info, under the same filename, then we're
2030          okay --- if the separated file's contents have
2031          changed, we will have caught that when we
2032          visited it in this function's outermost
2033          loop.  */
2034       if (! debug_file
2035           || strcmp (debug_file, objfile->separate_debug_objfile->name) != 0)
2036         free_objfile (objfile->separate_debug_objfile);
2037     }
2038
2039   /* If the new objfile has separate debug info, and we
2040      haven't loaded it already, do so now.  */
2041   if (debug_file
2042       && ! objfile->separate_debug_objfile)
2043     {
2044       /* Use the same section offset table as objfile itself.
2045          Preserve the flags from objfile that make sense.  */
2046       objfile->separate_debug_objfile
2047         = (symbol_file_add_with_addrs_or_offsets
2048            (symfile_bfd_open (debug_file),
2049             info_verbose, /* from_tty: Don't override the default. */
2050             0, /* No addr table.  */
2051             objfile->section_offsets, objfile->num_sections,
2052             0, /* Not mainline.  See comments about this above.  */
2053             objfile->flags & (OBJF_REORDERED | OBJF_SHARED | OBJF_READNOW
2054                               | OBJF_USERLOADED)));
2055       objfile->separate_debug_objfile->separate_debug_objfile_backlink
2056         = objfile;
2057     }
2058 }
2059
2060
2061 \f
2062
2063
2064 typedef struct
2065 {
2066   char *ext;
2067   enum language lang;
2068 }
2069 filename_language;
2070
2071 static filename_language *filename_language_table;
2072 static int fl_table_size, fl_table_next;
2073
2074 static void
2075 add_filename_language (char *ext, enum language lang)
2076 {
2077   if (fl_table_next >= fl_table_size)
2078     {
2079       fl_table_size += 10;
2080       filename_language_table =
2081         xrealloc (filename_language_table,
2082                   fl_table_size * sizeof (*filename_language_table));
2083     }
2084
2085   filename_language_table[fl_table_next].ext = xstrdup (ext);
2086   filename_language_table[fl_table_next].lang = lang;
2087   fl_table_next++;
2088 }
2089
2090 static char *ext_args;
2091
2092 static void
2093 set_ext_lang_command (char *args, int from_tty)
2094 {
2095   int i;
2096   char *cp = ext_args;
2097   enum language lang;
2098
2099   /* First arg is filename extension, starting with '.' */
2100   if (*cp != '.')
2101     error ("'%s': Filename extension must begin with '.'", ext_args);
2102
2103   /* Find end of first arg.  */
2104   while (*cp && !isspace (*cp))
2105     cp++;
2106
2107   if (*cp == '\0')
2108     error ("'%s': two arguments required -- filename extension and language",
2109            ext_args);
2110
2111   /* Null-terminate first arg */
2112   *cp++ = '\0';
2113
2114   /* Find beginning of second arg, which should be a source language.  */
2115   while (*cp && isspace (*cp))
2116     cp++;
2117
2118   if (*cp == '\0')
2119     error ("'%s': two arguments required -- filename extension and language",
2120            ext_args);
2121
2122   /* Lookup the language from among those we know.  */
2123   lang = language_enum (cp);
2124
2125   /* Now lookup the filename extension: do we already know it?  */
2126   for (i = 0; i < fl_table_next; i++)
2127     if (0 == strcmp (ext_args, filename_language_table[i].ext))
2128       break;
2129
2130   if (i >= fl_table_next)
2131     {
2132       /* new file extension */
2133       add_filename_language (ext_args, lang);
2134     }
2135   else
2136     {
2137       /* redefining a previously known filename extension */
2138
2139       /* if (from_tty) */
2140       /*   query ("Really make files of type %s '%s'?", */
2141       /*          ext_args, language_str (lang));           */
2142
2143       xfree (filename_language_table[i].ext);
2144       filename_language_table[i].ext = xstrdup (ext_args);
2145       filename_language_table[i].lang = lang;
2146     }
2147 }
2148
2149 static void
2150 info_ext_lang_command (char *args, int from_tty)
2151 {
2152   int i;
2153
2154   printf_filtered ("Filename extensions and the languages they represent:");
2155   printf_filtered ("\n\n");
2156   for (i = 0; i < fl_table_next; i++)
2157     printf_filtered ("\t%s\t- %s\n",
2158                      filename_language_table[i].ext,
2159                      language_str (filename_language_table[i].lang));
2160 }
2161
2162 static void
2163 init_filename_language_table (void)
2164 {
2165   if (fl_table_size == 0)       /* protect against repetition */
2166     {
2167       fl_table_size = 20;
2168       fl_table_next = 0;
2169       filename_language_table =
2170         xmalloc (fl_table_size * sizeof (*filename_language_table));
2171       add_filename_language (".c", language_c);
2172       add_filename_language (".C", language_cplus);
2173       add_filename_language (".cc", language_cplus);
2174       add_filename_language (".cp", language_cplus);
2175       add_filename_language (".cpp", language_cplus);
2176       add_filename_language (".cxx", language_cplus);
2177       add_filename_language (".c++", language_cplus);
2178       add_filename_language (".java", language_java);
2179       add_filename_language (".class", language_java);
2180       add_filename_language (".m", language_objc);
2181       add_filename_language (".f", language_fortran);
2182       add_filename_language (".F", language_fortran);
2183       add_filename_language (".s", language_asm);
2184       add_filename_language (".S", language_asm);
2185       add_filename_language (".pas", language_pascal);
2186       add_filename_language (".p", language_pascal);
2187       add_filename_language (".pp", language_pascal);
2188     }
2189 }
2190
2191 enum language
2192 deduce_language_from_filename (char *filename)
2193 {
2194   int i;
2195   char *cp;
2196
2197   if (filename != NULL)
2198     if ((cp = strrchr (filename, '.')) != NULL)
2199       for (i = 0; i < fl_table_next; i++)
2200         if (strcmp (cp, filename_language_table[i].ext) == 0)
2201           return filename_language_table[i].lang;
2202
2203   return language_unknown;
2204 }
2205 \f
2206 /* allocate_symtab:
2207
2208    Allocate and partly initialize a new symbol table.  Return a pointer
2209    to it.  error() if no space.
2210
2211    Caller must set these fields:
2212    LINETABLE(symtab)
2213    symtab->blockvector
2214    symtab->dirname
2215    symtab->free_code
2216    symtab->free_ptr
2217    possibly free_named_symtabs (symtab->filename);
2218  */
2219
2220 struct symtab *
2221 allocate_symtab (char *filename, struct objfile *objfile)
2222 {
2223   struct symtab *symtab;
2224
2225   symtab = (struct symtab *)
2226     obstack_alloc (&objfile->objfile_obstack, sizeof (struct symtab));
2227   memset (symtab, 0, sizeof (*symtab));
2228   symtab->filename = obsavestring (filename, strlen (filename),
2229                                    &objfile->objfile_obstack);
2230   symtab->fullname = NULL;
2231   symtab->language = deduce_language_from_filename (filename);
2232   symtab->debugformat = obsavestring ("unknown", 7,
2233                                       &objfile->objfile_obstack);
2234
2235   /* Hook it to the objfile it comes from */
2236
2237   symtab->objfile = objfile;
2238   symtab->next = objfile->symtabs;
2239   objfile->symtabs = symtab;
2240
2241   /* FIXME: This should go away.  It is only defined for the Z8000,
2242      and the Z8000 definition of this macro doesn't have anything to
2243      do with the now-nonexistent EXTRA_SYMTAB_INFO macro, it's just
2244      here for convenience.  */
2245 #ifdef INIT_EXTRA_SYMTAB_INFO
2246   INIT_EXTRA_SYMTAB_INFO (symtab);
2247 #endif
2248
2249   return (symtab);
2250 }
2251
2252 struct partial_symtab *
2253 allocate_psymtab (char *filename, struct objfile *objfile)
2254 {
2255   struct partial_symtab *psymtab;
2256
2257   if (objfile->free_psymtabs)
2258     {
2259       psymtab = objfile->free_psymtabs;
2260       objfile->free_psymtabs = psymtab->next;
2261     }
2262   else
2263     psymtab = (struct partial_symtab *)
2264       obstack_alloc (&objfile->objfile_obstack,
2265                      sizeof (struct partial_symtab));
2266
2267   memset (psymtab, 0, sizeof (struct partial_symtab));
2268   psymtab->filename = obsavestring (filename, strlen (filename),
2269                                     &objfile->objfile_obstack);
2270   psymtab->symtab = NULL;
2271
2272   /* Prepend it to the psymtab list for the objfile it belongs to.
2273      Psymtabs are searched in most recent inserted -> least recent
2274      inserted order. */
2275
2276   psymtab->objfile = objfile;
2277   psymtab->next = objfile->psymtabs;
2278   objfile->psymtabs = psymtab;
2279 #if 0
2280   {
2281     struct partial_symtab **prev_pst;
2282     psymtab->objfile = objfile;
2283     psymtab->next = NULL;
2284     prev_pst = &(objfile->psymtabs);
2285     while ((*prev_pst) != NULL)
2286       prev_pst = &((*prev_pst)->next);
2287     (*prev_pst) = psymtab;
2288   }
2289 #endif
2290
2291   return (psymtab);
2292 }
2293
2294 void
2295 discard_psymtab (struct partial_symtab *pst)
2296 {
2297   struct partial_symtab **prev_pst;
2298
2299   /* From dbxread.c:
2300      Empty psymtabs happen as a result of header files which don't
2301      have any symbols in them.  There can be a lot of them.  But this
2302      check is wrong, in that a psymtab with N_SLINE entries but
2303      nothing else is not empty, but we don't realize that.  Fixing
2304      that without slowing things down might be tricky.  */
2305
2306   /* First, snip it out of the psymtab chain */
2307
2308   prev_pst = &(pst->objfile->psymtabs);
2309   while ((*prev_pst) != pst)
2310     prev_pst = &((*prev_pst)->next);
2311   (*prev_pst) = pst->next;
2312
2313   /* Next, put it on a free list for recycling */
2314
2315   pst->next = pst->objfile->free_psymtabs;
2316   pst->objfile->free_psymtabs = pst;
2317 }
2318 \f
2319
2320 /* Reset all data structures in gdb which may contain references to symbol
2321    table data.  */
2322
2323 void
2324 clear_symtab_users (void)
2325 {
2326   /* Someday, we should do better than this, by only blowing away
2327      the things that really need to be blown.  */
2328   clear_value_history ();
2329   clear_displays ();
2330   clear_internalvars ();
2331   breakpoint_re_set ();
2332   set_default_breakpoint (0, 0, 0, 0);
2333   clear_current_source_symtab_and_line ();
2334   clear_pc_function_cache ();
2335   if (deprecated_target_new_objfile_hook)
2336     deprecated_target_new_objfile_hook (NULL);
2337 }
2338
2339 static void
2340 clear_symtab_users_cleanup (void *ignore)
2341 {
2342   clear_symtab_users ();
2343 }
2344
2345 /* clear_symtab_users_once:
2346
2347    This function is run after symbol reading, or from a cleanup.
2348    If an old symbol table was obsoleted, the old symbol table
2349    has been blown away, but the other GDB data structures that may
2350    reference it have not yet been cleared or re-directed.  (The old
2351    symtab was zapped, and the cleanup queued, in free_named_symtab()
2352    below.)
2353
2354    This function can be queued N times as a cleanup, or called
2355    directly; it will do all the work the first time, and then will be a
2356    no-op until the next time it is queued.  This works by bumping a
2357    counter at queueing time.  Much later when the cleanup is run, or at
2358    the end of symbol processing (in case the cleanup is discarded), if
2359    the queued count is greater than the "done-count", we do the work
2360    and set the done-count to the queued count.  If the queued count is
2361    less than or equal to the done-count, we just ignore the call.  This
2362    is needed because reading a single .o file will often replace many
2363    symtabs (one per .h file, for example), and we don't want to reset
2364    the breakpoints N times in the user's face.
2365
2366    The reason we both queue a cleanup, and call it directly after symbol
2367    reading, is because the cleanup protects us in case of errors, but is
2368    discarded if symbol reading is successful.  */
2369
2370 #if 0
2371 /* FIXME:  As free_named_symtabs is currently a big noop this function
2372    is no longer needed.  */
2373 static void clear_symtab_users_once (void);
2374
2375 static int clear_symtab_users_queued;
2376 static int clear_symtab_users_done;
2377
2378 static void
2379 clear_symtab_users_once (void)
2380 {
2381   /* Enforce once-per-`do_cleanups'-semantics */
2382   if (clear_symtab_users_queued <= clear_symtab_users_done)
2383     return;
2384   clear_symtab_users_done = clear_symtab_users_queued;
2385
2386   clear_symtab_users ();
2387 }
2388 #endif
2389
2390 /* Delete the specified psymtab, and any others that reference it.  */
2391
2392 static void
2393 cashier_psymtab (struct partial_symtab *pst)
2394 {
2395   struct partial_symtab *ps, *pprev = NULL;
2396   int i;
2397
2398   /* Find its previous psymtab in the chain */
2399   for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2400     {
2401       if (ps == pst)
2402         break;
2403       pprev = ps;
2404     }
2405
2406   if (ps)
2407     {
2408       /* Unhook it from the chain.  */
2409       if (ps == pst->objfile->psymtabs)
2410         pst->objfile->psymtabs = ps->next;
2411       else
2412         pprev->next = ps->next;
2413
2414       /* FIXME, we can't conveniently deallocate the entries in the
2415          partial_symbol lists (global_psymbols/static_psymbols) that
2416          this psymtab points to.  These just take up space until all
2417          the psymtabs are reclaimed.  Ditto the dependencies list and
2418          filename, which are all in the objfile_obstack.  */
2419
2420       /* We need to cashier any psymtab that has this one as a dependency... */
2421     again:
2422       for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2423         {
2424           for (i = 0; i < ps->number_of_dependencies; i++)
2425             {
2426               if (ps->dependencies[i] == pst)
2427                 {
2428                   cashier_psymtab (ps);
2429                   goto again;   /* Must restart, chain has been munged. */
2430                 }
2431             }
2432         }
2433     }
2434 }
2435
2436 /* If a symtab or psymtab for filename NAME is found, free it along
2437    with any dependent breakpoints, displays, etc.
2438    Used when loading new versions of object modules with the "add-file"
2439    command.  This is only called on the top-level symtab or psymtab's name;
2440    it is not called for subsidiary files such as .h files.
2441
2442    Return value is 1 if we blew away the environment, 0 if not.
2443    FIXME.  The return value appears to never be used.
2444
2445    FIXME.  I think this is not the best way to do this.  We should
2446    work on being gentler to the environment while still cleaning up
2447    all stray pointers into the freed symtab.  */
2448
2449 int
2450 free_named_symtabs (char *name)
2451 {
2452 #if 0
2453   /* FIXME:  With the new method of each objfile having it's own
2454      psymtab list, this function needs serious rethinking.  In particular,
2455      why was it ever necessary to toss psymtabs with specific compilation
2456      unit filenames, as opposed to all psymtabs from a particular symbol
2457      file?  -- fnf
2458      Well, the answer is that some systems permit reloading of particular
2459      compilation units.  We want to blow away any old info about these
2460      compilation units, regardless of which objfiles they arrived in. --gnu.  */
2461
2462   struct symtab *s;
2463   struct symtab *prev;
2464   struct partial_symtab *ps;
2465   struct blockvector *bv;
2466   int blewit = 0;
2467
2468   /* We only wack things if the symbol-reload switch is set.  */
2469   if (!symbol_reloading)
2470     return 0;
2471
2472   /* Some symbol formats have trouble providing file names... */
2473   if (name == 0 || *name == '\0')
2474     return 0;
2475
2476   /* Look for a psymtab with the specified name.  */
2477
2478 again2:
2479   for (ps = partial_symtab_list; ps; ps = ps->next)
2480     {
2481       if (strcmp (name, ps->filename) == 0)
2482         {
2483           cashier_psymtab (ps); /* Blow it away...and its little dog, too.  */
2484           goto again2;          /* Must restart, chain has been munged */
2485         }
2486     }
2487
2488   /* Look for a symtab with the specified name.  */
2489
2490   for (s = symtab_list; s; s = s->next)
2491     {
2492       if (strcmp (name, s->filename) == 0)
2493         break;
2494       prev = s;
2495     }
2496
2497   if (s)
2498     {
2499       if (s == symtab_list)
2500         symtab_list = s->next;
2501       else
2502         prev->next = s->next;
2503
2504       /* For now, queue a delete for all breakpoints, displays, etc., whether
2505          or not they depend on the symtab being freed.  This should be
2506          changed so that only those data structures affected are deleted.  */
2507
2508       /* But don't delete anything if the symtab is empty.
2509          This test is necessary due to a bug in "dbxread.c" that
2510          causes empty symtabs to be created for N_SO symbols that
2511          contain the pathname of the object file.  (This problem
2512          has been fixed in GDB 3.9x).  */
2513
2514       bv = BLOCKVECTOR (s);
2515       if (BLOCKVECTOR_NBLOCKS (bv) > 2
2516           || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
2517           || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)))
2518         {
2519           complaint (&symfile_complaints, "Replacing old symbols for `%s'",
2520                      name);
2521           clear_symtab_users_queued++;
2522           make_cleanup (clear_symtab_users_once, 0);
2523           blewit = 1;
2524         }
2525       else
2526         {
2527           complaint (&symfile_complaints, "Empty symbol table found for `%s'",
2528                      name);
2529         }
2530
2531       free_symtab (s);
2532     }
2533   else
2534     {
2535       /* It is still possible that some breakpoints will be affected
2536          even though no symtab was found, since the file might have
2537          been compiled without debugging, and hence not be associated
2538          with a symtab.  In order to handle this correctly, we would need
2539          to keep a list of text address ranges for undebuggable files.
2540          For now, we do nothing, since this is a fairly obscure case.  */
2541       ;
2542     }
2543
2544   /* FIXME, what about the minimal symbol table? */
2545   return blewit;
2546 #else
2547   return (0);
2548 #endif
2549 }
2550 \f
2551 /* Allocate and partially fill a partial symtab.  It will be
2552    completely filled at the end of the symbol list.
2553
2554    FILENAME is the name of the symbol-file we are reading from. */
2555
2556 struct partial_symtab *
2557 start_psymtab_common (struct objfile *objfile,
2558                       struct section_offsets *section_offsets, char *filename,
2559                       CORE_ADDR textlow, struct partial_symbol **global_syms,
2560                       struct partial_symbol **static_syms)
2561 {
2562   struct partial_symtab *psymtab;
2563
2564   psymtab = allocate_psymtab (filename, objfile);
2565   psymtab->section_offsets = section_offsets;
2566   psymtab->textlow = textlow;
2567   psymtab->texthigh = psymtab->textlow;         /* default */
2568   psymtab->globals_offset = global_syms - objfile->global_psymbols.list;
2569   psymtab->statics_offset = static_syms - objfile->static_psymbols.list;
2570   return (psymtab);
2571 }
2572 \f
2573 /* Add a symbol with a long value to a psymtab.
2574    Since one arg is a struct, we pass in a ptr and deref it (sigh).
2575    Return the partial symbol that has been added.  */
2576
2577 /* NOTE: carlton/2003-09-11: The reason why we return the partial
2578    symbol is so that callers can get access to the symbol's demangled
2579    name, which they don't have any cheap way to determine otherwise.
2580    (Currenly, dwarf2read.c is the only file who uses that information,
2581    though it's possible that other readers might in the future.)
2582    Elena wasn't thrilled about that, and I don't blame her, but we
2583    couldn't come up with a better way to get that information.  If
2584    it's needed in other situations, we could consider breaking up
2585    SYMBOL_SET_NAMES to provide access to the demangled name lookup
2586    cache.  */
2587
2588 const struct partial_symbol *
2589 add_psymbol_to_list (char *name, int namelength, domain_enum domain,
2590                      enum address_class class,
2591                      struct psymbol_allocation_list *list, long val,    /* Value as a long */
2592                      CORE_ADDR coreaddr,        /* Value as a CORE_ADDR */
2593                      enum language language, struct objfile *objfile)
2594 {
2595   struct partial_symbol *psym;
2596   char *buf = alloca (namelength + 1);
2597   /* psymbol is static so that there will be no uninitialized gaps in the
2598      structure which might contain random data, causing cache misses in
2599      bcache. */
2600   static struct partial_symbol psymbol;
2601
2602   /* Create local copy of the partial symbol */
2603   memcpy (buf, name, namelength);
2604   buf[namelength] = '\0';
2605   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2606   if (val != 0)
2607     {
2608       SYMBOL_VALUE (&psymbol) = val;
2609     }
2610   else
2611     {
2612       SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2613     }
2614   SYMBOL_SECTION (&psymbol) = 0;
2615   SYMBOL_LANGUAGE (&psymbol) = language;
2616   PSYMBOL_DOMAIN (&psymbol) = domain;
2617   PSYMBOL_CLASS (&psymbol) = class;
2618
2619   SYMBOL_SET_NAMES (&psymbol, buf, namelength, objfile);
2620
2621   /* Stash the partial symbol away in the cache */
2622   psym = deprecated_bcache (&psymbol, sizeof (struct partial_symbol),
2623                             objfile->psymbol_cache);
2624
2625   /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2626   if (list->next >= list->list + list->size)
2627     {
2628       extend_psymbol_list (list, objfile);
2629     }
2630   *list->next++ = psym;
2631   OBJSTAT (objfile, n_psyms++);
2632
2633   return psym;
2634 }
2635
2636 /* Add a symbol with a long value to a psymtab. This differs from
2637  * add_psymbol_to_list above in taking both a mangled and a demangled
2638  * name. */
2639
2640 void
2641 add_psymbol_with_dem_name_to_list (char *name, int namelength, char *dem_name,
2642                                    int dem_namelength, domain_enum domain,
2643                                    enum address_class class,
2644                                    struct psymbol_allocation_list *list, long val,      /* Value as a long */
2645                                    CORE_ADDR coreaddr,  /* Value as a CORE_ADDR */
2646                                    enum language language,
2647                                    struct objfile *objfile)
2648 {
2649   struct partial_symbol *psym;
2650   char *buf = alloca (namelength + 1);
2651   /* psymbol is static so that there will be no uninitialized gaps in the
2652      structure which might contain random data, causing cache misses in
2653      bcache. */
2654   static struct partial_symbol psymbol;
2655
2656   /* Create local copy of the partial symbol */
2657
2658   memcpy (buf, name, namelength);
2659   buf[namelength] = '\0';
2660   DEPRECATED_SYMBOL_NAME (&psymbol) = deprecated_bcache (buf, namelength + 1,
2661                                                          objfile->psymbol_cache);
2662
2663   buf = alloca (dem_namelength + 1);
2664   memcpy (buf, dem_name, dem_namelength);
2665   buf[dem_namelength] = '\0';
2666
2667   switch (language)
2668     {
2669     case language_c:
2670     case language_cplus:
2671       SYMBOL_CPLUS_DEMANGLED_NAME (&psymbol) =
2672         deprecated_bcache (buf, dem_namelength + 1, objfile->psymbol_cache);
2673       break;
2674       /* FIXME What should be done for the default case? Ignoring for now. */
2675     }
2676
2677   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2678   if (val != 0)
2679     {
2680       SYMBOL_VALUE (&psymbol) = val;
2681     }
2682   else
2683     {
2684       SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2685     }
2686   SYMBOL_SECTION (&psymbol) = 0;
2687   SYMBOL_LANGUAGE (&psymbol) = language;
2688   PSYMBOL_DOMAIN (&psymbol) = domain;
2689   PSYMBOL_CLASS (&psymbol) = class;
2690   SYMBOL_INIT_LANGUAGE_SPECIFIC (&psymbol, language);
2691
2692   /* Stash the partial symbol away in the cache */
2693   psym = deprecated_bcache (&psymbol, sizeof (struct partial_symbol),
2694                             objfile->psymbol_cache);
2695
2696   /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2697   if (list->next >= list->list + list->size)
2698     {
2699       extend_psymbol_list (list, objfile);
2700     }
2701   *list->next++ = psym;
2702   OBJSTAT (objfile, n_psyms++);
2703 }
2704
2705 /* Initialize storage for partial symbols.  */
2706
2707 void
2708 init_psymbol_list (struct objfile *objfile, int total_symbols)
2709 {
2710   /* Free any previously allocated psymbol lists.  */
2711
2712   if (objfile->global_psymbols.list)
2713     {
2714       xfree (objfile->global_psymbols.list);
2715     }
2716   if (objfile->static_psymbols.list)
2717     {
2718       xfree (objfile->static_psymbols.list);
2719     }
2720
2721   /* Current best guess is that approximately a twentieth
2722      of the total symbols (in a debugging file) are global or static
2723      oriented symbols */
2724
2725   objfile->global_psymbols.size = total_symbols / 10;
2726   objfile->static_psymbols.size = total_symbols / 10;
2727
2728   if (objfile->global_psymbols.size > 0)
2729     {
2730       objfile->global_psymbols.next =
2731         objfile->global_psymbols.list = (struct partial_symbol **)
2732         xmalloc ((objfile->global_psymbols.size
2733                   * sizeof (struct partial_symbol *)));
2734     }
2735   if (objfile->static_psymbols.size > 0)
2736     {
2737       objfile->static_psymbols.next =
2738         objfile->static_psymbols.list = (struct partial_symbol **)
2739         xmalloc ((objfile->static_psymbols.size
2740                   * sizeof (struct partial_symbol *)));
2741     }
2742 }
2743
2744 /* OVERLAYS:
2745    The following code implements an abstraction for debugging overlay sections.
2746
2747    The target model is as follows:
2748    1) The gnu linker will permit multiple sections to be mapped into the
2749    same VMA, each with its own unique LMA (or load address).
2750    2) It is assumed that some runtime mechanism exists for mapping the
2751    sections, one by one, from the load address into the VMA address.
2752    3) This code provides a mechanism for gdb to keep track of which
2753    sections should be considered to be mapped from the VMA to the LMA.
2754    This information is used for symbol lookup, and memory read/write.
2755    For instance, if a section has been mapped then its contents
2756    should be read from the VMA, otherwise from the LMA.
2757
2758    Two levels of debugger support for overlays are available.  One is
2759    "manual", in which the debugger relies on the user to tell it which
2760    overlays are currently mapped.  This level of support is
2761    implemented entirely in the core debugger, and the information about
2762    whether a section is mapped is kept in the objfile->obj_section table.
2763
2764    The second level of support is "automatic", and is only available if
2765    the target-specific code provides functionality to read the target's
2766    overlay mapping table, and translate its contents for the debugger
2767    (by updating the mapped state information in the obj_section tables).
2768
2769    The interface is as follows:
2770    User commands:
2771    overlay map <name>   -- tell gdb to consider this section mapped
2772    overlay unmap <name> -- tell gdb to consider this section unmapped
2773    overlay list         -- list the sections that GDB thinks are mapped
2774    overlay read-target  -- get the target's state of what's mapped
2775    overlay off/manual/auto -- set overlay debugging state
2776    Functional interface:
2777    find_pc_mapped_section(pc):    if the pc is in the range of a mapped
2778    section, return that section.
2779    find_pc_overlay(pc):       find any overlay section that contains
2780    the pc, either in its VMA or its LMA
2781    overlay_is_mapped(sect):       true if overlay is marked as mapped
2782    section_is_overlay(sect):      true if section's VMA != LMA
2783    pc_in_mapped_range(pc,sec):    true if pc belongs to section's VMA
2784    pc_in_unmapped_range(...):     true if pc belongs to section's LMA
2785    sections_overlap(sec1, sec2):  true if mapped sec1 and sec2 ranges overlap
2786    overlay_mapped_address(...):   map an address from section's LMA to VMA
2787    overlay_unmapped_address(...): map an address from section's VMA to LMA
2788    symbol_overlayed_address(...): Return a "current" address for symbol:
2789    either in VMA or LMA depending on whether
2790    the symbol's section is currently mapped
2791  */
2792
2793 /* Overlay debugging state: */
2794
2795 enum overlay_debugging_state overlay_debugging = ovly_off;
2796 int overlay_cache_invalid = 0;  /* True if need to refresh mapped state */
2797
2798 /* Target vector for refreshing overlay mapped state */
2799 static void simple_overlay_update (struct obj_section *);
2800 void (*target_overlay_update) (struct obj_section *) = simple_overlay_update;
2801
2802 /* Function: section_is_overlay (SECTION)
2803    Returns true if SECTION has VMA not equal to LMA, ie.
2804    SECTION is loaded at an address different from where it will "run".  */
2805
2806 int
2807 section_is_overlay (asection *section)
2808 {
2809   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2810
2811   if (overlay_debugging)
2812     if (section && section->lma != 0 &&
2813         section->vma != section->lma)
2814       return 1;
2815
2816   return 0;
2817 }
2818
2819 /* Function: overlay_invalidate_all (void)
2820    Invalidate the mapped state of all overlay sections (mark it as stale).  */
2821
2822 static void
2823 overlay_invalidate_all (void)
2824 {
2825   struct objfile *objfile;
2826   struct obj_section *sect;
2827
2828   ALL_OBJSECTIONS (objfile, sect)
2829     if (section_is_overlay (sect->the_bfd_section))
2830     sect->ovly_mapped = -1;
2831 }
2832
2833 /* Function: overlay_is_mapped (SECTION)
2834    Returns true if section is an overlay, and is currently mapped.
2835    Private: public access is thru function section_is_mapped.
2836
2837    Access to the ovly_mapped flag is restricted to this function, so
2838    that we can do automatic update.  If the global flag
2839    OVERLAY_CACHE_INVALID is set (by wait_for_inferior), then call
2840    overlay_invalidate_all.  If the mapped state of the particular
2841    section is stale, then call TARGET_OVERLAY_UPDATE to refresh it.  */
2842
2843 static int
2844 overlay_is_mapped (struct obj_section *osect)
2845 {
2846   if (osect == 0 || !section_is_overlay (osect->the_bfd_section))
2847     return 0;
2848
2849   switch (overlay_debugging)
2850     {
2851     default:
2852     case ovly_off:
2853       return 0;                 /* overlay debugging off */
2854     case ovly_auto:             /* overlay debugging automatic */
2855       /* Unles there is a target_overlay_update function,
2856          there's really nothing useful to do here (can't really go auto)  */
2857       if (target_overlay_update)
2858         {
2859           if (overlay_cache_invalid)
2860             {
2861               overlay_invalidate_all ();
2862               overlay_cache_invalid = 0;
2863             }
2864           if (osect->ovly_mapped == -1)
2865             (*target_overlay_update) (osect);
2866         }
2867       /* fall thru to manual case */
2868     case ovly_on:               /* overlay debugging manual */
2869       return osect->ovly_mapped == 1;
2870     }
2871 }
2872
2873 /* Function: section_is_mapped
2874    Returns true if section is an overlay, and is currently mapped.  */
2875
2876 int
2877 section_is_mapped (asection *section)
2878 {
2879   struct objfile *objfile;
2880   struct obj_section *osect;
2881
2882   if (overlay_debugging)
2883     if (section && section_is_overlay (section))
2884       ALL_OBJSECTIONS (objfile, osect)
2885         if (osect->the_bfd_section == section)
2886         return overlay_is_mapped (osect);
2887
2888   return 0;
2889 }
2890
2891 /* Function: pc_in_unmapped_range
2892    If PC falls into the lma range of SECTION, return true, else false.  */
2893
2894 CORE_ADDR
2895 pc_in_unmapped_range (CORE_ADDR pc, asection *section)
2896 {
2897   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2898
2899   int size;
2900
2901   if (overlay_debugging)
2902     if (section && section_is_overlay (section))
2903       {
2904         size = bfd_get_section_size (section);
2905         if (section->lma <= pc && pc < section->lma + size)
2906           return 1;
2907       }
2908   return 0;
2909 }
2910
2911 /* Function: pc_in_mapped_range
2912    If PC falls into the vma range of SECTION, return true, else false.  */
2913
2914 CORE_ADDR
2915 pc_in_mapped_range (CORE_ADDR pc, asection *section)
2916 {
2917   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2918
2919   int size;
2920
2921   if (overlay_debugging)
2922     if (section && section_is_overlay (section))
2923       {
2924         size = bfd_get_section_size (section);
2925         if (section->vma <= pc && pc < section->vma + size)
2926           return 1;
2927       }
2928   return 0;
2929 }
2930
2931
2932 /* Return true if the mapped ranges of sections A and B overlap, false
2933    otherwise.  */
2934 static int
2935 sections_overlap (asection *a, asection *b)
2936 {
2937   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2938
2939   CORE_ADDR a_start = a->vma;
2940   CORE_ADDR a_end = a->vma + bfd_get_section_size (a);
2941   CORE_ADDR b_start = b->vma;
2942   CORE_ADDR b_end = b->vma + bfd_get_section_size (b);
2943
2944   return (a_start < b_end && b_start < a_end);
2945 }
2946
2947 /* Function: overlay_unmapped_address (PC, SECTION)
2948    Returns the address corresponding to PC in the unmapped (load) range.
2949    May be the same as PC.  */
2950
2951 CORE_ADDR
2952 overlay_unmapped_address (CORE_ADDR pc, asection *section)
2953 {
2954   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2955
2956   if (overlay_debugging)
2957     if (section && section_is_overlay (section) &&
2958         pc_in_mapped_range (pc, section))
2959       return pc + section->lma - section->vma;
2960
2961   return pc;
2962 }
2963
2964 /* Function: overlay_mapped_address (PC, SECTION)
2965    Returns the address corresponding to PC in the mapped (runtime) range.
2966    May be the same as PC.  */
2967
2968 CORE_ADDR
2969 overlay_mapped_address (CORE_ADDR pc, asection *section)
2970 {
2971   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2972
2973   if (overlay_debugging)
2974     if (section && section_is_overlay (section) &&
2975         pc_in_unmapped_range (pc, section))
2976       return pc + section->vma - section->lma;
2977
2978   return pc;
2979 }
2980
2981
2982 /* Function: symbol_overlayed_address
2983    Return one of two addresses (relative to the VMA or to the LMA),
2984    depending on whether the section is mapped or not.  */
2985
2986 CORE_ADDR
2987 symbol_overlayed_address (CORE_ADDR address, asection *section)
2988 {
2989   if (overlay_debugging)
2990     {
2991       /* If the symbol has no section, just return its regular address. */
2992       if (section == 0)
2993         return address;
2994       /* If the symbol's section is not an overlay, just return its address */
2995       if (!section_is_overlay (section))
2996         return address;
2997       /* If the symbol's section is mapped, just return its address */
2998       if (section_is_mapped (section))
2999         return address;
3000       /*
3001        * HOWEVER: if the symbol is in an overlay section which is NOT mapped,
3002        * then return its LOADED address rather than its vma address!!
3003        */
3004       return overlay_unmapped_address (address, section);
3005     }
3006   return address;
3007 }
3008
3009 /* Function: find_pc_overlay (PC)
3010    Return the best-match overlay section for PC:
3011    If PC matches a mapped overlay section's VMA, return that section.
3012    Else if PC matches an unmapped section's VMA, return that section.
3013    Else if PC matches an unmapped section's LMA, return that section.  */
3014
3015 asection *
3016 find_pc_overlay (CORE_ADDR pc)
3017 {
3018   struct objfile *objfile;
3019   struct obj_section *osect, *best_match = NULL;
3020
3021   if (overlay_debugging)
3022     ALL_OBJSECTIONS (objfile, osect)
3023       if (section_is_overlay (osect->the_bfd_section))
3024       {
3025         if (pc_in_mapped_range (pc, osect->the_bfd_section))
3026           {
3027             if (overlay_is_mapped (osect))
3028               return osect->the_bfd_section;
3029             else
3030               best_match = osect;
3031           }
3032         else if (pc_in_unmapped_range (pc, osect->the_bfd_section))
3033           best_match = osect;
3034       }
3035   return best_match ? best_match->the_bfd_section : NULL;
3036 }
3037
3038 /* Function: find_pc_mapped_section (PC)
3039    If PC falls into the VMA address range of an overlay section that is
3040    currently marked as MAPPED, return that section.  Else return NULL.  */
3041
3042 asection *
3043 find_pc_mapped_section (CORE_ADDR pc)
3044 {
3045   struct objfile *objfile;
3046   struct obj_section *osect;
3047
3048   if (overlay_debugging)
3049     ALL_OBJSECTIONS (objfile, osect)
3050       if (pc_in_mapped_range (pc, osect->the_bfd_section) &&
3051           overlay_is_mapped (osect))
3052       return osect->the_bfd_section;
3053
3054   return NULL;
3055 }
3056
3057 /* Function: list_overlays_command
3058    Print a list of mapped sections and their PC ranges */
3059
3060 void
3061 list_overlays_command (char *args, int from_tty)
3062 {
3063   int nmapped = 0;
3064   struct objfile *objfile;
3065   struct obj_section *osect;
3066
3067   if (overlay_debugging)
3068     ALL_OBJSECTIONS (objfile, osect)
3069       if (overlay_is_mapped (osect))
3070       {
3071         const char *name;
3072         bfd_vma lma, vma;
3073         int size;
3074
3075         vma = bfd_section_vma (objfile->obfd, osect->the_bfd_section);
3076         lma = bfd_section_lma (objfile->obfd, osect->the_bfd_section);
3077         size = bfd_get_section_size (osect->the_bfd_section);
3078         name = bfd_section_name (objfile->obfd, osect->the_bfd_section);
3079
3080         printf_filtered ("Section %s, loaded at ", name);
3081         print_address_numeric (lma, 1, gdb_stdout);
3082         puts_filtered (" - ");
3083         print_address_numeric (lma + size, 1, gdb_stdout);
3084         printf_filtered (", mapped at ");
3085         print_address_numeric (vma, 1, gdb_stdout);
3086         puts_filtered (" - ");
3087         print_address_numeric (vma + size, 1, gdb_stdout);
3088         puts_filtered ("\n");
3089
3090         nmapped++;
3091       }
3092   if (nmapped == 0)
3093     printf_filtered ("No sections are mapped.\n");
3094 }
3095
3096 /* Function: map_overlay_command
3097    Mark the named section as mapped (ie. residing at its VMA address).  */
3098
3099 void
3100 map_overlay_command (char *args, int from_tty)
3101 {
3102   struct objfile *objfile, *objfile2;
3103   struct obj_section *sec, *sec2;
3104   asection *bfdsec;
3105
3106   if (!overlay_debugging)
3107     error ("\
3108 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3109 the 'overlay manual' command.");
3110
3111   if (args == 0 || *args == 0)
3112     error ("Argument required: name of an overlay section");
3113
3114   /* First, find a section matching the user supplied argument */
3115   ALL_OBJSECTIONS (objfile, sec)
3116     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3117     {
3118       /* Now, check to see if the section is an overlay. */
3119       bfdsec = sec->the_bfd_section;
3120       if (!section_is_overlay (bfdsec))
3121         continue;               /* not an overlay section */
3122
3123       /* Mark the overlay as "mapped" */
3124       sec->ovly_mapped = 1;
3125
3126       /* Next, make a pass and unmap any sections that are
3127          overlapped by this new section: */
3128       ALL_OBJSECTIONS (objfile2, sec2)
3129         if (sec2->ovly_mapped
3130             && sec != sec2
3131             && sec->the_bfd_section != sec2->the_bfd_section
3132             && sections_overlap (sec->the_bfd_section,
3133                                  sec2->the_bfd_section))
3134         {
3135           if (info_verbose)
3136             printf_unfiltered ("Note: section %s unmapped by overlap\n",
3137                              bfd_section_name (objfile->obfd,
3138                                                sec2->the_bfd_section));
3139           sec2->ovly_mapped = 0;        /* sec2 overlaps sec: unmap sec2 */
3140         }
3141       return;
3142     }
3143   error ("No overlay section called %s", args);
3144 }
3145
3146 /* Function: unmap_overlay_command
3147    Mark the overlay section as unmapped
3148    (ie. resident in its LMA address range, rather than the VMA range).  */
3149
3150 void
3151 unmap_overlay_command (char *args, int from_tty)
3152 {
3153   struct objfile *objfile;
3154   struct obj_section *sec;
3155
3156   if (!overlay_debugging)
3157     error ("\
3158 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3159 the 'overlay manual' command.");
3160
3161   if (args == 0 || *args == 0)
3162     error ("Argument required: name of an overlay section");
3163
3164   /* First, find a section matching the user supplied argument */
3165   ALL_OBJSECTIONS (objfile, sec)
3166     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3167     {
3168       if (!sec->ovly_mapped)
3169         error ("Section %s is not mapped", args);
3170       sec->ovly_mapped = 0;
3171       return;
3172     }
3173   error ("No overlay section called %s", args);
3174 }
3175
3176 /* Function: overlay_auto_command
3177    A utility command to turn on overlay debugging.
3178    Possibly this should be done via a set/show command. */
3179
3180 static void
3181 overlay_auto_command (char *args, int from_tty)
3182 {
3183   overlay_debugging = ovly_auto;
3184   enable_overlay_breakpoints ();
3185   if (info_verbose)
3186     printf_unfiltered ("Automatic overlay debugging enabled.");
3187 }
3188
3189 /* Function: overlay_manual_command
3190    A utility command to turn on overlay debugging.
3191    Possibly this should be done via a set/show command. */
3192
3193 static void
3194 overlay_manual_command (char *args, int from_tty)
3195 {
3196   overlay_debugging = ovly_on;
3197   disable_overlay_breakpoints ();
3198   if (info_verbose)
3199     printf_unfiltered ("Overlay debugging enabled.");
3200 }
3201
3202 /* Function: overlay_off_command
3203    A utility command to turn on overlay debugging.
3204    Possibly this should be done via a set/show command. */
3205
3206 static void
3207 overlay_off_command (char *args, int from_tty)
3208 {
3209   overlay_debugging = ovly_off;
3210   disable_overlay_breakpoints ();
3211   if (info_verbose)
3212     printf_unfiltered ("Overlay debugging disabled.");
3213 }
3214
3215 static void
3216 overlay_load_command (char *args, int from_tty)
3217 {
3218   if (target_overlay_update)
3219     (*target_overlay_update) (NULL);
3220   else
3221     error ("This target does not know how to read its overlay state.");
3222 }
3223
3224 /* Function: overlay_command
3225    A place-holder for a mis-typed command */
3226
3227 /* Command list chain containing all defined "overlay" subcommands. */
3228 struct cmd_list_element *overlaylist;
3229
3230 static void
3231 overlay_command (char *args, int from_tty)
3232 {
3233   printf_unfiltered
3234     ("\"overlay\" must be followed by the name of an overlay command.\n");
3235   help_list (overlaylist, "overlay ", -1, gdb_stdout);
3236 }
3237
3238
3239 /* Target Overlays for the "Simplest" overlay manager:
3240
3241    This is GDB's default target overlay layer.  It works with the
3242    minimal overlay manager supplied as an example by Cygnus.  The
3243    entry point is via a function pointer "target_overlay_update",
3244    so targets that use a different runtime overlay manager can
3245    substitute their own overlay_update function and take over the
3246    function pointer.
3247
3248    The overlay_update function pokes around in the target's data structures
3249    to see what overlays are mapped, and updates GDB's overlay mapping with
3250    this information.
3251
3252    In this simple implementation, the target data structures are as follows:
3253    unsigned _novlys;            /# number of overlay sections #/
3254    unsigned _ovly_table[_novlys][4] = {
3255    {VMA, SIZE, LMA, MAPPED},    /# one entry per overlay section #/
3256    {..., ...,  ..., ...},
3257    }
3258    unsigned _novly_regions;     /# number of overlay regions #/
3259    unsigned _ovly_region_table[_novly_regions][3] = {
3260    {VMA, SIZE, MAPPED_TO_LMA},  /# one entry per overlay region #/
3261    {..., ...,  ...},
3262    }
3263    These functions will attempt to update GDB's mappedness state in the
3264    symbol section table, based on the target's mappedness state.
3265
3266    To do this, we keep a cached copy of the target's _ovly_table, and
3267    attempt to detect when the cached copy is invalidated.  The main
3268    entry point is "simple_overlay_update(SECT), which looks up SECT in
3269    the cached table and re-reads only the entry for that section from
3270    the target (whenever possible).
3271  */
3272
3273 /* Cached, dynamically allocated copies of the target data structures: */
3274 static unsigned (*cache_ovly_table)[4] = 0;
3275 #if 0
3276 static unsigned (*cache_ovly_region_table)[3] = 0;
3277 #endif
3278 static unsigned cache_novlys = 0;
3279 #if 0
3280 static unsigned cache_novly_regions = 0;
3281 #endif
3282 static CORE_ADDR cache_ovly_table_base = 0;
3283 #if 0
3284 static CORE_ADDR cache_ovly_region_table_base = 0;
3285 #endif
3286 enum ovly_index
3287   {
3288     VMA, SIZE, LMA, MAPPED
3289   };
3290 #define TARGET_LONG_BYTES (TARGET_LONG_BIT / TARGET_CHAR_BIT)
3291
3292 /* Throw away the cached copy of _ovly_table */
3293 static void
3294 simple_free_overlay_table (void)
3295 {
3296   if (cache_ovly_table)
3297     xfree (cache_ovly_table);
3298   cache_novlys = 0;
3299   cache_ovly_table = NULL;
3300   cache_ovly_table_base = 0;
3301 }
3302
3303 #if 0
3304 /* Throw away the cached copy of _ovly_region_table */
3305 static void
3306 simple_free_overlay_region_table (void)
3307 {
3308   if (cache_ovly_region_table)
3309     xfree (cache_ovly_region_table);
3310   cache_novly_regions = 0;
3311   cache_ovly_region_table = NULL;
3312   cache_ovly_region_table_base = 0;
3313 }
3314 #endif
3315
3316 /* Read an array of ints from the target into a local buffer.
3317    Convert to host order.  int LEN is number of ints  */
3318 static void
3319 read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr, int len)
3320 {
3321   /* FIXME (alloca): Not safe if array is very large. */
3322   char *buf = alloca (len * TARGET_LONG_BYTES);
3323   int i;
3324
3325   read_memory (memaddr, buf, len * TARGET_LONG_BYTES);
3326   for (i = 0; i < len; i++)
3327     myaddr[i] = extract_unsigned_integer (TARGET_LONG_BYTES * i + buf,
3328                                           TARGET_LONG_BYTES);
3329 }
3330
3331 /* Find and grab a copy of the target _ovly_table
3332    (and _novlys, which is needed for the table's size) */
3333 static int
3334 simple_read_overlay_table (void)
3335 {
3336   struct minimal_symbol *novlys_msym, *ovly_table_msym;
3337
3338   simple_free_overlay_table ();
3339   novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
3340   if (! novlys_msym)
3341     {
3342       error ("Error reading inferior's overlay table: "
3343              "couldn't find `_novlys' variable\n"
3344              "in inferior.  Use `overlay manual' mode.");
3345       return 0;
3346     }
3347
3348   ovly_table_msym = lookup_minimal_symbol ("_ovly_table", NULL, NULL);
3349   if (! ovly_table_msym)
3350     {
3351       error ("Error reading inferior's overlay table: couldn't find "
3352              "`_ovly_table' array\n"
3353              "in inferior.  Use `overlay manual' mode.");
3354       return 0;
3355     }
3356
3357   cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym), 4);
3358   cache_ovly_table
3359     = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
3360   cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
3361   read_target_long_array (cache_ovly_table_base,
3362                           (int *) cache_ovly_table,
3363                           cache_novlys * 4);
3364
3365   return 1;                     /* SUCCESS */
3366 }
3367
3368 #if 0
3369 /* Find and grab a copy of the target _ovly_region_table
3370    (and _novly_regions, which is needed for the table's size) */
3371 static int
3372 simple_read_overlay_region_table (void)
3373 {
3374   struct minimal_symbol *msym;
3375
3376   simple_free_overlay_region_table ();
3377   msym = lookup_minimal_symbol ("_novly_regions", NULL, NULL);
3378   if (msym != NULL)
3379     cache_novly_regions = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4);
3380   else
3381     return 0;                   /* failure */
3382   cache_ovly_region_table = (void *) xmalloc (cache_novly_regions * 12);
3383   if (cache_ovly_region_table != NULL)
3384     {
3385       msym = lookup_minimal_symbol ("_ovly_region_table", NULL, NULL);
3386       if (msym != NULL)
3387         {
3388           cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
3389           read_target_long_array (cache_ovly_region_table_base,
3390                                   (int *) cache_ovly_region_table,
3391                                   cache_novly_regions * 3);
3392         }
3393       else
3394         return 0;               /* failure */
3395     }
3396   else
3397     return 0;                   /* failure */
3398   return 1;                     /* SUCCESS */
3399 }
3400 #endif
3401
3402 /* Function: simple_overlay_update_1
3403    A helper function for simple_overlay_update.  Assuming a cached copy
3404    of _ovly_table exists, look through it to find an entry whose vma,
3405    lma and size match those of OSECT.  Re-read the entry and make sure
3406    it still matches OSECT (else the table may no longer be valid).
3407    Set OSECT's mapped state to match the entry.  Return: 1 for
3408    success, 0 for failure.  */
3409
3410 static int
3411 simple_overlay_update_1 (struct obj_section *osect)
3412 {
3413   int i, size;
3414   bfd *obfd = osect->objfile->obfd;
3415   asection *bsect = osect->the_bfd_section;
3416
3417   size = bfd_get_section_size (osect->the_bfd_section);
3418   for (i = 0; i < cache_novlys; i++)
3419     if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3420         && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3421         /* && cache_ovly_table[i][SIZE] == size */ )
3422       {
3423         read_target_long_array (cache_ovly_table_base + i * TARGET_LONG_BYTES,
3424                                 (int *) cache_ovly_table[i], 4);
3425         if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3426             && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3427             /* && cache_ovly_table[i][SIZE] == size */ )
3428           {
3429             osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3430             return 1;
3431           }
3432         else    /* Warning!  Warning!  Target's ovly table has changed! */
3433           return 0;
3434       }
3435   return 0;
3436 }
3437
3438 /* Function: simple_overlay_update
3439    If OSECT is NULL, then update all sections' mapped state
3440    (after re-reading the entire target _ovly_table).
3441    If OSECT is non-NULL, then try to find a matching entry in the
3442    cached ovly_table and update only OSECT's mapped state.
3443    If a cached entry can't be found or the cache isn't valid, then
3444    re-read the entire cache, and go ahead and update all sections.  */
3445
3446 static void
3447 simple_overlay_update (struct obj_section *osect)
3448 {
3449   struct objfile *objfile;
3450
3451   /* Were we given an osect to look up?  NULL means do all of them. */
3452   if (osect)
3453     /* Have we got a cached copy of the target's overlay table? */
3454     if (cache_ovly_table != NULL)
3455       /* Does its cached location match what's currently in the symtab? */
3456       if (cache_ovly_table_base ==
3457           SYMBOL_VALUE_ADDRESS (lookup_minimal_symbol ("_ovly_table", NULL, NULL)))
3458         /* Then go ahead and try to look up this single section in the cache */
3459         if (simple_overlay_update_1 (osect))
3460           /* Found it!  We're done. */
3461           return;
3462
3463   /* Cached table no good: need to read the entire table anew.
3464      Or else we want all the sections, in which case it's actually
3465      more efficient to read the whole table in one block anyway.  */
3466
3467   if (! simple_read_overlay_table ())
3468     return;
3469
3470   /* Now may as well update all sections, even if only one was requested. */
3471   ALL_OBJSECTIONS (objfile, osect)
3472     if (section_is_overlay (osect->the_bfd_section))
3473     {
3474       int i, size;
3475       bfd *obfd = osect->objfile->obfd;
3476       asection *bsect = osect->the_bfd_section;
3477
3478       size = bfd_get_section_size (bsect);
3479       for (i = 0; i < cache_novlys; i++)
3480         if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3481             && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3482             /* && cache_ovly_table[i][SIZE] == size */ )
3483           { /* obj_section matches i'th entry in ovly_table */
3484             osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3485             break;              /* finished with inner for loop: break out */
3486           }
3487     }
3488 }
3489
3490 /* Set the output sections and output offsets for section SECTP in
3491    ABFD.  The relocation code in BFD will read these offsets, so we
3492    need to be sure they're initialized.  We map each section to itself,
3493    with no offset; this means that SECTP->vma will be honored.  */
3494
3495 static void
3496 symfile_dummy_outputs (bfd *abfd, asection *sectp, void *dummy)
3497 {
3498   sectp->output_section = sectp;
3499   sectp->output_offset = 0;
3500 }
3501
3502 /* Relocate the contents of a debug section SECTP in ABFD.  The
3503    contents are stored in BUF if it is non-NULL, or returned in a
3504    malloc'd buffer otherwise.
3505
3506    For some platforms and debug info formats, shared libraries contain
3507    relocations against the debug sections (particularly for DWARF-2;
3508    one affected platform is PowerPC GNU/Linux, although it depends on
3509    the version of the linker in use).  Also, ELF object files naturally
3510    have unresolved relocations for their debug sections.  We need to apply
3511    the relocations in order to get the locations of symbols correct.  */
3512
3513 bfd_byte *
3514 symfile_relocate_debug_section (bfd *abfd, asection *sectp, bfd_byte *buf)
3515 {
3516   /* We're only interested in debugging sections with relocation
3517      information.  */
3518   if ((sectp->flags & SEC_RELOC) == 0)
3519     return NULL;
3520   if ((sectp->flags & SEC_DEBUGGING) == 0)
3521     return NULL;
3522
3523   /* We will handle section offsets properly elsewhere, so relocate as if
3524      all sections begin at 0.  */
3525   bfd_map_over_sections (abfd, symfile_dummy_outputs, NULL);
3526
3527   return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
3528 }
3529
3530 void
3531 _initialize_symfile (void)
3532 {
3533   struct cmd_list_element *c;
3534
3535   c = add_cmd ("symbol-file", class_files, symbol_file_command,
3536                "Load symbol table from executable file FILE.\n\
3537 The `file' command can also load symbol tables, as well as setting the file\n\
3538 to execute.", &cmdlist);
3539   set_cmd_completer (c, filename_completer);
3540
3541   c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command,
3542                "Usage: add-symbol-file FILE ADDR [-s <SECT> <SECT_ADDR> -s <SECT> <SECT_ADDR> ...]\n\
3543 Load the symbols from FILE, assuming FILE has been dynamically loaded.\n\
3544 ADDR is the starting address of the file's text.\n\
3545 The optional arguments are section-name section-address pairs and\n\
3546 should be specified if the data and bss segments are not contiguous\n\
3547 with the text.  SECT is a section name to be loaded at SECT_ADDR.",
3548                &cmdlist);
3549   set_cmd_completer (c, filename_completer);
3550
3551   c = add_cmd ("add-shared-symbol-files", class_files,
3552                add_shared_symbol_files_command,
3553    "Load the symbols from shared objects in the dynamic linker's link map.",
3554                &cmdlist);
3555   c = add_alias_cmd ("assf", "add-shared-symbol-files", class_files, 1,
3556                      &cmdlist);
3557
3558   c = add_cmd ("load", class_files, load_command,
3559                "Dynamically load FILE into the running program, and record its symbols\n\
3560 for access from GDB.", &cmdlist);
3561   set_cmd_completer (c, filename_completer);
3562
3563   deprecated_add_show_from_set
3564     (add_set_cmd ("symbol-reloading", class_support, var_boolean,
3565                   (char *) &symbol_reloading,
3566             "Set dynamic symbol table reloading multiple times in one run.",
3567                   &setlist),
3568      &showlist);
3569
3570   add_prefix_cmd ("overlay", class_support, overlay_command,
3571                   "Commands for debugging overlays.", &overlaylist,
3572                   "overlay ", 0, &cmdlist);
3573
3574   add_com_alias ("ovly", "overlay", class_alias, 1);
3575   add_com_alias ("ov", "overlay", class_alias, 1);
3576
3577   add_cmd ("map-overlay", class_support, map_overlay_command,
3578            "Assert that an overlay section is mapped.", &overlaylist);
3579
3580   add_cmd ("unmap-overlay", class_support, unmap_overlay_command,
3581            "Assert that an overlay section is unmapped.", &overlaylist);
3582
3583   add_cmd ("list-overlays", class_support, list_overlays_command,
3584            "List mappings of overlay sections.", &overlaylist);
3585
3586   add_cmd ("manual", class_support, overlay_manual_command,
3587            "Enable overlay debugging.", &overlaylist);
3588   add_cmd ("off", class_support, overlay_off_command,
3589            "Disable overlay debugging.", &overlaylist);
3590   add_cmd ("auto", class_support, overlay_auto_command,
3591            "Enable automatic overlay debugging.", &overlaylist);
3592   add_cmd ("load-target", class_support, overlay_load_command,
3593            "Read the overlay mapping state from the target.", &overlaylist);
3594
3595   /* Filename extension to source language lookup table: */
3596   init_filename_language_table ();
3597   c = add_set_cmd ("extension-language", class_files, var_string_noescape,
3598                    (char *) &ext_args,
3599                    "Set mapping between filename extension and source language.\n\
3600 Usage: set extension-language .foo bar",
3601                    &setlist);
3602   set_cmd_cfunc (c, set_ext_lang_command);
3603
3604   add_info ("extensions", info_ext_lang_command,
3605             "All filename extensions associated with a source language.");
3606
3607   deprecated_add_show_from_set
3608     (add_set_cmd ("download-write-size", class_obscure,
3609                   var_integer, (char *) &download_write_size,
3610                   "Set the write size used when downloading a program.\n"
3611                   "Only used when downloading a program onto a remote\n"
3612                   "target. Specify zero, or a negative value, to disable\n"
3613                   "blocked writes. The actual size of each transfer is also\n"
3614                   "limited by the size of the target packet and the memory\n"
3615                   "cache.\n",
3616                   &setlist),
3617      &showlist);
3618
3619   debug_file_directory = xstrdup (DEBUGDIR);
3620   c = (add_set_cmd
3621        ("debug-file-directory", class_support, var_string,
3622         (char *) &debug_file_directory,
3623         "Set the directory where separate debug symbols are searched for.\n"
3624         "Separate debug symbols are first searched for in the same\n"
3625         "directory as the binary, then in the `" DEBUG_SUBDIRECTORY
3626         "' subdirectory,\n"
3627         "and lastly at the path of the directory of the binary with\n"
3628         "the global debug-file directory prepended\n",
3629         &setlist));
3630   deprecated_add_show_from_set (c, &showlist);
3631   set_cmd_completer (c, filename_completer);
3632 }