OSDN Git Service

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