OSDN Git Service

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