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