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