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