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