]> Git Repo - binutils.git/blob - gdb/symfile.c
remove parentdir support
[binutils.git] / gdb / symfile.c
1 /* Generic symbol file reading for the GNU debugger, GDB.
2    Copyright 1990, 1991, 1992, 1993 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 #include "complaints.h"
34 #include "demangle.h"
35
36 #include <obstack.h>
37 #include <assert.h>
38
39 #include <sys/types.h>
40 #include <fcntl.h>
41 #include <string.h>
42 #include <sys/stat.h>
43 #include <ctype.h>
44
45 #ifndef O_BINARY
46 #define O_BINARY 0
47 #endif
48
49 /* Global variables owned by this file */
50
51 int readnow_symbol_files;               /* Read full symbols immediately */
52
53 struct complaint oldsyms_complaint = {
54   "Replacing old symbols for `%s'", 0, 0
55 };
56
57 struct complaint empty_symtab_complaint = {
58   "Empty symbol table found for `%s'", 0, 0
59 };
60
61 /* External variables and functions referenced. */
62
63 extern int info_verbose;
64
65 /* Functions this file defines */
66
67 static void
68 set_initial_language PARAMS ((void));
69
70 static void
71 load_command PARAMS ((char *, int));
72
73 static void
74 add_symbol_file_command PARAMS ((char *, int));
75
76 static void
77 cashier_psymtab PARAMS ((struct partial_symtab *));
78
79 static int
80 compare_psymbols PARAMS ((const void *, const void *));
81
82 static int
83 compare_symbols PARAMS ((const void *, const void *));
84
85 static bfd *
86 symfile_bfd_open PARAMS ((char *));
87
88 static void
89 find_sym_fns PARAMS ((struct objfile *));
90
91 void
92 clear_symtab_users_once PARAMS ((void));
93
94 /* List of all available sym_fns.  On gdb startup, each object file reader
95    calls add_symtab_fns() to register information on each format it is
96    prepared to read. */
97
98 static struct sym_fns *symtab_fns = NULL;
99
100 /* Structures with which to manage partial symbol allocation.  */
101
102 struct psymbol_allocation_list global_psymbols = {0}, static_psymbols = {0};
103
104 /* Flag for whether user will be reloading symbols multiple times.
105    Defaults to ON for VxWorks, otherwise OFF.  */
106
107 #ifdef SYMBOL_RELOADING_DEFAULT
108 int symbol_reloading = SYMBOL_RELOADING_DEFAULT;
109 #else
110 int symbol_reloading = 0;
111 #endif
112
113 \f
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   init_entry_point_info (objfile);
383   find_sym_fns (objfile);
384
385   if (mainline) 
386     {
387       /* Since no error yet, throw away the old symbol table.  */
388
389       if (symfile_objfile != NULL)
390         {
391           free_objfile (symfile_objfile);
392           symfile_objfile = NULL;
393         }
394
395       (*objfile -> sf -> sym_new_init) (objfile);
396     }
397
398   /* Convert addr into an offset rather than an absolute address.
399      We find the lowest address of a loaded segment in the objfile,
400      and assume that <addr> is where that got loaded.  Due to historical
401      precedent, we warn if that doesn't happen to be the ".text"
402      segment.  */
403
404   if (mainline)
405     {
406       addr = 0;         /* No offset from objfile addresses.  */
407     }
408   else
409     {
410       lowest_sect = bfd_get_section_by_name (objfile->obfd, ".text");
411 #if 0
412       lowest_sect = 0;
413       bfd_map_over_sections (objfile->obfd, find_lowest_section,
414                              (PTR) &lowest_sect);
415 #endif
416
417       if (lowest_sect == 0)
418         warning ("no loadable sections found in added symbol-file %s",
419                  objfile->name);
420       else if (0 == bfd_get_section_name (objfile->obfd, lowest_sect)
421                || !STREQ (".text",
422                               bfd_get_section_name (objfile->obfd, lowest_sect)))
423         warning ("Lowest section in %s is %s at 0x%x",
424                  objfile->name,
425                  bfd_section_name (objfile->obfd, lowest_sect),
426                  bfd_section_vma (objfile->obfd, lowest_sect));
427
428       if (lowest_sect)
429         addr -= bfd_section_vma (objfile->obfd, lowest_sect);
430     }
431
432   /* Initialize symbol reading routines for this objfile, allow complaints to
433      appear for this new file, and record how verbose to be, then do the
434      initial symbol reading for this file. */
435
436   (*objfile -> sf -> sym_init) (objfile);
437   clear_complaints (1, verbo);
438
439   /* If objfile->sf->sym_offsets doesn't set this, we don't care
440      (currently).  */
441   objfile->num_sections = 0;  /* krp-FIXME: why zero? */
442   section_offsets = (*objfile -> sf -> sym_offsets) (objfile, addr);
443   objfile->section_offsets = section_offsets;
444
445 #ifndef IBM6000_TARGET
446   /* This is a SVR4/SunOS specific hack, I think.  In any event, it
447      screws RS/6000.  sym_offsets should be doing this sort of thing,
448      because it knows the mapping between bfd sections and
449      section_offsets.  */
450   /* This is a hack.  As far as I can tell, section offsets are not
451      target dependent.  They are all set to addr with a couple of
452      exceptions.  The exceptions are sysvr4 shared libraries, whose
453      offsets are kept in solib structures anyway and rs6000 xcoff
454      which handles shared libraries in a completely unique way.
455
456      Section offsets are built similarly, except that they are built
457      by adding addr in all cases because there is no clear mapping
458      from section_offsets into actual sections.  Note that solib.c
459      has a different algorythm for finding section offsets.
460
461      These should probably all be collapsed into some target
462      independent form of shared library support.  FIXME.  */
463
464   if (addr)
465     {
466       struct obj_section *s;
467
468       for (s = objfile->sections; s < objfile->sections_end; ++s)
469         {
470           s->addr -= s->offset;
471           s->addr += addr;
472           s->endaddr -= s->offset;
473           s->endaddr += addr;
474           s->offset += addr;
475         }
476     }
477 #endif /* not IBM6000_TARGET */
478
479   (*objfile -> sf -> sym_read) (objfile, section_offsets, mainline);
480
481   /* Don't allow char * to have a typename (else would get caddr_t.)  */
482   /* Ditto void *.  FIXME should do this for all the builtin types.  */
483
484   TYPE_NAME (lookup_pointer_type (builtin_type_char)) = 0;
485   TYPE_NAME (lookup_pointer_type (builtin_type_void)) = 0;
486
487   /* Mark the objfile has having had initial symbol read attempted.  Note
488      that this does not mean we found any symbols... */
489
490   objfile -> flags |= OBJF_SYMS;
491 }
492
493 /* Perform required actions immediately after either reading in the initial
494    symbols for a new objfile, or mapping in the symbols from a reusable
495    objfile. */
496    
497 void
498 new_symfile_objfile (objfile, mainline, verbo)
499      struct objfile *objfile;
500      int mainline;
501      int verbo;
502 {
503   if (mainline)
504     {
505       /* OK, make it the "real" symbol file.  */
506       symfile_objfile = objfile;
507     }
508
509   /* If we have wiped out any old symbol tables, clean up.  */
510   clear_symtab_users_once ();
511
512   /* We're done reading the symbol file; finish off complaints.  */
513   clear_complaints (0, verbo);
514
515   /* Fixup all the breakpoints that may have been redefined by this
516      symbol file. */
517
518   breakpoint_re_set ();
519 }
520
521 /* Process a symbol file, as either the main file or as a dynamically
522    loaded file.
523
524    NAME is the file name (which will be tilde-expanded and made
525    absolute herein) (but we don't free or modify NAME itself).
526    FROM_TTY says how verbose to be.  MAINLINE specifies whether this
527    is the main symbol file, or whether it's an extra symbol file such
528    as dynamically loaded code.  If !mainline, ADDR is the address
529    where the text segment was loaded.
530
531    Upon success, returns a pointer to the objfile that was added.
532    Upon failure, jumps back to command level (never returns). */
533
534 struct objfile *
535 symbol_file_add (name, from_tty, addr, mainline, mapped, readnow)
536      char *name;
537      int from_tty;
538      CORE_ADDR addr;
539      int mainline;
540      int mapped;
541      int readnow;
542 {
543   struct objfile *objfile;
544   struct partial_symtab *psymtab;
545   bfd *abfd;
546
547   /* Open a bfd for the file, and give user a chance to burp if we'd be
548      interactively wiping out any existing symbols.  */
549
550   abfd = symfile_bfd_open (name);
551
552   if ((have_full_symbols () || have_partial_symbols ())
553       && mainline
554       && from_tty
555       && !query ("Load new symbol table from \"%s\"? ", name))
556       error ("Not confirmed.");
557       
558   /* Getting new symbols may change our opinion about what is
559      frameless.  */
560
561   reinit_frame_cache ();
562
563   objfile = allocate_objfile (abfd, mapped);
564
565   /* If the objfile uses a mapped symbol file, and we have a psymtab for
566      it, then skip reading any symbols at this time. */
567
568   if ((objfile -> flags & OBJF_MAPPED) && (objfile -> flags & OBJF_SYMS))
569     {
570       /* We mapped in an existing symbol table file that already has had
571          initial symbol reading performed, so we can skip that part.  Notify
572          the user that instead of reading the symbols, they have been mapped.
573          */
574       if (from_tty || info_verbose)
575         {
576           printf_filtered ("Mapped symbols for %s...", name);
577           wrap_here ("");
578           fflush (stdout);
579         }
580       init_entry_point_info (objfile);
581       find_sym_fns (objfile);
582     }
583   else
584     {
585       /* We either created a new mapped symbol table, mapped an existing
586          symbol table file which has not had initial symbol reading
587          performed, or need to read an unmapped symbol table. */
588       if (from_tty || info_verbose)
589         {
590           printf_filtered ("Reading symbols from %s...", name);
591           wrap_here ("");
592           fflush (stdout);
593         }
594       syms_from_objfile (objfile, addr, mainline, from_tty);
595     }      
596
597   new_symfile_objfile (objfile, mainline, from_tty);
598
599   /* We now have at least a partial symbol table.  Check to see if the
600      user requested that all symbols be read on initial access via either
601      the gdb startup command line or on a per symbol file basis.  Expand
602      all partial symbol tables for this objfile if so. */
603
604   if (readnow || readnow_symbol_files)
605     {
606       if (from_tty || info_verbose)
607         {
608           printf_filtered ("expanding to full symbols...");
609           wrap_here ("");
610           fflush (stdout);
611         }
612
613       for (psymtab = objfile -> psymtabs;
614            psymtab != NULL;
615            psymtab = psymtab -> next)
616         {
617           psymtab_to_symtab (psymtab);
618         }
619     }
620
621   if (from_tty || info_verbose)
622     {
623       printf_filtered ("done.\n");
624       fflush (stdout);
625     }
626
627   return (objfile);
628 }
629
630 /* This is the symbol-file command.  Read the file, analyze its symbols,
631    and add a struct symtab to a symtab list.  */
632
633 void
634 symbol_file_command (args, from_tty)
635      char *args;
636      int from_tty;
637 {
638   char **argv;
639   char *name = NULL;
640   struct cleanup *cleanups;
641   int mapped = 0;
642   int readnow = 0;
643
644   dont_repeat ();
645
646   if (args == NULL)
647     {
648       if ((have_full_symbols () || have_partial_symbols ())
649           && from_tty
650           && !query ("Discard symbol table from `%s'? ",
651                      symfile_objfile -> name))
652         error ("Not confirmed.");
653       free_all_objfiles ();
654       symfile_objfile = NULL;
655       current_source_symtab = NULL;
656       current_source_line = 0;
657       if (from_tty)
658         {
659           printf ("No symbol file now.\n");
660         }
661     }
662   else
663     {
664       if ((argv = buildargv (args)) == NULL)
665         {
666           nomem (0);
667         }
668       cleanups = make_cleanup (freeargv, (char *) argv);
669       while (*argv != NULL)
670         {
671           if (STREQ (*argv, "-mapped"))
672             {
673               mapped = 1;
674             }
675           else if (STREQ (*argv, "-readnow"))
676             {
677               readnow = 1;
678             }
679           else if (**argv == '-')
680             {
681               error ("unknown option `%s'", *argv);
682             }
683           else
684             {
685               name = *argv;
686             }
687           argv++;
688         }
689
690       if (name == NULL)
691         {
692           error ("no symbol file name was specified");
693         }
694       else
695         {
696           symbol_file_add (name, from_tty, (CORE_ADDR)0, 1, mapped, readnow);
697           set_initial_language ();
698         }
699       do_cleanups (cleanups);
700     }
701 }
702
703 /* Set the initial language.
704
705    A better solution would be to record the language in the psymtab when reading
706    partial symbols, and then use it (if known) to set the language.  This would
707    be a win for formats that encode the language in an easily discoverable place,
708    such as DWARF.  For stabs, we can jump through hoops looking for specially
709    named symbols or try to intuit the language from the specific type of stabs
710    we find, but we can't do that until later when we read in full symbols.
711    FIXME.  */
712
713 static void
714 set_initial_language ()
715 {
716   struct partial_symtab *pst;
717   enum language lang = language_unknown;        
718
719   pst = find_main_psymtab ();
720   if (pst != NULL)
721     {
722       if (pst -> filename != NULL)
723         {
724           lang = deduce_language_from_filename (pst -> filename);
725         }
726       if (lang == language_unknown)
727         {
728             /* Make C the default language */
729             lang = language_c;
730         }
731       set_language (lang);
732       expected_language = current_language;     /* Don't warn the user */
733     }
734 }
735
736 /* Open file specified by NAME and hand it off to BFD for preliminary
737    analysis.  Result is a newly initialized bfd *, which includes a newly
738    malloc'd` copy of NAME (tilde-expanded and made absolute).
739    In case of trouble, error() is called.  */
740
741 static bfd *
742 symfile_bfd_open (name)
743      char *name;
744 {
745   bfd *sym_bfd;
746   int desc;
747   char *absolute_name;
748
749   name = tilde_expand (name);   /* Returns 1st new malloc'd copy */
750
751   /* Look down path for it, allocate 2nd new malloc'd copy.  */
752   desc = openp (getenv ("PATH"), 1, name, O_RDONLY | O_BINARY, 0, &absolute_name);
753   if (desc < 0)
754     {
755       make_cleanup (free, name);
756       perror_with_name (name);
757     }
758   free (name);                  /* Free 1st new malloc'd copy */
759   name = absolute_name;         /* Keep 2nd malloc'd copy in bfd */
760                                 /* It'll be freed in free_objfile(). */
761
762   sym_bfd = bfd_fdopenr (name, NULL, desc);
763   if (!sym_bfd)
764     {
765       close (desc);
766       make_cleanup (free, name);
767       error ("\"%s\": can't open to read symbols: %s.", name,
768              bfd_errmsg (bfd_error));
769     }
770   sym_bfd->cacheable = true;
771
772   if (!bfd_check_format (sym_bfd, bfd_object))
773     {
774       bfd_close (sym_bfd);      /* This also closes desc */
775       make_cleanup (free, name);
776       error ("\"%s\": can't read symbols: %s.", name,
777              bfd_errmsg (bfd_error));
778     }
779
780   return (sym_bfd);
781 }
782
783 /* Link a new symtab_fns into the global symtab_fns list.  Called on gdb
784    startup by the _initialize routine in each object file format reader,
785    to register information about each format the the reader is prepared
786    to handle. */
787
788 void
789 add_symtab_fns (sf)
790      struct sym_fns *sf;
791 {
792   sf->next = symtab_fns;
793   symtab_fns = sf;
794 }
795
796
797 /* Initialize to read symbols from the symbol file sym_bfd.  It either
798    returns or calls error().  The result is an initialized struct sym_fns
799    in the objfile structure, that contains cached information about the
800    symbol file.  */
801
802 static void
803 find_sym_fns (objfile)
804      struct objfile *objfile;
805 {
806   struct sym_fns *sf;
807
808   for (sf = symtab_fns; sf != NULL; sf = sf -> next)
809     {
810       if (strncmp (bfd_get_target (objfile -> obfd),
811                     sf -> sym_name, sf -> sym_namelen) == 0)
812         {
813           objfile -> sf = sf;
814           return;
815         }
816     }
817   error ("I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown.",
818          bfd_get_target (objfile -> obfd));
819 }
820 \f
821 /* This function runs the load command of our current target.  */
822
823 static void
824 load_command (arg, from_tty)
825      char *arg;
826      int from_tty;
827 {
828   target_load (arg, from_tty);
829 }
830
831 /* This function allows the addition of incrementally linked object files.
832    It does not modify any state in the target, only in the debugger.  */
833
834 /* ARGSUSED */
835 static void
836 add_symbol_file_command (args, from_tty)
837      char *args;
838      int from_tty;
839 {
840   char *name = NULL;
841   CORE_ADDR text_addr;
842   char *arg;
843   int readnow = 0;
844   int mapped = 0;
845   
846   dont_repeat ();
847
848   if (args == NULL)
849     {
850       error ("add-symbol-file takes a file name and an address");
851     }
852
853   /* Make a copy of the string that we can safely write into. */
854
855   args = strdup (args);
856   make_cleanup (free, args);
857
858   /* Pick off any -option args and the file name. */
859
860   while ((*args != '\000') && (name == NULL))
861     {
862       while (isspace (*args)) {args++;}
863       arg = args;
864       while ((*args != '\000') && !isspace (*args)) {args++;}
865       if (*args != '\000')
866         {
867           *args++ = '\000';
868         }
869       if (*arg != '-')
870         {
871           name = arg;
872         }
873       else if (STREQ (arg, "-mapped"))
874         {
875           mapped = 1;
876         }
877       else if (STREQ (arg, "-readnow"))
878         {
879           readnow = 1;
880         }
881       else
882         {
883           error ("unknown option `%s'", arg);
884         }
885     }
886
887   /* After picking off any options and the file name, args should be
888      left pointing at the remainder of the command line, which should
889      be the address expression to evaluate. */
890
891   if ((name == NULL) || (*args == '\000') )
892     {
893       error ("add-symbol-file takes a file name and an address");
894     }
895   name = tilde_expand (name);
896   make_cleanup (free, name);
897
898   text_addr = parse_and_eval_address (args);
899
900   if (!query ("add symbol table from file \"%s\" at text_addr = %s?\n",
901               name, local_hex_string (text_addr)))
902     error ("Not confirmed.");
903
904   symbol_file_add (name, 0, text_addr, 0, mapped, readnow);
905 }
906 \f
907 /* Re-read symbols if a symbol-file has changed.  */
908 void
909 reread_symbols ()
910 {
911   struct objfile *objfile;
912   long new_modtime;
913   int reread_one = 0;
914   struct stat new_statbuf;
915   int res;
916
917   /* With the addition of shared libraries, this should be modified,
918      the load time should be saved in the partial symbol tables, since
919      different tables may come from different source files.  FIXME.
920      This routine should then walk down each partial symbol table
921      and see if the symbol table that it originates from has been changed */
922
923 the_big_top:
924   for (objfile = object_files; objfile; objfile = objfile->next) {
925     if (objfile->obfd) {
926 #ifdef IBM6000_TARGET
927      /* If this object is from a shared library, then you should
928         stat on the library name, not member name. */
929
930      if (objfile->obfd->my_archive)
931        res = stat (objfile->obfd->my_archive->filename, &new_statbuf);
932      else
933 #endif
934       res = stat (objfile->name, &new_statbuf);
935       if (res != 0) {
936         /* FIXME, should use print_sys_errmsg but it's not filtered. */
937         printf_filtered ("`%s' has disappeared; keeping its symbols.\n",
938                          objfile->name);
939         continue;
940       }
941       new_modtime = new_statbuf.st_mtime;
942       if (new_modtime != objfile->mtime) {
943         printf_filtered ("`%s' has changed; re-reading symbols.\n",
944                          objfile->name);
945         /* FIXME, this should use a different command...that would only
946            affect this objfile's symbols, and would reset objfile->mtime.
947                 (objfile->mtime = new_modtime;)
948            HOWEVER, that command isn't written yet -- so call symbol_file_
949            command, and restart the scan from the top, because it munges
950            the object_files list.  */
951         symbol_file_command (objfile->name, 0);
952         reread_one = 1;
953         goto the_big_top;       /* Start over.  */
954       }
955     }
956   }
957
958   if (reread_one)
959     breakpoint_re_set ();
960 }
961
962 \f
963 enum language
964 deduce_language_from_filename (filename)
965      char *filename;
966 {
967   char *c;
968   
969   if (0 == filename) 
970     ; /* Get default */
971   else if (0 == (c = strrchr (filename, '.')))
972     ; /* Get default. */
973   else if(STREQ(c,".mod"))
974     return language_m2;
975   else if(STREQ(c,".c"))
976     return language_c;
977   else if(STREQ(c,".cc") || STREQ(c,".C"))
978     return language_cplus;
979   else if(STREQ(c,".ch") || STREQ(c,".c186") || STREQ(c,".c286"))
980     return language_chill;
981
982   return language_unknown;              /* default */
983 }
984 \f
985 /* allocate_symtab:
986
987    Allocate and partly initialize a new symbol table.  Return a pointer
988    to it.  error() if no space.
989
990    Caller must set these fields:
991         LINETABLE(symtab)
992         symtab->blockvector
993         symtab->dirname
994         symtab->free_code
995         symtab->free_ptr
996         initialize any EXTRA_SYMTAB_INFO
997         possibly free_named_symtabs (symtab->filename);
998  */
999
1000 struct symtab *
1001 allocate_symtab (filename, objfile)
1002      char *filename;
1003      struct objfile *objfile;
1004 {
1005   register struct symtab *symtab;
1006
1007   symtab = (struct symtab *)
1008     obstack_alloc (&objfile -> symbol_obstack, sizeof (struct symtab));
1009   memset (symtab, 0, sizeof (*symtab));
1010   symtab -> filename = obsavestring (filename, strlen (filename),
1011                                      &objfile -> symbol_obstack);
1012   symtab -> fullname = NULL;
1013   symtab -> language = deduce_language_from_filename (filename);
1014
1015   /* Hook it to the objfile it comes from */
1016
1017   symtab -> objfile = objfile;
1018   symtab -> next = objfile -> symtabs;
1019   objfile -> symtabs = symtab;
1020
1021 #ifdef INIT_EXTRA_SYMTAB_INFO
1022   INIT_EXTRA_SYMTAB_INFO (symtab);
1023 #endif
1024
1025   return (symtab);
1026 }
1027
1028 struct partial_symtab *
1029 allocate_psymtab (filename, objfile)
1030      char *filename;
1031      struct objfile *objfile;
1032 {
1033   struct partial_symtab *psymtab;
1034
1035   if (objfile -> free_psymtabs)
1036     {
1037       psymtab = objfile -> free_psymtabs;
1038       objfile -> free_psymtabs = psymtab -> next;
1039     }
1040   else
1041     psymtab = (struct partial_symtab *)
1042       obstack_alloc (&objfile -> psymbol_obstack,
1043                      sizeof (struct partial_symtab));
1044
1045   memset (psymtab, 0, sizeof (struct partial_symtab));
1046   psymtab -> filename = obsavestring (filename, strlen (filename),
1047                                       &objfile -> psymbol_obstack);
1048   psymtab -> symtab = NULL;
1049
1050   /* Hook it to the objfile it comes from */
1051
1052   psymtab -> objfile = objfile;
1053   psymtab -> next = objfile -> psymtabs;
1054   objfile -> psymtabs = psymtab;
1055   
1056   return (psymtab);
1057 }
1058
1059 \f
1060 /* clear_symtab_users_once:
1061
1062    This function is run after symbol reading, or from a cleanup.
1063    If an old symbol table was obsoleted, the old symbol table
1064    has been blown away, but the other GDB data structures that may 
1065    reference it have not yet been cleared or re-directed.  (The old
1066    symtab was zapped, and the cleanup queued, in free_named_symtab()
1067    below.)
1068
1069    This function can be queued N times as a cleanup, or called
1070    directly; it will do all the work the first time, and then will be a
1071    no-op until the next time it is queued.  This works by bumping a
1072    counter at queueing time.  Much later when the cleanup is run, or at
1073    the end of symbol processing (in case the cleanup is discarded), if
1074    the queued count is greater than the "done-count", we do the work
1075    and set the done-count to the queued count.  If the queued count is
1076    less than or equal to the done-count, we just ignore the call.  This
1077    is needed because reading a single .o file will often replace many
1078    symtabs (one per .h file, for example), and we don't want to reset
1079    the breakpoints N times in the user's face.
1080
1081    The reason we both queue a cleanup, and call it directly after symbol
1082    reading, is because the cleanup protects us in case of errors, but is
1083    discarded if symbol reading is successful.  */
1084
1085 static int clear_symtab_users_queued;
1086 static int clear_symtab_users_done;
1087
1088 void
1089 clear_symtab_users_once ()
1090 {
1091   /* Enforce once-per-`do_cleanups'-semantics */
1092   if (clear_symtab_users_queued <= clear_symtab_users_done)
1093     return;
1094   clear_symtab_users_done = clear_symtab_users_queued;
1095
1096   printf ("Resetting debugger state after updating old symbol tables\n");
1097
1098   /* Someday, we should do better than this, by only blowing away
1099      the things that really need to be blown.  */
1100   clear_value_history ();
1101   clear_displays ();
1102   clear_internalvars ();
1103   breakpoint_re_set ();
1104   set_default_breakpoint (0, 0, 0, 0);
1105   current_source_symtab = 0;
1106 }
1107
1108 /* Delete the specified psymtab, and any others that reference it.  */
1109
1110 static void
1111 cashier_psymtab (pst)
1112      struct partial_symtab *pst;
1113 {
1114   struct partial_symtab *ps, *pprev;
1115   int i;
1116
1117   /* Find its previous psymtab in the chain */
1118   for (ps = pst->objfile->psymtabs; ps; ps = ps->next) {
1119     if (ps == pst)
1120       break;
1121     pprev = ps;
1122   }
1123
1124   if (ps) {
1125     /* Unhook it from the chain.  */
1126     if (ps == pst->objfile->psymtabs)
1127       pst->objfile->psymtabs = ps->next;
1128     else
1129       pprev->next = ps->next;
1130
1131     /* FIXME, we can't conveniently deallocate the entries in the
1132        partial_symbol lists (global_psymbols/static_psymbols) that
1133        this psymtab points to.  These just take up space until all
1134        the psymtabs are reclaimed.  Ditto the dependencies list and
1135        filename, which are all in the psymbol_obstack.  */
1136
1137     /* We need to cashier any psymtab that has this one as a dependency... */
1138 again:
1139     for (ps = pst->objfile->psymtabs; ps; ps = ps->next) {
1140       for (i = 0; i < ps->number_of_dependencies; i++) {
1141         if (ps->dependencies[i] == pst) {
1142           cashier_psymtab (ps);
1143           goto again;           /* Must restart, chain has been munged. */
1144         }
1145       }
1146     }
1147   }
1148 }
1149
1150 /* If a symtab or psymtab for filename NAME is found, free it along
1151    with any dependent breakpoints, displays, etc.
1152    Used when loading new versions of object modules with the "add-file"
1153    command.  This is only called on the top-level symtab or psymtab's name;
1154    it is not called for subsidiary files such as .h files.
1155
1156    Return value is 1 if we blew away the environment, 0 if not.
1157    FIXME.  The return valu appears to never be used.
1158
1159    FIXME.  I think this is not the best way to do this.  We should
1160    work on being gentler to the environment while still cleaning up
1161    all stray pointers into the freed symtab.  */
1162
1163 int
1164 free_named_symtabs (name)
1165      char *name;
1166 {
1167 #if 0
1168   /* FIXME:  With the new method of each objfile having it's own
1169      psymtab list, this function needs serious rethinking.  In particular,
1170      why was it ever necessary to toss psymtabs with specific compilation
1171      unit filenames, as opposed to all psymtabs from a particular symbol
1172      file?  -- fnf
1173      Well, the answer is that some systems permit reloading of particular
1174      compilation units.  We want to blow away any old info about these
1175      compilation units, regardless of which objfiles they arrived in. --gnu.  */
1176
1177   register struct symtab *s;
1178   register struct symtab *prev;
1179   register struct partial_symtab *ps;
1180   struct blockvector *bv;
1181   int blewit = 0;
1182
1183   /* We only wack things if the symbol-reload switch is set.  */
1184   if (!symbol_reloading)
1185     return 0;
1186
1187   /* Some symbol formats have trouble providing file names... */
1188   if (name == 0 || *name == '\0')
1189     return 0;
1190
1191   /* Look for a psymtab with the specified name.  */
1192
1193 again2:
1194   for (ps = partial_symtab_list; ps; ps = ps->next) {
1195     if (STREQ (name, ps->filename)) {
1196       cashier_psymtab (ps);     /* Blow it away...and its little dog, too.  */
1197       goto again2;              /* Must restart, chain has been munged */
1198     }
1199   }
1200
1201   /* Look for a symtab with the specified name.  */
1202
1203   for (s = symtab_list; s; s = s->next)
1204     {
1205       if (STREQ (name, s->filename))
1206         break;
1207       prev = s;
1208     }
1209
1210   if (s)
1211     {
1212       if (s == symtab_list)
1213         symtab_list = s->next;
1214       else
1215         prev->next = s->next;
1216
1217       /* For now, queue a delete for all breakpoints, displays, etc., whether
1218          or not they depend on the symtab being freed.  This should be
1219          changed so that only those data structures affected are deleted.  */
1220
1221       /* But don't delete anything if the symtab is empty.
1222          This test is necessary due to a bug in "dbxread.c" that
1223          causes empty symtabs to be created for N_SO symbols that
1224          contain the pathname of the object file.  (This problem
1225          has been fixed in GDB 3.9x).  */
1226
1227       bv = BLOCKVECTOR (s);
1228       if (BLOCKVECTOR_NBLOCKS (bv) > 2
1229           || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
1230           || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)))
1231         {
1232           complain (&oldsyms_complaint, name);
1233
1234           clear_symtab_users_queued++;
1235           make_cleanup (clear_symtab_users_once, 0);
1236           blewit = 1;
1237         } else {
1238           complain (&empty_symtab_complaint, name);
1239         }
1240
1241       free_symtab (s);
1242     }
1243   else
1244     {
1245       /* It is still possible that some breakpoints will be affected
1246          even though no symtab was found, since the file might have
1247          been compiled without debugging, and hence not be associated
1248          with a symtab.  In order to handle this correctly, we would need
1249          to keep a list of text address ranges for undebuggable files.
1250          For now, we do nothing, since this is a fairly obscure case.  */
1251       ;
1252     }
1253
1254   /* FIXME, what about the minimal symbol table? */
1255   return blewit;
1256 #else
1257   return (0);
1258 #endif
1259 }
1260 \f
1261 /* Allocate and partially fill a partial symtab.  It will be
1262    completely filled at the end of the symbol list.
1263
1264    SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
1265    is the address relative to which its symbols are (incremental) or 0
1266    (normal). */
1267
1268
1269 struct partial_symtab *
1270 start_psymtab_common (objfile, section_offsets,
1271                       filename, textlow, global_syms, static_syms)
1272      struct objfile *objfile;
1273      struct section_offsets *section_offsets;
1274      char *filename;
1275      CORE_ADDR textlow;
1276      struct partial_symbol *global_syms;
1277      struct partial_symbol *static_syms;
1278 {
1279   struct partial_symtab *psymtab;
1280
1281   psymtab = allocate_psymtab (filename, objfile);
1282   psymtab -> section_offsets = section_offsets;
1283   psymtab -> textlow = textlow;
1284   psymtab -> texthigh = psymtab -> textlow;  /* default */
1285   psymtab -> globals_offset = global_syms - objfile -> global_psymbols.list;
1286   psymtab -> statics_offset = static_syms - objfile -> static_psymbols.list;
1287   return (psymtab);
1288 }
1289 \f
1290 /* Debugging versions of functions that are usually inline macros
1291    (see symfile.h).  */
1292
1293 #if !INLINE_ADD_PSYMBOL
1294
1295 /* Add a symbol with a long value to a psymtab.
1296    Since one arg is a struct, we pass in a ptr and deref it (sigh).  */
1297
1298 void
1299 add_psymbol_to_list (name, namelength, namespace, class, list, val, language,
1300                      objfile)
1301      char *name;
1302      int namelength;
1303      enum namespace namespace;
1304      enum address_class class;
1305      struct psymbol_allocation_list *list;
1306      long val;
1307      enum language language;
1308      struct objfile *objfile;
1309 {
1310   register struct partial_symbol *psym;
1311   register char *demangled_name;
1312
1313   if (list->next >= list->list + list->size)
1314     {
1315       extend_psymbol_list (list,objfile);
1316     }
1317   psym = list->next++;
1318   
1319   SYMBOL_NAME (psym) =
1320     (char *) obstack_alloc (&objfile->psymbol_obstack, namelength + 1);
1321   memcpy (SYMBOL_NAME (psym), name, namelength);
1322   SYMBOL_NAME (psym)[namelength] = '\0';
1323   SYMBOL_VALUE (psym) = val;
1324   SYMBOL_LANGUAGE (psym) = language;
1325   PSYMBOL_NAMESPACE (psym) = namespace;
1326   PSYMBOL_CLASS (psym) = class;
1327   SYMBOL_INIT_DEMANGLED_NAME (psym, &objfile->psymbol_obstack);
1328 }
1329
1330 /* Add a symbol with a CORE_ADDR value to a psymtab. */
1331
1332 void
1333 add_psymbol_addr_to_list (name, namelength, namespace, class, list, val,
1334                           language, objfile)
1335      char *name;
1336      int namelength;
1337      enum namespace namespace;
1338      enum address_class class;
1339      struct psymbol_allocation_list *list;
1340      CORE_ADDR val;
1341      enum language language;
1342      struct objfile *objfile;
1343 {
1344   register struct partial_symbol *psym;
1345   register char *demangled_name;
1346
1347   if (list->next >= list->list + list->size)
1348     {
1349       extend_psymbol_list (list,objfile);
1350     }
1351   psym = list->next++;
1352   
1353   SYMBOL_NAME (psym) =
1354     (char *) obstack_alloc (&objfile->psymbol_obstack, namelength + 1);
1355   memcpy (SYMBOL_NAME (psym), name, namelength);
1356   SYMBOL_NAME (psym)[namelength] = '\0';
1357   SYMBOL_VALUE_ADDRESS (psym) = val;
1358   SYMBOL_LANGUAGE (psym) = language;
1359   PSYMBOL_NAMESPACE (psym) = namespace;
1360   PSYMBOL_CLASS (psym) = class;
1361   SYMBOL_INIT_DEMANGLED_NAME (psym, &objfile->psymbol_obstack);
1362 }
1363
1364 #endif /* !INLINE_ADD_PSYMBOL */
1365
1366 \f
1367 void
1368 _initialize_symfile ()
1369 {
1370
1371   add_com ("symbol-file", class_files, symbol_file_command,
1372    "Load symbol table from executable file FILE.\n\
1373 The `file' command can also load symbol tables, as well as setting the file\n\
1374 to execute.");
1375
1376   add_com ("add-symbol-file", class_files, add_symbol_file_command,
1377    "Load the symbols from FILE, assuming FILE has been dynamically loaded.\n\
1378 The second argument provides the starting address of the file's text.");
1379
1380   add_com ("load", class_files, load_command,
1381    "Dynamically load FILE into the running program, and record its symbols\n\
1382 for access from GDB.");
1383
1384   add_show_from_set
1385     (add_set_cmd ("symbol-reloading", class_support, var_boolean,
1386                   (char *)&symbol_reloading,
1387           "Set dynamic symbol table reloading multiple times in one run.",
1388                   &setlist),
1389      &showlist);
1390
1391 }
This page took 0.103365 seconds and 4 git commands to generate.