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