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