2005-02-11 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."), 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         complaint (&symfile_complaints, _("Empty symbol table found for `%s'"),
2531                    name);
2532
2533       free_symtab (s);
2534     }
2535   else
2536     {
2537       /* It is still possible that some breakpoints will be affected
2538          even though no symtab was found, since the file might have
2539          been compiled without debugging, and hence not be associated
2540          with a symtab.  In order to handle this correctly, we would need
2541          to keep a list of text address ranges for undebuggable files.
2542          For now, we do nothing, since this is a fairly obscure case.  */
2543       ;
2544     }
2545
2546   /* FIXME, what about the minimal symbol table? */
2547   return blewit;
2548 #else
2549   return (0);
2550 #endif
2551 }
2552 \f
2553 /* Allocate and partially fill a partial symtab.  It will be
2554    completely filled at the end of the symbol list.
2555
2556    FILENAME is the name of the symbol-file we are reading from. */
2557
2558 struct partial_symtab *
2559 start_psymtab_common (struct objfile *objfile,
2560                       struct section_offsets *section_offsets, char *filename,
2561                       CORE_ADDR textlow, struct partial_symbol **global_syms,
2562                       struct partial_symbol **static_syms)
2563 {
2564   struct partial_symtab *psymtab;
2565
2566   psymtab = allocate_psymtab (filename, objfile);
2567   psymtab->section_offsets = section_offsets;
2568   psymtab->textlow = textlow;
2569   psymtab->texthigh = psymtab->textlow;         /* default */
2570   psymtab->globals_offset = global_syms - objfile->global_psymbols.list;
2571   psymtab->statics_offset = static_syms - objfile->static_psymbols.list;
2572   return (psymtab);
2573 }
2574 \f
2575 /* Add a symbol with a long value to a psymtab.
2576    Since one arg is a struct, we pass in a ptr and deref it (sigh).
2577    Return the partial symbol that has been added.  */
2578
2579 /* NOTE: carlton/2003-09-11: The reason why we return the partial
2580    symbol is so that callers can get access to the symbol's demangled
2581    name, which they don't have any cheap way to determine otherwise.
2582    (Currenly, dwarf2read.c is the only file who uses that information,
2583    though it's possible that other readers might in the future.)
2584    Elena wasn't thrilled about that, and I don't blame her, but we
2585    couldn't come up with a better way to get that information.  If
2586    it's needed in other situations, we could consider breaking up
2587    SYMBOL_SET_NAMES to provide access to the demangled name lookup
2588    cache.  */
2589
2590 const struct partial_symbol *
2591 add_psymbol_to_list (char *name, int namelength, domain_enum domain,
2592                      enum address_class class,
2593                      struct psymbol_allocation_list *list, long val,    /* Value as a long */
2594                      CORE_ADDR coreaddr,        /* Value as a CORE_ADDR */
2595                      enum language language, struct objfile *objfile)
2596 {
2597   struct partial_symbol *psym;
2598   char *buf = alloca (namelength + 1);
2599   /* psymbol is static so that there will be no uninitialized gaps in the
2600      structure which might contain random data, causing cache misses in
2601      bcache. */
2602   static struct partial_symbol psymbol;
2603
2604   /* Create local copy of the partial symbol */
2605   memcpy (buf, name, namelength);
2606   buf[namelength] = '\0';
2607   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2608   if (val != 0)
2609     {
2610       SYMBOL_VALUE (&psymbol) = val;
2611     }
2612   else
2613     {
2614       SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2615     }
2616   SYMBOL_SECTION (&psymbol) = 0;
2617   SYMBOL_LANGUAGE (&psymbol) = language;
2618   PSYMBOL_DOMAIN (&psymbol) = domain;
2619   PSYMBOL_CLASS (&psymbol) = class;
2620
2621   SYMBOL_SET_NAMES (&psymbol, buf, namelength, objfile);
2622
2623   /* Stash the partial symbol away in the cache */
2624   psym = deprecated_bcache (&psymbol, sizeof (struct partial_symbol),
2625                             objfile->psymbol_cache);
2626
2627   /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2628   if (list->next >= list->list + list->size)
2629     {
2630       extend_psymbol_list (list, objfile);
2631     }
2632   *list->next++ = psym;
2633   OBJSTAT (objfile, n_psyms++);
2634
2635   return psym;
2636 }
2637
2638 /* Add a symbol with a long value to a psymtab. This differs from
2639  * add_psymbol_to_list above in taking both a mangled and a demangled
2640  * name. */
2641
2642 void
2643 add_psymbol_with_dem_name_to_list (char *name, int namelength, char *dem_name,
2644                                    int dem_namelength, domain_enum domain,
2645                                    enum address_class class,
2646                                    struct psymbol_allocation_list *list, long val,      /* Value as a long */
2647                                    CORE_ADDR coreaddr,  /* Value as a CORE_ADDR */
2648                                    enum language language,
2649                                    struct objfile *objfile)
2650 {
2651   struct partial_symbol *psym;
2652   char *buf = alloca (namelength + 1);
2653   /* psymbol is static so that there will be no uninitialized gaps in the
2654      structure which might contain random data, causing cache misses in
2655      bcache. */
2656   static struct partial_symbol psymbol;
2657
2658   /* Create local copy of the partial symbol */
2659
2660   memcpy (buf, name, namelength);
2661   buf[namelength] = '\0';
2662   DEPRECATED_SYMBOL_NAME (&psymbol) = deprecated_bcache (buf, namelength + 1,
2663                                                          objfile->psymbol_cache);
2664
2665   buf = alloca (dem_namelength + 1);
2666   memcpy (buf, dem_name, dem_namelength);
2667   buf[dem_namelength] = '\0';
2668
2669   switch (language)
2670     {
2671     case language_c:
2672     case language_cplus:
2673       SYMBOL_CPLUS_DEMANGLED_NAME (&psymbol) =
2674         deprecated_bcache (buf, dem_namelength + 1, objfile->psymbol_cache);
2675       break;
2676       /* FIXME What should be done for the default case? Ignoring for now. */
2677     }
2678
2679   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2680   if (val != 0)
2681     {
2682       SYMBOL_VALUE (&psymbol) = val;
2683     }
2684   else
2685     {
2686       SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2687     }
2688   SYMBOL_SECTION (&psymbol) = 0;
2689   SYMBOL_LANGUAGE (&psymbol) = language;
2690   PSYMBOL_DOMAIN (&psymbol) = domain;
2691   PSYMBOL_CLASS (&psymbol) = class;
2692   SYMBOL_INIT_LANGUAGE_SPECIFIC (&psymbol, language);
2693
2694   /* Stash the partial symbol away in the cache */
2695   psym = deprecated_bcache (&psymbol, sizeof (struct partial_symbol),
2696                             objfile->psymbol_cache);
2697
2698   /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2699   if (list->next >= list->list + list->size)
2700     {
2701       extend_psymbol_list (list, objfile);
2702     }
2703   *list->next++ = psym;
2704   OBJSTAT (objfile, n_psyms++);
2705 }
2706
2707 /* Initialize storage for partial symbols.  */
2708
2709 void
2710 init_psymbol_list (struct objfile *objfile, int total_symbols)
2711 {
2712   /* Free any previously allocated psymbol lists.  */
2713
2714   if (objfile->global_psymbols.list)
2715     {
2716       xfree (objfile->global_psymbols.list);
2717     }
2718   if (objfile->static_psymbols.list)
2719     {
2720       xfree (objfile->static_psymbols.list);
2721     }
2722
2723   /* Current best guess is that approximately a twentieth
2724      of the total symbols (in a debugging file) are global or static
2725      oriented symbols */
2726
2727   objfile->global_psymbols.size = total_symbols / 10;
2728   objfile->static_psymbols.size = total_symbols / 10;
2729
2730   if (objfile->global_psymbols.size > 0)
2731     {
2732       objfile->global_psymbols.next =
2733         objfile->global_psymbols.list = (struct partial_symbol **)
2734         xmalloc ((objfile->global_psymbols.size
2735                   * sizeof (struct partial_symbol *)));
2736     }
2737   if (objfile->static_psymbols.size > 0)
2738     {
2739       objfile->static_psymbols.next =
2740         objfile->static_psymbols.list = (struct partial_symbol **)
2741         xmalloc ((objfile->static_psymbols.size
2742                   * sizeof (struct partial_symbol *)));
2743     }
2744 }
2745
2746 /* OVERLAYS:
2747    The following code implements an abstraction for debugging overlay sections.
2748
2749    The target model is as follows:
2750    1) The gnu linker will permit multiple sections to be mapped into the
2751    same VMA, each with its own unique LMA (or load address).
2752    2) It is assumed that some runtime mechanism exists for mapping the
2753    sections, one by one, from the load address into the VMA address.
2754    3) This code provides a mechanism for gdb to keep track of which
2755    sections should be considered to be mapped from the VMA to the LMA.
2756    This information is used for symbol lookup, and memory read/write.
2757    For instance, if a section has been mapped then its contents
2758    should be read from the VMA, otherwise from the LMA.
2759
2760    Two levels of debugger support for overlays are available.  One is
2761    "manual", in which the debugger relies on the user to tell it which
2762    overlays are currently mapped.  This level of support is
2763    implemented entirely in the core debugger, and the information about
2764    whether a section is mapped is kept in the objfile->obj_section table.
2765
2766    The second level of support is "automatic", and is only available if
2767    the target-specific code provides functionality to read the target's
2768    overlay mapping table, and translate its contents for the debugger
2769    (by updating the mapped state information in the obj_section tables).
2770
2771    The interface is as follows:
2772    User commands:
2773    overlay map <name>   -- tell gdb to consider this section mapped
2774    overlay unmap <name> -- tell gdb to consider this section unmapped
2775    overlay list         -- list the sections that GDB thinks are mapped
2776    overlay read-target  -- get the target's state of what's mapped
2777    overlay off/manual/auto -- set overlay debugging state
2778    Functional interface:
2779    find_pc_mapped_section(pc):    if the pc is in the range of a mapped
2780    section, return that section.
2781    find_pc_overlay(pc):       find any overlay section that contains
2782    the pc, either in its VMA or its LMA
2783    overlay_is_mapped(sect):       true if overlay is marked as mapped
2784    section_is_overlay(sect):      true if section's VMA != LMA
2785    pc_in_mapped_range(pc,sec):    true if pc belongs to section's VMA
2786    pc_in_unmapped_range(...):     true if pc belongs to section's LMA
2787    sections_overlap(sec1, sec2):  true if mapped sec1 and sec2 ranges overlap
2788    overlay_mapped_address(...):   map an address from section's LMA to VMA
2789    overlay_unmapped_address(...): map an address from section's VMA to LMA
2790    symbol_overlayed_address(...): Return a "current" address for symbol:
2791    either in VMA or LMA depending on whether
2792    the symbol's section is currently mapped
2793  */
2794
2795 /* Overlay debugging state: */
2796
2797 enum overlay_debugging_state overlay_debugging = ovly_off;
2798 int overlay_cache_invalid = 0;  /* True if need to refresh mapped state */
2799
2800 /* Target vector for refreshing overlay mapped state */
2801 static void simple_overlay_update (struct obj_section *);
2802 void (*target_overlay_update) (struct obj_section *) = simple_overlay_update;
2803
2804 /* Function: section_is_overlay (SECTION)
2805    Returns true if SECTION has VMA not equal to LMA, ie.
2806    SECTION is loaded at an address different from where it will "run".  */
2807
2808 int
2809 section_is_overlay (asection *section)
2810 {
2811   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2812
2813   if (overlay_debugging)
2814     if (section && section->lma != 0 &&
2815         section->vma != section->lma)
2816       return 1;
2817
2818   return 0;
2819 }
2820
2821 /* Function: overlay_invalidate_all (void)
2822    Invalidate the mapped state of all overlay sections (mark it as stale).  */
2823
2824 static void
2825 overlay_invalidate_all (void)
2826 {
2827   struct objfile *objfile;
2828   struct obj_section *sect;
2829
2830   ALL_OBJSECTIONS (objfile, sect)
2831     if (section_is_overlay (sect->the_bfd_section))
2832     sect->ovly_mapped = -1;
2833 }
2834
2835 /* Function: overlay_is_mapped (SECTION)
2836    Returns true if section is an overlay, and is currently mapped.
2837    Private: public access is thru function section_is_mapped.
2838
2839    Access to the ovly_mapped flag is restricted to this function, so
2840    that we can do automatic update.  If the global flag
2841    OVERLAY_CACHE_INVALID is set (by wait_for_inferior), then call
2842    overlay_invalidate_all.  If the mapped state of the particular
2843    section is stale, then call TARGET_OVERLAY_UPDATE to refresh it.  */
2844
2845 static int
2846 overlay_is_mapped (struct obj_section *osect)
2847 {
2848   if (osect == 0 || !section_is_overlay (osect->the_bfd_section))
2849     return 0;
2850
2851   switch (overlay_debugging)
2852     {
2853     default:
2854     case ovly_off:
2855       return 0;                 /* overlay debugging off */
2856     case ovly_auto:             /* overlay debugging automatic */
2857       /* Unles there is a target_overlay_update function,
2858          there's really nothing useful to do here (can't really go auto)  */
2859       if (target_overlay_update)
2860         {
2861           if (overlay_cache_invalid)
2862             {
2863               overlay_invalidate_all ();
2864               overlay_cache_invalid = 0;
2865             }
2866           if (osect->ovly_mapped == -1)
2867             (*target_overlay_update) (osect);
2868         }
2869       /* fall thru to manual case */
2870     case ovly_on:               /* overlay debugging manual */
2871       return osect->ovly_mapped == 1;
2872     }
2873 }
2874
2875 /* Function: section_is_mapped
2876    Returns true if section is an overlay, and is currently mapped.  */
2877
2878 int
2879 section_is_mapped (asection *section)
2880 {
2881   struct objfile *objfile;
2882   struct obj_section *osect;
2883
2884   if (overlay_debugging)
2885     if (section && section_is_overlay (section))
2886       ALL_OBJSECTIONS (objfile, osect)
2887         if (osect->the_bfd_section == section)
2888         return overlay_is_mapped (osect);
2889
2890   return 0;
2891 }
2892
2893 /* Function: pc_in_unmapped_range
2894    If PC falls into the lma range of SECTION, return true, else false.  */
2895
2896 CORE_ADDR
2897 pc_in_unmapped_range (CORE_ADDR pc, asection *section)
2898 {
2899   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2900
2901   int size;
2902
2903   if (overlay_debugging)
2904     if (section && section_is_overlay (section))
2905       {
2906         size = bfd_get_section_size (section);
2907         if (section->lma <= pc && pc < section->lma + size)
2908           return 1;
2909       }
2910   return 0;
2911 }
2912
2913 /* Function: pc_in_mapped_range
2914    If PC falls into the vma range of SECTION, return true, else false.  */
2915
2916 CORE_ADDR
2917 pc_in_mapped_range (CORE_ADDR pc, asection *section)
2918 {
2919   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2920
2921   int size;
2922
2923   if (overlay_debugging)
2924     if (section && section_is_overlay (section))
2925       {
2926         size = bfd_get_section_size (section);
2927         if (section->vma <= pc && pc < section->vma + size)
2928           return 1;
2929       }
2930   return 0;
2931 }
2932
2933
2934 /* Return true if the mapped ranges of sections A and B overlap, false
2935    otherwise.  */
2936 static int
2937 sections_overlap (asection *a, asection *b)
2938 {
2939   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2940
2941   CORE_ADDR a_start = a->vma;
2942   CORE_ADDR a_end = a->vma + bfd_get_section_size (a);
2943   CORE_ADDR b_start = b->vma;
2944   CORE_ADDR b_end = b->vma + bfd_get_section_size (b);
2945
2946   return (a_start < b_end && b_start < a_end);
2947 }
2948
2949 /* Function: overlay_unmapped_address (PC, SECTION)
2950    Returns the address corresponding to PC in the unmapped (load) range.
2951    May be the same as PC.  */
2952
2953 CORE_ADDR
2954 overlay_unmapped_address (CORE_ADDR pc, asection *section)
2955 {
2956   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2957
2958   if (overlay_debugging)
2959     if (section && section_is_overlay (section) &&
2960         pc_in_mapped_range (pc, section))
2961       return pc + section->lma - section->vma;
2962
2963   return pc;
2964 }
2965
2966 /* Function: overlay_mapped_address (PC, SECTION)
2967    Returns the address corresponding to PC in the mapped (runtime) range.
2968    May be the same as PC.  */
2969
2970 CORE_ADDR
2971 overlay_mapped_address (CORE_ADDR pc, asection *section)
2972 {
2973   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2974
2975   if (overlay_debugging)
2976     if (section && section_is_overlay (section) &&
2977         pc_in_unmapped_range (pc, section))
2978       return pc + section->vma - section->lma;
2979
2980   return pc;
2981 }
2982
2983
2984 /* Function: symbol_overlayed_address
2985    Return one of two addresses (relative to the VMA or to the LMA),
2986    depending on whether the section is mapped or not.  */
2987
2988 CORE_ADDR
2989 symbol_overlayed_address (CORE_ADDR address, asection *section)
2990 {
2991   if (overlay_debugging)
2992     {
2993       /* If the symbol has no section, just return its regular address. */
2994       if (section == 0)
2995         return address;
2996       /* If the symbol's section is not an overlay, just return its address */
2997       if (!section_is_overlay (section))
2998         return address;
2999       /* If the symbol's section is mapped, just return its address */
3000       if (section_is_mapped (section))
3001         return address;
3002       /*
3003        * HOWEVER: if the symbol is in an overlay section which is NOT mapped,
3004        * then return its LOADED address rather than its vma address!!
3005        */
3006       return overlay_unmapped_address (address, section);
3007     }
3008   return address;
3009 }
3010
3011 /* Function: find_pc_overlay (PC)
3012    Return the best-match overlay section for PC:
3013    If PC matches a mapped overlay section's VMA, return that section.
3014    Else if PC matches an unmapped section's VMA, return that section.
3015    Else if PC matches an unmapped section's LMA, return that section.  */
3016
3017 asection *
3018 find_pc_overlay (CORE_ADDR pc)
3019 {
3020   struct objfile *objfile;
3021   struct obj_section *osect, *best_match = NULL;
3022
3023   if (overlay_debugging)
3024     ALL_OBJSECTIONS (objfile, osect)
3025       if (section_is_overlay (osect->the_bfd_section))
3026       {
3027         if (pc_in_mapped_range (pc, osect->the_bfd_section))
3028           {
3029             if (overlay_is_mapped (osect))
3030               return osect->the_bfd_section;
3031             else
3032               best_match = osect;
3033           }
3034         else if (pc_in_unmapped_range (pc, osect->the_bfd_section))
3035           best_match = osect;
3036       }
3037   return best_match ? best_match->the_bfd_section : NULL;
3038 }
3039
3040 /* Function: find_pc_mapped_section (PC)
3041    If PC falls into the VMA address range of an overlay section that is
3042    currently marked as MAPPED, return that section.  Else return NULL.  */
3043
3044 asection *
3045 find_pc_mapped_section (CORE_ADDR pc)
3046 {
3047   struct objfile *objfile;
3048   struct obj_section *osect;
3049
3050   if (overlay_debugging)
3051     ALL_OBJSECTIONS (objfile, osect)
3052       if (pc_in_mapped_range (pc, osect->the_bfd_section) &&
3053           overlay_is_mapped (osect))
3054       return osect->the_bfd_section;
3055
3056   return NULL;
3057 }
3058
3059 /* Function: list_overlays_command
3060    Print a list of mapped sections and their PC ranges */
3061
3062 void
3063 list_overlays_command (char *args, int from_tty)
3064 {
3065   int nmapped = 0;
3066   struct objfile *objfile;
3067   struct obj_section *osect;
3068
3069   if (overlay_debugging)
3070     ALL_OBJSECTIONS (objfile, osect)
3071       if (overlay_is_mapped (osect))
3072       {
3073         const char *name;
3074         bfd_vma lma, vma;
3075         int size;
3076
3077         vma = bfd_section_vma (objfile->obfd, osect->the_bfd_section);
3078         lma = bfd_section_lma (objfile->obfd, osect->the_bfd_section);
3079         size = bfd_get_section_size (osect->the_bfd_section);
3080         name = bfd_section_name (objfile->obfd, osect->the_bfd_section);
3081
3082         printf_filtered ("Section %s, loaded at ", name);
3083         print_address_numeric (lma, 1, gdb_stdout);
3084         puts_filtered (" - ");
3085         print_address_numeric (lma + size, 1, gdb_stdout);
3086         printf_filtered (", mapped at ");
3087         print_address_numeric (vma, 1, gdb_stdout);
3088         puts_filtered (" - ");
3089         print_address_numeric (vma + size, 1, gdb_stdout);
3090         puts_filtered ("\n");
3091
3092         nmapped++;
3093       }
3094   if (nmapped == 0)
3095     printf_filtered ("No sections are mapped.\n");
3096 }
3097
3098 /* Function: map_overlay_command
3099    Mark the named section as mapped (ie. residing at its VMA address).  */
3100
3101 void
3102 map_overlay_command (char *args, int from_tty)
3103 {
3104   struct objfile *objfile, *objfile2;
3105   struct obj_section *sec, *sec2;
3106   asection *bfdsec;
3107
3108   if (!overlay_debugging)
3109     error (_("\
3110 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3111 the 'overlay manual' command."));
3112
3113   if (args == 0 || *args == 0)
3114     error (_("Argument required: name of an overlay section"));
3115
3116   /* First, find a section matching the user supplied argument */
3117   ALL_OBJSECTIONS (objfile, sec)
3118     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3119     {
3120       /* Now, check to see if the section is an overlay. */
3121       bfdsec = sec->the_bfd_section;
3122       if (!section_is_overlay (bfdsec))
3123         continue;               /* not an overlay section */
3124
3125       /* Mark the overlay as "mapped" */
3126       sec->ovly_mapped = 1;
3127
3128       /* Next, make a pass and unmap any sections that are
3129          overlapped by this new section: */
3130       ALL_OBJSECTIONS (objfile2, sec2)
3131         if (sec2->ovly_mapped
3132             && sec != sec2
3133             && sec->the_bfd_section != sec2->the_bfd_section
3134             && sections_overlap (sec->the_bfd_section,
3135                                  sec2->the_bfd_section))
3136         {
3137           if (info_verbose)
3138             printf_unfiltered ("Note: section %s unmapped by overlap\n",
3139                              bfd_section_name (objfile->obfd,
3140                                                sec2->the_bfd_section));
3141           sec2->ovly_mapped = 0;        /* sec2 overlaps sec: unmap sec2 */
3142         }
3143       return;
3144     }
3145   error (_("No overlay section called %s"), args);
3146 }
3147
3148 /* Function: unmap_overlay_command
3149    Mark the overlay section as unmapped
3150    (ie. resident in its LMA address range, rather than the VMA range).  */
3151
3152 void
3153 unmap_overlay_command (char *args, int from_tty)
3154 {
3155   struct objfile *objfile;
3156   struct obj_section *sec;
3157
3158   if (!overlay_debugging)
3159     error (_("\
3160 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3161 the 'overlay manual' command."));
3162
3163   if (args == 0 || *args == 0)
3164     error (_("Argument required: name of an overlay section"));
3165
3166   /* First, find a section matching the user supplied argument */
3167   ALL_OBJSECTIONS (objfile, sec)
3168     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3169     {
3170       if (!sec->ovly_mapped)
3171         error (_("Section %s is not mapped"), args);
3172       sec->ovly_mapped = 0;
3173       return;
3174     }
3175   error (_("No overlay section called %s"), args);
3176 }
3177
3178 /* Function: overlay_auto_command
3179    A utility command to turn on overlay debugging.
3180    Possibly this should be done via a set/show command. */
3181
3182 static void
3183 overlay_auto_command (char *args, int from_tty)
3184 {
3185   overlay_debugging = ovly_auto;
3186   enable_overlay_breakpoints ();
3187   if (info_verbose)
3188     printf_unfiltered ("Automatic overlay debugging enabled.");
3189 }
3190
3191 /* Function: overlay_manual_command
3192    A utility command to turn on overlay debugging.
3193    Possibly this should be done via a set/show command. */
3194
3195 static void
3196 overlay_manual_command (char *args, int from_tty)
3197 {
3198   overlay_debugging = ovly_on;
3199   disable_overlay_breakpoints ();
3200   if (info_verbose)
3201     printf_unfiltered ("Overlay debugging enabled.");
3202 }
3203
3204 /* Function: overlay_off_command
3205    A utility command to turn on overlay debugging.
3206    Possibly this should be done via a set/show command. */
3207
3208 static void
3209 overlay_off_command (char *args, int from_tty)
3210 {
3211   overlay_debugging = ovly_off;
3212   disable_overlay_breakpoints ();
3213   if (info_verbose)
3214     printf_unfiltered ("Overlay debugging disabled.");
3215 }
3216
3217 static void
3218 overlay_load_command (char *args, int from_tty)
3219 {
3220   if (target_overlay_update)
3221     (*target_overlay_update) (NULL);
3222   else
3223     error (_("This target does not know how to read its overlay state."));
3224 }
3225
3226 /* Function: overlay_command
3227    A place-holder for a mis-typed command */
3228
3229 /* Command list chain containing all defined "overlay" subcommands. */
3230 struct cmd_list_element *overlaylist;
3231
3232 static void
3233 overlay_command (char *args, int from_tty)
3234 {
3235   printf_unfiltered
3236     ("\"overlay\" must be followed by the name of an overlay command.\n");
3237   help_list (overlaylist, "overlay ", -1, gdb_stdout);
3238 }
3239
3240
3241 /* Target Overlays for the "Simplest" overlay manager:
3242
3243    This is GDB's default target overlay layer.  It works with the
3244    minimal overlay manager supplied as an example by Cygnus.  The
3245    entry point is via a function pointer "target_overlay_update",
3246    so targets that use a different runtime overlay manager can
3247    substitute their own overlay_update function and take over the
3248    function pointer.
3249
3250    The overlay_update function pokes around in the target's data structures
3251    to see what overlays are mapped, and updates GDB's overlay mapping with
3252    this information.
3253
3254    In this simple implementation, the target data structures are as follows:
3255    unsigned _novlys;            /# number of overlay sections #/
3256    unsigned _ovly_table[_novlys][4] = {
3257    {VMA, SIZE, LMA, MAPPED},    /# one entry per overlay section #/
3258    {..., ...,  ..., ...},
3259    }
3260    unsigned _novly_regions;     /# number of overlay regions #/
3261    unsigned _ovly_region_table[_novly_regions][3] = {
3262    {VMA, SIZE, MAPPED_TO_LMA},  /# one entry per overlay region #/
3263    {..., ...,  ...},
3264    }
3265    These functions will attempt to update GDB's mappedness state in the
3266    symbol section table, based on the target's mappedness state.
3267
3268    To do this, we keep a cached copy of the target's _ovly_table, and
3269    attempt to detect when the cached copy is invalidated.  The main
3270    entry point is "simple_overlay_update(SECT), which looks up SECT in
3271    the cached table and re-reads only the entry for that section from
3272    the target (whenever possible).
3273  */
3274
3275 /* Cached, dynamically allocated copies of the target data structures: */
3276 static unsigned (*cache_ovly_table)[4] = 0;
3277 #if 0
3278 static unsigned (*cache_ovly_region_table)[3] = 0;
3279 #endif
3280 static unsigned cache_novlys = 0;
3281 #if 0
3282 static unsigned cache_novly_regions = 0;
3283 #endif
3284 static CORE_ADDR cache_ovly_table_base = 0;
3285 #if 0
3286 static CORE_ADDR cache_ovly_region_table_base = 0;
3287 #endif
3288 enum ovly_index
3289   {
3290     VMA, SIZE, LMA, MAPPED
3291   };
3292 #define TARGET_LONG_BYTES (TARGET_LONG_BIT / TARGET_CHAR_BIT)
3293
3294 /* Throw away the cached copy of _ovly_table */
3295 static void
3296 simple_free_overlay_table (void)
3297 {
3298   if (cache_ovly_table)
3299     xfree (cache_ovly_table);
3300   cache_novlys = 0;
3301   cache_ovly_table = NULL;
3302   cache_ovly_table_base = 0;
3303 }
3304
3305 #if 0
3306 /* Throw away the cached copy of _ovly_region_table */
3307 static void
3308 simple_free_overlay_region_table (void)
3309 {
3310   if (cache_ovly_region_table)
3311     xfree (cache_ovly_region_table);
3312   cache_novly_regions = 0;
3313   cache_ovly_region_table = NULL;
3314   cache_ovly_region_table_base = 0;
3315 }
3316 #endif
3317
3318 /* Read an array of ints from the target into a local buffer.
3319    Convert to host order.  int LEN is number of ints  */
3320 static void
3321 read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr, int len)
3322 {
3323   /* FIXME (alloca): Not safe if array is very large. */
3324   char *buf = alloca (len * TARGET_LONG_BYTES);
3325   int i;
3326
3327   read_memory (memaddr, buf, len * TARGET_LONG_BYTES);
3328   for (i = 0; i < len; i++)
3329     myaddr[i] = extract_unsigned_integer (TARGET_LONG_BYTES * i + buf,
3330                                           TARGET_LONG_BYTES);
3331 }
3332
3333 /* Find and grab a copy of the target _ovly_table
3334    (and _novlys, which is needed for the table's size) */
3335 static int
3336 simple_read_overlay_table (void)
3337 {
3338   struct minimal_symbol *novlys_msym, *ovly_table_msym;
3339
3340   simple_free_overlay_table ();
3341   novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
3342   if (! novlys_msym)
3343     {
3344       error (_("Error reading inferior's overlay table: "
3345              "couldn't find `_novlys' variable\n"
3346              "in inferior.  Use `overlay manual' mode."));
3347       return 0;
3348     }
3349
3350   ovly_table_msym = lookup_minimal_symbol ("_ovly_table", NULL, NULL);
3351   if (! ovly_table_msym)
3352     {
3353       error (_("Error reading inferior's overlay table: couldn't find "
3354              "`_ovly_table' array\n"
3355              "in inferior.  Use `overlay manual' mode."));
3356       return 0;
3357     }
3358
3359   cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym), 4);
3360   cache_ovly_table
3361     = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
3362   cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
3363   read_target_long_array (cache_ovly_table_base,
3364                           (int *) cache_ovly_table,
3365                           cache_novlys * 4);
3366
3367   return 1;                     /* SUCCESS */
3368 }
3369
3370 #if 0
3371 /* Find and grab a copy of the target _ovly_region_table
3372    (and _novly_regions, which is needed for the table's size) */
3373 static int
3374 simple_read_overlay_region_table (void)
3375 {
3376   struct minimal_symbol *msym;
3377
3378   simple_free_overlay_region_table ();
3379   msym = lookup_minimal_symbol ("_novly_regions", NULL, NULL);
3380   if (msym != NULL)
3381     cache_novly_regions = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4);
3382   else
3383     return 0;                   /* failure */
3384   cache_ovly_region_table = (void *) xmalloc (cache_novly_regions * 12);
3385   if (cache_ovly_region_table != NULL)
3386     {
3387       msym = lookup_minimal_symbol ("_ovly_region_table", NULL, NULL);
3388       if (msym != NULL)
3389         {
3390           cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
3391           read_target_long_array (cache_ovly_region_table_base,
3392                                   (int *) cache_ovly_region_table,
3393                                   cache_novly_regions * 3);
3394         }
3395       else
3396         return 0;               /* failure */
3397     }
3398   else
3399     return 0;                   /* failure */
3400   return 1;                     /* SUCCESS */
3401 }
3402 #endif
3403
3404 /* Function: simple_overlay_update_1
3405    A helper function for simple_overlay_update.  Assuming a cached copy
3406    of _ovly_table exists, look through it to find an entry whose vma,
3407    lma and size match those of OSECT.  Re-read the entry and make sure
3408    it still matches OSECT (else the table may no longer be valid).
3409    Set OSECT's mapped state to match the entry.  Return: 1 for
3410    success, 0 for failure.  */
3411
3412 static int
3413 simple_overlay_update_1 (struct obj_section *osect)
3414 {
3415   int i, size;
3416   bfd *obfd = osect->objfile->obfd;
3417   asection *bsect = osect->the_bfd_section;
3418
3419   size = bfd_get_section_size (osect->the_bfd_section);
3420   for (i = 0; i < cache_novlys; i++)
3421     if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3422         && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3423         /* && cache_ovly_table[i][SIZE] == size */ )
3424       {
3425         read_target_long_array (cache_ovly_table_base + i * TARGET_LONG_BYTES,
3426                                 (int *) cache_ovly_table[i], 4);
3427         if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3428             && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3429             /* && cache_ovly_table[i][SIZE] == size */ )
3430           {
3431             osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3432             return 1;
3433           }
3434         else    /* Warning!  Warning!  Target's ovly table has changed! */
3435           return 0;
3436       }
3437   return 0;
3438 }
3439
3440 /* Function: simple_overlay_update
3441    If OSECT is NULL, then update all sections' mapped state
3442    (after re-reading the entire target _ovly_table).
3443    If OSECT is non-NULL, then try to find a matching entry in the
3444    cached ovly_table and update only OSECT's mapped state.
3445    If a cached entry can't be found or the cache isn't valid, then
3446    re-read the entire cache, and go ahead and update all sections.  */
3447
3448 static void
3449 simple_overlay_update (struct obj_section *osect)
3450 {
3451   struct objfile *objfile;
3452
3453   /* Were we given an osect to look up?  NULL means do all of them. */
3454   if (osect)
3455     /* Have we got a cached copy of the target's overlay table? */
3456     if (cache_ovly_table != NULL)
3457       /* Does its cached location match what's currently in the symtab? */
3458       if (cache_ovly_table_base ==
3459           SYMBOL_VALUE_ADDRESS (lookup_minimal_symbol ("_ovly_table", NULL, NULL)))
3460         /* Then go ahead and try to look up this single section in the cache */
3461         if (simple_overlay_update_1 (osect))
3462           /* Found it!  We're done. */
3463           return;
3464
3465   /* Cached table no good: need to read the entire table anew.
3466      Or else we want all the sections, in which case it's actually
3467      more efficient to read the whole table in one block anyway.  */
3468
3469   if (! simple_read_overlay_table ())
3470     return;
3471
3472   /* Now may as well update all sections, even if only one was requested. */
3473   ALL_OBJSECTIONS (objfile, osect)
3474     if (section_is_overlay (osect->the_bfd_section))
3475     {
3476       int i, size;
3477       bfd *obfd = osect->objfile->obfd;
3478       asection *bsect = osect->the_bfd_section;
3479
3480       size = bfd_get_section_size (bsect);
3481       for (i = 0; i < cache_novlys; i++)
3482         if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3483             && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3484             /* && cache_ovly_table[i][SIZE] == size */ )
3485           { /* obj_section matches i'th entry in ovly_table */
3486             osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3487             break;              /* finished with inner for loop: break out */
3488           }
3489     }
3490 }
3491
3492 /* Set the output sections and output offsets for section SECTP in
3493    ABFD.  The relocation code in BFD will read these offsets, so we
3494    need to be sure they're initialized.  We map each section to itself,
3495    with no offset; this means that SECTP->vma will be honored.  */
3496
3497 static void
3498 symfile_dummy_outputs (bfd *abfd, asection *sectp, void *dummy)
3499 {
3500   sectp->output_section = sectp;
3501   sectp->output_offset = 0;
3502 }
3503
3504 /* Relocate the contents of a debug section SECTP in ABFD.  The
3505    contents are stored in BUF if it is non-NULL, or returned in a
3506    malloc'd buffer otherwise.
3507
3508    For some platforms and debug info formats, shared libraries contain
3509    relocations against the debug sections (particularly for DWARF-2;
3510    one affected platform is PowerPC GNU/Linux, although it depends on
3511    the version of the linker in use).  Also, ELF object files naturally
3512    have unresolved relocations for their debug sections.  We need to apply
3513    the relocations in order to get the locations of symbols correct.  */
3514
3515 bfd_byte *
3516 symfile_relocate_debug_section (bfd *abfd, asection *sectp, bfd_byte *buf)
3517 {
3518   /* We're only interested in debugging sections with relocation
3519      information.  */
3520   if ((sectp->flags & SEC_RELOC) == 0)
3521     return NULL;
3522   if ((sectp->flags & SEC_DEBUGGING) == 0)
3523     return NULL;
3524
3525   /* We will handle section offsets properly elsewhere, so relocate as if
3526      all sections begin at 0.  */
3527   bfd_map_over_sections (abfd, symfile_dummy_outputs, NULL);
3528
3529   return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
3530 }
3531
3532 void
3533 _initialize_symfile (void)
3534 {
3535   struct cmd_list_element *c;
3536
3537   c = add_cmd ("symbol-file", class_files, symbol_file_command,
3538                "Load symbol table from executable file FILE.\n\
3539 The `file' command can also load symbol tables, as well as setting the file\n\
3540 to execute.", &cmdlist);
3541   set_cmd_completer (c, filename_completer);
3542
3543   c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command,
3544                "Usage: add-symbol-file FILE ADDR [-s <SECT> <SECT_ADDR> -s <SECT> <SECT_ADDR> ...]\n\
3545 Load the symbols from FILE, assuming FILE has been dynamically loaded.\n\
3546 ADDR is the starting address of the file's text.\n\
3547 The optional arguments are section-name section-address pairs and\n\
3548 should be specified if the data and bss segments are not contiguous\n\
3549 with the text.  SECT is a section name to be loaded at SECT_ADDR.",
3550                &cmdlist);
3551   set_cmd_completer (c, filename_completer);
3552
3553   c = add_cmd ("add-shared-symbol-files", class_files,
3554                add_shared_symbol_files_command,
3555    "Load the symbols from shared objects in the dynamic linker's link map.",
3556                &cmdlist);
3557   c = add_alias_cmd ("assf", "add-shared-symbol-files", class_files, 1,
3558                      &cmdlist);
3559
3560   c = add_cmd ("load", class_files, load_command,
3561                "Dynamically load FILE into the running program, and record its symbols\n\
3562 for access from GDB.", &cmdlist);
3563   set_cmd_completer (c, filename_completer);
3564
3565   deprecated_add_show_from_set
3566     (add_set_cmd ("symbol-reloading", class_support, var_boolean,
3567                   (char *) &symbol_reloading,
3568             "Set dynamic symbol table reloading multiple times in one run.",
3569                   &setlist),
3570      &showlist);
3571
3572   add_prefix_cmd ("overlay", class_support, overlay_command,
3573                   "Commands for debugging overlays.", &overlaylist,
3574                   "overlay ", 0, &cmdlist);
3575
3576   add_com_alias ("ovly", "overlay", class_alias, 1);
3577   add_com_alias ("ov", "overlay", class_alias, 1);
3578
3579   add_cmd ("map-overlay", class_support, map_overlay_command,
3580            "Assert that an overlay section is mapped.", &overlaylist);
3581
3582   add_cmd ("unmap-overlay", class_support, unmap_overlay_command,
3583            "Assert that an overlay section is unmapped.", &overlaylist);
3584
3585   add_cmd ("list-overlays", class_support, list_overlays_command,
3586            "List mappings of overlay sections.", &overlaylist);
3587
3588   add_cmd ("manual", class_support, overlay_manual_command,
3589            "Enable overlay debugging.", &overlaylist);
3590   add_cmd ("off", class_support, overlay_off_command,
3591            "Disable overlay debugging.", &overlaylist);
3592   add_cmd ("auto", class_support, overlay_auto_command,
3593            "Enable automatic overlay debugging.", &overlaylist);
3594   add_cmd ("load-target", class_support, overlay_load_command,
3595            "Read the overlay mapping state from the target.", &overlaylist);
3596
3597   /* Filename extension to source language lookup table: */
3598   init_filename_language_table ();
3599   c = add_set_cmd ("extension-language", class_files, var_string_noescape,
3600                    (char *) &ext_args,
3601                    "Set mapping between filename extension and source language.\n\
3602 Usage: set extension-language .foo bar",
3603                    &setlist);
3604   set_cmd_cfunc (c, set_ext_lang_command);
3605
3606   add_info ("extensions", info_ext_lang_command,
3607             "All filename extensions associated with a source language.");
3608
3609   deprecated_add_show_from_set
3610     (add_set_cmd ("download-write-size", class_obscure,
3611                   var_integer, (char *) &download_write_size,
3612                   "Set the write size used when downloading a program.\n"
3613                   "Only used when downloading a program onto a remote\n"
3614                   "target. Specify zero, or a negative value, to disable\n"
3615                   "blocked writes. The actual size of each transfer is also\n"
3616                   "limited by the size of the target packet and the memory\n"
3617                   "cache.\n",
3618                   &setlist),
3619      &showlist);
3620
3621   debug_file_directory = xstrdup (DEBUGDIR);
3622   c = (add_set_cmd
3623        ("debug-file-directory", class_support, var_string,
3624         (char *) &debug_file_directory,
3625         "Set the directory where separate debug symbols are searched for.\n"
3626         "Separate debug symbols are first searched for in the same\n"
3627         "directory as the binary, then in the `" DEBUG_SUBDIRECTORY
3628         "' subdirectory,\n"
3629         "and lastly at the path of the directory of the binary with\n"
3630         "the global debug-file directory prepended\n",
3631         &setlist));
3632   deprecated_add_show_from_set (c, &showlist);
3633   set_cmd_completer (c, filename_completer);
3634 }