2004-10-23 Andrew Cagney <cagney@gnu.org>
[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->deprecated_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       add_filename_language (".adb", language_ada);
2189       add_filename_language (".ads", language_ada);
2190       add_filename_language (".a", language_ada);
2191       add_filename_language (".ada", language_ada);
2192     }
2193 }
2194
2195 enum language
2196 deduce_language_from_filename (char *filename)
2197 {
2198   int i;
2199   char *cp;
2200
2201   if (filename != NULL)
2202     if ((cp = strrchr (filename, '.')) != NULL)
2203       for (i = 0; i < fl_table_next; i++)
2204         if (strcmp (cp, filename_language_table[i].ext) == 0)
2205           return filename_language_table[i].lang;
2206
2207   return language_unknown;
2208 }
2209 \f
2210 /* allocate_symtab:
2211
2212    Allocate and partly initialize a new symbol table.  Return a pointer
2213    to it.  error() if no space.
2214
2215    Caller must set these fields:
2216    LINETABLE(symtab)
2217    symtab->blockvector
2218    symtab->dirname
2219    symtab->free_code
2220    symtab->free_ptr
2221    possibly free_named_symtabs (symtab->filename);
2222  */
2223
2224 struct symtab *
2225 allocate_symtab (char *filename, struct objfile *objfile)
2226 {
2227   struct symtab *symtab;
2228
2229   symtab = (struct symtab *)
2230     obstack_alloc (&objfile->objfile_obstack, sizeof (struct symtab));
2231   memset (symtab, 0, sizeof (*symtab));
2232   symtab->filename = obsavestring (filename, strlen (filename),
2233                                    &objfile->objfile_obstack);
2234   symtab->fullname = NULL;
2235   symtab->language = deduce_language_from_filename (filename);
2236   symtab->debugformat = obsavestring ("unknown", 7,
2237                                       &objfile->objfile_obstack);
2238
2239   /* Hook it to the objfile it comes from */
2240
2241   symtab->objfile = objfile;
2242   symtab->next = objfile->symtabs;
2243   objfile->symtabs = symtab;
2244
2245   /* FIXME: This should go away.  It is only defined for the Z8000,
2246      and the Z8000 definition of this macro doesn't have anything to
2247      do with the now-nonexistent EXTRA_SYMTAB_INFO macro, it's just
2248      here for convenience.  */
2249 #ifdef INIT_EXTRA_SYMTAB_INFO
2250   INIT_EXTRA_SYMTAB_INFO (symtab);
2251 #endif
2252
2253   return (symtab);
2254 }
2255
2256 struct partial_symtab *
2257 allocate_psymtab (char *filename, struct objfile *objfile)
2258 {
2259   struct partial_symtab *psymtab;
2260
2261   if (objfile->free_psymtabs)
2262     {
2263       psymtab = objfile->free_psymtabs;
2264       objfile->free_psymtabs = psymtab->next;
2265     }
2266   else
2267     psymtab = (struct partial_symtab *)
2268       obstack_alloc (&objfile->objfile_obstack,
2269                      sizeof (struct partial_symtab));
2270
2271   memset (psymtab, 0, sizeof (struct partial_symtab));
2272   psymtab->filename = obsavestring (filename, strlen (filename),
2273                                     &objfile->objfile_obstack);
2274   psymtab->symtab = NULL;
2275
2276   /* Prepend it to the psymtab list for the objfile it belongs to.
2277      Psymtabs are searched in most recent inserted -> least recent
2278      inserted order. */
2279
2280   psymtab->objfile = objfile;
2281   psymtab->next = objfile->psymtabs;
2282   objfile->psymtabs = psymtab;
2283 #if 0
2284   {
2285     struct partial_symtab **prev_pst;
2286     psymtab->objfile = objfile;
2287     psymtab->next = NULL;
2288     prev_pst = &(objfile->psymtabs);
2289     while ((*prev_pst) != NULL)
2290       prev_pst = &((*prev_pst)->next);
2291     (*prev_pst) = psymtab;
2292   }
2293 #endif
2294
2295   return (psymtab);
2296 }
2297
2298 void
2299 discard_psymtab (struct partial_symtab *pst)
2300 {
2301   struct partial_symtab **prev_pst;
2302
2303   /* From dbxread.c:
2304      Empty psymtabs happen as a result of header files which don't
2305      have any symbols in them.  There can be a lot of them.  But this
2306      check is wrong, in that a psymtab with N_SLINE entries but
2307      nothing else is not empty, but we don't realize that.  Fixing
2308      that without slowing things down might be tricky.  */
2309
2310   /* First, snip it out of the psymtab chain */
2311
2312   prev_pst = &(pst->objfile->psymtabs);
2313   while ((*prev_pst) != pst)
2314     prev_pst = &((*prev_pst)->next);
2315   (*prev_pst) = pst->next;
2316
2317   /* Next, put it on a free list for recycling */
2318
2319   pst->next = pst->objfile->free_psymtabs;
2320   pst->objfile->free_psymtabs = pst;
2321 }
2322 \f
2323
2324 /* Reset all data structures in gdb which may contain references to symbol
2325    table data.  */
2326
2327 void
2328 clear_symtab_users (void)
2329 {
2330   /* Someday, we should do better than this, by only blowing away
2331      the things that really need to be blown.  */
2332   clear_value_history ();
2333   clear_displays ();
2334   clear_internalvars ();
2335   breakpoint_re_set ();
2336   set_default_breakpoint (0, 0, 0, 0);
2337   clear_current_source_symtab_and_line ();
2338   clear_pc_function_cache ();
2339   if (deprecated_target_new_objfile_hook)
2340     deprecated_target_new_objfile_hook (NULL);
2341 }
2342
2343 static void
2344 clear_symtab_users_cleanup (void *ignore)
2345 {
2346   clear_symtab_users ();
2347 }
2348
2349 /* clear_symtab_users_once:
2350
2351    This function is run after symbol reading, or from a cleanup.
2352    If an old symbol table was obsoleted, the old symbol table
2353    has been blown away, but the other GDB data structures that may
2354    reference it have not yet been cleared or re-directed.  (The old
2355    symtab was zapped, and the cleanup queued, in free_named_symtab()
2356    below.)
2357
2358    This function can be queued N times as a cleanup, or called
2359    directly; it will do all the work the first time, and then will be a
2360    no-op until the next time it is queued.  This works by bumping a
2361    counter at queueing time.  Much later when the cleanup is run, or at
2362    the end of symbol processing (in case the cleanup is discarded), if
2363    the queued count is greater than the "done-count", we do the work
2364    and set the done-count to the queued count.  If the queued count is
2365    less than or equal to the done-count, we just ignore the call.  This
2366    is needed because reading a single .o file will often replace many
2367    symtabs (one per .h file, for example), and we don't want to reset
2368    the breakpoints N times in the user's face.
2369
2370    The reason we both queue a cleanup, and call it directly after symbol
2371    reading, is because the cleanup protects us in case of errors, but is
2372    discarded if symbol reading is successful.  */
2373
2374 #if 0
2375 /* FIXME:  As free_named_symtabs is currently a big noop this function
2376    is no longer needed.  */
2377 static void clear_symtab_users_once (void);
2378
2379 static int clear_symtab_users_queued;
2380 static int clear_symtab_users_done;
2381
2382 static void
2383 clear_symtab_users_once (void)
2384 {
2385   /* Enforce once-per-`do_cleanups'-semantics */
2386   if (clear_symtab_users_queued <= clear_symtab_users_done)
2387     return;
2388   clear_symtab_users_done = clear_symtab_users_queued;
2389
2390   clear_symtab_users ();
2391 }
2392 #endif
2393
2394 /* Delete the specified psymtab, and any others that reference it.  */
2395
2396 static void
2397 cashier_psymtab (struct partial_symtab *pst)
2398 {
2399   struct partial_symtab *ps, *pprev = NULL;
2400   int i;
2401
2402   /* Find its previous psymtab in the chain */
2403   for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2404     {
2405       if (ps == pst)
2406         break;
2407       pprev = ps;
2408     }
2409
2410   if (ps)
2411     {
2412       /* Unhook it from the chain.  */
2413       if (ps == pst->objfile->psymtabs)
2414         pst->objfile->psymtabs = ps->next;
2415       else
2416         pprev->next = ps->next;
2417
2418       /* FIXME, we can't conveniently deallocate the entries in the
2419          partial_symbol lists (global_psymbols/static_psymbols) that
2420          this psymtab points to.  These just take up space until all
2421          the psymtabs are reclaimed.  Ditto the dependencies list and
2422          filename, which are all in the objfile_obstack.  */
2423
2424       /* We need to cashier any psymtab that has this one as a dependency... */
2425     again:
2426       for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2427         {
2428           for (i = 0; i < ps->number_of_dependencies; i++)
2429             {
2430               if (ps->dependencies[i] == pst)
2431                 {
2432                   cashier_psymtab (ps);
2433                   goto again;   /* Must restart, chain has been munged. */
2434                 }
2435             }
2436         }
2437     }
2438 }
2439
2440 /* If a symtab or psymtab for filename NAME is found, free it along
2441    with any dependent breakpoints, displays, etc.
2442    Used when loading new versions of object modules with the "add-file"
2443    command.  This is only called on the top-level symtab or psymtab's name;
2444    it is not called for subsidiary files such as .h files.
2445
2446    Return value is 1 if we blew away the environment, 0 if not.
2447    FIXME.  The return value appears to never be used.
2448
2449    FIXME.  I think this is not the best way to do this.  We should
2450    work on being gentler to the environment while still cleaning up
2451    all stray pointers into the freed symtab.  */
2452
2453 int
2454 free_named_symtabs (char *name)
2455 {
2456 #if 0
2457   /* FIXME:  With the new method of each objfile having it's own
2458      psymtab list, this function needs serious rethinking.  In particular,
2459      why was it ever necessary to toss psymtabs with specific compilation
2460      unit filenames, as opposed to all psymtabs from a particular symbol
2461      file?  -- fnf
2462      Well, the answer is that some systems permit reloading of particular
2463      compilation units.  We want to blow away any old info about these
2464      compilation units, regardless of which objfiles they arrived in. --gnu.  */
2465
2466   struct symtab *s;
2467   struct symtab *prev;
2468   struct partial_symtab *ps;
2469   struct blockvector *bv;
2470   int blewit = 0;
2471
2472   /* We only wack things if the symbol-reload switch is set.  */
2473   if (!symbol_reloading)
2474     return 0;
2475
2476   /* Some symbol formats have trouble providing file names... */
2477   if (name == 0 || *name == '\0')
2478     return 0;
2479
2480   /* Look for a psymtab with the specified name.  */
2481
2482 again2:
2483   for (ps = partial_symtab_list; ps; ps = ps->next)
2484     {
2485       if (strcmp (name, ps->filename) == 0)
2486         {
2487           cashier_psymtab (ps); /* Blow it away...and its little dog, too.  */
2488           goto again2;          /* Must restart, chain has been munged */
2489         }
2490     }
2491
2492   /* Look for a symtab with the specified name.  */
2493
2494   for (s = symtab_list; s; s = s->next)
2495     {
2496       if (strcmp (name, s->filename) == 0)
2497         break;
2498       prev = s;
2499     }
2500
2501   if (s)
2502     {
2503       if (s == symtab_list)
2504         symtab_list = s->next;
2505       else
2506         prev->next = s->next;
2507
2508       /* For now, queue a delete for all breakpoints, displays, etc., whether
2509          or not they depend on the symtab being freed.  This should be
2510          changed so that only those data structures affected are deleted.  */
2511
2512       /* But don't delete anything if the symtab is empty.
2513          This test is necessary due to a bug in "dbxread.c" that
2514          causes empty symtabs to be created for N_SO symbols that
2515          contain the pathname of the object file.  (This problem
2516          has been fixed in GDB 3.9x).  */
2517
2518       bv = BLOCKVECTOR (s);
2519       if (BLOCKVECTOR_NBLOCKS (bv) > 2
2520           || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
2521           || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)))
2522         {
2523           complaint (&symfile_complaints, "Replacing old symbols for `%s'",
2524                      name);
2525           clear_symtab_users_queued++;
2526           make_cleanup (clear_symtab_users_once, 0);
2527           blewit = 1;
2528         }
2529       else
2530         {
2531           complaint (&symfile_complaints, "Empty symbol table found for `%s'",
2532                      name);
2533         }
2534
2535       free_symtab (s);
2536     }
2537   else
2538     {
2539       /* It is still possible that some breakpoints will be affected
2540          even though no symtab was found, since the file might have
2541          been compiled without debugging, and hence not be associated
2542          with a symtab.  In order to handle this correctly, we would need
2543          to keep a list of text address ranges for undebuggable files.
2544          For now, we do nothing, since this is a fairly obscure case.  */
2545       ;
2546     }
2547
2548   /* FIXME, what about the minimal symbol table? */
2549   return blewit;
2550 #else
2551   return (0);
2552 #endif
2553 }
2554 \f
2555 /* Allocate and partially fill a partial symtab.  It will be
2556    completely filled at the end of the symbol list.
2557
2558    FILENAME is the name of the symbol-file we are reading from. */
2559
2560 struct partial_symtab *
2561 start_psymtab_common (struct objfile *objfile,
2562                       struct section_offsets *section_offsets, char *filename,
2563                       CORE_ADDR textlow, struct partial_symbol **global_syms,
2564                       struct partial_symbol **static_syms)
2565 {
2566   struct partial_symtab *psymtab;
2567
2568   psymtab = allocate_psymtab (filename, objfile);
2569   psymtab->section_offsets = section_offsets;
2570   psymtab->textlow = textlow;
2571   psymtab->texthigh = psymtab->textlow;         /* default */
2572   psymtab->globals_offset = global_syms - objfile->global_psymbols.list;
2573   psymtab->statics_offset = static_syms - objfile->static_psymbols.list;
2574   return (psymtab);
2575 }
2576 \f
2577 /* Add a symbol with a long value to a psymtab.
2578    Since one arg is a struct, we pass in a ptr and deref it (sigh).
2579    Return the partial symbol that has been added.  */
2580
2581 /* NOTE: carlton/2003-09-11: The reason why we return the partial
2582    symbol is so that callers can get access to the symbol's demangled
2583    name, which they don't have any cheap way to determine otherwise.
2584    (Currenly, dwarf2read.c is the only file who uses that information,
2585    though it's possible that other readers might in the future.)
2586    Elena wasn't thrilled about that, and I don't blame her, but we
2587    couldn't come up with a better way to get that information.  If
2588    it's needed in other situations, we could consider breaking up
2589    SYMBOL_SET_NAMES to provide access to the demangled name lookup
2590    cache.  */
2591
2592 const struct partial_symbol *
2593 add_psymbol_to_list (char *name, int namelength, domain_enum domain,
2594                      enum address_class class,
2595                      struct psymbol_allocation_list *list, long val,    /* Value as a long */
2596                      CORE_ADDR coreaddr,        /* Value as a CORE_ADDR */
2597                      enum language language, struct objfile *objfile)
2598 {
2599   struct partial_symbol *psym;
2600   char *buf = alloca (namelength + 1);
2601   /* psymbol is static so that there will be no uninitialized gaps in the
2602      structure which might contain random data, causing cache misses in
2603      bcache. */
2604   static struct partial_symbol psymbol;
2605
2606   /* Create local copy of the partial symbol */
2607   memcpy (buf, name, namelength);
2608   buf[namelength] = '\0';
2609   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2610   if (val != 0)
2611     {
2612       SYMBOL_VALUE (&psymbol) = val;
2613     }
2614   else
2615     {
2616       SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2617     }
2618   SYMBOL_SECTION (&psymbol) = 0;
2619   SYMBOL_LANGUAGE (&psymbol) = language;
2620   PSYMBOL_DOMAIN (&psymbol) = domain;
2621   PSYMBOL_CLASS (&psymbol) = class;
2622
2623   SYMBOL_SET_NAMES (&psymbol, buf, namelength, objfile);
2624
2625   /* Stash the partial symbol away in the cache */
2626   psym = deprecated_bcache (&psymbol, sizeof (struct partial_symbol),
2627                             objfile->psymbol_cache);
2628
2629   /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2630   if (list->next >= list->list + list->size)
2631     {
2632       extend_psymbol_list (list, objfile);
2633     }
2634   *list->next++ = psym;
2635   OBJSTAT (objfile, n_psyms++);
2636
2637   return psym;
2638 }
2639
2640 /* Add a symbol with a long value to a psymtab. This differs from
2641  * add_psymbol_to_list above in taking both a mangled and a demangled
2642  * name. */
2643
2644 void
2645 add_psymbol_with_dem_name_to_list (char *name, int namelength, char *dem_name,
2646                                    int dem_namelength, domain_enum domain,
2647                                    enum address_class class,
2648                                    struct psymbol_allocation_list *list, long val,      /* Value as a long */
2649                                    CORE_ADDR coreaddr,  /* Value as a CORE_ADDR */
2650                                    enum language language,
2651                                    struct objfile *objfile)
2652 {
2653   struct partial_symbol *psym;
2654   char *buf = alloca (namelength + 1);
2655   /* psymbol is static so that there will be no uninitialized gaps in the
2656      structure which might contain random data, causing cache misses in
2657      bcache. */
2658   static struct partial_symbol psymbol;
2659
2660   /* Create local copy of the partial symbol */
2661
2662   memcpy (buf, name, namelength);
2663   buf[namelength] = '\0';
2664   DEPRECATED_SYMBOL_NAME (&psymbol) = deprecated_bcache (buf, namelength + 1,
2665                                                          objfile->psymbol_cache);
2666
2667   buf = alloca (dem_namelength + 1);
2668   memcpy (buf, dem_name, dem_namelength);
2669   buf[dem_namelength] = '\0';
2670
2671   switch (language)
2672     {
2673     case language_c:
2674     case language_cplus:
2675       SYMBOL_CPLUS_DEMANGLED_NAME (&psymbol) =
2676         deprecated_bcache (buf, dem_namelength + 1, objfile->psymbol_cache);
2677       break;
2678       /* FIXME What should be done for the default case? Ignoring for now. */
2679     }
2680
2681   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2682   if (val != 0)
2683     {
2684       SYMBOL_VALUE (&psymbol) = val;
2685     }
2686   else
2687     {
2688       SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2689     }
2690   SYMBOL_SECTION (&psymbol) = 0;
2691   SYMBOL_LANGUAGE (&psymbol) = language;
2692   PSYMBOL_DOMAIN (&psymbol) = domain;
2693   PSYMBOL_CLASS (&psymbol) = class;
2694   SYMBOL_INIT_LANGUAGE_SPECIFIC (&psymbol, language);
2695
2696   /* Stash the partial symbol away in the cache */
2697   psym = deprecated_bcache (&psymbol, sizeof (struct partial_symbol),
2698                             objfile->psymbol_cache);
2699
2700   /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2701   if (list->next >= list->list + list->size)
2702     {
2703       extend_psymbol_list (list, objfile);
2704     }
2705   *list->next++ = psym;
2706   OBJSTAT (objfile, n_psyms++);
2707 }
2708
2709 /* Initialize storage for partial symbols.  */
2710
2711 void
2712 init_psymbol_list (struct objfile *objfile, int total_symbols)
2713 {
2714   /* Free any previously allocated psymbol lists.  */
2715
2716   if (objfile->global_psymbols.list)
2717     {
2718       xfree (objfile->global_psymbols.list);
2719     }
2720   if (objfile->static_psymbols.list)
2721     {
2722       xfree (objfile->static_psymbols.list);
2723     }
2724
2725   /* Current best guess is that approximately a twentieth
2726      of the total symbols (in a debugging file) are global or static
2727      oriented symbols */
2728
2729   objfile->global_psymbols.size = total_symbols / 10;
2730   objfile->static_psymbols.size = total_symbols / 10;
2731
2732   if (objfile->global_psymbols.size > 0)
2733     {
2734       objfile->global_psymbols.next =
2735         objfile->global_psymbols.list = (struct partial_symbol **)
2736         xmalloc ((objfile->global_psymbols.size
2737                   * sizeof (struct partial_symbol *)));
2738     }
2739   if (objfile->static_psymbols.size > 0)
2740     {
2741       objfile->static_psymbols.next =
2742         objfile->static_psymbols.list = (struct partial_symbol **)
2743         xmalloc ((objfile->static_psymbols.size
2744                   * sizeof (struct partial_symbol *)));
2745     }
2746 }
2747
2748 /* OVERLAYS:
2749    The following code implements an abstraction for debugging overlay sections.
2750
2751    The target model is as follows:
2752    1) The gnu linker will permit multiple sections to be mapped into the
2753    same VMA, each with its own unique LMA (or load address).
2754    2) It is assumed that some runtime mechanism exists for mapping the
2755    sections, one by one, from the load address into the VMA address.
2756    3) This code provides a mechanism for gdb to keep track of which
2757    sections should be considered to be mapped from the VMA to the LMA.
2758    This information is used for symbol lookup, and memory read/write.
2759    For instance, if a section has been mapped then its contents
2760    should be read from the VMA, otherwise from the LMA.
2761
2762    Two levels of debugger support for overlays are available.  One is
2763    "manual", in which the debugger relies on the user to tell it which
2764    overlays are currently mapped.  This level of support is
2765    implemented entirely in the core debugger, and the information about
2766    whether a section is mapped is kept in the objfile->obj_section table.
2767
2768    The second level of support is "automatic", and is only available if
2769    the target-specific code provides functionality to read the target's
2770    overlay mapping table, and translate its contents for the debugger
2771    (by updating the mapped state information in the obj_section tables).
2772
2773    The interface is as follows:
2774    User commands:
2775    overlay map <name>   -- tell gdb to consider this section mapped
2776    overlay unmap <name> -- tell gdb to consider this section unmapped
2777    overlay list         -- list the sections that GDB thinks are mapped
2778    overlay read-target  -- get the target's state of what's mapped
2779    overlay off/manual/auto -- set overlay debugging state
2780    Functional interface:
2781    find_pc_mapped_section(pc):    if the pc is in the range of a mapped
2782    section, return that section.
2783    find_pc_overlay(pc):       find any overlay section that contains
2784    the pc, either in its VMA or its LMA
2785    overlay_is_mapped(sect):       true if overlay is marked as mapped
2786    section_is_overlay(sect):      true if section's VMA != LMA
2787    pc_in_mapped_range(pc,sec):    true if pc belongs to section's VMA
2788    pc_in_unmapped_range(...):     true if pc belongs to section's LMA
2789    sections_overlap(sec1, sec2):  true if mapped sec1 and sec2 ranges overlap
2790    overlay_mapped_address(...):   map an address from section's LMA to VMA
2791    overlay_unmapped_address(...): map an address from section's VMA to LMA
2792    symbol_overlayed_address(...): Return a "current" address for symbol:
2793    either in VMA or LMA depending on whether
2794    the symbol's section is currently mapped
2795  */
2796
2797 /* Overlay debugging state: */
2798
2799 enum overlay_debugging_state overlay_debugging = ovly_off;
2800 int overlay_cache_invalid = 0;  /* True if need to refresh mapped state */
2801
2802 /* Target vector for refreshing overlay mapped state */
2803 static void simple_overlay_update (struct obj_section *);
2804 void (*target_overlay_update) (struct obj_section *) = simple_overlay_update;
2805
2806 /* Function: section_is_overlay (SECTION)
2807    Returns true if SECTION has VMA not equal to LMA, ie.
2808    SECTION is loaded at an address different from where it will "run".  */
2809
2810 int
2811 section_is_overlay (asection *section)
2812 {
2813   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2814
2815   if (overlay_debugging)
2816     if (section && section->lma != 0 &&
2817         section->vma != section->lma)
2818       return 1;
2819
2820   return 0;
2821 }
2822
2823 /* Function: overlay_invalidate_all (void)
2824    Invalidate the mapped state of all overlay sections (mark it as stale).  */
2825
2826 static void
2827 overlay_invalidate_all (void)
2828 {
2829   struct objfile *objfile;
2830   struct obj_section *sect;
2831
2832   ALL_OBJSECTIONS (objfile, sect)
2833     if (section_is_overlay (sect->the_bfd_section))
2834     sect->ovly_mapped = -1;
2835 }
2836
2837 /* Function: overlay_is_mapped (SECTION)
2838    Returns true if section is an overlay, and is currently mapped.
2839    Private: public access is thru function section_is_mapped.
2840
2841    Access to the ovly_mapped flag is restricted to this function, so
2842    that we can do automatic update.  If the global flag
2843    OVERLAY_CACHE_INVALID is set (by wait_for_inferior), then call
2844    overlay_invalidate_all.  If the mapped state of the particular
2845    section is stale, then call TARGET_OVERLAY_UPDATE to refresh it.  */
2846
2847 static int
2848 overlay_is_mapped (struct obj_section *osect)
2849 {
2850   if (osect == 0 || !section_is_overlay (osect->the_bfd_section))
2851     return 0;
2852
2853   switch (overlay_debugging)
2854     {
2855     default:
2856     case ovly_off:
2857       return 0;                 /* overlay debugging off */
2858     case ovly_auto:             /* overlay debugging automatic */
2859       /* Unles there is a target_overlay_update function,
2860          there's really nothing useful to do here (can't really go auto)  */
2861       if (target_overlay_update)
2862         {
2863           if (overlay_cache_invalid)
2864             {
2865               overlay_invalidate_all ();
2866               overlay_cache_invalid = 0;
2867             }
2868           if (osect->ovly_mapped == -1)
2869             (*target_overlay_update) (osect);
2870         }
2871       /* fall thru to manual case */
2872     case ovly_on:               /* overlay debugging manual */
2873       return osect->ovly_mapped == 1;
2874     }
2875 }
2876
2877 /* Function: section_is_mapped
2878    Returns true if section is an overlay, and is currently mapped.  */
2879
2880 int
2881 section_is_mapped (asection *section)
2882 {
2883   struct objfile *objfile;
2884   struct obj_section *osect;
2885
2886   if (overlay_debugging)
2887     if (section && section_is_overlay (section))
2888       ALL_OBJSECTIONS (objfile, osect)
2889         if (osect->the_bfd_section == section)
2890         return overlay_is_mapped (osect);
2891
2892   return 0;
2893 }
2894
2895 /* Function: pc_in_unmapped_range
2896    If PC falls into the lma range of SECTION, return true, else false.  */
2897
2898 CORE_ADDR
2899 pc_in_unmapped_range (CORE_ADDR pc, asection *section)
2900 {
2901   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2902
2903   int size;
2904
2905   if (overlay_debugging)
2906     if (section && section_is_overlay (section))
2907       {
2908         size = bfd_get_section_size (section);
2909         if (section->lma <= pc && pc < section->lma + size)
2910           return 1;
2911       }
2912   return 0;
2913 }
2914
2915 /* Function: pc_in_mapped_range
2916    If PC falls into the vma range of SECTION, return true, else false.  */
2917
2918 CORE_ADDR
2919 pc_in_mapped_range (CORE_ADDR pc, asection *section)
2920 {
2921   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2922
2923   int size;
2924
2925   if (overlay_debugging)
2926     if (section && section_is_overlay (section))
2927       {
2928         size = bfd_get_section_size (section);
2929         if (section->vma <= pc && pc < section->vma + size)
2930           return 1;
2931       }
2932   return 0;
2933 }
2934
2935
2936 /* Return true if the mapped ranges of sections A and B overlap, false
2937    otherwise.  */
2938 static int
2939 sections_overlap (asection *a, asection *b)
2940 {
2941   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2942
2943   CORE_ADDR a_start = a->vma;
2944   CORE_ADDR a_end = a->vma + bfd_get_section_size (a);
2945   CORE_ADDR b_start = b->vma;
2946   CORE_ADDR b_end = b->vma + bfd_get_section_size (b);
2947
2948   return (a_start < b_end && b_start < a_end);
2949 }
2950
2951 /* Function: overlay_unmapped_address (PC, SECTION)
2952    Returns the address corresponding to PC in the unmapped (load) range.
2953    May be the same as PC.  */
2954
2955 CORE_ADDR
2956 overlay_unmapped_address (CORE_ADDR pc, asection *section)
2957 {
2958   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2959
2960   if (overlay_debugging)
2961     if (section && section_is_overlay (section) &&
2962         pc_in_mapped_range (pc, section))
2963       return pc + section->lma - section->vma;
2964
2965   return pc;
2966 }
2967
2968 /* Function: overlay_mapped_address (PC, SECTION)
2969    Returns the address corresponding to PC in the mapped (runtime) range.
2970    May be the same as PC.  */
2971
2972 CORE_ADDR
2973 overlay_mapped_address (CORE_ADDR pc, asection *section)
2974 {
2975   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2976
2977   if (overlay_debugging)
2978     if (section && section_is_overlay (section) &&
2979         pc_in_unmapped_range (pc, section))
2980       return pc + section->vma - section->lma;
2981
2982   return pc;
2983 }
2984
2985
2986 /* Function: symbol_overlayed_address
2987    Return one of two addresses (relative to the VMA or to the LMA),
2988    depending on whether the section is mapped or not.  */
2989
2990 CORE_ADDR
2991 symbol_overlayed_address (CORE_ADDR address, asection *section)
2992 {
2993   if (overlay_debugging)
2994     {
2995       /* If the symbol has no section, just return its regular address. */
2996       if (section == 0)
2997         return address;
2998       /* If the symbol's section is not an overlay, just return its address */
2999       if (!section_is_overlay (section))
3000         return address;
3001       /* If the symbol's section is mapped, just return its address */
3002       if (section_is_mapped (section))
3003         return address;
3004       /*
3005        * HOWEVER: if the symbol is in an overlay section which is NOT mapped,
3006        * then return its LOADED address rather than its vma address!!
3007        */
3008       return overlay_unmapped_address (address, section);
3009     }
3010   return address;
3011 }
3012
3013 /* Function: find_pc_overlay (PC)
3014    Return the best-match overlay section for PC:
3015    If PC matches a mapped overlay section's VMA, return that section.
3016    Else if PC matches an unmapped section's VMA, return that section.
3017    Else if PC matches an unmapped section's LMA, return that section.  */
3018
3019 asection *
3020 find_pc_overlay (CORE_ADDR pc)
3021 {
3022   struct objfile *objfile;
3023   struct obj_section *osect, *best_match = NULL;
3024
3025   if (overlay_debugging)
3026     ALL_OBJSECTIONS (objfile, osect)
3027       if (section_is_overlay (osect->the_bfd_section))
3028       {
3029         if (pc_in_mapped_range (pc, osect->the_bfd_section))
3030           {
3031             if (overlay_is_mapped (osect))
3032               return osect->the_bfd_section;
3033             else
3034               best_match = osect;
3035           }
3036         else if (pc_in_unmapped_range (pc, osect->the_bfd_section))
3037           best_match = osect;
3038       }
3039   return best_match ? best_match->the_bfd_section : NULL;
3040 }
3041
3042 /* Function: find_pc_mapped_section (PC)
3043    If PC falls into the VMA address range of an overlay section that is
3044    currently marked as MAPPED, return that section.  Else return NULL.  */
3045
3046 asection *
3047 find_pc_mapped_section (CORE_ADDR pc)
3048 {
3049   struct objfile *objfile;
3050   struct obj_section *osect;
3051
3052   if (overlay_debugging)
3053     ALL_OBJSECTIONS (objfile, osect)
3054       if (pc_in_mapped_range (pc, osect->the_bfd_section) &&
3055           overlay_is_mapped (osect))
3056       return osect->the_bfd_section;
3057
3058   return NULL;
3059 }
3060
3061 /* Function: list_overlays_command
3062    Print a list of mapped sections and their PC ranges */
3063
3064 void
3065 list_overlays_command (char *args, int from_tty)
3066 {
3067   int nmapped = 0;
3068   struct objfile *objfile;
3069   struct obj_section *osect;
3070
3071   if (overlay_debugging)
3072     ALL_OBJSECTIONS (objfile, osect)
3073       if (overlay_is_mapped (osect))
3074       {
3075         const char *name;
3076         bfd_vma lma, vma;
3077         int size;
3078
3079         vma = bfd_section_vma (objfile->obfd, osect->the_bfd_section);
3080         lma = bfd_section_lma (objfile->obfd, osect->the_bfd_section);
3081         size = bfd_get_section_size (osect->the_bfd_section);
3082         name = bfd_section_name (objfile->obfd, osect->the_bfd_section);
3083
3084         printf_filtered ("Section %s, loaded at ", name);
3085         print_address_numeric (lma, 1, gdb_stdout);
3086         puts_filtered (" - ");
3087         print_address_numeric (lma + size, 1, gdb_stdout);
3088         printf_filtered (", mapped at ");
3089         print_address_numeric (vma, 1, gdb_stdout);
3090         puts_filtered (" - ");
3091         print_address_numeric (vma + size, 1, gdb_stdout);
3092         puts_filtered ("\n");
3093
3094         nmapped++;
3095       }
3096   if (nmapped == 0)
3097     printf_filtered ("No sections are mapped.\n");
3098 }
3099
3100 /* Function: map_overlay_command
3101    Mark the named section as mapped (ie. residing at its VMA address).  */
3102
3103 void
3104 map_overlay_command (char *args, int from_tty)
3105 {
3106   struct objfile *objfile, *objfile2;
3107   struct obj_section *sec, *sec2;
3108   asection *bfdsec;
3109
3110   if (!overlay_debugging)
3111     error ("\
3112 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3113 the 'overlay manual' command.");
3114
3115   if (args == 0 || *args == 0)
3116     error ("Argument required: name of an overlay section");
3117
3118   /* First, find a section matching the user supplied argument */
3119   ALL_OBJSECTIONS (objfile, sec)
3120     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3121     {
3122       /* Now, check to see if the section is an overlay. */
3123       bfdsec = sec->the_bfd_section;
3124       if (!section_is_overlay (bfdsec))
3125         continue;               /* not an overlay section */
3126
3127       /* Mark the overlay as "mapped" */
3128       sec->ovly_mapped = 1;
3129
3130       /* Next, make a pass and unmap any sections that are
3131          overlapped by this new section: */
3132       ALL_OBJSECTIONS (objfile2, sec2)
3133         if (sec2->ovly_mapped
3134             && sec != sec2
3135             && sec->the_bfd_section != sec2->the_bfd_section
3136             && sections_overlap (sec->the_bfd_section,
3137                                  sec2->the_bfd_section))
3138         {
3139           if (info_verbose)
3140             printf_unfiltered ("Note: section %s unmapped by overlap\n",
3141                              bfd_section_name (objfile->obfd,
3142                                                sec2->the_bfd_section));
3143           sec2->ovly_mapped = 0;        /* sec2 overlaps sec: unmap sec2 */
3144         }
3145       return;
3146     }
3147   error ("No overlay section called %s", args);
3148 }
3149
3150 /* Function: unmap_overlay_command
3151    Mark the overlay section as unmapped
3152    (ie. resident in its LMA address range, rather than the VMA range).  */
3153
3154 void
3155 unmap_overlay_command (char *args, int from_tty)
3156 {
3157   struct objfile *objfile;
3158   struct obj_section *sec;
3159
3160   if (!overlay_debugging)
3161     error ("\
3162 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3163 the 'overlay manual' command.");
3164
3165   if (args == 0 || *args == 0)
3166     error ("Argument required: name of an overlay section");
3167
3168   /* First, find a section matching the user supplied argument */
3169   ALL_OBJSECTIONS (objfile, sec)
3170     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3171     {
3172       if (!sec->ovly_mapped)
3173         error ("Section %s is not mapped", args);
3174       sec->ovly_mapped = 0;
3175       return;
3176     }
3177   error ("No overlay section called %s", args);
3178 }
3179
3180 /* Function: overlay_auto_command
3181    A utility command to turn on overlay debugging.
3182    Possibly this should be done via a set/show command. */
3183
3184 static void
3185 overlay_auto_command (char *args, int from_tty)
3186 {
3187   overlay_debugging = ovly_auto;
3188   enable_overlay_breakpoints ();
3189   if (info_verbose)
3190     printf_unfiltered ("Automatic overlay debugging enabled.");
3191 }
3192
3193 /* Function: overlay_manual_command
3194    A utility command to turn on overlay debugging.
3195    Possibly this should be done via a set/show command. */
3196
3197 static void
3198 overlay_manual_command (char *args, int from_tty)
3199 {
3200   overlay_debugging = ovly_on;
3201   disable_overlay_breakpoints ();
3202   if (info_verbose)
3203     printf_unfiltered ("Overlay debugging enabled.");
3204 }
3205
3206 /* Function: overlay_off_command
3207    A utility command to turn on overlay debugging.
3208    Possibly this should be done via a set/show command. */
3209
3210 static void
3211 overlay_off_command (char *args, int from_tty)
3212 {
3213   overlay_debugging = ovly_off;
3214   disable_overlay_breakpoints ();
3215   if (info_verbose)
3216     printf_unfiltered ("Overlay debugging disabled.");
3217 }
3218
3219 static void
3220 overlay_load_command (char *args, int from_tty)
3221 {
3222   if (target_overlay_update)
3223     (*target_overlay_update) (NULL);
3224   else
3225     error ("This target does not know how to read its overlay state.");
3226 }
3227
3228 /* Function: overlay_command
3229    A place-holder for a mis-typed command */
3230
3231 /* Command list chain containing all defined "overlay" subcommands. */
3232 struct cmd_list_element *overlaylist;
3233
3234 static void
3235 overlay_command (char *args, int from_tty)
3236 {
3237   printf_unfiltered
3238     ("\"overlay\" must be followed by the name of an overlay command.\n");
3239   help_list (overlaylist, "overlay ", -1, gdb_stdout);
3240 }
3241
3242
3243 /* Target Overlays for the "Simplest" overlay manager:
3244
3245    This is GDB's default target overlay layer.  It works with the
3246    minimal overlay manager supplied as an example by Cygnus.  The
3247    entry point is via a function pointer "target_overlay_update",
3248    so targets that use a different runtime overlay manager can
3249    substitute their own overlay_update function and take over the
3250    function pointer.
3251
3252    The overlay_update function pokes around in the target's data structures
3253    to see what overlays are mapped, and updates GDB's overlay mapping with
3254    this information.
3255
3256    In this simple implementation, the target data structures are as follows:
3257    unsigned _novlys;            /# number of overlay sections #/
3258    unsigned _ovly_table[_novlys][4] = {
3259    {VMA, SIZE, LMA, MAPPED},    /# one entry per overlay section #/
3260    {..., ...,  ..., ...},
3261    }
3262    unsigned _novly_regions;     /# number of overlay regions #/
3263    unsigned _ovly_region_table[_novly_regions][3] = {
3264    {VMA, SIZE, MAPPED_TO_LMA},  /# one entry per overlay region #/
3265    {..., ...,  ...},
3266    }
3267    These functions will attempt to update GDB's mappedness state in the
3268    symbol section table, based on the target's mappedness state.
3269
3270    To do this, we keep a cached copy of the target's _ovly_table, and
3271    attempt to detect when the cached copy is invalidated.  The main
3272    entry point is "simple_overlay_update(SECT), which looks up SECT in
3273    the cached table and re-reads only the entry for that section from
3274    the target (whenever possible).
3275  */
3276
3277 /* Cached, dynamically allocated copies of the target data structures: */
3278 static unsigned (*cache_ovly_table)[4] = 0;
3279 #if 0
3280 static unsigned (*cache_ovly_region_table)[3] = 0;
3281 #endif
3282 static unsigned cache_novlys = 0;
3283 #if 0
3284 static unsigned cache_novly_regions = 0;
3285 #endif
3286 static CORE_ADDR cache_ovly_table_base = 0;
3287 #if 0
3288 static CORE_ADDR cache_ovly_region_table_base = 0;
3289 #endif
3290 enum ovly_index
3291   {
3292     VMA, SIZE, LMA, MAPPED
3293   };
3294 #define TARGET_LONG_BYTES (TARGET_LONG_BIT / TARGET_CHAR_BIT)
3295
3296 /* Throw away the cached copy of _ovly_table */
3297 static void
3298 simple_free_overlay_table (void)
3299 {
3300   if (cache_ovly_table)
3301     xfree (cache_ovly_table);
3302   cache_novlys = 0;
3303   cache_ovly_table = NULL;
3304   cache_ovly_table_base = 0;
3305 }
3306
3307 #if 0
3308 /* Throw away the cached copy of _ovly_region_table */
3309 static void
3310 simple_free_overlay_region_table (void)
3311 {
3312   if (cache_ovly_region_table)
3313     xfree (cache_ovly_region_table);
3314   cache_novly_regions = 0;
3315   cache_ovly_region_table = NULL;
3316   cache_ovly_region_table_base = 0;
3317 }
3318 #endif
3319
3320 /* Read an array of ints from the target into a local buffer.
3321    Convert to host order.  int LEN is number of ints  */
3322 static void
3323 read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr, int len)
3324 {
3325   /* FIXME (alloca): Not safe if array is very large. */
3326   char *buf = alloca (len * TARGET_LONG_BYTES);
3327   int i;
3328
3329   read_memory (memaddr, buf, len * TARGET_LONG_BYTES);
3330   for (i = 0; i < len; i++)
3331     myaddr[i] = extract_unsigned_integer (TARGET_LONG_BYTES * i + buf,
3332                                           TARGET_LONG_BYTES);
3333 }
3334
3335 /* Find and grab a copy of the target _ovly_table
3336    (and _novlys, which is needed for the table's size) */
3337 static int
3338 simple_read_overlay_table (void)
3339 {
3340   struct minimal_symbol *novlys_msym, *ovly_table_msym;
3341
3342   simple_free_overlay_table ();
3343   novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
3344   if (! novlys_msym)
3345     {
3346       error ("Error reading inferior's overlay table: "
3347              "couldn't find `_novlys' variable\n"
3348              "in inferior.  Use `overlay manual' mode.");
3349       return 0;
3350     }
3351
3352   ovly_table_msym = lookup_minimal_symbol ("_ovly_table", NULL, NULL);
3353   if (! ovly_table_msym)
3354     {
3355       error ("Error reading inferior's overlay table: couldn't find "
3356              "`_ovly_table' array\n"
3357              "in inferior.  Use `overlay manual' mode.");
3358       return 0;
3359     }
3360
3361   cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym), 4);
3362   cache_ovly_table
3363     = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
3364   cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
3365   read_target_long_array (cache_ovly_table_base,
3366                           (int *) cache_ovly_table,
3367                           cache_novlys * 4);
3368
3369   return 1;                     /* SUCCESS */
3370 }
3371
3372 #if 0
3373 /* Find and grab a copy of the target _ovly_region_table
3374    (and _novly_regions, which is needed for the table's size) */
3375 static int
3376 simple_read_overlay_region_table (void)
3377 {
3378   struct minimal_symbol *msym;
3379
3380   simple_free_overlay_region_table ();
3381   msym = lookup_minimal_symbol ("_novly_regions", NULL, NULL);
3382   if (msym != NULL)
3383     cache_novly_regions = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4);
3384   else
3385     return 0;                   /* failure */
3386   cache_ovly_region_table = (void *) xmalloc (cache_novly_regions * 12);
3387   if (cache_ovly_region_table != NULL)
3388     {
3389       msym = lookup_minimal_symbol ("_ovly_region_table", NULL, NULL);
3390       if (msym != NULL)
3391         {
3392           cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
3393           read_target_long_array (cache_ovly_region_table_base,
3394                                   (int *) cache_ovly_region_table,
3395                                   cache_novly_regions * 3);
3396         }
3397       else
3398         return 0;               /* failure */
3399     }
3400   else
3401     return 0;                   /* failure */
3402   return 1;                     /* SUCCESS */
3403 }
3404 #endif
3405
3406 /* Function: simple_overlay_update_1
3407    A helper function for simple_overlay_update.  Assuming a cached copy
3408    of _ovly_table exists, look through it to find an entry whose vma,
3409    lma and size match those of OSECT.  Re-read the entry and make sure
3410    it still matches OSECT (else the table may no longer be valid).
3411    Set OSECT's mapped state to match the entry.  Return: 1 for
3412    success, 0 for failure.  */
3413
3414 static int
3415 simple_overlay_update_1 (struct obj_section *osect)
3416 {
3417   int i, size;
3418   bfd *obfd = osect->objfile->obfd;
3419   asection *bsect = osect->the_bfd_section;
3420
3421   size = bfd_get_section_size (osect->the_bfd_section);
3422   for (i = 0; i < cache_novlys; i++)
3423     if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3424         && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3425         /* && cache_ovly_table[i][SIZE] == size */ )
3426       {
3427         read_target_long_array (cache_ovly_table_base + i * TARGET_LONG_BYTES,
3428                                 (int *) cache_ovly_table[i], 4);
3429         if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3430             && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3431             /* && cache_ovly_table[i][SIZE] == size */ )
3432           {
3433             osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3434             return 1;
3435           }
3436         else    /* Warning!  Warning!  Target's ovly table has changed! */
3437           return 0;
3438       }
3439   return 0;
3440 }
3441
3442 /* Function: simple_overlay_update
3443    If OSECT is NULL, then update all sections' mapped state
3444    (after re-reading the entire target _ovly_table).
3445    If OSECT is non-NULL, then try to find a matching entry in the
3446    cached ovly_table and update only OSECT's mapped state.
3447    If a cached entry can't be found or the cache isn't valid, then
3448    re-read the entire cache, and go ahead and update all sections.  */
3449
3450 static void
3451 simple_overlay_update (struct obj_section *osect)
3452 {
3453   struct objfile *objfile;
3454
3455   /* Were we given an osect to look up?  NULL means do all of them. */
3456   if (osect)
3457     /* Have we got a cached copy of the target's overlay table? */
3458     if (cache_ovly_table != NULL)
3459       /* Does its cached location match what's currently in the symtab? */
3460       if (cache_ovly_table_base ==
3461           SYMBOL_VALUE_ADDRESS (lookup_minimal_symbol ("_ovly_table", NULL, NULL)))
3462         /* Then go ahead and try to look up this single section in the cache */
3463         if (simple_overlay_update_1 (osect))
3464           /* Found it!  We're done. */
3465           return;
3466
3467   /* Cached table no good: need to read the entire table anew.
3468      Or else we want all the sections, in which case it's actually
3469      more efficient to read the whole table in one block anyway.  */
3470
3471   if (! simple_read_overlay_table ())
3472     return;
3473
3474   /* Now may as well update all sections, even if only one was requested. */
3475   ALL_OBJSECTIONS (objfile, osect)
3476     if (section_is_overlay (osect->the_bfd_section))
3477     {
3478       int i, size;
3479       bfd *obfd = osect->objfile->obfd;
3480       asection *bsect = osect->the_bfd_section;
3481
3482       size = bfd_get_section_size (bsect);
3483       for (i = 0; i < cache_novlys; i++)
3484         if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3485             && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3486             /* && cache_ovly_table[i][SIZE] == size */ )
3487           { /* obj_section matches i'th entry in ovly_table */
3488             osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3489             break;              /* finished with inner for loop: break out */
3490           }
3491     }
3492 }
3493
3494 /* Set the output sections and output offsets for section SECTP in
3495    ABFD.  The relocation code in BFD will read these offsets, so we
3496    need to be sure they're initialized.  We map each section to itself,
3497    with no offset; this means that SECTP->vma will be honored.  */
3498
3499 static void
3500 symfile_dummy_outputs (bfd *abfd, asection *sectp, void *dummy)
3501 {
3502   sectp->output_section = sectp;
3503   sectp->output_offset = 0;
3504 }
3505
3506 /* Relocate the contents of a debug section SECTP in ABFD.  The
3507    contents are stored in BUF if it is non-NULL, or returned in a
3508    malloc'd buffer otherwise.
3509
3510    For some platforms and debug info formats, shared libraries contain
3511    relocations against the debug sections (particularly for DWARF-2;
3512    one affected platform is PowerPC GNU/Linux, although it depends on
3513    the version of the linker in use).  Also, ELF object files naturally
3514    have unresolved relocations for their debug sections.  We need to apply
3515    the relocations in order to get the locations of symbols correct.  */
3516
3517 bfd_byte *
3518 symfile_relocate_debug_section (bfd *abfd, asection *sectp, bfd_byte *buf)
3519 {
3520   /* We're only interested in debugging sections with relocation
3521      information.  */
3522   if ((sectp->flags & SEC_RELOC) == 0)
3523     return NULL;
3524   if ((sectp->flags & SEC_DEBUGGING) == 0)
3525     return NULL;
3526
3527   /* We will handle section offsets properly elsewhere, so relocate as if
3528      all sections begin at 0.  */
3529   bfd_map_over_sections (abfd, symfile_dummy_outputs, NULL);
3530
3531   return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
3532 }
3533
3534 void
3535 _initialize_symfile (void)
3536 {
3537   struct cmd_list_element *c;
3538
3539   c = add_cmd ("symbol-file", class_files, symbol_file_command,
3540                "Load symbol table from executable file FILE.\n\
3541 The `file' command can also load symbol tables, as well as setting the file\n\
3542 to execute.", &cmdlist);
3543   set_cmd_completer (c, filename_completer);
3544
3545   c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command,
3546                "Usage: add-symbol-file FILE ADDR [-s <SECT> <SECT_ADDR> -s <SECT> <SECT_ADDR> ...]\n\
3547 Load the symbols from FILE, assuming FILE has been dynamically loaded.\n\
3548 ADDR is the starting address of the file's text.\n\
3549 The optional arguments are section-name section-address pairs and\n\
3550 should be specified if the data and bss segments are not contiguous\n\
3551 with the text.  SECT is a section name to be loaded at SECT_ADDR.",
3552                &cmdlist);
3553   set_cmd_completer (c, filename_completer);
3554
3555   c = add_cmd ("add-shared-symbol-files", class_files,
3556                add_shared_symbol_files_command,
3557    "Load the symbols from shared objects in the dynamic linker's link map.",
3558                &cmdlist);
3559   c = add_alias_cmd ("assf", "add-shared-symbol-files", class_files, 1,
3560                      &cmdlist);
3561
3562   c = add_cmd ("load", class_files, load_command,
3563                "Dynamically load FILE into the running program, and record its symbols\n\
3564 for access from GDB.", &cmdlist);
3565   set_cmd_completer (c, filename_completer);
3566
3567   deprecated_add_show_from_set
3568     (add_set_cmd ("symbol-reloading", class_support, var_boolean,
3569                   (char *) &symbol_reloading,
3570             "Set dynamic symbol table reloading multiple times in one run.",
3571                   &setlist),
3572      &showlist);
3573
3574   add_prefix_cmd ("overlay", class_support, overlay_command,
3575                   "Commands for debugging overlays.", &overlaylist,
3576                   "overlay ", 0, &cmdlist);
3577
3578   add_com_alias ("ovly", "overlay", class_alias, 1);
3579   add_com_alias ("ov", "overlay", class_alias, 1);
3580
3581   add_cmd ("map-overlay", class_support, map_overlay_command,
3582            "Assert that an overlay section is mapped.", &overlaylist);
3583
3584   add_cmd ("unmap-overlay", class_support, unmap_overlay_command,
3585            "Assert that an overlay section is unmapped.", &overlaylist);
3586
3587   add_cmd ("list-overlays", class_support, list_overlays_command,
3588            "List mappings of overlay sections.", &overlaylist);
3589
3590   add_cmd ("manual", class_support, overlay_manual_command,
3591            "Enable overlay debugging.", &overlaylist);
3592   add_cmd ("off", class_support, overlay_off_command,
3593            "Disable overlay debugging.", &overlaylist);
3594   add_cmd ("auto", class_support, overlay_auto_command,
3595            "Enable automatic overlay debugging.", &overlaylist);
3596   add_cmd ("load-target", class_support, overlay_load_command,
3597            "Read the overlay mapping state from the target.", &overlaylist);
3598
3599   /* Filename extension to source language lookup table: */
3600   init_filename_language_table ();
3601   c = add_set_cmd ("extension-language", class_files, var_string_noescape,
3602                    (char *) &ext_args,
3603                    "Set mapping between filename extension and source language.\n\
3604 Usage: set extension-language .foo bar",
3605                    &setlist);
3606   set_cmd_cfunc (c, set_ext_lang_command);
3607
3608   add_info ("extensions", info_ext_lang_command,
3609             "All filename extensions associated with a source language.");
3610
3611   deprecated_add_show_from_set
3612     (add_set_cmd ("download-write-size", class_obscure,
3613                   var_integer, (char *) &download_write_size,
3614                   "Set the write size used when downloading a program.\n"
3615                   "Only used when downloading a program onto a remote\n"
3616                   "target. Specify zero, or a negative value, to disable\n"
3617                   "blocked writes. The actual size of each transfer is also\n"
3618                   "limited by the size of the target packet and the memory\n"
3619                   "cache.\n",
3620                   &setlist),
3621      &showlist);
3622
3623   debug_file_directory = xstrdup (DEBUGDIR);
3624   c = (add_set_cmd
3625        ("debug-file-directory", class_support, var_string,
3626         (char *) &debug_file_directory,
3627         "Set the directory where separate debug symbols are searched for.\n"
3628         "Separate debug symbols are first searched for in the same\n"
3629         "directory as the binary, then in the `" DEBUG_SUBDIRECTORY
3630         "' subdirectory,\n"
3631         "and lastly at the path of the directory of the binary with\n"
3632         "the global debug-file directory prepended\n",
3633         &setlist));
3634   deprecated_add_show_from_set (c, &showlist);
3635   set_cmd_completer (c, filename_completer);
3636 }