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