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