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