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