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