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