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