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