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