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