OSDN Git Service

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