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