Move the symbol-file-from-memory functions into their own file.
[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 (*deprecated_ui_load_progress_hook) (const char *section, unsigned long num);
76 void (*deprecated_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 (*deprecated_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 (deprecated_target_new_objfile_hook)
907     deprecated_target_new_objfile_hook (objfile);
908
909   return (objfile);
910 }
911
912
913 /* Process the symbol file ABFD, as either the main file or as a
914    dynamically loaded file.
915
916    See symbol_file_add_with_addrs_or_offsets's comments for
917    details.  */
918 struct objfile *
919 symbol_file_add_from_bfd (bfd *abfd, int from_tty,
920                           struct section_addr_info *addrs,
921                           int mainline, int flags)
922 {
923   return symbol_file_add_with_addrs_or_offsets (abfd,
924                                                 from_tty, addrs, 0, 0,
925                                                 mainline, flags);
926 }
927
928
929 /* Process a symbol file, as either the main file or as a dynamically
930    loaded file.  See symbol_file_add_with_addrs_or_offsets's comments
931    for details.  */
932 struct objfile *
933 symbol_file_add (char *name, int from_tty, struct section_addr_info *addrs,
934                  int mainline, int flags)
935 {
936   return symbol_file_add_from_bfd (symfile_bfd_open (name), from_tty,
937                                    addrs, mainline, flags);
938 }
939
940
941 /* Call symbol_file_add() with default values and update whatever is
942    affected by the loading of a new main().
943    Used when the file is supplied in the gdb command line
944    and by some targets with special loading requirements.
945    The auxiliary function, symbol_file_add_main_1(), has the flags
946    argument for the switches that can only be specified in the symbol_file
947    command itself.  */
948
949 void
950 symbol_file_add_main (char *args, int from_tty)
951 {
952   symbol_file_add_main_1 (args, from_tty, 0);
953 }
954
955 static void
956 symbol_file_add_main_1 (char *args, int from_tty, int flags)
957 {
958   symbol_file_add (args, from_tty, NULL, 1, flags);
959
960 #ifdef HPUXHPPA
961   RESET_HP_UX_GLOBALS ();
962 #endif
963
964   /* Getting new symbols may change our opinion about
965      what is frameless.  */
966   reinit_frame_cache ();
967
968   set_initial_language ();
969 }
970
971 void
972 symbol_file_clear (int from_tty)
973 {
974   if ((have_full_symbols () || have_partial_symbols ())
975       && from_tty
976       && !query ("Discard symbol table from `%s'? ",
977                  symfile_objfile->name))
978     error ("Not confirmed.");
979     free_all_objfiles ();
980
981     /* solib descriptors may have handles to objfiles.  Since their
982        storage has just been released, we'd better wipe the solib
983        descriptors as well.
984      */
985 #if defined(SOLIB_RESTART)
986     SOLIB_RESTART ();
987 #endif
988
989     symfile_objfile = NULL;
990     if (from_tty)
991       printf_unfiltered ("No symbol file now.\n");
992 #ifdef HPUXHPPA
993     RESET_HP_UX_GLOBALS ();
994 #endif
995 }
996
997 static char *
998 get_debug_link_info (struct objfile *objfile, unsigned long *crc32_out)
999 {
1000   asection *sect;
1001   bfd_size_type debuglink_size;
1002   unsigned long crc32;
1003   char *contents;
1004   int crc_offset;
1005   unsigned char *p;
1006
1007   sect = bfd_get_section_by_name (objfile->obfd, ".gnu_debuglink");
1008
1009   if (sect == NULL)
1010     return NULL;
1011
1012   debuglink_size = bfd_section_size (objfile->obfd, sect);
1013
1014   contents = xmalloc (debuglink_size);
1015   bfd_get_section_contents (objfile->obfd, sect, contents,
1016                             (file_ptr)0, (bfd_size_type)debuglink_size);
1017
1018   /* Crc value is stored after the filename, aligned up to 4 bytes. */
1019   crc_offset = strlen (contents) + 1;
1020   crc_offset = (crc_offset + 3) & ~3;
1021
1022   crc32 = bfd_get_32 (objfile->obfd, (bfd_byte *) (contents + crc_offset));
1023
1024   *crc32_out = crc32;
1025   return contents;
1026 }
1027
1028 static int
1029 separate_debug_file_exists (const char *name, unsigned long crc)
1030 {
1031   unsigned long file_crc = 0;
1032   int fd;
1033   char buffer[8*1024];
1034   int count;
1035
1036   fd = open (name, O_RDONLY | O_BINARY);
1037   if (fd < 0)
1038     return 0;
1039
1040   while ((count = read (fd, buffer, sizeof (buffer))) > 0)
1041     file_crc = gnu_debuglink_crc32 (file_crc, buffer, count);
1042
1043   close (fd);
1044
1045   return crc == file_crc;
1046 }
1047
1048 static char *debug_file_directory = NULL;
1049
1050 #if ! defined (DEBUG_SUBDIRECTORY)
1051 #define DEBUG_SUBDIRECTORY ".debug"
1052 #endif
1053
1054 static char *
1055 find_separate_debug_file (struct objfile *objfile)
1056 {
1057   asection *sect;
1058   char *basename;
1059   char *dir;
1060   char *debugfile;
1061   char *name_copy;
1062   bfd_size_type debuglink_size;
1063   unsigned long crc32;
1064   int i;
1065
1066   basename = get_debug_link_info (objfile, &crc32);
1067
1068   if (basename == NULL)
1069     return NULL;
1070
1071   dir = xstrdup (objfile->name);
1072
1073   /* Strip off the final filename part, leaving the directory name,
1074      followed by a slash.  Objfile names should always be absolute and
1075      tilde-expanded, so there should always be a slash in there
1076      somewhere.  */
1077   for (i = strlen(dir) - 1; i >= 0; i--)
1078     {
1079       if (IS_DIR_SEPARATOR (dir[i]))
1080         break;
1081     }
1082   gdb_assert (i >= 0 && IS_DIR_SEPARATOR (dir[i]));
1083   dir[i+1] = '\0';
1084
1085   debugfile = alloca (strlen (debug_file_directory) + 1
1086                       + strlen (dir)
1087                       + strlen (DEBUG_SUBDIRECTORY)
1088                       + strlen ("/")
1089                       + strlen (basename)
1090                       + 1);
1091
1092   /* First try in the same directory as the original file.  */
1093   strcpy (debugfile, dir);
1094   strcat (debugfile, basename);
1095
1096   if (separate_debug_file_exists (debugfile, crc32))
1097     {
1098       xfree (basename);
1099       xfree (dir);
1100       return xstrdup (debugfile);
1101     }
1102
1103   /* Then try in the subdirectory named DEBUG_SUBDIRECTORY.  */
1104   strcpy (debugfile, dir);
1105   strcat (debugfile, DEBUG_SUBDIRECTORY);
1106   strcat (debugfile, "/");
1107   strcat (debugfile, basename);
1108
1109   if (separate_debug_file_exists (debugfile, crc32))
1110     {
1111       xfree (basename);
1112       xfree (dir);
1113       return xstrdup (debugfile);
1114     }
1115
1116   /* Then try in the global debugfile directory.  */
1117   strcpy (debugfile, debug_file_directory);
1118   strcat (debugfile, "/");
1119   strcat (debugfile, dir);
1120   strcat (debugfile, basename);
1121
1122   if (separate_debug_file_exists (debugfile, crc32))
1123     {
1124       xfree (basename);
1125       xfree (dir);
1126       return xstrdup (debugfile);
1127     }
1128
1129   xfree (basename);
1130   xfree (dir);
1131   return NULL;
1132 }
1133
1134
1135 /* This is the symbol-file command.  Read the file, analyze its
1136    symbols, and add a struct symtab to a symtab list.  The syntax of
1137    the command is rather bizarre--(1) buildargv implements various
1138    quoting conventions which are undocumented and have little or
1139    nothing in common with the way things are quoted (or not quoted)
1140    elsewhere in GDB, (2) options are used, which are not generally
1141    used in GDB (perhaps "set mapped on", "set readnow on" would be
1142    better), (3) the order of options matters, which is contrary to GNU
1143    conventions (because it is confusing and inconvenient).  */
1144 /* Note: ezannoni 2000-04-17. This function used to have support for
1145    rombug (see remote-os9k.c). It consisted of a call to target_link()
1146    (target.c) to get the address of the text segment from the target,
1147    and pass that to symbol_file_add(). This is no longer supported. */
1148
1149 void
1150 symbol_file_command (char *args, int from_tty)
1151 {
1152   char **argv;
1153   char *name = NULL;
1154   struct cleanup *cleanups;
1155   int flags = OBJF_USERLOADED;
1156
1157   dont_repeat ();
1158
1159   if (args == NULL)
1160     {
1161       symbol_file_clear (from_tty);
1162     }
1163   else
1164     {
1165       if ((argv = buildargv (args)) == NULL)
1166         {
1167           nomem (0);
1168         }
1169       cleanups = make_cleanup_freeargv (argv);
1170       while (*argv != NULL)
1171         {
1172           if (strcmp (*argv, "-readnow") == 0)
1173             flags |= OBJF_READNOW;
1174           else if (**argv == '-')
1175             error ("unknown option `%s'", *argv);
1176           else
1177             {
1178               name = *argv;
1179
1180               symbol_file_add_main_1 (name, from_tty, flags);
1181             }
1182           argv++;
1183         }
1184
1185       if (name == NULL)
1186         {
1187           error ("no symbol file name was specified");
1188         }
1189       do_cleanups (cleanups);
1190     }
1191 }
1192
1193 /* Set the initial language.
1194
1195    A better solution would be to record the language in the psymtab when reading
1196    partial symbols, and then use it (if known) to set the language.  This would
1197    be a win for formats that encode the language in an easily discoverable place,
1198    such as DWARF.  For stabs, we can jump through hoops looking for specially
1199    named symbols or try to intuit the language from the specific type of stabs
1200    we find, but we can't do that until later when we read in full symbols.
1201    FIXME.  */
1202
1203 static void
1204 set_initial_language (void)
1205 {
1206   struct partial_symtab *pst;
1207   enum language lang = language_unknown;
1208
1209   pst = find_main_psymtab ();
1210   if (pst != NULL)
1211     {
1212       if (pst->filename != NULL)
1213         {
1214           lang = deduce_language_from_filename (pst->filename);
1215         }
1216       if (lang == language_unknown)
1217         {
1218           /* Make C the default language */
1219           lang = language_c;
1220         }
1221       set_language (lang);
1222       expected_language = current_language;     /* Don't warn the user */
1223     }
1224 }
1225
1226 /* Open file specified by NAME and hand it off to BFD for preliminary
1227    analysis.  Result is a newly initialized bfd *, which includes a newly
1228    malloc'd` copy of NAME (tilde-expanded and made absolute).
1229    In case of trouble, error() is called.  */
1230
1231 bfd *
1232 symfile_bfd_open (char *name)
1233 {
1234   bfd *sym_bfd;
1235   int desc;
1236   char *absolute_name;
1237
1238
1239
1240   name = tilde_expand (name);   /* Returns 1st new malloc'd copy */
1241
1242   /* Look down path for it, allocate 2nd new malloc'd copy.  */
1243   desc = openp (getenv ("PATH"), 1, name, O_RDONLY | O_BINARY, 0, &absolute_name);
1244 #if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)
1245   if (desc < 0)
1246     {
1247       char *exename = alloca (strlen (name) + 5);
1248       strcat (strcpy (exename, name), ".exe");
1249       desc = openp (getenv ("PATH"), 1, exename, O_RDONLY | O_BINARY,
1250                     0, &absolute_name);
1251     }
1252 #endif
1253   if (desc < 0)
1254     {
1255       make_cleanup (xfree, name);
1256       perror_with_name (name);
1257     }
1258   xfree (name);                 /* Free 1st new malloc'd copy */
1259   name = absolute_name;         /* Keep 2nd malloc'd copy in bfd */
1260   /* It'll be freed in free_objfile(). */
1261
1262   sym_bfd = bfd_fdopenr (name, gnutarget, desc);
1263   if (!sym_bfd)
1264     {
1265       close (desc);
1266       make_cleanup (xfree, name);
1267       error ("\"%s\": can't open to read symbols: %s.", name,
1268              bfd_errmsg (bfd_get_error ()));
1269     }
1270   bfd_set_cacheable (sym_bfd, 1);
1271
1272   if (!bfd_check_format (sym_bfd, bfd_object))
1273     {
1274       /* FIXME: should be checking for errors from bfd_close (for one thing,
1275          on error it does not free all the storage associated with the
1276          bfd).  */
1277       bfd_close (sym_bfd);      /* This also closes desc */
1278       make_cleanup (xfree, name);
1279       error ("\"%s\": can't read symbols: %s.", name,
1280              bfd_errmsg (bfd_get_error ()));
1281     }
1282   return (sym_bfd);
1283 }
1284
1285 /* Return the section index for the given section name. Return -1 if
1286    the section was not found. */
1287 int
1288 get_section_index (struct objfile *objfile, char *section_name)
1289 {
1290   asection *sect = bfd_get_section_by_name (objfile->obfd, section_name);
1291   if (sect)
1292     return sect->index;
1293   else
1294     return -1;
1295 }
1296
1297 /* Link a new symtab_fns into the global symtab_fns list.  Called on gdb
1298    startup by the _initialize routine in each object file format reader,
1299    to register information about each format the the reader is prepared
1300    to handle. */
1301
1302 void
1303 add_symtab_fns (struct sym_fns *sf)
1304 {
1305   sf->next = symtab_fns;
1306   symtab_fns = sf;
1307 }
1308
1309
1310 /* Initialize to read symbols from the symbol file sym_bfd.  It either
1311    returns or calls error().  The result is an initialized struct sym_fns
1312    in the objfile structure, that contains cached information about the
1313    symbol file.  */
1314
1315 static void
1316 find_sym_fns (struct objfile *objfile)
1317 {
1318   struct sym_fns *sf;
1319   enum bfd_flavour our_flavour = bfd_get_flavour (objfile->obfd);
1320   char *our_target = bfd_get_target (objfile->obfd);
1321
1322   if (our_flavour == bfd_target_srec_flavour
1323       || our_flavour == bfd_target_ihex_flavour
1324       || our_flavour == bfd_target_tekhex_flavour)
1325     return;     /* No symbols. */
1326
1327   for (sf = symtab_fns; sf != NULL; sf = sf->next)
1328     {
1329       if (our_flavour == sf->sym_flavour)
1330         {
1331           objfile->sf = sf;
1332           return;
1333         }
1334     }
1335   error ("I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown.",
1336          bfd_get_target (objfile->obfd));
1337 }
1338 \f
1339 /* This function runs the load command of our current target.  */
1340
1341 static void
1342 load_command (char *arg, int from_tty)
1343 {
1344   if (arg == NULL)
1345     arg = get_exec_file (1);
1346   target_load (arg, from_tty);
1347
1348   /* After re-loading the executable, we don't really know which
1349      overlays are mapped any more.  */
1350   overlay_cache_invalid = 1;
1351 }
1352
1353 /* This version of "load" should be usable for any target.  Currently
1354    it is just used for remote targets, not inftarg.c or core files,
1355    on the theory that only in that case is it useful.
1356
1357    Avoiding xmodem and the like seems like a win (a) because we don't have
1358    to worry about finding it, and (b) On VMS, fork() is very slow and so
1359    we don't want to run a subprocess.  On the other hand, I'm not sure how
1360    performance compares.  */
1361
1362 static int download_write_size = 512;
1363 static int validate_download = 0;
1364
1365 /* Callback service function for generic_load (bfd_map_over_sections).  */
1366
1367 static void
1368 add_section_size_callback (bfd *abfd, asection *asec, void *data)
1369 {
1370   bfd_size_type *sum = data;
1371
1372   *sum += bfd_get_section_size_before_reloc (asec);
1373 }
1374
1375 /* Opaque data for load_section_callback.  */
1376 struct load_section_data {
1377   unsigned long load_offset;
1378   unsigned long write_count;
1379   unsigned long data_count;
1380   bfd_size_type total_size;
1381 };
1382
1383 /* Callback service function for generic_load (bfd_map_over_sections).  */
1384
1385 static void
1386 load_section_callback (bfd *abfd, asection *asec, void *data)
1387 {
1388   struct load_section_data *args = data;
1389
1390   if (bfd_get_section_flags (abfd, asec) & SEC_LOAD)
1391     {
1392       bfd_size_type size = bfd_get_section_size_before_reloc (asec);
1393       if (size > 0)
1394         {
1395           char *buffer;
1396           struct cleanup *old_chain;
1397           CORE_ADDR lma = bfd_section_lma (abfd, asec) + args->load_offset;
1398           bfd_size_type block_size;
1399           int err;
1400           const char *sect_name = bfd_get_section_name (abfd, asec);
1401           bfd_size_type sent;
1402
1403           if (download_write_size > 0 && size > download_write_size)
1404             block_size = download_write_size;
1405           else
1406             block_size = size;
1407
1408           buffer = xmalloc (size);
1409           old_chain = make_cleanup (xfree, buffer);
1410
1411           /* Is this really necessary?  I guess it gives the user something
1412              to look at during a long download.  */
1413           ui_out_message (uiout, 0, "Loading section %s, size 0x%s lma 0x%s\n",
1414                           sect_name, paddr_nz (size), paddr_nz (lma));
1415
1416           bfd_get_section_contents (abfd, asec, buffer, 0, size);
1417
1418           sent = 0;
1419           do
1420             {
1421               int len;
1422               bfd_size_type this_transfer = size - sent;
1423
1424               if (this_transfer >= block_size)
1425                 this_transfer = block_size;
1426               len = target_write_memory_partial (lma, buffer,
1427                                                  this_transfer, &err);
1428               if (err)
1429                 break;
1430               if (validate_download)
1431                 {
1432                   /* Broken memories and broken monitors manifest
1433                      themselves here when bring new computers to
1434                      life.  This doubles already slow downloads.  */
1435                   /* NOTE: cagney/1999-10-18: A more efficient
1436                      implementation might add a verify_memory()
1437                      method to the target vector and then use
1438                      that.  remote.c could implement that method
1439                      using the ``qCRC'' packet.  */
1440                   char *check = xmalloc (len);
1441                   struct cleanup *verify_cleanups =
1442                     make_cleanup (xfree, check);
1443
1444                   if (target_read_memory (lma, check, len) != 0)
1445                     error ("Download verify read failed at 0x%s",
1446                            paddr (lma));
1447                   if (memcmp (buffer, check, len) != 0)
1448                     error ("Download verify compare failed at 0x%s",
1449                            paddr (lma));
1450                   do_cleanups (verify_cleanups);
1451                 }
1452               args->data_count += len;
1453               lma += len;
1454               buffer += len;
1455               args->write_count += 1;
1456               sent += len;
1457               if (quit_flag
1458                   || (deprecated_ui_load_progress_hook != NULL
1459                       && deprecated_ui_load_progress_hook (sect_name, sent)))
1460                 error ("Canceled the download");
1461
1462               if (deprecated_show_load_progress != NULL)
1463                 deprecated_show_load_progress (sect_name, sent, size,
1464                                                args->data_count,
1465                                                args->total_size);
1466             }
1467           while (sent < size);
1468
1469           if (err != 0)
1470             error ("Memory access error while loading section %s.", sect_name);
1471
1472           do_cleanups (old_chain);
1473         }
1474     }
1475 }
1476
1477 void
1478 generic_load (char *args, int from_tty)
1479 {
1480   asection *s;
1481   bfd *loadfile_bfd;
1482   time_t start_time, end_time;  /* Start and end times of download */
1483   char *filename;
1484   struct cleanup *old_cleanups;
1485   char *offptr;
1486   struct load_section_data cbdata;
1487   CORE_ADDR entry;
1488
1489   cbdata.load_offset = 0;       /* Offset to add to vma for each section. */
1490   cbdata.write_count = 0;       /* Number of writes needed. */
1491   cbdata.data_count = 0;        /* Number of bytes written to target memory. */
1492   cbdata.total_size = 0;        /* Total size of all bfd sectors. */
1493
1494   /* Parse the input argument - the user can specify a load offset as
1495      a second argument. */
1496   filename = xmalloc (strlen (args) + 1);
1497   old_cleanups = make_cleanup (xfree, filename);
1498   strcpy (filename, args);
1499   offptr = strchr (filename, ' ');
1500   if (offptr != NULL)
1501     {
1502       char *endptr;
1503
1504       cbdata.load_offset = strtoul (offptr, &endptr, 0);
1505       if (offptr == endptr)
1506         error ("Invalid download offset:%s\n", offptr);
1507       *offptr = '\0';
1508     }
1509   else
1510     cbdata.load_offset = 0;
1511
1512   /* Open the file for loading. */
1513   loadfile_bfd = bfd_openr (filename, gnutarget);
1514   if (loadfile_bfd == NULL)
1515     {
1516       perror_with_name (filename);
1517       return;
1518     }
1519
1520   /* FIXME: should be checking for errors from bfd_close (for one thing,
1521      on error it does not free all the storage associated with the
1522      bfd).  */
1523   make_cleanup_bfd_close (loadfile_bfd);
1524
1525   if (!bfd_check_format (loadfile_bfd, bfd_object))
1526     {
1527       error ("\"%s\" is not an object file: %s", filename,
1528              bfd_errmsg (bfd_get_error ()));
1529     }
1530
1531   bfd_map_over_sections (loadfile_bfd, add_section_size_callback,
1532                          (void *) &cbdata.total_size);
1533
1534   start_time = time (NULL);
1535
1536   bfd_map_over_sections (loadfile_bfd, load_section_callback, &cbdata);
1537
1538   end_time = time (NULL);
1539
1540   entry = bfd_get_start_address (loadfile_bfd);
1541   ui_out_text (uiout, "Start address ");
1542   ui_out_field_fmt (uiout, "address", "0x%s", paddr_nz (entry));
1543   ui_out_text (uiout, ", load size ");
1544   ui_out_field_fmt (uiout, "load-size", "%lu", cbdata.data_count);
1545   ui_out_text (uiout, "\n");
1546   /* We were doing this in remote-mips.c, I suspect it is right
1547      for other targets too.  */
1548   write_pc (entry);
1549
1550   /* FIXME: are we supposed to call symbol_file_add or not?  According
1551      to a comment from remote-mips.c (where a call to symbol_file_add
1552      was commented out), making the call confuses GDB if more than one
1553      file is loaded in.  Some targets do (e.g., remote-vx.c) but
1554      others don't (or didn't - perhaphs they have all been deleted).  */
1555
1556   print_transfer_performance (gdb_stdout, cbdata.data_count,
1557                               cbdata.write_count, end_time - start_time);
1558
1559   do_cleanups (old_cleanups);
1560 }
1561
1562 /* Report how fast the transfer went. */
1563
1564 /* DEPRECATED: cagney/1999-10-18: report_transfer_performance is being
1565    replaced by print_transfer_performance (with a very different
1566    function signature). */
1567
1568 void
1569 report_transfer_performance (unsigned long data_count, time_t start_time,
1570                              time_t end_time)
1571 {
1572   print_transfer_performance (gdb_stdout, data_count,
1573                               end_time - start_time, 0);
1574 }
1575
1576 void
1577 print_transfer_performance (struct ui_file *stream,
1578                             unsigned long data_count,
1579                             unsigned long write_count,
1580                             unsigned long time_count)
1581 {
1582   ui_out_text (uiout, "Transfer rate: ");
1583   if (time_count > 0)
1584     {
1585       ui_out_field_fmt (uiout, "transfer-rate", "%lu",
1586                         (data_count * 8) / time_count);
1587       ui_out_text (uiout, " bits/sec");
1588     }
1589   else
1590     {
1591       ui_out_field_fmt (uiout, "transferred-bits", "%lu", (data_count * 8));
1592       ui_out_text (uiout, " bits in <1 sec");
1593     }
1594   if (write_count > 0)
1595     {
1596       ui_out_text (uiout, ", ");
1597       ui_out_field_fmt (uiout, "write-rate", "%lu", data_count / write_count);
1598       ui_out_text (uiout, " bytes/write");
1599     }
1600   ui_out_text (uiout, ".\n");
1601 }
1602
1603 /* This function allows the addition of incrementally linked object files.
1604    It does not modify any state in the target, only in the debugger.  */
1605 /* Note: ezannoni 2000-04-13 This function/command used to have a
1606    special case syntax for the rombug target (Rombug is the boot
1607    monitor for Microware's OS-9 / OS-9000, see remote-os9k.c). In the
1608    rombug case, the user doesn't need to supply a text address,
1609    instead a call to target_link() (in target.c) would supply the
1610    value to use. We are now discontinuing this type of ad hoc syntax. */
1611
1612 static void
1613 add_symbol_file_command (char *args, int from_tty)
1614 {
1615   char *filename = NULL;
1616   int flags = OBJF_USERLOADED;
1617   char *arg;
1618   int expecting_option = 0;
1619   int section_index = 0;
1620   int argcnt = 0;
1621   int sec_num = 0;
1622   int i;
1623   int expecting_sec_name = 0;
1624   int expecting_sec_addr = 0;
1625
1626   struct sect_opt
1627   {
1628     char *name;
1629     char *value;
1630   };
1631
1632   struct section_addr_info *section_addrs;
1633   struct sect_opt *sect_opts = NULL;
1634   size_t num_sect_opts = 0;
1635   struct cleanup *my_cleanups = make_cleanup (null_cleanup, NULL);
1636
1637   num_sect_opts = 16;
1638   sect_opts = (struct sect_opt *) xmalloc (num_sect_opts
1639                                            * sizeof (struct sect_opt));
1640
1641   dont_repeat ();
1642
1643   if (args == NULL)
1644     error ("add-symbol-file takes a file name and an address");
1645
1646   /* Make a copy of the string that we can safely write into. */
1647   args = xstrdup (args);
1648
1649   while (*args != '\000')
1650     {
1651       /* Any leading spaces? */
1652       while (isspace (*args))
1653         args++;
1654
1655       /* Point arg to the beginning of the argument. */
1656       arg = args;
1657
1658       /* Move args pointer over the argument. */
1659       while ((*args != '\000') && !isspace (*args))
1660         args++;
1661
1662       /* If there are more arguments, terminate arg and
1663          proceed past it. */
1664       if (*args != '\000')
1665         *args++ = '\000';
1666
1667       /* Now process the argument. */
1668       if (argcnt == 0)
1669         {
1670           /* The first argument is the file name. */
1671           filename = tilde_expand (arg);
1672           make_cleanup (xfree, filename);
1673         }
1674       else
1675         if (argcnt == 1)
1676           {
1677             /* The second argument is always the text address at which
1678                to load the program. */
1679             sect_opts[section_index].name = ".text";
1680             sect_opts[section_index].value = arg;
1681             if (++section_index > num_sect_opts)
1682               {
1683                 num_sect_opts *= 2;
1684                 sect_opts = ((struct sect_opt *)
1685                              xrealloc (sect_opts,
1686                                        num_sect_opts
1687                                        * sizeof (struct sect_opt)));
1688               }
1689           }
1690         else
1691           {
1692             /* It's an option (starting with '-') or it's an argument
1693                to an option */
1694
1695             if (*arg == '-')
1696               {
1697                 if (strcmp (arg, "-readnow") == 0)
1698                   flags |= OBJF_READNOW;
1699                 else if (strcmp (arg, "-s") == 0)
1700                   {
1701                     expecting_sec_name = 1;
1702                     expecting_sec_addr = 1;
1703                   }
1704               }
1705             else
1706               {
1707                 if (expecting_sec_name)
1708                   {
1709                     sect_opts[section_index].name = arg;
1710                     expecting_sec_name = 0;
1711                   }
1712                 else
1713                   if (expecting_sec_addr)
1714                     {
1715                       sect_opts[section_index].value = arg;
1716                       expecting_sec_addr = 0;
1717                       if (++section_index > num_sect_opts)
1718                         {
1719                           num_sect_opts *= 2;
1720                           sect_opts = ((struct sect_opt *)
1721                                        xrealloc (sect_opts,
1722                                                  num_sect_opts
1723                                                  * sizeof (struct sect_opt)));
1724                         }
1725                     }
1726                   else
1727                     error ("USAGE: add-symbol-file <filename> <textaddress> [-mapped] [-readnow] [-s <secname> <addr>]*");
1728               }
1729           }
1730       argcnt++;
1731     }
1732
1733   /* Print the prompt for the query below. And save the arguments into
1734      a sect_addr_info structure to be passed around to other
1735      functions.  We have to split this up into separate print
1736      statements because local_hex_string returns a local static
1737      string. */
1738
1739   printf_unfiltered ("add symbol table from file \"%s\" at\n", filename);
1740   section_addrs = alloc_section_addr_info (section_index);
1741   make_cleanup (xfree, section_addrs);
1742   for (i = 0; i < section_index; i++)
1743     {
1744       CORE_ADDR addr;
1745       char *val = sect_opts[i].value;
1746       char *sec = sect_opts[i].name;
1747
1748       addr = parse_and_eval_address (val);
1749
1750       /* Here we store the section offsets in the order they were
1751          entered on the command line. */
1752       section_addrs->other[sec_num].name = sec;
1753       section_addrs->other[sec_num].addr = addr;
1754       printf_unfiltered ("\t%s_addr = %s\n",
1755                        sec,
1756                        local_hex_string ((unsigned long)addr));
1757       sec_num++;
1758
1759       /* The object's sections are initialized when a
1760          call is made to build_objfile_section_table (objfile).
1761          This happens in reread_symbols.
1762          At this point, we don't know what file type this is,
1763          so we can't determine what section names are valid.  */
1764     }
1765
1766   if (from_tty && (!query ("%s", "")))
1767     error ("Not confirmed.");
1768
1769   symbol_file_add (filename, from_tty, section_addrs, 0, flags);
1770
1771   /* Getting new symbols may change our opinion about what is
1772      frameless.  */
1773   reinit_frame_cache ();
1774   do_cleanups (my_cleanups);
1775 }
1776 \f
1777 static void
1778 add_shared_symbol_files_command (char *args, int from_tty)
1779 {
1780 #ifdef ADD_SHARED_SYMBOL_FILES
1781   ADD_SHARED_SYMBOL_FILES (args, from_tty);
1782 #else
1783   error ("This command is not available in this configuration of GDB.");
1784 #endif
1785 }
1786 \f
1787 /* Re-read symbols if a symbol-file has changed.  */
1788 void
1789 reread_symbols (void)
1790 {
1791   struct objfile *objfile;
1792   long new_modtime;
1793   int reread_one = 0;
1794   struct stat new_statbuf;
1795   int res;
1796
1797   /* With the addition of shared libraries, this should be modified,
1798      the load time should be saved in the partial symbol tables, since
1799      different tables may come from different source files.  FIXME.
1800      This routine should then walk down each partial symbol table
1801      and see if the symbol table that it originates from has been changed */
1802
1803   for (objfile = object_files; objfile; objfile = objfile->next)
1804     {
1805       if (objfile->obfd)
1806         {
1807 #ifdef DEPRECATED_IBM6000_TARGET
1808           /* If this object is from a shared library, then you should
1809              stat on the library name, not member name. */
1810
1811           if (objfile->obfd->my_archive)
1812             res = stat (objfile->obfd->my_archive->filename, &new_statbuf);
1813           else
1814 #endif
1815             res = stat (objfile->name, &new_statbuf);
1816           if (res != 0)
1817             {
1818               /* FIXME, should use print_sys_errmsg but it's not filtered. */
1819               printf_unfiltered ("`%s' has disappeared; keeping its symbols.\n",
1820                                objfile->name);
1821               continue;
1822             }
1823           new_modtime = new_statbuf.st_mtime;
1824           if (new_modtime != objfile->mtime)
1825             {
1826               struct cleanup *old_cleanups;
1827               struct section_offsets *offsets;
1828               int num_offsets;
1829               char *obfd_filename;
1830
1831               printf_unfiltered ("`%s' has changed; re-reading symbols.\n",
1832                                objfile->name);
1833
1834               /* There are various functions like symbol_file_add,
1835                  symfile_bfd_open, syms_from_objfile, etc., which might
1836                  appear to do what we want.  But they have various other
1837                  effects which we *don't* want.  So we just do stuff
1838                  ourselves.  We don't worry about mapped files (for one thing,
1839                  any mapped file will be out of date).  */
1840
1841               /* If we get an error, blow away this objfile (not sure if
1842                  that is the correct response for things like shared
1843                  libraries).  */
1844               old_cleanups = make_cleanup_free_objfile (objfile);
1845               /* We need to do this whenever any symbols go away.  */
1846               make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
1847
1848               /* Clean up any state BFD has sitting around.  We don't need
1849                  to close the descriptor but BFD lacks a way of closing the
1850                  BFD without closing the descriptor.  */
1851               obfd_filename = bfd_get_filename (objfile->obfd);
1852               if (!bfd_close (objfile->obfd))
1853                 error ("Can't close BFD for %s: %s", objfile->name,
1854                        bfd_errmsg (bfd_get_error ()));
1855               objfile->obfd = bfd_openr (obfd_filename, gnutarget);
1856               if (objfile->obfd == NULL)
1857                 error ("Can't open %s to read symbols.", objfile->name);
1858               /* bfd_openr sets cacheable to true, which is what we want.  */
1859               if (!bfd_check_format (objfile->obfd, bfd_object))
1860                 error ("Can't read symbols from %s: %s.", objfile->name,
1861                        bfd_errmsg (bfd_get_error ()));
1862
1863               /* Save the offsets, we will nuke them with the rest of the
1864                  objfile_obstack.  */
1865               num_offsets = objfile->num_sections;
1866               offsets = ((struct section_offsets *)
1867                          alloca (SIZEOF_N_SECTION_OFFSETS (num_offsets)));
1868               memcpy (offsets, objfile->section_offsets,
1869                       SIZEOF_N_SECTION_OFFSETS (num_offsets));
1870
1871               /* Nuke all the state that we will re-read.  Much of the following
1872                  code which sets things to NULL really is necessary to tell
1873                  other parts of GDB that there is nothing currently there.  */
1874
1875               /* FIXME: Do we have to free a whole linked list, or is this
1876                  enough?  */
1877               if (objfile->global_psymbols.list)
1878                 xmfree (objfile->md, objfile->global_psymbols.list);
1879               memset (&objfile->global_psymbols, 0,
1880                       sizeof (objfile->global_psymbols));
1881               if (objfile->static_psymbols.list)
1882                 xmfree (objfile->md, objfile->static_psymbols.list);
1883               memset (&objfile->static_psymbols, 0,
1884                       sizeof (objfile->static_psymbols));
1885
1886               /* Free the obstacks for non-reusable objfiles */
1887               bcache_xfree (objfile->psymbol_cache);
1888               objfile->psymbol_cache = bcache_xmalloc ();
1889               bcache_xfree (objfile->macro_cache);
1890               objfile->macro_cache = bcache_xmalloc ();
1891               if (objfile->demangled_names_hash != NULL)
1892                 {
1893                   htab_delete (objfile->demangled_names_hash);
1894                   objfile->demangled_names_hash = NULL;
1895                 }
1896               obstack_free (&objfile->objfile_obstack, 0);
1897               objfile->sections = NULL;
1898               objfile->symtabs = NULL;
1899               objfile->psymtabs = NULL;
1900               objfile->free_psymtabs = NULL;
1901               objfile->cp_namespace_symtab = NULL;
1902               objfile->msymbols = NULL;
1903               objfile->sym_private = NULL;
1904               objfile->minimal_symbol_count = 0;
1905               memset (&objfile->msymbol_hash, 0,
1906                       sizeof (objfile->msymbol_hash));
1907               memset (&objfile->msymbol_demangled_hash, 0,
1908                       sizeof (objfile->msymbol_demangled_hash));
1909               objfile->fundamental_types = NULL;
1910               clear_objfile_data (objfile);
1911               if (objfile->sf != NULL)
1912                 {
1913                   (*objfile->sf->sym_finish) (objfile);
1914                 }
1915
1916               /* We never make this a mapped file.  */
1917               objfile->md = NULL;
1918               objfile->psymbol_cache = bcache_xmalloc ();
1919               objfile->macro_cache = bcache_xmalloc ();
1920               /* obstack_init also initializes the obstack so it is
1921                  empty.  We could use obstack_specify_allocation but
1922                  gdb_obstack.h specifies the alloc/dealloc
1923                  functions.  */
1924               obstack_init (&objfile->objfile_obstack);
1925               if (build_objfile_section_table (objfile))
1926                 {
1927                   error ("Can't find the file sections in `%s': %s",
1928                          objfile->name, bfd_errmsg (bfd_get_error ()));
1929                 }
1930               terminate_minimal_symbol_table (objfile);
1931
1932               /* We use the same section offsets as from last time.  I'm not
1933                  sure whether that is always correct for shared libraries.  */
1934               objfile->section_offsets = (struct section_offsets *)
1935                 obstack_alloc (&objfile->objfile_obstack,
1936                                SIZEOF_N_SECTION_OFFSETS (num_offsets));
1937               memcpy (objfile->section_offsets, offsets,
1938                       SIZEOF_N_SECTION_OFFSETS (num_offsets));
1939               objfile->num_sections = num_offsets;
1940
1941               /* What the hell is sym_new_init for, anyway?  The concept of
1942                  distinguishing between the main file and additional files
1943                  in this way seems rather dubious.  */
1944               if (objfile == symfile_objfile)
1945                 {
1946                   (*objfile->sf->sym_new_init) (objfile);
1947 #ifdef HPUXHPPA
1948                   RESET_HP_UX_GLOBALS ();
1949 #endif
1950                 }
1951
1952               (*objfile->sf->sym_init) (objfile);
1953               clear_complaints (&symfile_complaints, 1, 1);
1954               /* The "mainline" parameter is a hideous hack; I think leaving it
1955                  zero is OK since dbxread.c also does what it needs to do if
1956                  objfile->global_psymbols.size is 0.  */
1957               (*objfile->sf->sym_read) (objfile, 0);
1958               if (!have_partial_symbols () && !have_full_symbols ())
1959                 {
1960                   wrap_here ("");
1961                   printf_unfiltered ("(no debugging symbols found)\n");
1962                   wrap_here ("");
1963                 }
1964               objfile->flags |= OBJF_SYMS;
1965
1966               /* We're done reading the symbol file; finish off complaints.  */
1967               clear_complaints (&symfile_complaints, 0, 1);
1968
1969               /* Getting new symbols may change our opinion about what is
1970                  frameless.  */
1971
1972               reinit_frame_cache ();
1973
1974               /* Discard cleanups as symbol reading was successful.  */
1975               discard_cleanups (old_cleanups);
1976
1977               /* If the mtime has changed between the time we set new_modtime
1978                  and now, we *want* this to be out of date, so don't call stat
1979                  again now.  */
1980               objfile->mtime = new_modtime;
1981               reread_one = 1;
1982               reread_separate_symbols (objfile);
1983             }
1984         }
1985     }
1986
1987   if (reread_one)
1988     clear_symtab_users ();
1989 }
1990
1991
1992 /* Handle separate debug info for OBJFILE, which has just been
1993    re-read:
1994    - If we had separate debug info before, but now we don't, get rid
1995      of the separated objfile.
1996    - If we didn't have separated debug info before, but now we do,
1997      read in the new separated debug info file.
1998    - If the debug link points to a different file, toss the old one
1999      and read the new one.
2000    This function does *not* handle the case where objfile is still
2001    using the same separate debug info file, but that file's timestamp
2002    has changed.  That case should be handled by the loop in
2003    reread_symbols already.  */
2004 static void
2005 reread_separate_symbols (struct objfile *objfile)
2006 {
2007   char *debug_file;
2008   unsigned long crc32;
2009
2010   /* Does the updated objfile's debug info live in a
2011      separate file?  */
2012   debug_file = find_separate_debug_file (objfile);
2013
2014   if (objfile->separate_debug_objfile)
2015     {
2016       /* There are two cases where we need to get rid of
2017          the old separated debug info objfile:
2018          - if the new primary objfile doesn't have
2019          separated debug info, or
2020          - if the new primary objfile has separate debug
2021          info, but it's under a different filename.
2022
2023          If the old and new objfiles both have separate
2024          debug info, under the same filename, then we're
2025          okay --- if the separated file's contents have
2026          changed, we will have caught that when we
2027          visited it in this function's outermost
2028          loop.  */
2029       if (! debug_file
2030           || strcmp (debug_file, objfile->separate_debug_objfile->name) != 0)
2031         free_objfile (objfile->separate_debug_objfile);
2032     }
2033
2034   /* If the new objfile has separate debug info, and we
2035      haven't loaded it already, do so now.  */
2036   if (debug_file
2037       && ! objfile->separate_debug_objfile)
2038     {
2039       /* Use the same section offset table as objfile itself.
2040          Preserve the flags from objfile that make sense.  */
2041       objfile->separate_debug_objfile
2042         = (symbol_file_add_with_addrs_or_offsets
2043            (symfile_bfd_open (debug_file),
2044             info_verbose, /* from_tty: Don't override the default. */
2045             0, /* No addr table.  */
2046             objfile->section_offsets, objfile->num_sections,
2047             0, /* Not mainline.  See comments about this above.  */
2048             objfile->flags & (OBJF_REORDERED | OBJF_SHARED | OBJF_READNOW
2049                               | OBJF_USERLOADED)));
2050       objfile->separate_debug_objfile->separate_debug_objfile_backlink
2051         = objfile;
2052     }
2053 }
2054
2055
2056 \f
2057
2058
2059 typedef struct
2060 {
2061   char *ext;
2062   enum language lang;
2063 }
2064 filename_language;
2065
2066 static filename_language *filename_language_table;
2067 static int fl_table_size, fl_table_next;
2068
2069 static void
2070 add_filename_language (char *ext, enum language lang)
2071 {
2072   if (fl_table_next >= fl_table_size)
2073     {
2074       fl_table_size += 10;
2075       filename_language_table =
2076         xrealloc (filename_language_table,
2077                   fl_table_size * sizeof (*filename_language_table));
2078     }
2079
2080   filename_language_table[fl_table_next].ext = xstrdup (ext);
2081   filename_language_table[fl_table_next].lang = lang;
2082   fl_table_next++;
2083 }
2084
2085 static char *ext_args;
2086
2087 static void
2088 set_ext_lang_command (char *args, int from_tty)
2089 {
2090   int i;
2091   char *cp = ext_args;
2092   enum language lang;
2093
2094   /* First arg is filename extension, starting with '.' */
2095   if (*cp != '.')
2096     error ("'%s': Filename extension must begin with '.'", ext_args);
2097
2098   /* Find end of first arg.  */
2099   while (*cp && !isspace (*cp))
2100     cp++;
2101
2102   if (*cp == '\0')
2103     error ("'%s': two arguments required -- filename extension and language",
2104            ext_args);
2105
2106   /* Null-terminate first arg */
2107   *cp++ = '\0';
2108
2109   /* Find beginning of second arg, which should be a source language.  */
2110   while (*cp && isspace (*cp))
2111     cp++;
2112
2113   if (*cp == '\0')
2114     error ("'%s': two arguments required -- filename extension and language",
2115            ext_args);
2116
2117   /* Lookup the language from among those we know.  */
2118   lang = language_enum (cp);
2119
2120   /* Now lookup the filename extension: do we already know it?  */
2121   for (i = 0; i < fl_table_next; i++)
2122     if (0 == strcmp (ext_args, filename_language_table[i].ext))
2123       break;
2124
2125   if (i >= fl_table_next)
2126     {
2127       /* new file extension */
2128       add_filename_language (ext_args, lang);
2129     }
2130   else
2131     {
2132       /* redefining a previously known filename extension */
2133
2134       /* if (from_tty) */
2135       /*   query ("Really make files of type %s '%s'?", */
2136       /*          ext_args, language_str (lang));           */
2137
2138       xfree (filename_language_table[i].ext);
2139       filename_language_table[i].ext = xstrdup (ext_args);
2140       filename_language_table[i].lang = lang;
2141     }
2142 }
2143
2144 static void
2145 info_ext_lang_command (char *args, int from_tty)
2146 {
2147   int i;
2148
2149   printf_filtered ("Filename extensions and the languages they represent:");
2150   printf_filtered ("\n\n");
2151   for (i = 0; i < fl_table_next; i++)
2152     printf_filtered ("\t%s\t- %s\n",
2153                      filename_language_table[i].ext,
2154                      language_str (filename_language_table[i].lang));
2155 }
2156
2157 static void
2158 init_filename_language_table (void)
2159 {
2160   if (fl_table_size == 0)       /* protect against repetition */
2161     {
2162       fl_table_size = 20;
2163       fl_table_next = 0;
2164       filename_language_table =
2165         xmalloc (fl_table_size * sizeof (*filename_language_table));
2166       add_filename_language (".c", language_c);
2167       add_filename_language (".C", language_cplus);
2168       add_filename_language (".cc", language_cplus);
2169       add_filename_language (".cp", language_cplus);
2170       add_filename_language (".cpp", language_cplus);
2171       add_filename_language (".cxx", language_cplus);
2172       add_filename_language (".c++", language_cplus);
2173       add_filename_language (".java", language_java);
2174       add_filename_language (".class", language_java);
2175       add_filename_language (".m", language_objc);
2176       add_filename_language (".f", language_fortran);
2177       add_filename_language (".F", language_fortran);
2178       add_filename_language (".s", language_asm);
2179       add_filename_language (".S", language_asm);
2180       add_filename_language (".pas", language_pascal);
2181       add_filename_language (".p", language_pascal);
2182       add_filename_language (".pp", language_pascal);
2183     }
2184 }
2185
2186 enum language
2187 deduce_language_from_filename (char *filename)
2188 {
2189   int i;
2190   char *cp;
2191
2192   if (filename != NULL)
2193     if ((cp = strrchr (filename, '.')) != NULL)
2194       for (i = 0; i < fl_table_next; i++)
2195         if (strcmp (cp, filename_language_table[i].ext) == 0)
2196           return filename_language_table[i].lang;
2197
2198   return language_unknown;
2199 }
2200 \f
2201 /* allocate_symtab:
2202
2203    Allocate and partly initialize a new symbol table.  Return a pointer
2204    to it.  error() if no space.
2205
2206    Caller must set these fields:
2207    LINETABLE(symtab)
2208    symtab->blockvector
2209    symtab->dirname
2210    symtab->free_code
2211    symtab->free_ptr
2212    possibly free_named_symtabs (symtab->filename);
2213  */
2214
2215 struct symtab *
2216 allocate_symtab (char *filename, struct objfile *objfile)
2217 {
2218   struct symtab *symtab;
2219
2220   symtab = (struct symtab *)
2221     obstack_alloc (&objfile->objfile_obstack, sizeof (struct symtab));
2222   memset (symtab, 0, sizeof (*symtab));
2223   symtab->filename = obsavestring (filename, strlen (filename),
2224                                    &objfile->objfile_obstack);
2225   symtab->fullname = NULL;
2226   symtab->language = deduce_language_from_filename (filename);
2227   symtab->debugformat = obsavestring ("unknown", 7,
2228                                       &objfile->objfile_obstack);
2229
2230   /* Hook it to the objfile it comes from */
2231
2232   symtab->objfile = objfile;
2233   symtab->next = objfile->symtabs;
2234   objfile->symtabs = symtab;
2235
2236   /* FIXME: This should go away.  It is only defined for the Z8000,
2237      and the Z8000 definition of this macro doesn't have anything to
2238      do with the now-nonexistent EXTRA_SYMTAB_INFO macro, it's just
2239      here for convenience.  */
2240 #ifdef INIT_EXTRA_SYMTAB_INFO
2241   INIT_EXTRA_SYMTAB_INFO (symtab);
2242 #endif
2243
2244   return (symtab);
2245 }
2246
2247 struct partial_symtab *
2248 allocate_psymtab (char *filename, struct objfile *objfile)
2249 {
2250   struct partial_symtab *psymtab;
2251
2252   if (objfile->free_psymtabs)
2253     {
2254       psymtab = objfile->free_psymtabs;
2255       objfile->free_psymtabs = psymtab->next;
2256     }
2257   else
2258     psymtab = (struct partial_symtab *)
2259       obstack_alloc (&objfile->objfile_obstack,
2260                      sizeof (struct partial_symtab));
2261
2262   memset (psymtab, 0, sizeof (struct partial_symtab));
2263   psymtab->filename = obsavestring (filename, strlen (filename),
2264                                     &objfile->objfile_obstack);
2265   psymtab->symtab = NULL;
2266
2267   /* Prepend it to the psymtab list for the objfile it belongs to.
2268      Psymtabs are searched in most recent inserted -> least recent
2269      inserted order. */
2270
2271   psymtab->objfile = objfile;
2272   psymtab->next = objfile->psymtabs;
2273   objfile->psymtabs = psymtab;
2274 #if 0
2275   {
2276     struct partial_symtab **prev_pst;
2277     psymtab->objfile = objfile;
2278     psymtab->next = NULL;
2279     prev_pst = &(objfile->psymtabs);
2280     while ((*prev_pst) != NULL)
2281       prev_pst = &((*prev_pst)->next);
2282     (*prev_pst) = psymtab;
2283   }
2284 #endif
2285
2286   return (psymtab);
2287 }
2288
2289 void
2290 discard_psymtab (struct partial_symtab *pst)
2291 {
2292   struct partial_symtab **prev_pst;
2293
2294   /* From dbxread.c:
2295      Empty psymtabs happen as a result of header files which don't
2296      have any symbols in them.  There can be a lot of them.  But this
2297      check is wrong, in that a psymtab with N_SLINE entries but
2298      nothing else is not empty, but we don't realize that.  Fixing
2299      that without slowing things down might be tricky.  */
2300
2301   /* First, snip it out of the psymtab chain */
2302
2303   prev_pst = &(pst->objfile->psymtabs);
2304   while ((*prev_pst) != pst)
2305     prev_pst = &((*prev_pst)->next);
2306   (*prev_pst) = pst->next;
2307
2308   /* Next, put it on a free list for recycling */
2309
2310   pst->next = pst->objfile->free_psymtabs;
2311   pst->objfile->free_psymtabs = pst;
2312 }
2313 \f
2314
2315 /* Reset all data structures in gdb which may contain references to symbol
2316    table data.  */
2317
2318 void
2319 clear_symtab_users (void)
2320 {
2321   /* Someday, we should do better than this, by only blowing away
2322      the things that really need to be blown.  */
2323   clear_value_history ();
2324   clear_displays ();
2325   clear_internalvars ();
2326   breakpoint_re_set ();
2327   set_default_breakpoint (0, 0, 0, 0);
2328   clear_current_source_symtab_and_line ();
2329   clear_pc_function_cache ();
2330   if (deprecated_target_new_objfile_hook)
2331     deprecated_target_new_objfile_hook (NULL);
2332 }
2333
2334 static void
2335 clear_symtab_users_cleanup (void *ignore)
2336 {
2337   clear_symtab_users ();
2338 }
2339
2340 /* clear_symtab_users_once:
2341
2342    This function is run after symbol reading, or from a cleanup.
2343    If an old symbol table was obsoleted, the old symbol table
2344    has been blown away, but the other GDB data structures that may
2345    reference it have not yet been cleared or re-directed.  (The old
2346    symtab was zapped, and the cleanup queued, in free_named_symtab()
2347    below.)
2348
2349    This function can be queued N times as a cleanup, or called
2350    directly; it will do all the work the first time, and then will be a
2351    no-op until the next time it is queued.  This works by bumping a
2352    counter at queueing time.  Much later when the cleanup is run, or at
2353    the end of symbol processing (in case the cleanup is discarded), if
2354    the queued count is greater than the "done-count", we do the work
2355    and set the done-count to the queued count.  If the queued count is
2356    less than or equal to the done-count, we just ignore the call.  This
2357    is needed because reading a single .o file will often replace many
2358    symtabs (one per .h file, for example), and we don't want to reset
2359    the breakpoints N times in the user's face.
2360
2361    The reason we both queue a cleanup, and call it directly after symbol
2362    reading, is because the cleanup protects us in case of errors, but is
2363    discarded if symbol reading is successful.  */
2364
2365 #if 0
2366 /* FIXME:  As free_named_symtabs is currently a big noop this function
2367    is no longer needed.  */
2368 static void clear_symtab_users_once (void);
2369
2370 static int clear_symtab_users_queued;
2371 static int clear_symtab_users_done;
2372
2373 static void
2374 clear_symtab_users_once (void)
2375 {
2376   /* Enforce once-per-`do_cleanups'-semantics */
2377   if (clear_symtab_users_queued <= clear_symtab_users_done)
2378     return;
2379   clear_symtab_users_done = clear_symtab_users_queued;
2380
2381   clear_symtab_users ();
2382 }
2383 #endif
2384
2385 /* Delete the specified psymtab, and any others that reference it.  */
2386
2387 static void
2388 cashier_psymtab (struct partial_symtab *pst)
2389 {
2390   struct partial_symtab *ps, *pprev = NULL;
2391   int i;
2392
2393   /* Find its previous psymtab in the chain */
2394   for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2395     {
2396       if (ps == pst)
2397         break;
2398       pprev = ps;
2399     }
2400
2401   if (ps)
2402     {
2403       /* Unhook it from the chain.  */
2404       if (ps == pst->objfile->psymtabs)
2405         pst->objfile->psymtabs = ps->next;
2406       else
2407         pprev->next = ps->next;
2408
2409       /* FIXME, we can't conveniently deallocate the entries in the
2410          partial_symbol lists (global_psymbols/static_psymbols) that
2411          this psymtab points to.  These just take up space until all
2412          the psymtabs are reclaimed.  Ditto the dependencies list and
2413          filename, which are all in the objfile_obstack.  */
2414
2415       /* We need to cashier any psymtab that has this one as a dependency... */
2416     again:
2417       for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2418         {
2419           for (i = 0; i < ps->number_of_dependencies; i++)
2420             {
2421               if (ps->dependencies[i] == pst)
2422                 {
2423                   cashier_psymtab (ps);
2424                   goto again;   /* Must restart, chain has been munged. */
2425                 }
2426             }
2427         }
2428     }
2429 }
2430
2431 /* If a symtab or psymtab for filename NAME is found, free it along
2432    with any dependent breakpoints, displays, etc.
2433    Used when loading new versions of object modules with the "add-file"
2434    command.  This is only called on the top-level symtab or psymtab's name;
2435    it is not called for subsidiary files such as .h files.
2436
2437    Return value is 1 if we blew away the environment, 0 if not.
2438    FIXME.  The return value appears to never be used.
2439
2440    FIXME.  I think this is not the best way to do this.  We should
2441    work on being gentler to the environment while still cleaning up
2442    all stray pointers into the freed symtab.  */
2443
2444 int
2445 free_named_symtabs (char *name)
2446 {
2447 #if 0
2448   /* FIXME:  With the new method of each objfile having it's own
2449      psymtab list, this function needs serious rethinking.  In particular,
2450      why was it ever necessary to toss psymtabs with specific compilation
2451      unit filenames, as opposed to all psymtabs from a particular symbol
2452      file?  -- fnf
2453      Well, the answer is that some systems permit reloading of particular
2454      compilation units.  We want to blow away any old info about these
2455      compilation units, regardless of which objfiles they arrived in. --gnu.  */
2456
2457   struct symtab *s;
2458   struct symtab *prev;
2459   struct partial_symtab *ps;
2460   struct blockvector *bv;
2461   int blewit = 0;
2462
2463   /* We only wack things if the symbol-reload switch is set.  */
2464   if (!symbol_reloading)
2465     return 0;
2466
2467   /* Some symbol formats have trouble providing file names... */
2468   if (name == 0 || *name == '\0')
2469     return 0;
2470
2471   /* Look for a psymtab with the specified name.  */
2472
2473 again2:
2474   for (ps = partial_symtab_list; ps; ps = ps->next)
2475     {
2476       if (strcmp (name, ps->filename) == 0)
2477         {
2478           cashier_psymtab (ps); /* Blow it away...and its little dog, too.  */
2479           goto again2;          /* Must restart, chain has been munged */
2480         }
2481     }
2482
2483   /* Look for a symtab with the specified name.  */
2484
2485   for (s = symtab_list; s; s = s->next)
2486     {
2487       if (strcmp (name, s->filename) == 0)
2488         break;
2489       prev = s;
2490     }
2491
2492   if (s)
2493     {
2494       if (s == symtab_list)
2495         symtab_list = s->next;
2496       else
2497         prev->next = s->next;
2498
2499       /* For now, queue a delete for all breakpoints, displays, etc., whether
2500          or not they depend on the symtab being freed.  This should be
2501          changed so that only those data structures affected are deleted.  */
2502
2503       /* But don't delete anything if the symtab is empty.
2504          This test is necessary due to a bug in "dbxread.c" that
2505          causes empty symtabs to be created for N_SO symbols that
2506          contain the pathname of the object file.  (This problem
2507          has been fixed in GDB 3.9x).  */
2508
2509       bv = BLOCKVECTOR (s);
2510       if (BLOCKVECTOR_NBLOCKS (bv) > 2
2511           || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
2512           || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)))
2513         {
2514           complaint (&symfile_complaints, "Replacing old symbols for `%s'",
2515                      name);
2516           clear_symtab_users_queued++;
2517           make_cleanup (clear_symtab_users_once, 0);
2518           blewit = 1;
2519         }
2520       else
2521         {
2522           complaint (&symfile_complaints, "Empty symbol table found for `%s'",
2523                      name);
2524         }
2525
2526       free_symtab (s);
2527     }
2528   else
2529     {
2530       /* It is still possible that some breakpoints will be affected
2531          even though no symtab was found, since the file might have
2532          been compiled without debugging, and hence not be associated
2533          with a symtab.  In order to handle this correctly, we would need
2534          to keep a list of text address ranges for undebuggable files.
2535          For now, we do nothing, since this is a fairly obscure case.  */
2536       ;
2537     }
2538
2539   /* FIXME, what about the minimal symbol table? */
2540   return blewit;
2541 #else
2542   return (0);
2543 #endif
2544 }
2545 \f
2546 /* Allocate and partially fill a partial symtab.  It will be
2547    completely filled at the end of the symbol list.
2548
2549    FILENAME is the name of the symbol-file we are reading from. */
2550
2551 struct partial_symtab *
2552 start_psymtab_common (struct objfile *objfile,
2553                       struct section_offsets *section_offsets, char *filename,
2554                       CORE_ADDR textlow, struct partial_symbol **global_syms,
2555                       struct partial_symbol **static_syms)
2556 {
2557   struct partial_symtab *psymtab;
2558
2559   psymtab = allocate_psymtab (filename, objfile);
2560   psymtab->section_offsets = section_offsets;
2561   psymtab->textlow = textlow;
2562   psymtab->texthigh = psymtab->textlow;         /* default */
2563   psymtab->globals_offset = global_syms - objfile->global_psymbols.list;
2564   psymtab->statics_offset = static_syms - objfile->static_psymbols.list;
2565   return (psymtab);
2566 }
2567 \f
2568 /* Add a symbol with a long value to a psymtab.
2569    Since one arg is a struct, we pass in a ptr and deref it (sigh).
2570    Return the partial symbol that has been added.  */
2571
2572 /* NOTE: carlton/2003-09-11: The reason why we return the partial
2573    symbol is so that callers can get access to the symbol's demangled
2574    name, which they don't have any cheap way to determine otherwise.
2575    (Currenly, dwarf2read.c is the only file who uses that information,
2576    though it's possible that other readers might in the future.)
2577    Elena wasn't thrilled about that, and I don't blame her, but we
2578    couldn't come up with a better way to get that information.  If
2579    it's needed in other situations, we could consider breaking up
2580    SYMBOL_SET_NAMES to provide access to the demangled name lookup
2581    cache.  */
2582
2583 const struct partial_symbol *
2584 add_psymbol_to_list (char *name, int namelength, domain_enum domain,
2585                      enum address_class class,
2586                      struct psymbol_allocation_list *list, long val,    /* Value as a long */
2587                      CORE_ADDR coreaddr,        /* Value as a CORE_ADDR */
2588                      enum language language, struct objfile *objfile)
2589 {
2590   struct partial_symbol *psym;
2591   char *buf = alloca (namelength + 1);
2592   /* psymbol is static so that there will be no uninitialized gaps in the
2593      structure which might contain random data, causing cache misses in
2594      bcache. */
2595   static struct partial_symbol psymbol;
2596
2597   /* Create local copy of the partial symbol */
2598   memcpy (buf, name, namelength);
2599   buf[namelength] = '\0';
2600   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2601   if (val != 0)
2602     {
2603       SYMBOL_VALUE (&psymbol) = val;
2604     }
2605   else
2606     {
2607       SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2608     }
2609   SYMBOL_SECTION (&psymbol) = 0;
2610   SYMBOL_LANGUAGE (&psymbol) = language;
2611   PSYMBOL_DOMAIN (&psymbol) = domain;
2612   PSYMBOL_CLASS (&psymbol) = class;
2613
2614   SYMBOL_SET_NAMES (&psymbol, buf, namelength, objfile);
2615
2616   /* Stash the partial symbol away in the cache */
2617   psym = deprecated_bcache (&psymbol, sizeof (struct partial_symbol),
2618                             objfile->psymbol_cache);
2619
2620   /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2621   if (list->next >= list->list + list->size)
2622     {
2623       extend_psymbol_list (list, objfile);
2624     }
2625   *list->next++ = psym;
2626   OBJSTAT (objfile, n_psyms++);
2627
2628   return psym;
2629 }
2630
2631 /* Add a symbol with a long value to a psymtab. This differs from
2632  * add_psymbol_to_list above in taking both a mangled and a demangled
2633  * name. */
2634
2635 void
2636 add_psymbol_with_dem_name_to_list (char *name, int namelength, char *dem_name,
2637                                    int dem_namelength, domain_enum domain,
2638                                    enum address_class class,
2639                                    struct psymbol_allocation_list *list, long val,      /* Value as a long */
2640                                    CORE_ADDR coreaddr,  /* Value as a CORE_ADDR */
2641                                    enum language language,
2642                                    struct objfile *objfile)
2643 {
2644   struct partial_symbol *psym;
2645   char *buf = alloca (namelength + 1);
2646   /* psymbol is static so that there will be no uninitialized gaps in the
2647      structure which might contain random data, causing cache misses in
2648      bcache. */
2649   static struct partial_symbol psymbol;
2650
2651   /* Create local copy of the partial symbol */
2652
2653   memcpy (buf, name, namelength);
2654   buf[namelength] = '\0';
2655   DEPRECATED_SYMBOL_NAME (&psymbol) = deprecated_bcache (buf, namelength + 1,
2656                                                          objfile->psymbol_cache);
2657
2658   buf = alloca (dem_namelength + 1);
2659   memcpy (buf, dem_name, dem_namelength);
2660   buf[dem_namelength] = '\0';
2661
2662   switch (language)
2663     {
2664     case language_c:
2665     case language_cplus:
2666       SYMBOL_CPLUS_DEMANGLED_NAME (&psymbol) =
2667         deprecated_bcache (buf, dem_namelength + 1, objfile->psymbol_cache);
2668       break;
2669       /* FIXME What should be done for the default case? Ignoring for now. */
2670     }
2671
2672   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2673   if (val != 0)
2674     {
2675       SYMBOL_VALUE (&psymbol) = val;
2676     }
2677   else
2678     {
2679       SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2680     }
2681   SYMBOL_SECTION (&psymbol) = 0;
2682   SYMBOL_LANGUAGE (&psymbol) = language;
2683   PSYMBOL_DOMAIN (&psymbol) = domain;
2684   PSYMBOL_CLASS (&psymbol) = class;
2685   SYMBOL_INIT_LANGUAGE_SPECIFIC (&psymbol, language);
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
2700 /* Initialize storage for partial symbols.  */
2701
2702 void
2703 init_psymbol_list (struct objfile *objfile, int total_symbols)
2704 {
2705   /* Free any previously allocated psymbol lists.  */
2706
2707   if (objfile->global_psymbols.list)
2708     {
2709       xmfree (objfile->md, objfile->global_psymbols.list);
2710     }
2711   if (objfile->static_psymbols.list)
2712     {
2713       xmfree (objfile->md, objfile->static_psymbols.list);
2714     }
2715
2716   /* Current best guess is that approximately a twentieth
2717      of the total symbols (in a debugging file) are global or static
2718      oriented symbols */
2719
2720   objfile->global_psymbols.size = total_symbols / 10;
2721   objfile->static_psymbols.size = total_symbols / 10;
2722
2723   if (objfile->global_psymbols.size > 0)
2724     {
2725       objfile->global_psymbols.next =
2726         objfile->global_psymbols.list = (struct partial_symbol **)
2727         xmmalloc (objfile->md, (objfile->global_psymbols.size
2728                                 * sizeof (struct partial_symbol *)));
2729     }
2730   if (objfile->static_psymbols.size > 0)
2731     {
2732       objfile->static_psymbols.next =
2733         objfile->static_psymbols.list = (struct partial_symbol **)
2734         xmmalloc (objfile->md, (objfile->static_psymbols.size
2735                                 * sizeof (struct partial_symbol *)));
2736     }
2737 }
2738
2739 /* OVERLAYS:
2740    The following code implements an abstraction for debugging overlay sections.
2741
2742    The target model is as follows:
2743    1) The gnu linker will permit multiple sections to be mapped into the
2744    same VMA, each with its own unique LMA (or load address).
2745    2) It is assumed that some runtime mechanism exists for mapping the
2746    sections, one by one, from the load address into the VMA address.
2747    3) This code provides a mechanism for gdb to keep track of which
2748    sections should be considered to be mapped from the VMA to the LMA.
2749    This information is used for symbol lookup, and memory read/write.
2750    For instance, if a section has been mapped then its contents
2751    should be read from the VMA, otherwise from the LMA.
2752
2753    Two levels of debugger support for overlays are available.  One is
2754    "manual", in which the debugger relies on the user to tell it which
2755    overlays are currently mapped.  This level of support is
2756    implemented entirely in the core debugger, and the information about
2757    whether a section is mapped is kept in the objfile->obj_section table.
2758
2759    The second level of support is "automatic", and is only available if
2760    the target-specific code provides functionality to read the target's
2761    overlay mapping table, and translate its contents for the debugger
2762    (by updating the mapped state information in the obj_section tables).
2763
2764    The interface is as follows:
2765    User commands:
2766    overlay map <name>   -- tell gdb to consider this section mapped
2767    overlay unmap <name> -- tell gdb to consider this section unmapped
2768    overlay list         -- list the sections that GDB thinks are mapped
2769    overlay read-target  -- get the target's state of what's mapped
2770    overlay off/manual/auto -- set overlay debugging state
2771    Functional interface:
2772    find_pc_mapped_section(pc):    if the pc is in the range of a mapped
2773    section, return that section.
2774    find_pc_overlay(pc):       find any overlay section that contains
2775    the pc, either in its VMA or its LMA
2776    overlay_is_mapped(sect):       true if overlay is marked as mapped
2777    section_is_overlay(sect):      true if section's VMA != LMA
2778    pc_in_mapped_range(pc,sec):    true if pc belongs to section's VMA
2779    pc_in_unmapped_range(...):     true if pc belongs to section's LMA
2780    sections_overlap(sec1, sec2):  true if mapped sec1 and sec2 ranges overlap
2781    overlay_mapped_address(...):   map an address from section's LMA to VMA
2782    overlay_unmapped_address(...): map an address from section's VMA to LMA
2783    symbol_overlayed_address(...): Return a "current" address for symbol:
2784    either in VMA or LMA depending on whether
2785    the symbol's section is currently mapped
2786  */
2787
2788 /* Overlay debugging state: */
2789
2790 enum overlay_debugging_state overlay_debugging = ovly_off;
2791 int overlay_cache_invalid = 0;  /* True if need to refresh mapped state */
2792
2793 /* Target vector for refreshing overlay mapped state */
2794 static void simple_overlay_update (struct obj_section *);
2795 void (*target_overlay_update) (struct obj_section *) = simple_overlay_update;
2796
2797 /* Function: section_is_overlay (SECTION)
2798    Returns true if SECTION has VMA not equal to LMA, ie.
2799    SECTION is loaded at an address different from where it will "run".  */
2800
2801 int
2802 section_is_overlay (asection *section)
2803 {
2804   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2805
2806   if (overlay_debugging)
2807     if (section && section->lma != 0 &&
2808         section->vma != section->lma)
2809       return 1;
2810
2811   return 0;
2812 }
2813
2814 /* Function: overlay_invalidate_all (void)
2815    Invalidate the mapped state of all overlay sections (mark it as stale).  */
2816
2817 static void
2818 overlay_invalidate_all (void)
2819 {
2820   struct objfile *objfile;
2821   struct obj_section *sect;
2822
2823   ALL_OBJSECTIONS (objfile, sect)
2824     if (section_is_overlay (sect->the_bfd_section))
2825     sect->ovly_mapped = -1;
2826 }
2827
2828 /* Function: overlay_is_mapped (SECTION)
2829    Returns true if section is an overlay, and is currently mapped.
2830    Private: public access is thru function section_is_mapped.
2831
2832    Access to the ovly_mapped flag is restricted to this function, so
2833    that we can do automatic update.  If the global flag
2834    OVERLAY_CACHE_INVALID is set (by wait_for_inferior), then call
2835    overlay_invalidate_all.  If the mapped state of the particular
2836    section is stale, then call TARGET_OVERLAY_UPDATE to refresh it.  */
2837
2838 static int
2839 overlay_is_mapped (struct obj_section *osect)
2840 {
2841   if (osect == 0 || !section_is_overlay (osect->the_bfd_section))
2842     return 0;
2843
2844   switch (overlay_debugging)
2845     {
2846     default:
2847     case ovly_off:
2848       return 0;                 /* overlay debugging off */
2849     case ovly_auto:             /* overlay debugging automatic */
2850       /* Unles there is a target_overlay_update function,
2851          there's really nothing useful to do here (can't really go auto)  */
2852       if (target_overlay_update)
2853         {
2854           if (overlay_cache_invalid)
2855             {
2856               overlay_invalidate_all ();
2857               overlay_cache_invalid = 0;
2858             }
2859           if (osect->ovly_mapped == -1)
2860             (*target_overlay_update) (osect);
2861         }
2862       /* fall thru to manual case */
2863     case ovly_on:               /* overlay debugging manual */
2864       return osect->ovly_mapped == 1;
2865     }
2866 }
2867
2868 /* Function: section_is_mapped
2869    Returns true if section is an overlay, and is currently mapped.  */
2870
2871 int
2872 section_is_mapped (asection *section)
2873 {
2874   struct objfile *objfile;
2875   struct obj_section *osect;
2876
2877   if (overlay_debugging)
2878     if (section && section_is_overlay (section))
2879       ALL_OBJSECTIONS (objfile, osect)
2880         if (osect->the_bfd_section == section)
2881         return overlay_is_mapped (osect);
2882
2883   return 0;
2884 }
2885
2886 /* Function: pc_in_unmapped_range
2887    If PC falls into the lma range of SECTION, return true, else false.  */
2888
2889 CORE_ADDR
2890 pc_in_unmapped_range (CORE_ADDR pc, asection *section)
2891 {
2892   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2893
2894   int size;
2895
2896   if (overlay_debugging)
2897     if (section && section_is_overlay (section))
2898       {
2899         size = bfd_get_section_size_before_reloc (section);
2900         if (section->lma <= pc && pc < section->lma + size)
2901           return 1;
2902       }
2903   return 0;
2904 }
2905
2906 /* Function: pc_in_mapped_range
2907    If PC falls into the vma range of SECTION, return true, else false.  */
2908
2909 CORE_ADDR
2910 pc_in_mapped_range (CORE_ADDR pc, asection *section)
2911 {
2912   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2913
2914   int size;
2915
2916   if (overlay_debugging)
2917     if (section && section_is_overlay (section))
2918       {
2919         size = bfd_get_section_size_before_reloc (section);
2920         if (section->vma <= pc && pc < section->vma + size)
2921           return 1;
2922       }
2923   return 0;
2924 }
2925
2926
2927 /* Return true if the mapped ranges of sections A and B overlap, false
2928    otherwise.  */
2929 static int
2930 sections_overlap (asection *a, asection *b)
2931 {
2932   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2933
2934   CORE_ADDR a_start = a->vma;
2935   CORE_ADDR a_end = a->vma + bfd_get_section_size_before_reloc (a);
2936   CORE_ADDR b_start = b->vma;
2937   CORE_ADDR b_end = b->vma + bfd_get_section_size_before_reloc (b);
2938
2939   return (a_start < b_end && b_start < a_end);
2940 }
2941
2942 /* Function: overlay_unmapped_address (PC, SECTION)
2943    Returns the address corresponding to PC in the unmapped (load) range.
2944    May be the same as PC.  */
2945
2946 CORE_ADDR
2947 overlay_unmapped_address (CORE_ADDR pc, asection *section)
2948 {
2949   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2950
2951   if (overlay_debugging)
2952     if (section && section_is_overlay (section) &&
2953         pc_in_mapped_range (pc, section))
2954       return pc + section->lma - section->vma;
2955
2956   return pc;
2957 }
2958
2959 /* Function: overlay_mapped_address (PC, SECTION)
2960    Returns the address corresponding to PC in the mapped (runtime) range.
2961    May be the same as PC.  */
2962
2963 CORE_ADDR
2964 overlay_mapped_address (CORE_ADDR pc, asection *section)
2965 {
2966   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
2967
2968   if (overlay_debugging)
2969     if (section && section_is_overlay (section) &&
2970         pc_in_unmapped_range (pc, section))
2971       return pc + section->vma - section->lma;
2972
2973   return pc;
2974 }
2975
2976
2977 /* Function: symbol_overlayed_address
2978    Return one of two addresses (relative to the VMA or to the LMA),
2979    depending on whether the section is mapped or not.  */
2980
2981 CORE_ADDR
2982 symbol_overlayed_address (CORE_ADDR address, asection *section)
2983 {
2984   if (overlay_debugging)
2985     {
2986       /* If the symbol has no section, just return its regular address. */
2987       if (section == 0)
2988         return address;
2989       /* If the symbol's section is not an overlay, just return its address */
2990       if (!section_is_overlay (section))
2991         return address;
2992       /* If the symbol's section is mapped, just return its address */
2993       if (section_is_mapped (section))
2994         return address;
2995       /*
2996        * HOWEVER: if the symbol is in an overlay section which is NOT mapped,
2997        * then return its LOADED address rather than its vma address!!
2998        */
2999       return overlay_unmapped_address (address, section);
3000     }
3001   return address;
3002 }
3003
3004 /* Function: find_pc_overlay (PC)
3005    Return the best-match overlay section for PC:
3006    If PC matches a mapped overlay section's VMA, return that section.
3007    Else if PC matches an unmapped section's VMA, return that section.
3008    Else if PC matches an unmapped section's LMA, return that section.  */
3009
3010 asection *
3011 find_pc_overlay (CORE_ADDR pc)
3012 {
3013   struct objfile *objfile;
3014   struct obj_section *osect, *best_match = NULL;
3015
3016   if (overlay_debugging)
3017     ALL_OBJSECTIONS (objfile, osect)
3018       if (section_is_overlay (osect->the_bfd_section))
3019       {
3020         if (pc_in_mapped_range (pc, osect->the_bfd_section))
3021           {
3022             if (overlay_is_mapped (osect))
3023               return osect->the_bfd_section;
3024             else
3025               best_match = osect;
3026           }
3027         else if (pc_in_unmapped_range (pc, osect->the_bfd_section))
3028           best_match = osect;
3029       }
3030   return best_match ? best_match->the_bfd_section : NULL;
3031 }
3032
3033 /* Function: find_pc_mapped_section (PC)
3034    If PC falls into the VMA address range of an overlay section that is
3035    currently marked as MAPPED, return that section.  Else return NULL.  */
3036
3037 asection *
3038 find_pc_mapped_section (CORE_ADDR pc)
3039 {
3040   struct objfile *objfile;
3041   struct obj_section *osect;
3042
3043   if (overlay_debugging)
3044     ALL_OBJSECTIONS (objfile, osect)
3045       if (pc_in_mapped_range (pc, osect->the_bfd_section) &&
3046           overlay_is_mapped (osect))
3047       return osect->the_bfd_section;
3048
3049   return NULL;
3050 }
3051
3052 /* Function: list_overlays_command
3053    Print a list of mapped sections and their PC ranges */
3054
3055 void
3056 list_overlays_command (char *args, int from_tty)
3057 {
3058   int nmapped = 0;
3059   struct objfile *objfile;
3060   struct obj_section *osect;
3061
3062   if (overlay_debugging)
3063     ALL_OBJSECTIONS (objfile, osect)
3064       if (overlay_is_mapped (osect))
3065       {
3066         const char *name;
3067         bfd_vma lma, vma;
3068         int size;
3069
3070         vma = bfd_section_vma (objfile->obfd, osect->the_bfd_section);
3071         lma = bfd_section_lma (objfile->obfd, osect->the_bfd_section);
3072         size = bfd_get_section_size_before_reloc (osect->the_bfd_section);
3073         name = bfd_section_name (objfile->obfd, osect->the_bfd_section);
3074
3075         printf_filtered ("Section %s, loaded at ", name);
3076         print_address_numeric (lma, 1, gdb_stdout);
3077         puts_filtered (" - ");
3078         print_address_numeric (lma + size, 1, gdb_stdout);
3079         printf_filtered (", mapped at ");
3080         print_address_numeric (vma, 1, gdb_stdout);
3081         puts_filtered (" - ");
3082         print_address_numeric (vma + size, 1, gdb_stdout);
3083         puts_filtered ("\n");
3084
3085         nmapped++;
3086       }
3087   if (nmapped == 0)
3088     printf_filtered ("No sections are mapped.\n");
3089 }
3090
3091 /* Function: map_overlay_command
3092    Mark the named section as mapped (ie. residing at its VMA address).  */
3093
3094 void
3095 map_overlay_command (char *args, int from_tty)
3096 {
3097   struct objfile *objfile, *objfile2;
3098   struct obj_section *sec, *sec2;
3099   asection *bfdsec;
3100
3101   if (!overlay_debugging)
3102     error ("\
3103 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3104 the 'overlay manual' command.");
3105
3106   if (args == 0 || *args == 0)
3107     error ("Argument required: name of an overlay section");
3108
3109   /* First, find a section matching the user supplied argument */
3110   ALL_OBJSECTIONS (objfile, sec)
3111     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3112     {
3113       /* Now, check to see if the section is an overlay. */
3114       bfdsec = sec->the_bfd_section;
3115       if (!section_is_overlay (bfdsec))
3116         continue;               /* not an overlay section */
3117
3118       /* Mark the overlay as "mapped" */
3119       sec->ovly_mapped = 1;
3120
3121       /* Next, make a pass and unmap any sections that are
3122          overlapped by this new section: */
3123       ALL_OBJSECTIONS (objfile2, sec2)
3124         if (sec2->ovly_mapped
3125             && sec != sec2
3126             && sec->the_bfd_section != sec2->the_bfd_section
3127             && sections_overlap (sec->the_bfd_section,
3128                                  sec2->the_bfd_section))
3129         {
3130           if (info_verbose)
3131             printf_unfiltered ("Note: section %s unmapped by overlap\n",
3132                              bfd_section_name (objfile->obfd,
3133                                                sec2->the_bfd_section));
3134           sec2->ovly_mapped = 0;        /* sec2 overlaps sec: unmap sec2 */
3135         }
3136       return;
3137     }
3138   error ("No overlay section called %s", args);
3139 }
3140
3141 /* Function: unmap_overlay_command
3142    Mark the overlay section as unmapped
3143    (ie. resident in its LMA address range, rather than the VMA range).  */
3144
3145 void
3146 unmap_overlay_command (char *args, int from_tty)
3147 {
3148   struct objfile *objfile;
3149   struct obj_section *sec;
3150
3151   if (!overlay_debugging)
3152     error ("\
3153 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3154 the 'overlay manual' command.");
3155
3156   if (args == 0 || *args == 0)
3157     error ("Argument required: name of an overlay section");
3158
3159   /* First, find a section matching the user supplied argument */
3160   ALL_OBJSECTIONS (objfile, sec)
3161     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3162     {
3163       if (!sec->ovly_mapped)
3164         error ("Section %s is not mapped", args);
3165       sec->ovly_mapped = 0;
3166       return;
3167     }
3168   error ("No overlay section called %s", args);
3169 }
3170
3171 /* Function: overlay_auto_command
3172    A utility command to turn on overlay debugging.
3173    Possibly this should be done via a set/show command. */
3174
3175 static void
3176 overlay_auto_command (char *args, int from_tty)
3177 {
3178   overlay_debugging = ovly_auto;
3179   enable_overlay_breakpoints ();
3180   if (info_verbose)
3181     printf_unfiltered ("Automatic overlay debugging enabled.");
3182 }
3183
3184 /* Function: overlay_manual_command
3185    A utility command to turn on overlay debugging.
3186    Possibly this should be done via a set/show command. */
3187
3188 static void
3189 overlay_manual_command (char *args, int from_tty)
3190 {
3191   overlay_debugging = ovly_on;
3192   disable_overlay_breakpoints ();
3193   if (info_verbose)
3194     printf_unfiltered ("Overlay debugging enabled.");
3195 }
3196
3197 /* Function: overlay_off_command
3198    A utility command to turn on overlay debugging.
3199    Possibly this should be done via a set/show command. */
3200
3201 static void
3202 overlay_off_command (char *args, int from_tty)
3203 {
3204   overlay_debugging = ovly_off;
3205   disable_overlay_breakpoints ();
3206   if (info_verbose)
3207     printf_unfiltered ("Overlay debugging disabled.");
3208 }
3209
3210 static void
3211 overlay_load_command (char *args, int from_tty)
3212 {
3213   if (target_overlay_update)
3214     (*target_overlay_update) (NULL);
3215   else
3216     error ("This target does not know how to read its overlay state.");
3217 }
3218
3219 /* Function: overlay_command
3220    A place-holder for a mis-typed command */
3221
3222 /* Command list chain containing all defined "overlay" subcommands. */
3223 struct cmd_list_element *overlaylist;
3224
3225 static void
3226 overlay_command (char *args, int from_tty)
3227 {
3228   printf_unfiltered
3229     ("\"overlay\" must be followed by the name of an overlay command.\n");
3230   help_list (overlaylist, "overlay ", -1, gdb_stdout);
3231 }
3232
3233
3234 /* Target Overlays for the "Simplest" overlay manager:
3235
3236    This is GDB's default target overlay layer.  It works with the
3237    minimal overlay manager supplied as an example by Cygnus.  The
3238    entry point is via a function pointer "target_overlay_update",
3239    so targets that use a different runtime overlay manager can
3240    substitute their own overlay_update function and take over the
3241    function pointer.
3242
3243    The overlay_update function pokes around in the target's data structures
3244    to see what overlays are mapped, and updates GDB's overlay mapping with
3245    this information.
3246
3247    In this simple implementation, the target data structures are as follows:
3248    unsigned _novlys;            /# number of overlay sections #/
3249    unsigned _ovly_table[_novlys][4] = {
3250    {VMA, SIZE, LMA, MAPPED},    /# one entry per overlay section #/
3251    {..., ...,  ..., ...},
3252    }
3253    unsigned _novly_regions;     /# number of overlay regions #/
3254    unsigned _ovly_region_table[_novly_regions][3] = {
3255    {VMA, SIZE, MAPPED_TO_LMA},  /# one entry per overlay region #/
3256    {..., ...,  ...},
3257    }
3258    These functions will attempt to update GDB's mappedness state in the
3259    symbol section table, based on the target's mappedness state.
3260
3261    To do this, we keep a cached copy of the target's _ovly_table, and
3262    attempt to detect when the cached copy is invalidated.  The main
3263    entry point is "simple_overlay_update(SECT), which looks up SECT in
3264    the cached table and re-reads only the entry for that section from
3265    the target (whenever possible).
3266  */
3267
3268 /* Cached, dynamically allocated copies of the target data structures: */
3269 static unsigned (*cache_ovly_table)[4] = 0;
3270 #if 0
3271 static unsigned (*cache_ovly_region_table)[3] = 0;
3272 #endif
3273 static unsigned cache_novlys = 0;
3274 #if 0
3275 static unsigned cache_novly_regions = 0;
3276 #endif
3277 static CORE_ADDR cache_ovly_table_base = 0;
3278 #if 0
3279 static CORE_ADDR cache_ovly_region_table_base = 0;
3280 #endif
3281 enum ovly_index
3282   {
3283     VMA, SIZE, LMA, MAPPED
3284   };
3285 #define TARGET_LONG_BYTES (TARGET_LONG_BIT / TARGET_CHAR_BIT)
3286
3287 /* Throw away the cached copy of _ovly_table */
3288 static void
3289 simple_free_overlay_table (void)
3290 {
3291   if (cache_ovly_table)
3292     xfree (cache_ovly_table);
3293   cache_novlys = 0;
3294   cache_ovly_table = NULL;
3295   cache_ovly_table_base = 0;
3296 }
3297
3298 #if 0
3299 /* Throw away the cached copy of _ovly_region_table */
3300 static void
3301 simple_free_overlay_region_table (void)
3302 {
3303   if (cache_ovly_region_table)
3304     xfree (cache_ovly_region_table);
3305   cache_novly_regions = 0;
3306   cache_ovly_region_table = NULL;
3307   cache_ovly_region_table_base = 0;
3308 }
3309 #endif
3310
3311 /* Read an array of ints from the target into a local buffer.
3312    Convert to host order.  int LEN is number of ints  */
3313 static void
3314 read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr, int len)
3315 {
3316   /* FIXME (alloca): Not safe if array is very large. */
3317   char *buf = alloca (len * TARGET_LONG_BYTES);
3318   int i;
3319
3320   read_memory (memaddr, buf, len * TARGET_LONG_BYTES);
3321   for (i = 0; i < len; i++)
3322     myaddr[i] = extract_unsigned_integer (TARGET_LONG_BYTES * i + buf,
3323                                           TARGET_LONG_BYTES);
3324 }
3325
3326 /* Find and grab a copy of the target _ovly_table
3327    (and _novlys, which is needed for the table's size) */
3328 static int
3329 simple_read_overlay_table (void)
3330 {
3331   struct minimal_symbol *novlys_msym, *ovly_table_msym;
3332
3333   simple_free_overlay_table ();
3334   novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
3335   if (! novlys_msym)
3336     {
3337       error ("Error reading inferior's overlay table: "
3338              "couldn't find `_novlys' variable\n"
3339              "in inferior.  Use `overlay manual' mode.");
3340       return 0;
3341     }
3342
3343   ovly_table_msym = lookup_minimal_symbol ("_ovly_table", NULL, NULL);
3344   if (! ovly_table_msym)
3345     {
3346       error ("Error reading inferior's overlay table: couldn't find "
3347              "`_ovly_table' array\n"
3348              "in inferior.  Use `overlay manual' mode.");
3349       return 0;
3350     }
3351
3352   cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym), 4);
3353   cache_ovly_table
3354     = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
3355   cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
3356   read_target_long_array (cache_ovly_table_base,
3357                           (int *) cache_ovly_table,
3358                           cache_novlys * 4);
3359
3360   return 1;                     /* SUCCESS */
3361 }
3362
3363 #if 0
3364 /* Find and grab a copy of the target _ovly_region_table
3365    (and _novly_regions, which is needed for the table's size) */
3366 static int
3367 simple_read_overlay_region_table (void)
3368 {
3369   struct minimal_symbol *msym;
3370
3371   simple_free_overlay_region_table ();
3372   msym = lookup_minimal_symbol ("_novly_regions", NULL, NULL);
3373   if (msym != NULL)
3374     cache_novly_regions = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4);
3375   else
3376     return 0;                   /* failure */
3377   cache_ovly_region_table = (void *) xmalloc (cache_novly_regions * 12);
3378   if (cache_ovly_region_table != NULL)
3379     {
3380       msym = lookup_minimal_symbol ("_ovly_region_table", NULL, NULL);
3381       if (msym != NULL)
3382         {
3383           cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
3384           read_target_long_array (cache_ovly_region_table_base,
3385                                   (int *) cache_ovly_region_table,
3386                                   cache_novly_regions * 3);
3387         }
3388       else
3389         return 0;               /* failure */
3390     }
3391   else
3392     return 0;                   /* failure */
3393   return 1;                     /* SUCCESS */
3394 }
3395 #endif
3396
3397 /* Function: simple_overlay_update_1
3398    A helper function for simple_overlay_update.  Assuming a cached copy
3399    of _ovly_table exists, look through it to find an entry whose vma,
3400    lma and size match those of OSECT.  Re-read the entry and make sure
3401    it still matches OSECT (else the table may no longer be valid).
3402    Set OSECT's mapped state to match the entry.  Return: 1 for
3403    success, 0 for failure.  */
3404
3405 static int
3406 simple_overlay_update_1 (struct obj_section *osect)
3407 {
3408   int i, size;
3409   bfd *obfd = osect->objfile->obfd;
3410   asection *bsect = osect->the_bfd_section;
3411
3412   size = bfd_get_section_size_before_reloc (osect->the_bfd_section);
3413   for (i = 0; i < cache_novlys; i++)
3414     if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3415         && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3416         /* && cache_ovly_table[i][SIZE] == size */ )
3417       {
3418         read_target_long_array (cache_ovly_table_base + i * TARGET_LONG_BYTES,
3419                                 (int *) cache_ovly_table[i], 4);
3420         if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3421             && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3422             /* && cache_ovly_table[i][SIZE] == size */ )
3423           {
3424             osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3425             return 1;
3426           }
3427         else    /* Warning!  Warning!  Target's ovly table has changed! */
3428           return 0;
3429       }
3430   return 0;
3431 }
3432
3433 /* Function: simple_overlay_update
3434    If OSECT is NULL, then update all sections' mapped state
3435    (after re-reading the entire target _ovly_table).
3436    If OSECT is non-NULL, then try to find a matching entry in the
3437    cached ovly_table and update only OSECT's mapped state.
3438    If a cached entry can't be found or the cache isn't valid, then
3439    re-read the entire cache, and go ahead and update all sections.  */
3440
3441 static void
3442 simple_overlay_update (struct obj_section *osect)
3443 {
3444   struct objfile *objfile;
3445
3446   /* Were we given an osect to look up?  NULL means do all of them. */
3447   if (osect)
3448     /* Have we got a cached copy of the target's overlay table? */
3449     if (cache_ovly_table != NULL)
3450       /* Does its cached location match what's currently in the symtab? */
3451       if (cache_ovly_table_base ==
3452           SYMBOL_VALUE_ADDRESS (lookup_minimal_symbol ("_ovly_table", NULL, NULL)))
3453         /* Then go ahead and try to look up this single section in the cache */
3454         if (simple_overlay_update_1 (osect))
3455           /* Found it!  We're done. */
3456           return;
3457
3458   /* Cached table no good: need to read the entire table anew.
3459      Or else we want all the sections, in which case it's actually
3460      more efficient to read the whole table in one block anyway.  */
3461
3462   if (! simple_read_overlay_table ())
3463     return;
3464
3465   /* Now may as well update all sections, even if only one was requested. */
3466   ALL_OBJSECTIONS (objfile, osect)
3467     if (section_is_overlay (osect->the_bfd_section))
3468     {
3469       int i, size;
3470       bfd *obfd = osect->objfile->obfd;
3471       asection *bsect = osect->the_bfd_section;
3472
3473       size = bfd_get_section_size_before_reloc (osect->the_bfd_section);
3474       for (i = 0; i < cache_novlys; i++)
3475         if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3476             && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3477             /* && cache_ovly_table[i][SIZE] == size */ )
3478           { /* obj_section matches i'th entry in ovly_table */
3479             osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3480             break;              /* finished with inner for loop: break out */
3481           }
3482     }
3483 }
3484
3485 /* Set the output sections and output offsets for section SECTP in
3486    ABFD.  The relocation code in BFD will read these offsets, so we
3487    need to be sure they're initialized.  We map each section to itself,
3488    with no offset; this means that SECTP->vma will be honored.  */
3489
3490 static void
3491 symfile_dummy_outputs (bfd *abfd, asection *sectp, void *dummy)
3492 {
3493   sectp->output_section = sectp;
3494   sectp->output_offset = 0;
3495 }
3496
3497 /* Relocate the contents of a debug section SECTP in ABFD.  The
3498    contents are stored in BUF if it is non-NULL, or returned in a
3499    malloc'd buffer otherwise.
3500
3501    For some platforms and debug info formats, shared libraries contain
3502    relocations against the debug sections (particularly for DWARF-2;
3503    one affected platform is PowerPC GNU/Linux, although it depends on
3504    the version of the linker in use).  Also, ELF object files naturally
3505    have unresolved relocations for their debug sections.  We need to apply
3506    the relocations in order to get the locations of symbols correct.  */
3507
3508 bfd_byte *
3509 symfile_relocate_debug_section (bfd *abfd, asection *sectp, bfd_byte *buf)
3510 {
3511   /* We're only interested in debugging sections with relocation
3512      information.  */
3513   if ((sectp->flags & SEC_RELOC) == 0)
3514     return NULL;
3515   if ((sectp->flags & SEC_DEBUGGING) == 0)
3516     return NULL;
3517
3518   /* We will handle section offsets properly elsewhere, so relocate as if
3519      all sections begin at 0.  */
3520   bfd_map_over_sections (abfd, symfile_dummy_outputs, NULL);
3521
3522   return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
3523 }
3524
3525 void
3526 _initialize_symfile (void)
3527 {
3528   struct cmd_list_element *c;
3529
3530   c = add_cmd ("symbol-file", class_files, symbol_file_command,
3531                "Load symbol table from executable file FILE.\n\
3532 The `file' command can also load symbol tables, as well as setting the file\n\
3533 to execute.", &cmdlist);
3534   set_cmd_completer (c, filename_completer);
3535
3536   c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command,
3537                "Usage: add-symbol-file FILE ADDR [-s <SECT> <SECT_ADDR> -s <SECT> <SECT_ADDR> ...]\n\
3538 Load the symbols from FILE, assuming FILE has been dynamically loaded.\n\
3539 ADDR is the starting address of the file's text.\n\
3540 The optional arguments are section-name section-address pairs and\n\
3541 should be specified if the data and bss segments are not contiguous\n\
3542 with the text.  SECT is a section name to be loaded at SECT_ADDR.",
3543                &cmdlist);
3544   set_cmd_completer (c, filename_completer);
3545
3546   c = add_cmd ("add-shared-symbol-files", class_files,
3547                add_shared_symbol_files_command,
3548    "Load the symbols from shared objects in the dynamic linker's link map.",
3549                &cmdlist);
3550   c = add_alias_cmd ("assf", "add-shared-symbol-files", class_files, 1,
3551                      &cmdlist);
3552
3553   c = add_cmd ("load", class_files, load_command,
3554                "Dynamically load FILE into the running program, and record its symbols\n\
3555 for access from GDB.", &cmdlist);
3556   set_cmd_completer (c, filename_completer);
3557
3558   add_show_from_set
3559     (add_set_cmd ("symbol-reloading", class_support, var_boolean,
3560                   (char *) &symbol_reloading,
3561             "Set dynamic symbol table reloading multiple times in one run.",
3562                   &setlist),
3563      &showlist);
3564
3565   add_prefix_cmd ("overlay", class_support, overlay_command,
3566                   "Commands for debugging overlays.", &overlaylist,
3567                   "overlay ", 0, &cmdlist);
3568
3569   add_com_alias ("ovly", "overlay", class_alias, 1);
3570   add_com_alias ("ov", "overlay", class_alias, 1);
3571
3572   add_cmd ("map-overlay", class_support, map_overlay_command,
3573            "Assert that an overlay section is mapped.", &overlaylist);
3574
3575   add_cmd ("unmap-overlay", class_support, unmap_overlay_command,
3576            "Assert that an overlay section is unmapped.", &overlaylist);
3577
3578   add_cmd ("list-overlays", class_support, list_overlays_command,
3579            "List mappings of overlay sections.", &overlaylist);
3580
3581   add_cmd ("manual", class_support, overlay_manual_command,
3582            "Enable overlay debugging.", &overlaylist);
3583   add_cmd ("off", class_support, overlay_off_command,
3584            "Disable overlay debugging.", &overlaylist);
3585   add_cmd ("auto", class_support, overlay_auto_command,
3586            "Enable automatic overlay debugging.", &overlaylist);
3587   add_cmd ("load-target", class_support, overlay_load_command,
3588            "Read the overlay mapping state from the target.", &overlaylist);
3589
3590   /* Filename extension to source language lookup table: */
3591   init_filename_language_table ();
3592   c = add_set_cmd ("extension-language", class_files, var_string_noescape,
3593                    (char *) &ext_args,
3594                    "Set mapping between filename extension and source language.\n\
3595 Usage: set extension-language .foo bar",
3596                    &setlist);
3597   set_cmd_cfunc (c, set_ext_lang_command);
3598
3599   add_info ("extensions", info_ext_lang_command,
3600             "All filename extensions associated with a source language.");
3601
3602   add_show_from_set
3603     (add_set_cmd ("download-write-size", class_obscure,
3604                   var_integer, (char *) &download_write_size,
3605                   "Set the write size used when downloading a program.\n"
3606                   "Only used when downloading a program onto a remote\n"
3607                   "target. Specify zero, or a negative value, to disable\n"
3608                   "blocked writes. The actual size of each transfer is also\n"
3609                   "limited by the size of the target packet and the memory\n"
3610                   "cache.\n",
3611                   &setlist),
3612      &showlist);
3613
3614   debug_file_directory = xstrdup (DEBUGDIR);
3615   c = (add_set_cmd
3616        ("debug-file-directory", class_support, var_string,
3617         (char *) &debug_file_directory,
3618         "Set the directory where separate debug symbols are searched for.\n"
3619         "Separate debug symbols are first searched for in the same\n"
3620         "directory as the binary, then in the `" DEBUG_SUBDIRECTORY
3621         "' subdirectory,\n"
3622         "and lastly at the path of the directory of the binary with\n"
3623         "the global debug-file directory prepended\n",
3624         &setlist));
3625   add_show_from_set (c, &showlist);
3626   set_cmd_completer (c, filename_completer);
3627 }