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