1 /* Generic symbol file reading for the GNU debugger, GDB.
2    Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
3    Contributed by Cygnus Support, using pieces from other GDB modules.
4 
5 This file is part of GDB.
6 
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11 
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
20 
21 #include "defs.h"
22 #include "symtab.h"
23 #include "gdbtypes.h"
24 #include "gdbcore.h"
25 #include "frame.h"
26 #include "target.h"
27 #include "value.h"
28 #include "symfile.h"
29 #include "objfiles.h"
30 #include "gdbcmd.h"
31 #include "breakpoint.h"
32 #include "language.h"
33 
34 #include <obstack.h>
35 #include <assert.h>
36 
37 #include <sys/types.h>
38 #include <fcntl.h>
39 #include <string.h>
40 #include <sys/stat.h>
41 #include <ctype.h>
42 
43 /* Global variables owned by this file */
44 
45 int readnow_symbol_files;		/* Read full symbols immediately */
46 
47 /* External variables and functions referenced. */
48 
49 extern int info_verbose;
50 
51 /* Functions this file defines */
52 
53 static void
54 set_initial_language PARAMS ((void));
55 
56 static void
57 load_command PARAMS ((char *, int));
58 
59 static void
60 add_symbol_file_command PARAMS ((char *, int));
61 
62 static void
63 cashier_psymtab PARAMS ((struct partial_symtab *));
64 
65 static int
66 compare_psymbols PARAMS ((const void *, const void *));
67 
68 static int
69 compare_symbols PARAMS ((const void *, const void *));
70 
71 static bfd *
72 symfile_bfd_open PARAMS ((char *));
73 
74 static void
75 find_sym_fns PARAMS ((struct objfile *));
76 
77 void
78 clear_symtab_users_once PARAMS ((void));
79 
80 /* List of all available sym_fns.  On gdb startup, each object file reader
81    calls add_symtab_fns() to register information on each format it is
82    prepared to read. */
83 
84 static struct sym_fns *symtab_fns = NULL;
85 
86 /* Structures with which to manage partial symbol allocation.  */
87 
88 struct psymbol_allocation_list global_psymbols = {0}, static_psymbols = {0};
89 
90 /* Flag for whether user will be reloading symbols multiple times.
91    Defaults to ON for VxWorks, otherwise OFF.  */
92 
93 #ifdef SYMBOL_RELOADING_DEFAULT
94 int symbol_reloading = SYMBOL_RELOADING_DEFAULT;
95 #else
96 int symbol_reloading = 0;
97 #endif
98 
99 /* Structure to manage complaints about symbol file contents.  */
100 
101 struct complaint complaint_root[1] = {
102   {(char *) 0, 0, complaint_root},
103 };
104 
105 /* Some actual complaints.  */
106 
107 struct complaint oldsyms_complaint = {
108 	"Replacing old symbols for `%s'", 0, 0 };
109 
110 struct complaint empty_symtab_complaint = {
111 	"Empty symbol table found for `%s'", 0, 0 };
112 
113 
114 /* In the following sort, we always make sure that
115    register debug symbol declarations always come before regular
116    debug symbol declarations (as might happen when parameters are
117    then put into registers by the compiler).
118 
119    Since this function is called from within qsort, in an ANSI environment
120    it must conform to the prototype for qsort, which specifies that the
121    comparison function takes two "void *" pointers. */
122 
123 static int
124 compare_symbols (s1p, s2p)
125      const PTR s1p;
126      const PTR s2p;
127 {
128   register struct symbol **s1, **s2;
129   register int namediff;
130 
131   s1 = (struct symbol **) s1p;
132   s2 = (struct symbol **) s2p;
133 
134   /* Compare the initial characters.  */
135   namediff = SYMBOL_NAME (*s1)[0] - SYMBOL_NAME (*s2)[0];
136   if (namediff != 0) return namediff;
137 
138   /* If they match, compare the rest of the names.  */
139   namediff = strcmp (SYMBOL_NAME (*s1), SYMBOL_NAME (*s2));
140   if (namediff != 0) return namediff;
141 
142   /* For symbols of the same name, registers should come first.  */
143   return ((SYMBOL_CLASS (*s2) == LOC_REGISTER)
144 	  - (SYMBOL_CLASS (*s1) == LOC_REGISTER));
145 }
146 
147 /*
148 
149 LOCAL FUNCTION
150 
151 	compare_psymbols -- compare two partial symbols by name
152 
153 DESCRIPTION
154 
155 	Given pointer to two partial symbol table entries, compare
156 	them by name and return -N, 0, or +N (ala strcmp).  Typically
157 	used by sorting routines like qsort().
158 
159 NOTES
160 
161 	Does direct compare of first two characters before punting
162 	and passing to strcmp for longer compares.  Note that the
163 	original version had a bug whereby two null strings or two
164 	identically named one character strings would return the
165 	comparison of memory following the null byte.
166 
167  */
168 
169 static int
170 compare_psymbols (s1p, s2p)
171      const PTR s1p;
172      const PTR s2p;
173 {
174   register char *st1 = SYMBOL_NAME ((struct partial_symbol *) s1p);
175   register char *st2 = SYMBOL_NAME ((struct partial_symbol *) s2p);
176 
177   if ((st1[0] - st2[0]) || !st1[0])
178     {
179       return (st1[0] - st2[0]);
180     }
181   else if ((st1[1] - st2[1]) || !st1[1])
182     {
183       return (st1[1] - st2[1]);
184     }
185   else
186     {
187       return (strcmp (st1 + 2, st2 + 2));
188     }
189 }
190 
191 void
192 sort_pst_symbols (pst)
193      struct partial_symtab *pst;
194 {
195   /* Sort the global list; don't sort the static list */
196 
197   qsort (pst -> objfile -> global_psymbols.list + pst -> globals_offset,
198 	 pst -> n_global_syms, sizeof (struct partial_symbol),
199 	 compare_psymbols);
200 }
201 
202 /* Call sort_block_syms to sort alphabetically the symbols of one block.  */
203 
204 void
205 sort_block_syms (b)
206      register struct block *b;
207 {
208   qsort (&BLOCK_SYM (b, 0), BLOCK_NSYMS (b),
209 	 sizeof (struct symbol *), compare_symbols);
210 }
211 
212 /* Call sort_symtab_syms to sort alphabetically
213    the symbols of each block of one symtab.  */
214 
215 void
216 sort_symtab_syms (s)
217      register struct symtab *s;
218 {
219   register struct blockvector *bv;
220   int nbl;
221   int i;
222   register struct block *b;
223 
224   if (s == 0)
225     return;
226   bv = BLOCKVECTOR (s);
227   nbl = BLOCKVECTOR_NBLOCKS (bv);
228   for (i = 0; i < nbl; i++)
229     {
230       b = BLOCKVECTOR_BLOCK (bv, i);
231       if (BLOCK_SHOULD_SORT (b))
232 	sort_block_syms (b);
233     }
234 }
235 
236 void
237 sort_all_symtab_syms ()
238 {
239   register struct symtab *s;
240   register struct objfile *objfile;
241 
242   for (objfile = object_files; objfile != NULL; objfile = objfile -> next)
243     {
244       for (s = objfile -> symtabs; s != NULL; s = s -> next)
245 	{
246 	  sort_symtab_syms (s);
247 	}
248     }
249 }
250 
251 /* Make a copy of the string at PTR with SIZE characters in the symbol obstack
252    (and add a null character at the end in the copy).
253    Returns the address of the copy.  */
254 
255 char *
256 obsavestring (ptr, size, obstackp)
257      char *ptr;
258      int size;
259      struct obstack *obstackp;
260 {
261   register char *p = (char *) obstack_alloc (obstackp, size + 1);
262   /* Open-coded bcopy--saves function call time.
263      These strings are usually short.  */
264   {
265     register char *p1 = ptr;
266     register char *p2 = p;
267     char *end = ptr + size;
268     while (p1 != end)
269       *p2++ = *p1++;
270   }
271   p[size] = 0;
272   return p;
273 }
274 
275 /* Concatenate strings S1, S2 and S3; return the new string.
276    Space is found in the symbol_obstack.  */
277 
278 char *
279 obconcat (obstackp, s1, s2, s3)
280      struct obstack *obstackp;
281      const char *s1, *s2, *s3;
282 {
283   register int len = strlen (s1) + strlen (s2) + strlen (s3) + 1;
284   register char *val = (char *) obstack_alloc (obstackp, len);
285   strcpy (val, s1);
286   strcat (val, s2);
287   strcat (val, s3);
288   return val;
289 }
290 
291 /* Get the symbol table that corresponds to a partial_symtab.
292    This is fast after the first time you do it.  In fact, there
293    is an even faster macro PSYMTAB_TO_SYMTAB that does the fast
294    case inline.  */
295 
296 struct symtab *
297 psymtab_to_symtab (pst)
298      register struct partial_symtab *pst;
299 {
300   /* If it's been looked up before, return it. */
301   if (pst->symtab)
302     return pst->symtab;
303 
304   /* If it has not yet been read in, read it.  */
305   if (!pst->readin)
306     {
307       (*pst->read_symtab) (pst);
308     }
309 
310   return pst->symtab;
311 }
312 
313 /* Initialize entry point information for this objfile. */
314 
315 void
316 init_entry_point_info (objfile)
317      struct objfile *objfile;
318 {
319   /* Save startup file's range of PC addresses to help blockframe.c
320      decide where the bottom of the stack is.  */
321 
322   if (bfd_get_file_flags (objfile -> obfd) & EXEC_P)
323     {
324       /* Executable file -- record its entry point so we'll recognize
325 	 the startup file because it contains the entry point.  */
326       objfile -> ei.entry_point = bfd_get_start_address (objfile -> obfd);
327     }
328   else
329     {
330       /* Examination of non-executable.o files.  Short-circuit this stuff.  */
331       /* ~0 will not be in any file, we hope.  */
332       objfile -> ei.entry_point = ~0;
333       /* set the startup file to be an empty range.  */
334       objfile -> ei.entry_file_lowpc = 0;
335       objfile -> ei.entry_file_highpc = 0;
336     }
337 }
338 
339 /* Remember the lowest-addressed loadable section we've seen.
340    This function is called via bfd_map_over_sections.  */
341 
342 #if 0 	/* Not used yet */
343 static void
344 find_lowest_section (abfd, sect, obj)
345      bfd *abfd;
346      asection *sect;
347      PTR obj;
348 {
349   asection **lowest = (asection **)obj;
350 
351   if (0 == (bfd_get_section_flags (abfd, sect) & SEC_LOAD))
352     return;
353   if (!*lowest)
354     *lowest = sect;		/* First loadable section */
355   else if (bfd_section_vma (abfd, *lowest) >= bfd_section_vma (abfd, sect))
356     *lowest = sect;		/* A lower loadable section */
357 }
358 #endif
359 
360 /* Process a symbol file, as either the main file or as a dynamically
361    loaded file.
362 
363    NAME is the file name (which will be tilde-expanded and made
364    absolute herein) (but we don't free or modify NAME itself).
365    FROM_TTY says how verbose to be.  MAINLINE specifies whether this
366    is the main symbol file, or whether it's an extra symbol file such
367    as dynamically loaded code.  If !mainline, ADDR is the address
368    where the text segment was loaded.  If VERBO, the caller has printed
369    a verbose message about the symbol reading (and complaints can be
370    more terse about it).  */
371 
372 void
373 syms_from_objfile (objfile, addr, mainline, verbo)
374      struct objfile *objfile;
375      CORE_ADDR addr;
376      int mainline;
377      int verbo;
378 {
379   struct section_offsets *section_offsets;
380   asection *lowest_sect;
381 
382   /* There is a distinction between having no symbol table
383      (we refuse to read the file, leaving the old set of symbols around)
384      and having no debugging symbols in your symbol table (we read
385      the file and end up with a mostly empty symbol table).
386 
387      FIXME:  This strategy works correctly when the debugging symbols are
388      intermixed with "normal" symbols.  However, when the debugging symbols
389      are separate, such as with ELF/DWARF, it is perfectly plausible for
390      the symbol table to be missing but still have all the DWARF info
391      intact.  Thus in general it is wrong to assume that having no symbol
392      table implies no debugging information. */
393 
394   if (!(bfd_get_file_flags (objfile -> obfd) & HAS_SYMS))
395     return;
396 
397   init_entry_point_info (objfile);
398   find_sym_fns (objfile);
399 
400   if (mainline)
401     {
402       /* Since no error yet, throw away the old symbol table.  */
403 
404       if (symfile_objfile != NULL)
405 	{
406 	  free_objfile (symfile_objfile);
407 	  symfile_objfile = NULL;
408 	}
409 
410       (*objfile -> sf -> sym_new_init) (objfile);
411     }
412 
413   /* Convert addr into an offset rather than an absolute address.
414      We find the lowest address of a loaded segment in the objfile,
415      and assume that <addr> is where that got loaded.  Due to historical
416      precedent, we warn if that doesn't happen to be the ".text"
417      segment.  */
418 
419   if (mainline)
420     {
421       addr = 0;		/* No offset from objfile addresses.  */
422     }
423   else
424     {
425       lowest_sect = bfd_get_section_by_name (objfile->obfd, ".text");
426 #if 0
427       lowest_sect = 0;
428       bfd_map_over_sections (objfile->obfd, find_lowest_section,
429 			     (PTR) &lowest_sect);
430 #endif
431 
432       if (lowest_sect == 0)
433 	warning ("no loadable sections found in added symbol-file %s",
434 		 objfile->name);
435       else if (0 == bfd_get_section_name (objfile->obfd, lowest_sect)
436 	       || 0 != strcmp(".text",
437 			      bfd_get_section_name (objfile->obfd, lowest_sect)))
438 	warning ("Lowest section in %s is %s at 0x%x",
439 		 objfile->name,
440 		 bfd_section_name (objfile->obfd, lowest_sect),
441 		 bfd_section_vma (objfile->obfd, lowest_sect));
442 
443       if (lowest_sect)
444 	addr -= bfd_section_vma (objfile->obfd, lowest_sect);
445     }
446 
447   /* Initialize symbol reading routines for this objfile, allow complaints to
448      appear for this new file, and record how verbose to be, then do the
449      initial symbol reading for this file. */
450 
451   (*objfile -> sf -> sym_init) (objfile);
452   clear_complaints (1, verbo);
453   section_offsets = (*objfile -> sf -> sym_offsets) (objfile, addr);
454   (*objfile -> sf -> sym_read) (objfile, section_offsets, mainline);
455 
456   /* Don't allow char * to have a typename (else would get caddr_t.)  */
457   /* Ditto void *.  FIXME should do this for all the builtin types.  */
458 
459   TYPE_NAME (lookup_pointer_type (builtin_type_char)) = 0;
460   TYPE_NAME (lookup_pointer_type (builtin_type_void)) = 0;
461 
462   /* Mark the objfile has having had initial symbol read attempted.  Note
463      that this does not mean we found any symbols... */
464 
465   objfile -> flags |= OBJF_SYMS;
466 }
467 
468 /* Perform required actions immediately after either reading in the initial
469    symbols for a new objfile, or mapping in the symbols from a reusable
470    objfile. */
471 
472 void
473 new_symfile_objfile (objfile, mainline, verbo)
474      struct objfile *objfile;
475      int mainline;
476      int verbo;
477 {
478   if (mainline)
479     {
480       /* OK, make it the "real" symbol file.  */
481       symfile_objfile = objfile;
482     }
483 
484   /* If we have wiped out any old symbol tables, clean up.  */
485   clear_symtab_users_once ();
486 
487   /* We're done reading the symbol file; finish off complaints.  */
488   clear_complaints (0, verbo);
489 
490   /* Fixup all the breakpoints that may have been redefined by this
491      symbol file. */
492 
493   breakpoint_re_set ();
494 }
495 
496 /* Process a symbol file, as either the main file or as a dynamically
497    loaded file.
498 
499    NAME is the file name (which will be tilde-expanded and made
500    absolute herein) (but we don't free or modify NAME itself).
501    FROM_TTY says how verbose to be.  MAINLINE specifies whether this
502    is the main symbol file, or whether it's an extra symbol file such
503    as dynamically loaded code.  If !mainline, ADDR is the address
504    where the text segment was loaded.
505 
506    Upon success, returns a pointer to the objfile that was added.
507    Upon failure, jumps back to command level (never returns). */
508 
509 struct objfile *
510 symbol_file_add (name, from_tty, addr, mainline, mapped, readnow)
511      char *name;
512      int from_tty;
513      CORE_ADDR addr;
514      int mainline;
515      int mapped;
516      int readnow;
517 {
518   struct objfile *objfile;
519   struct partial_symtab *psymtab;
520   bfd *abfd;
521 
522   /* Open a bfd for the file and then check to see if the file has a
523      symbol table.  There is a distinction between having no symbol table
524      (we refuse to read the file, leaving the old set of symbols around)
525      and having no debugging symbols in the symbol table (we read the file
526      and end up with a mostly empty symbol table, but with lots of stuff in
527      the minimal symbol table).  We need to make the decision about whether
528      to continue with the file before allocating and building a objfile.
529 
530      FIXME:  This strategy works correctly when the debugging symbols are
531      intermixed with "normal" symbols.  However, when the debugging symbols
532      are separate, such as with ELF/DWARF, it is perfectly plausible for
533      the symbol table to be missing but still have all the DWARF info
534      intact.  Thus in general it is wrong to assume that having no symbol
535      table implies no debugging information. */
536 
537   abfd = symfile_bfd_open (name);
538   if (!(bfd_get_file_flags (abfd) & HAS_SYMS))
539     {
540       error ("%s has no symbol-table", name);
541     }
542 
543   if ((have_full_symbols () || have_partial_symbols ())
544       && mainline
545       && from_tty
546       && !query ("Load new symbol table from \"%s\"? ", name))
547       error ("Not confirmed.");
548 
549   /* Getting new symbols may change our opinion about what is
550      frameless.  */
551 
552   reinit_frame_cache ();
553 
554   objfile = allocate_objfile (abfd, mapped);
555 
556   /* If the objfile uses a mapped symbol file, and we have a psymtab for
557      it, then skip reading any symbols at this time. */
558 
559   if ((objfile -> flags & OBJF_MAPPED) && (objfile -> flags & OBJF_SYMS))
560     {
561       /* We mapped in an existing symbol table file that already has had
562 	 initial symbol reading performed, so we can skip that part.  Notify
563 	 the user that instead of reading the symbols, they have been mapped.
564 	 */
565       if (from_tty || info_verbose)
566 	{
567 	  printf_filtered ("Mapped symbols for %s...", name);
568 	  wrap_here ("");
569 	  fflush (stdout);
570 	}
571       init_entry_point_info (objfile);
572       find_sym_fns (objfile);
573     }
574   else
575     {
576       /* We either created a new mapped symbol table, mapped an existing
577 	 symbol table file which has not had initial symbol reading
578 	 performed, or need to read an unmapped symbol table. */
579       if (from_tty || info_verbose)
580 	{
581 	  printf_filtered ("Reading symbols from %s...", name);
582 	  wrap_here ("");
583 	  fflush (stdout);
584 	}
585       syms_from_objfile (objfile, addr, mainline, from_tty);
586     }
587 
588   new_symfile_objfile (objfile, mainline, from_tty);
589 
590   /* We now have at least a partial symbol table.  Check to see if the
591      user requested that all symbols be read on initial access via either
592      the gdb startup command line or on a per symbol file basis.  Expand
593      all partial symbol tables for this objfile if so. */
594 
595   if (readnow || readnow_symbol_files)
596     {
597       if (from_tty || info_verbose)
598 	{
599 	  printf_filtered ("expanding to full symbols...");
600 	  wrap_here ("");
601 	  fflush (stdout);
602 	}
603 
604       for (psymtab = objfile -> psymtabs;
605 	   psymtab != NULL;
606 	   psymtab = psymtab -> next)
607 	{
608 	  psymtab_to_symtab (psymtab);
609 	}
610     }
611 
612   if (from_tty || info_verbose)
613     {
614       printf_filtered ("done.\n");
615       fflush (stdout);
616     }
617 
618   return (objfile);
619 }
620 
621 /* This is the symbol-file command.  Read the file, analyze its symbols,
622    and add a struct symtab to a symtab list.  */
623 
624 void
625 symbol_file_command (args, from_tty)
626      char *args;
627      int from_tty;
628 {
629   char **argv;
630   char *name = NULL;
631   struct cleanup *cleanups;
632   int mapped = 0;
633   int readnow = 0;
634 
635   dont_repeat ();
636 
637   if (args == NULL)
638     {
639       if ((have_full_symbols () || have_partial_symbols ())
640 	  && from_tty
641 	  && !query ("Discard symbol table from `%s'? ",
642 		     symfile_objfile -> name))
643 	error ("Not confirmed.");
644       free_all_objfiles ();
645       symfile_objfile = NULL;
646       current_source_symtab = NULL;
647       current_source_line = 0;
648       if (from_tty)
649 	{
650 	  printf ("No symbol file now.\n");
651 	}
652     }
653   else
654     {
655       if ((argv = buildargv (args)) == NULL)
656 	{
657 	  nomem (0);
658 	}
659       cleanups = make_cleanup (freeargv, (char *) argv);
660       while (*argv != NULL)
661 	{
662 	  if (strcmp (*argv, "-mapped") == 0)
663 	    {
664 	      mapped = 1;
665 	    }
666 	  else if (strcmp (*argv, "-readnow") == 0)
667 	    {
668 	      readnow = 1;
669 	    }
670 	  else if (**argv == '-')
671 	    {
672 	      error ("unknown option `%s'", *argv);
673 	    }
674 	  else
675 	    {
676 	      name = *argv;
677 	    }
678 	  argv++;
679 	}
680 
681       if (name == NULL)
682 	{
683 	  error ("no symbol file name was specified");
684 	}
685       else
686 	{
687 	  symbol_file_add (name, from_tty, (CORE_ADDR)0, 1, mapped, readnow);
688 	  set_initial_language ();
689 	}
690       do_cleanups (cleanups);
691     }
692 }
693 
694 /* Set the initial language.
695 
696    A better solution would be to record the language in the psymtab when reading
697    partial symbols, and then use it (if known) to set the language.  This would
698    be a win for formats that encode the language in an easily discoverable place,
699    such as DWARF.  For stabs, we can jump through hoops looking for specially
700    named symbols or try to intuit the language from the specific type of stabs
701    we find, but we can't do that until later when we read in full symbols.
702    FIXME.  */
703 
704 static void
705 set_initial_language ()
706 {
707   struct partial_symtab *pst;
708   enum language lang = language_unknown;
709 
710   pst = find_main_psymtab ();
711   if (pst != NULL)
712     {
713       if (pst -> filename != NULL)
714 	{
715 	  lang = deduce_language_from_filename (pst -> filename);
716         }
717       if (lang == language_unknown)
718 	{
719 	    /* Make C the default language */
720 	    lang = language_c;
721 	}
722       set_language (lang);
723       expected_language = current_language;	/* Don't warn the user */
724     }
725 }
726 
727 /* Open file specified by NAME and hand it off to BFD for preliminary
728    analysis.  Result is a newly initialized bfd *, which includes a newly
729    malloc'd` copy of NAME (tilde-expanded and made absolute).
730    In case of trouble, error() is called.  */
731 
732 static bfd *
733 symfile_bfd_open (name)
734      char *name;
735 {
736   bfd *sym_bfd;
737   int desc;
738   char *absolute_name;
739 
740   name = tilde_expand (name);	/* Returns 1st new malloc'd copy */
741 
742   /* Look down path for it, allocate 2nd new malloc'd copy.  */
743   desc = openp (getenv ("PATH"), 1, name, O_RDONLY, 0, &absolute_name);
744   if (desc < 0)
745     {
746       make_cleanup (free, name);
747       perror_with_name (name);
748     }
749   free (name);			/* Free 1st new malloc'd copy */
750   name = absolute_name;		/* Keep 2nd malloc'd copy in bfd */
751 				/* It'll be freed in free_objfile(). */
752 
753   sym_bfd = bfd_fdopenr (name, NULL, desc);
754   if (!sym_bfd)
755     {
756       close (desc);
757       make_cleanup (free, name);
758       error ("\"%s\": can't open to read symbols: %s.", name,
759 	     bfd_errmsg (bfd_error));
760     }
761 
762   if (!bfd_check_format (sym_bfd, bfd_object))
763     {
764       bfd_close (sym_bfd);	/* This also closes desc */
765       make_cleanup (free, name);
766       error ("\"%s\": can't read symbols: %s.", name,
767 	     bfd_errmsg (bfd_error));
768     }
769 
770   return (sym_bfd);
771 }
772 
773 /* Link a new symtab_fns into the global symtab_fns list.  Called on gdb
774    startup by the _initialize routine in each object file format reader,
775    to register information about each format the the reader is prepared
776    to handle. */
777 
778 void
779 add_symtab_fns (sf)
780      struct sym_fns *sf;
781 {
782   sf->next = symtab_fns;
783   symtab_fns = sf;
784 }
785 
786 
787 /* Initialize to read symbols from the symbol file sym_bfd.  It either
788    returns or calls error().  The result is an initialized struct sym_fns
789    in the objfile structure, that contains cached information about the
790    symbol file.  */
791 
792 static void
793 find_sym_fns (objfile)
794      struct objfile *objfile;
795 {
796   struct sym_fns *sf;
797 
798   for (sf = symtab_fns; sf != NULL; sf = sf -> next)
799     {
800       if (strncmp (bfd_get_target (objfile -> obfd),
801 		    sf -> sym_name, sf -> sym_namelen) == 0)
802 	{
803 	  objfile -> sf = sf;
804 	  return;
805 	}
806     }
807   /* XXX What moron thought this error message was cute? */
808 #ifdef notdef
809   error ("I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown.",
810 	 bfd_get_target (objfile -> obfd));
811 #else
812   error ("Symbol format `%s' unknown.", bfd_get_target (objfile->obfd));
813 #endif
814 }
815 
816 /* This function runs the load command of our current target.  */
817 
818 static void
819 load_command (arg, from_tty)
820      char *arg;
821      int from_tty;
822 {
823   target_load (arg, from_tty);
824 }
825 
826 /* This function allows the addition of incrementally linked object files.
827    It does not modify any state in the target, only in the debugger.  */
828 
829 /* ARGSUSED */
830 static void
831 add_symbol_file_command (args, from_tty)
832      char *args;
833      int from_tty;
834 {
835   char *name = NULL;
836   CORE_ADDR text_addr;
837   char *arg;
838   int readnow = 0;
839   int mapped = 0;
840 
841   dont_repeat ();
842 
843   if (args == NULL)
844     {
845       error ("add-symbol-file takes a file name and an address");
846     }
847 
848   /* Make a copy of the string that we can safely write into. */
849 
850   args = strdup (args);
851   make_cleanup (free, args);
852 
853   /* Pick off any -option args and the file name. */
854 
855   while ((*args != '\000') && (name == NULL))
856     {
857       while (isspace (*args)) {args++;}
858       arg = args;
859       while ((*args != '\000') && !isspace (*args)) {args++;}
860       if (*args != '\000')
861 	{
862 	  *args++ = '\000';
863 	}
864       if (*arg != '-')
865 	{
866 	  name = arg;
867 	}
868       else if (strcmp (arg, "-mapped") == 0)
869 	{
870 	  mapped = 1;
871 	}
872       else if (strcmp (arg, "-readnow") == 0)
873 	{
874 	  readnow = 1;
875 	}
876       else
877 	{
878 	  error ("unknown option `%s'", arg);
879 	}
880     }
881 
882   /* After picking off any options and the file name, args should be
883      left pointing at the remainder of the command line, which should
884      be the address expression to evaluate. */
885 
886   if ((name == NULL) || (*args == '\000') )
887     {
888       error ("add-symbol-file takes a file name and an address");
889     }
890   name = tilde_expand (name);
891   make_cleanup (free, name);
892 
893   text_addr = parse_and_eval_address (args);
894 
895   if (!query ("add symbol table from file \"%s\" at text_addr = %s?\n",
896 	      name, local_hex_string (text_addr)))
897     error ("Not confirmed.");
898 
899   symbol_file_add (name, 0, text_addr, 0, mapped, readnow);
900 }
901 
902 /* Re-read symbols if a symbol-file has changed.  */
903 void
904 reread_symbols ()
905 {
906   struct objfile *objfile;
907   long new_modtime;
908   int reread_one = 0;
909   struct stat new_statbuf;
910   int res;
911 
912   /* With the addition of shared libraries, this should be modified,
913      the load time should be saved in the partial symbol tables, since
914      different tables may come from different source files.  FIXME.
915      This routine should then walk down each partial symbol table
916      and see if the symbol table that it originates from has been changed */
917 
918 the_big_top:
919   for (objfile = object_files; objfile; objfile = objfile->next) {
920     if (objfile->obfd) {
921 #ifdef IBM6000_TARGET
922      /* If this object is from a shared library, then you should
923         stat on the library name, not member name. */
924 
925      if (objfile->obfd->my_archive)
926        res = stat (objfile->obfd->my_archive->filename, &new_statbuf);
927      else
928 #endif
929       res = stat (objfile->name, &new_statbuf);
930       if (res != 0) {
931 	/* FIXME, should use print_sys_errmsg but it's not filtered. */
932 	printf_filtered ("`%s' has disappeared; keeping its symbols.\n",
933 			 objfile->name);
934 	continue;
935       }
936       new_modtime = new_statbuf.st_mtime;
937       if (new_modtime != objfile->mtime) {
938 	printf_filtered ("`%s' has changed; re-reading symbols.\n",
939 			 objfile->name);
940 	/* FIXME, this should use a different command...that would only
941  	   affect this objfile's symbols, and would reset objfile->mtime.
942                 (objfile->mtime = new_modtime;)
943  	   HOWEVER, that command isn't written yet -- so call symbol_file_
944 	   command, and restart the scan from the top, because it munges
945 	   the object_files list.  */
946 	symbol_file_command (objfile->name, 0);
947 	reread_one = 1;
948 	goto the_big_top;	/* Start over.  */
949       }
950     }
951   }
952 
953   if (reread_one)
954     breakpoint_re_set ();
955 }
956 
957 /* Functions to handle complaints during symbol reading.  */
958 
959 /* How many complaints about a particular thing should be printed before
960    we stop whining about it?  Default is no whining at all, since so many
961    systems have ill-constructed symbol files.  */
962 
963 static unsigned stop_whining = 0;
964 
965 /* Should each complaint be self explanatory, or should we assume that
966    a series of complaints is being produced?
967    case 0:  self explanatory message.
968    case 1:  First message of a series that must start off with explanation.
969    case 2:  Subsequent message, when user already knows we are reading
970             symbols and we can just state our piece.  */
971 
972 static int complaint_series = 0;
973 
974 /* Print a complaint about the input symbols, and link the complaint block
975    into a chain for later handling.  */
976 
977 void
978 complain (complaint, val)
979      struct complaint *complaint;
980      char *val;
981 {
982   complaint->counter++;
983   if (complaint->next == 0) {
984     complaint->next = complaint_root->next;
985     complaint_root->next = complaint;
986   }
987   if (complaint->counter > stop_whining)
988     return;
989   wrap_here ("");
990 
991   switch (complaint_series + (info_verbose << 1)) {
992 
993   /* Isolated messages, must be self-explanatory.  */
994   case 0:
995     puts_filtered ("During symbol reading, ");
996     wrap_here("");
997     printf_filtered (complaint->message, val);
998     puts_filtered (".\n");
999     break;
1000 
1001   /* First of a series, without `set verbose'.  */
1002   case 1:
1003     puts_filtered ("During symbol reading...");
1004     printf_filtered (complaint->message, val);
1005     puts_filtered ("...");
1006     wrap_here("");
1007     complaint_series++;
1008     break;
1009 
1010   /* Subsequent messages of a series, or messages under `set verbose'.
1011      (We'll already have produced a "Reading in symbols for XXX..." message
1012       and will clean up at the end with a newline.)  */
1013   default:
1014     printf_filtered (complaint->message, val);
1015     puts_filtered ("...");
1016     wrap_here("");
1017   }
1018 }
1019 
1020 /* Clear out all complaint counters that have ever been incremented.
1021    If sym_reading is 1, be less verbose about successive complaints,
1022    since the messages are appearing all together during a command that
1023    reads symbols (rather than scattered around as psymtabs get fleshed
1024    out into symtabs at random times).  If noisy is 1, we are in a
1025    noisy symbol reading command, and our caller will print enough
1026    context for the user to figure it out.  */
1027 
1028 void
1029 clear_complaints (sym_reading, noisy)
1030      int sym_reading;
1031      int noisy;
1032 {
1033   struct complaint *p;
1034 
1035   for (p = complaint_root->next; p != complaint_root; p = p->next)
1036     p->counter = 0;
1037 
1038   if (!sym_reading && !noisy && complaint_series > 1) {
1039     /* Terminate previous series, since caller won't.  */
1040     puts_filtered ("\n");
1041   }
1042 
1043   complaint_series = sym_reading? 1 + noisy: 0;
1044 }
1045 
1046 enum language
1047 deduce_language_from_filename (filename)
1048      char *filename;
1049 {
1050   char *c = strrchr (filename, '.');
1051 
1052   if (!c) ; /* Get default. */
1053   else if(!strcmp(c,".mod"))
1054      return language_m2;
1055   else if(!strcmp(c,".c"))
1056      return language_c;
1057   else if(!strcmp(c,".cc") || !strcmp(c,".C"))
1058      return language_cplus;
1059 
1060   return language_unknown;		/* default */
1061 }
1062 
1063 /* allocate_symtab:
1064 
1065    Allocate and partly initialize a new symbol table.  Return a pointer
1066    to it.  error() if no space.
1067 
1068    Caller must set these fields:
1069 	LINETABLE(symtab)
1070 	symtab->blockvector
1071 	symtab->dirname
1072 	symtab->free_code
1073 	symtab->free_ptr
1074 	initialize any EXTRA_SYMTAB_INFO
1075 	possibly free_named_symtabs (symtab->filename);
1076  */
1077 
1078 struct symtab *
1079 allocate_symtab (filename, objfile)
1080      char *filename;
1081      struct objfile *objfile;
1082 {
1083   register struct symtab *symtab;
1084 
1085   symtab = (struct symtab *)
1086     obstack_alloc (&objfile -> symbol_obstack, sizeof (struct symtab));
1087   memset (symtab, 0, sizeof (*symtab));
1088   symtab -> filename = obsavestring (filename, strlen (filename),
1089 				     &objfile -> symbol_obstack);
1090   symtab -> fullname = NULL;
1091   symtab -> language = deduce_language_from_filename (filename);
1092 
1093   /* Hook it to the objfile it comes from */
1094 
1095   symtab -> objfile = objfile;
1096   symtab -> next = objfile -> symtabs;
1097   objfile -> symtabs = symtab;
1098 
1099 #ifdef INIT_EXTRA_SYMTAB_INFO
1100   INIT_EXTRA_SYMTAB_INFO (symtab);
1101 #endif
1102 
1103   return (symtab);
1104 }
1105 
1106 struct partial_symtab *
1107 allocate_psymtab (filename, objfile)
1108      char *filename;
1109      struct objfile *objfile;
1110 {
1111   struct partial_symtab *psymtab;
1112 
1113   if (objfile -> free_psymtabs)
1114     {
1115       psymtab = objfile -> free_psymtabs;
1116       objfile -> free_psymtabs = psymtab -> next;
1117     }
1118   else
1119     psymtab = (struct partial_symtab *)
1120       obstack_alloc (&objfile -> psymbol_obstack,
1121 		     sizeof (struct partial_symtab));
1122 
1123   memset (psymtab, 0, sizeof (struct partial_symtab));
1124   psymtab -> filename = obsavestring (filename, strlen (filename),
1125 				      &objfile -> psymbol_obstack);
1126   psymtab -> symtab = NULL;
1127 
1128   /* Hook it to the objfile it comes from */
1129 
1130   psymtab -> objfile = objfile;
1131   psymtab -> next = objfile -> psymtabs;
1132   objfile -> psymtabs = psymtab;
1133 
1134   return (psymtab);
1135 }
1136 
1137 
1138 /* clear_symtab_users_once:
1139 
1140    This function is run after symbol reading, or from a cleanup.
1141    If an old symbol table was obsoleted, the old symbol table
1142    has been blown away, but the other GDB data structures that may
1143    reference it have not yet been cleared or re-directed.  (The old
1144    symtab was zapped, and the cleanup queued, in free_named_symtab()
1145    below.)
1146 
1147    This function can be queued N times as a cleanup, or called
1148    directly; it will do all the work the first time, and then will be a
1149    no-op until the next time it is queued.  This works by bumping a
1150    counter at queueing time.  Much later when the cleanup is run, or at
1151    the end of symbol processing (in case the cleanup is discarded), if
1152    the queued count is greater than the "done-count", we do the work
1153    and set the done-count to the queued count.  If the queued count is
1154    less than or equal to the done-count, we just ignore the call.  This
1155    is needed because reading a single .o file will often replace many
1156    symtabs (one per .h file, for example), and we don't want to reset
1157    the breakpoints N times in the user's face.
1158 
1159    The reason we both queue a cleanup, and call it directly after symbol
1160    reading, is because the cleanup protects us in case of errors, but is
1161    discarded if symbol reading is successful.  */
1162 
1163 static int clear_symtab_users_queued;
1164 static int clear_symtab_users_done;
1165 
1166 void
1167 clear_symtab_users_once ()
1168 {
1169   /* Enforce once-per-`do_cleanups'-semantics */
1170   if (clear_symtab_users_queued <= clear_symtab_users_done)
1171     return;
1172   clear_symtab_users_done = clear_symtab_users_queued;
1173 
1174   printf ("Resetting debugger state after updating old symbol tables\n");
1175 
1176   /* Someday, we should do better than this, by only blowing away
1177      the things that really need to be blown.  */
1178   clear_value_history ();
1179   clear_displays ();
1180   clear_internalvars ();
1181   breakpoint_re_set ();
1182   set_default_breakpoint (0, 0, 0, 0);
1183   current_source_symtab = 0;
1184 }
1185 
1186 /* Delete the specified psymtab, and any others that reference it.  */
1187 
1188 static void
1189 cashier_psymtab (pst)
1190      struct partial_symtab *pst;
1191 {
1192   struct partial_symtab *ps, *pprev;
1193   int i;
1194 
1195   /* Find its previous psymtab in the chain */
1196   for (ps = pst->objfile->psymtabs; ps; ps = ps->next) {
1197     if (ps == pst)
1198       break;
1199     pprev = ps;
1200   }
1201 
1202   if (ps) {
1203     /* Unhook it from the chain.  */
1204     if (ps == pst->objfile->psymtabs)
1205       pst->objfile->psymtabs = ps->next;
1206     else
1207       pprev->next = ps->next;
1208 
1209     /* FIXME, we can't conveniently deallocate the entries in the
1210        partial_symbol lists (global_psymbols/static_psymbols) that
1211        this psymtab points to.  These just take up space until all
1212        the psymtabs are reclaimed.  Ditto the dependencies list and
1213        filename, which are all in the psymbol_obstack.  */
1214 
1215     /* We need to cashier any psymtab that has this one as a dependency... */
1216 again:
1217     for (ps = pst->objfile->psymtabs; ps; ps = ps->next) {
1218       for (i = 0; i < ps->number_of_dependencies; i++) {
1219 	if (ps->dependencies[i] == pst) {
1220 	  cashier_psymtab (ps);
1221 	  goto again;		/* Must restart, chain has been munged. */
1222 	}
1223       }
1224     }
1225   }
1226 }
1227 
1228 /* If a symtab or psymtab for filename NAME is found, free it along
1229    with any dependent breakpoints, displays, etc.
1230    Used when loading new versions of object modules with the "add-file"
1231    command.  This is only called on the top-level symtab or psymtab's name;
1232    it is not called for subsidiary files such as .h files.
1233 
1234    Return value is 1 if we blew away the environment, 0 if not.
1235    FIXME.  The return valu appears to never be used.
1236 
1237    FIXME.  I think this is not the best way to do this.  We should
1238    work on being gentler to the environment while still cleaning up
1239    all stray pointers into the freed symtab.  */
1240 
1241 int
1242 free_named_symtabs (name)
1243      char *name;
1244 {
1245 #if 0
1246   /* FIXME:  With the new method of each objfile having it's own
1247      psymtab list, this function needs serious rethinking.  In particular,
1248      why was it ever necessary to toss psymtabs with specific compilation
1249      unit filenames, as opposed to all psymtabs from a particular symbol
1250      file?  -- fnf
1251      Well, the answer is that some systems permit reloading of particular
1252      compilation units.  We want to blow away any old info about these
1253      compilation units, regardless of which objfiles they arrived in. --gnu.  */
1254 
1255   register struct symtab *s;
1256   register struct symtab *prev;
1257   register struct partial_symtab *ps;
1258   struct blockvector *bv;
1259   int blewit = 0;
1260 
1261   /* We only wack things if the symbol-reload switch is set.  */
1262   if (!symbol_reloading)
1263     return 0;
1264 
1265   /* Some symbol formats have trouble providing file names... */
1266   if (name == 0 || *name == '\0')
1267     return 0;
1268 
1269   /* Look for a psymtab with the specified name.  */
1270 
1271 again2:
1272   for (ps = partial_symtab_list; ps; ps = ps->next) {
1273     if (!strcmp (name, ps->filename)) {
1274       cashier_psymtab (ps);	/* Blow it away...and its little dog, too.  */
1275       goto again2;		/* Must restart, chain has been munged */
1276     }
1277   }
1278 
1279   /* Look for a symtab with the specified name.  */
1280 
1281   for (s = symtab_list; s; s = s->next)
1282     {
1283       if (!strcmp (name, s->filename))
1284 	break;
1285       prev = s;
1286     }
1287 
1288   if (s)
1289     {
1290       if (s == symtab_list)
1291 	symtab_list = s->next;
1292       else
1293 	prev->next = s->next;
1294 
1295       /* For now, queue a delete for all breakpoints, displays, etc., whether
1296 	 or not they depend on the symtab being freed.  This should be
1297 	 changed so that only those data structures affected are deleted.  */
1298 
1299       /* But don't delete anything if the symtab is empty.
1300 	 This test is necessary due to a bug in "dbxread.c" that
1301 	 causes empty symtabs to be created for N_SO symbols that
1302 	 contain the pathname of the object file.  (This problem
1303 	 has been fixed in GDB 3.9x).  */
1304 
1305       bv = BLOCKVECTOR (s);
1306       if (BLOCKVECTOR_NBLOCKS (bv) > 2
1307 	  || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
1308 	  || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)))
1309 	{
1310 	  complain (&oldsyms_complaint, name);
1311 
1312 	  clear_symtab_users_queued++;
1313 	  make_cleanup (clear_symtab_users_once, 0);
1314 	  blewit = 1;
1315 	} else {
1316 	  complain (&empty_symtab_complaint, name);
1317 	}
1318 
1319       free_symtab (s);
1320     }
1321   else
1322     {
1323       /* It is still possible that some breakpoints will be affected
1324 	 even though no symtab was found, since the file might have
1325 	 been compiled without debugging, and hence not be associated
1326 	 with a symtab.  In order to handle this correctly, we would need
1327 	 to keep a list of text address ranges for undebuggable files.
1328 	 For now, we do nothing, since this is a fairly obscure case.  */
1329       ;
1330     }
1331 
1332   /* FIXME, what about the minimal symbol table? */
1333   return blewit;
1334 #else
1335   return (0);
1336 #endif
1337 }
1338 
1339 /* Allocate and partially fill a partial symtab.  It will be
1340    completely filled at the end of the symbol list.
1341 
1342    SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
1343    is the address relative to which its symbols are (incremental) or 0
1344    (normal). */
1345 
1346 
1347 struct partial_symtab *
1348 start_psymtab_common (objfile, section_offsets,
1349 		      filename, textlow, global_syms, static_syms)
1350      struct objfile *objfile;
1351      struct section_offsets *section_offsets;
1352      char *filename;
1353      CORE_ADDR textlow;
1354      struct partial_symbol *global_syms;
1355      struct partial_symbol *static_syms;
1356 {
1357   struct partial_symtab *psymtab;
1358 
1359   psymtab = allocate_psymtab (filename, objfile);
1360   psymtab -> section_offsets = section_offsets;
1361   psymtab -> textlow = textlow;
1362   psymtab -> texthigh = psymtab -> textlow;  /* default */
1363   psymtab -> globals_offset = global_syms - objfile -> global_psymbols.list;
1364   psymtab -> statics_offset = static_syms - objfile -> static_psymbols.list;
1365   return (psymtab);
1366 }
1367 
1368 /* Debugging versions of functions that are usually inline macros
1369    (see symfile.h).  */
1370 
1371 #if 0		/* Don't quite work nowadays... */
1372 
1373 /* Add a symbol with a long value to a psymtab.
1374    Since one arg is a struct, we pass in a ptr and deref it (sigh).  */
1375 
1376 void
1377 add_psymbol_to_list (name, namelength, namespace, class, list, val)
1378      char *name;
1379      int namelength;
1380      enum namespace namespace;
1381      enum address_class class;
1382      struct psymbol_allocation_list *list;
1383      long val;
1384 {
1385   ADD_PSYMBOL_VT_TO_LIST (name, namelength, namespace, class, (*list), val,
1386 			  SYMBOL_VALUE);
1387 }
1388 
1389 /* Add a symbol with a CORE_ADDR value to a psymtab. */
1390 
1391 void
1392 add_psymbol_addr_to_list (name, namelength, namespace, class, list, val)
1393      char *name;
1394      int namelength;
1395      enum namespace namespace;
1396      enum address_class class;
1397      struct psymbol_allocation_list *list;
1398      CORE_ADDR val;
1399 {
1400   ADD_PSYMBOL_VT_TO_LIST (name, namelength, namespace, class, (*list), val,
1401 			  SYMBOL_VALUE_ADDRESS);
1402 }
1403 
1404 #endif /* 0 */
1405 
1406 void
1407 _initialize_symfile ()
1408 {
1409 
1410   add_com ("symbol-file", class_files, symbol_file_command,
1411    "Load symbol table from executable file FILE.\n\
1412 The `file' command can also load symbol tables, as well as setting the file\n\
1413 to execute.");
1414 
1415   add_com ("add-symbol-file", class_files, add_symbol_file_command,
1416    "Load the symbols from FILE, assuming FILE has been dynamically loaded.\n\
1417 The second argument provides the starting address of the file's text.");
1418 
1419   add_com ("load", class_files, load_command,
1420    "Dynamically load FILE into the running program, and record its symbols\n\
1421 for access from GDB.");
1422 
1423   add_show_from_set
1424     (add_set_cmd ("complaints", class_support, var_zinteger,
1425 		  (char *)&stop_whining,
1426 	  "Set max number of complaints about incorrect symbols.",
1427 		  &setlist),
1428      &showlist);
1429 
1430   add_show_from_set
1431     (add_set_cmd ("symbol-reloading", class_support, var_boolean,
1432 		  (char *)&symbol_reloading,
1433 	  "Set dynamic symbol table reloading multiple times in one run.",
1434 		  &setlist),
1435      &showlist);
1436 
1437 }
1438