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