xref: /dragonfly/contrib/gdb-7/gdb/buildsym.c (revision dca3c15d)
1 /* Support routines for building symbol tables in GDB's internal format.
2    Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5 
6    This file is part of GDB.
7 
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12 
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17 
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20 
21 /* This module provides subroutines used for creating and adding to
22    the symbol table.  These routines are called from various symbol-
23    file-reading routines.
24 
25    Routines to support specific debugging information formats (stabs,
26    DWARF, etc) belong somewhere else. */
27 
28 #include "defs.h"
29 #include "bfd.h"
30 #include "gdb_obstack.h"
31 #include "symtab.h"
32 #include "symfile.h"
33 #include "objfiles.h"
34 #include "gdbtypes.h"
35 #include "gdb_assert.h"
36 #include "complaints.h"
37 #include "gdb_string.h"
38 #include "expression.h"		/* For "enum exp_opcode" used by... */
39 #include "bcache.h"
40 #include "filenames.h"		/* For DOSish file names */
41 #include "macrotab.h"
42 #include "demangle.h"		/* Needed by SYMBOL_INIT_DEMANGLED_NAME.  */
43 #include "block.h"
44 #include "cp-support.h"
45 #include "dictionary.h"
46 #include "addrmap.h"
47 
48 /* Ask buildsym.h to define the vars it normally declares `extern'.  */
49 #define	EXTERN
50 /**/
51 #include "buildsym.h"		/* Our own declarations */
52 #undef	EXTERN
53 
54 /* For cleanup_undefined_types and finish_global_stabs (somewhat
55    questionable--see comment where we call them).  */
56 
57 #include "stabsread.h"
58 
59 /* List of subfiles.  */
60 
61 static struct subfile *subfiles;
62 
63 /* List of free `struct pending' structures for reuse.  */
64 
65 static struct pending *free_pendings;
66 
67 /* Non-zero if symtab has line number info.  This prevents an
68    otherwise empty symtab from being tossed.  */
69 
70 static int have_line_numbers;
71 
72 /* The mutable address map for the compilation unit whose symbols
73    we're currently reading.  The symtabs' shared blockvector will
74    point to a fixed copy of this.  */
75 static struct addrmap *pending_addrmap;
76 
77 /* The obstack on which we allocate pending_addrmap.
78    If pending_addrmap is NULL, this is uninitialized; otherwise, it is
79    initialized (and holds pending_addrmap).  */
80 static struct obstack pending_addrmap_obstack;
81 
82 /* Non-zero if we recorded any ranges in the addrmap that are
83    different from those in the blockvector already.  We set this to
84    zero when we start processing a symfile, and if it's still zero at
85    the end, then we just toss the addrmap.  */
86 static int pending_addrmap_interesting;
87 
88 
89 static int compare_line_numbers (const void *ln1p, const void *ln2p);
90 
91 
92 /* Initial sizes of data structures.  These are realloc'd larger if
93    needed, and realloc'd down to the size actually used, when
94    completed.  */
95 
96 #define	INITIAL_CONTEXT_STACK_SIZE	10
97 #define	INITIAL_LINE_VECTOR_LENGTH	1000
98 
99 
100 /* maintain the lists of symbols and blocks */
101 
102 /* Add a pending list to free_pendings. */
103 void
104 add_free_pendings (struct pending *list)
105 {
106   struct pending *link = list;
107 
108   if (list)
109     {
110       while (link->next) link = link->next;
111       link->next = free_pendings;
112       free_pendings = list;
113     }
114 }
115 
116 /* Add a symbol to one of the lists of symbols.  While we're at it, if
117    we're in the C++ case and don't have full namespace debugging info,
118    check to see if it references an anonymous namespace; if so, add an
119    appropriate using directive.  */
120 
121 void
122 add_symbol_to_list (struct symbol *symbol, struct pending **listhead)
123 {
124   struct pending *link;
125 
126   /* If this is an alias for another symbol, don't add it.  */
127   if (symbol->ginfo.name && symbol->ginfo.name[0] == '#')
128     return;
129 
130   /* We keep PENDINGSIZE symbols in each link of the list. If we
131      don't have a link with room in it, add a new link.  */
132   if (*listhead == NULL || (*listhead)->nsyms == PENDINGSIZE)
133     {
134       if (free_pendings)
135 	{
136 	  link = free_pendings;
137 	  free_pendings = link->next;
138 	}
139       else
140 	{
141 	  link = (struct pending *) xmalloc (sizeof (struct pending));
142 	}
143 
144       link->next = *listhead;
145       *listhead = link;
146       link->nsyms = 0;
147     }
148 
149   (*listhead)->symbol[(*listhead)->nsyms++] = symbol;
150 }
151 
152 /* Find a symbol named NAME on a LIST.  NAME need not be
153    '\0'-terminated; LENGTH is the length of the name.  */
154 
155 struct symbol *
156 find_symbol_in_list (struct pending *list, char *name, int length)
157 {
158   int j;
159   char *pp;
160 
161   while (list != NULL)
162     {
163       for (j = list->nsyms; --j >= 0;)
164 	{
165 	  pp = SYMBOL_LINKAGE_NAME (list->symbol[j]);
166 	  if (*pp == *name && strncmp (pp, name, length) == 0 &&
167 	      pp[length] == '\0')
168 	    {
169 	      return (list->symbol[j]);
170 	    }
171 	}
172       list = list->next;
173     }
174   return (NULL);
175 }
176 
177 /* At end of reading syms, or in case of quit, really free as many
178    `struct pending's as we can easily find. */
179 
180 void
181 really_free_pendings (void *dummy)
182 {
183   struct pending *next, *next1;
184 
185   for (next = free_pendings; next; next = next1)
186     {
187       next1 = next->next;
188       xfree ((void *) next);
189     }
190   free_pendings = NULL;
191 
192   free_pending_blocks ();
193 
194   for (next = file_symbols; next != NULL; next = next1)
195     {
196       next1 = next->next;
197       xfree ((void *) next);
198     }
199   file_symbols = NULL;
200 
201   for (next = global_symbols; next != NULL; next = next1)
202     {
203       next1 = next->next;
204       xfree ((void *) next);
205     }
206   global_symbols = NULL;
207 
208   if (pending_macros)
209     free_macro_table (pending_macros);
210 
211   if (pending_addrmap)
212     {
213       obstack_free (&pending_addrmap_obstack, NULL);
214       pending_addrmap = NULL;
215     }
216 }
217 
218 /* This function is called to discard any pending blocks. */
219 
220 void
221 free_pending_blocks (void)
222 {
223   /* The links are made in the objfile_obstack, so we only need to
224      reset PENDING_BLOCKS.  */
225   pending_blocks = NULL;
226 }
227 
228 /* Take one of the lists of symbols and make a block from it.  Keep
229    the order the symbols have in the list (reversed from the input
230    file).  Put the block on the list of pending blocks.  */
231 
232 struct block *
233 finish_block (struct symbol *symbol, struct pending **listhead,
234 	      struct pending_block *old_blocks,
235 	      CORE_ADDR start, CORE_ADDR end,
236 	      struct objfile *objfile)
237 {
238   struct gdbarch *gdbarch = get_objfile_arch (objfile);
239   struct pending *next, *next1;
240   struct block *block;
241   struct pending_block *pblock;
242   struct pending_block *opblock;
243 
244   block = allocate_block (&objfile->objfile_obstack);
245 
246   if (symbol)
247     {
248       BLOCK_DICT (block) = dict_create_linear (&objfile->objfile_obstack,
249 					       *listhead);
250     }
251   else
252     {
253       BLOCK_DICT (block) = dict_create_hashed (&objfile->objfile_obstack,
254 					       *listhead);
255     }
256 
257   BLOCK_START (block) = start;
258   BLOCK_END (block) = end;
259   /* Superblock filled in when containing block is made */
260   BLOCK_SUPERBLOCK (block) = NULL;
261   BLOCK_NAMESPACE (block) = NULL;
262 
263   /* Put the block in as the value of the symbol that names it.  */
264 
265   if (symbol)
266     {
267       struct type *ftype = SYMBOL_TYPE (symbol);
268       struct dict_iterator iter;
269       SYMBOL_BLOCK_VALUE (symbol) = block;
270       BLOCK_FUNCTION (block) = symbol;
271 
272       if (TYPE_NFIELDS (ftype) <= 0)
273 	{
274 	  /* No parameter type information is recorded with the
275 	     function's type.  Set that from the type of the
276 	     parameter symbols. */
277 	  int nparams = 0, iparams;
278 	  struct symbol *sym;
279 	  ALL_BLOCK_SYMBOLS (block, iter, sym)
280 	    {
281 	      if (SYMBOL_IS_ARGUMENT (sym))
282 		nparams++;
283 	    }
284 	  if (nparams > 0)
285 	    {
286 	      TYPE_NFIELDS (ftype) = nparams;
287 	      TYPE_FIELDS (ftype) = (struct field *)
288 		TYPE_ALLOC (ftype, nparams * sizeof (struct field));
289 
290 	      iparams = 0;
291 	      ALL_BLOCK_SYMBOLS (block, iter, sym)
292 		{
293 		  if (iparams == nparams)
294 		    break;
295 
296 		  if (SYMBOL_IS_ARGUMENT (sym))
297 		    {
298 		      TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
299 		      TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
300 		      iparams++;
301 		    }
302 		}
303 	    }
304 	}
305     }
306   else
307     {
308       BLOCK_FUNCTION (block) = NULL;
309     }
310 
311   /* Now "free" the links of the list, and empty the list.  */
312 
313   for (next = *listhead; next; next = next1)
314     {
315       next1 = next->next;
316       next->next = free_pendings;
317       free_pendings = next;
318     }
319   *listhead = NULL;
320 
321   /* Check to be sure that the blocks have an end address that is
322      greater than starting address */
323 
324   if (BLOCK_END (block) < BLOCK_START (block))
325     {
326       if (symbol)
327 	{
328 	  complaint (&symfile_complaints,
329 		     _("block end address less than block start address in %s (patched it)"),
330 		     SYMBOL_PRINT_NAME (symbol));
331 	}
332       else
333 	{
334 	  complaint (&symfile_complaints,
335 		     _("block end address %s less than block start address %s (patched it)"),
336 		     paddress (gdbarch, BLOCK_END (block)),
337 		     paddress (gdbarch, BLOCK_START (block)));
338 	}
339       /* Better than nothing */
340       BLOCK_END (block) = BLOCK_START (block);
341     }
342 
343   /* Install this block as the superblock of all blocks made since the
344      start of this scope that don't have superblocks yet.  */
345 
346   opblock = NULL;
347   for (pblock = pending_blocks;
348        pblock && pblock != old_blocks;
349        pblock = pblock->next)
350     {
351       if (BLOCK_SUPERBLOCK (pblock->block) == NULL)
352 	{
353 	  /* Check to be sure the blocks are nested as we receive
354 	     them. If the compiler/assembler/linker work, this just
355 	     burns a small amount of time.
356 
357 	     Skip blocks which correspond to a function; they're not
358 	     physically nested inside this other blocks, only
359 	     lexically nested.  */
360 	  if (BLOCK_FUNCTION (pblock->block) == NULL
361 	      && (BLOCK_START (pblock->block) < BLOCK_START (block)
362 		  || BLOCK_END (pblock->block) > BLOCK_END (block)))
363 	    {
364 	      if (symbol)
365 		{
366 		  complaint (&symfile_complaints,
367 			     _("inner block not inside outer block in %s"),
368 			     SYMBOL_PRINT_NAME (symbol));
369 		}
370 	      else
371 		{
372 		  complaint (&symfile_complaints,
373 			     _("inner block (%s-%s) not inside outer block (%s-%s)"),
374 			     paddress (gdbarch, BLOCK_START (pblock->block)),
375 			     paddress (gdbarch, BLOCK_END (pblock->block)),
376 			     paddress (gdbarch, BLOCK_START (block)),
377 			     paddress (gdbarch, BLOCK_END (block)));
378 		}
379 	      if (BLOCK_START (pblock->block) < BLOCK_START (block))
380 		BLOCK_START (pblock->block) = BLOCK_START (block);
381 	      if (BLOCK_END (pblock->block) > BLOCK_END (block))
382 		BLOCK_END (pblock->block) = BLOCK_END (block);
383 	    }
384 	  BLOCK_SUPERBLOCK (pblock->block) = block;
385 	}
386       opblock = pblock;
387     }
388 
389   block_set_using (block, using_directives, &objfile->objfile_obstack);
390 
391   record_pending_block (objfile, block, opblock);
392 
393   return block;
394 }
395 
396 
397 /* Record BLOCK on the list of all blocks in the file.  Put it after
398    OPBLOCK, or at the beginning if opblock is NULL.  This puts the
399    block in the list after all its subblocks.
400 
401    Allocate the pending block struct in the objfile_obstack to save
402    time.  This wastes a little space.  FIXME: Is it worth it?  */
403 
404 void
405 record_pending_block (struct objfile *objfile, struct block *block,
406 		      struct pending_block *opblock)
407 {
408   struct pending_block *pblock;
409 
410   pblock = (struct pending_block *)
411     obstack_alloc (&objfile->objfile_obstack, sizeof (struct pending_block));
412   pblock->block = block;
413   if (opblock)
414     {
415       pblock->next = opblock->next;
416       opblock->next = pblock;
417     }
418   else
419     {
420       pblock->next = pending_blocks;
421       pending_blocks = pblock;
422     }
423 }
424 
425 
426 /* Record that the range of addresses from START to END_INCLUSIVE
427    (inclusive, like it says) belongs to BLOCK.  BLOCK's start and end
428    addresses must be set already.  You must apply this function to all
429    BLOCK's children before applying it to BLOCK.
430 
431    If a call to this function complicates the picture beyond that
432    already provided by BLOCK_START and BLOCK_END, then we create an
433    address map for the block.  */
434 void
435 record_block_range (struct block *block,
436                     CORE_ADDR start, CORE_ADDR end_inclusive)
437 {
438   /* If this is any different from the range recorded in the block's
439      own BLOCK_START and BLOCK_END, then note that the address map has
440      become interesting.  Note that even if this block doesn't have
441      any "interesting" ranges, some later block might, so we still
442      need to record this block in the addrmap.  */
443   if (start != BLOCK_START (block)
444       || end_inclusive + 1 != BLOCK_END (block))
445     pending_addrmap_interesting = 1;
446 
447   if (! pending_addrmap)
448     {
449       obstack_init (&pending_addrmap_obstack);
450       pending_addrmap = addrmap_create_mutable (&pending_addrmap_obstack);
451     }
452 
453   addrmap_set_empty (pending_addrmap, start, end_inclusive, block);
454 }
455 
456 
457 static struct blockvector *
458 make_blockvector (struct objfile *objfile)
459 {
460   struct pending_block *next;
461   struct blockvector *blockvector;
462   int i;
463 
464   /* Count the length of the list of blocks.  */
465 
466   for (next = pending_blocks, i = 0; next; next = next->next, i++)
467     {;
468     }
469 
470   blockvector = (struct blockvector *)
471     obstack_alloc (&objfile->objfile_obstack,
472 		   (sizeof (struct blockvector)
473 		    + (i - 1) * sizeof (struct block *)));
474 
475   /* Copy the blocks into the blockvector. This is done in reverse
476      order, which happens to put the blocks into the proper order
477      (ascending starting address). finish_block has hair to insert
478      each block into the list after its subblocks in order to make
479      sure this is true.  */
480 
481   BLOCKVECTOR_NBLOCKS (blockvector) = i;
482   for (next = pending_blocks; next; next = next->next)
483     {
484       BLOCKVECTOR_BLOCK (blockvector, --i) = next->block;
485     }
486 
487   free_pending_blocks ();
488 
489   /* If we needed an address map for this symtab, record it in the
490      blockvector.  */
491   if (pending_addrmap && pending_addrmap_interesting)
492     BLOCKVECTOR_MAP (blockvector)
493       = addrmap_create_fixed (pending_addrmap, &objfile->objfile_obstack);
494   else
495     BLOCKVECTOR_MAP (blockvector) = 0;
496 
497   /* Some compilers output blocks in the wrong order, but we depend on
498      their being in the right order so we can binary search. Check the
499      order and moan about it.  */
500   if (BLOCKVECTOR_NBLOCKS (blockvector) > 1)
501     {
502       for (i = 1; i < BLOCKVECTOR_NBLOCKS (blockvector); i++)
503 	{
504 	  if (BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i - 1))
505 	      > BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i)))
506 	    {
507 	      CORE_ADDR start
508 		= BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i));
509 
510 	      complaint (&symfile_complaints, _("block at %s out of order"),
511 			 hex_string ((LONGEST) start));
512 	    }
513 	}
514     }
515 
516   return (blockvector);
517 }
518 
519 /* Start recording information about source code that came from an
520    included (or otherwise merged-in) source file with a different
521    name.  NAME is the name of the file (cannot be NULL), DIRNAME is
522    the directory in which the file was compiled (or NULL if not known).  */
523 
524 void
525 start_subfile (char *name, char *dirname)
526 {
527   struct subfile *subfile;
528 
529   /* See if this subfile is already known as a subfile of the current
530      main source file.  */
531 
532   for (subfile = subfiles; subfile; subfile = subfile->next)
533     {
534       char *subfile_name;
535 
536       /* If NAME is an absolute path, and this subfile is not, then
537 	 attempt to create an absolute path to compare.  */
538       if (IS_ABSOLUTE_PATH (name)
539 	  && !IS_ABSOLUTE_PATH (subfile->name)
540 	  && subfile->dirname != NULL)
541 	subfile_name = concat (subfile->dirname, SLASH_STRING,
542 			       subfile->name, (char *) NULL);
543       else
544 	subfile_name = subfile->name;
545 
546       if (FILENAME_CMP (subfile_name, name) == 0)
547 	{
548 	  current_subfile = subfile;
549 	  if (subfile_name != subfile->name)
550 	    xfree (subfile_name);
551 	  return;
552 	}
553       if (subfile_name != subfile->name)
554 	xfree (subfile_name);
555     }
556 
557   /* This subfile is not known.  Add an entry for it. Make an entry
558      for this subfile in the list of all subfiles of the current main
559      source file.  */
560 
561   subfile = (struct subfile *) xmalloc (sizeof (struct subfile));
562   memset ((char *) subfile, 0, sizeof (struct subfile));
563   subfile->next = subfiles;
564   subfiles = subfile;
565   current_subfile = subfile;
566 
567   /* Save its name and compilation directory name */
568   subfile->name = (name == NULL) ? NULL : xstrdup (name);
569   subfile->dirname = (dirname == NULL) ? NULL : xstrdup (dirname);
570 
571   /* Initialize line-number recording for this subfile.  */
572   subfile->line_vector = NULL;
573 
574   /* Default the source language to whatever can be deduced from the
575      filename.  If nothing can be deduced (such as for a C/C++ include
576      file with a ".h" extension), then inherit whatever language the
577      previous subfile had.  This kludgery is necessary because there
578      is no standard way in some object formats to record the source
579      language.  Also, when symtabs are allocated we try to deduce a
580      language then as well, but it is too late for us to use that
581      information while reading symbols, since symtabs aren't allocated
582      until after all the symbols have been processed for a given
583      source file. */
584 
585   subfile->language = deduce_language_from_filename (subfile->name);
586   if (subfile->language == language_unknown &&
587       subfile->next != NULL)
588     {
589       subfile->language = subfile->next->language;
590     }
591 
592   /* Initialize the debug format string to NULL.  We may supply it
593      later via a call to record_debugformat. */
594   subfile->debugformat = NULL;
595 
596   /* Similarly for the producer.  */
597   subfile->producer = NULL;
598 
599   /* If the filename of this subfile ends in .C, then change the
600      language of any pending subfiles from C to C++.  We also accept
601      any other C++ suffixes accepted by deduce_language_from_filename.  */
602   /* Likewise for f2c.  */
603 
604   if (subfile->name)
605     {
606       struct subfile *s;
607       enum language sublang = deduce_language_from_filename (subfile->name);
608 
609       if (sublang == language_cplus || sublang == language_fortran)
610 	for (s = subfiles; s != NULL; s = s->next)
611 	  if (s->language == language_c)
612 	    s->language = sublang;
613     }
614 
615   /* And patch up this file if necessary.  */
616   if (subfile->language == language_c
617       && subfile->next != NULL
618       && (subfile->next->language == language_cplus
619 	  || subfile->next->language == language_fortran))
620     {
621       subfile->language = subfile->next->language;
622     }
623 }
624 
625 /* For stabs readers, the first N_SO symbol is assumed to be the
626    source file name, and the subfile struct is initialized using that
627    assumption.  If another N_SO symbol is later seen, immediately
628    following the first one, then the first one is assumed to be the
629    directory name and the second one is really the source file name.
630 
631    So we have to patch up the subfile struct by moving the old name
632    value to dirname and remembering the new name.  Some sanity
633    checking is performed to ensure that the state of the subfile
634    struct is reasonable and that the old name we are assuming to be a
635    directory name actually is (by checking for a trailing '/'). */
636 
637 void
638 patch_subfile_names (struct subfile *subfile, char *name)
639 {
640   if (subfile != NULL && subfile->dirname == NULL && subfile->name != NULL
641       && subfile->name[strlen (subfile->name) - 1] == '/')
642     {
643       subfile->dirname = subfile->name;
644       subfile->name = xstrdup (name);
645       last_source_file = name;
646 
647       /* Default the source language to whatever can be deduced from
648          the filename.  If nothing can be deduced (such as for a C/C++
649          include file with a ".h" extension), then inherit whatever
650          language the previous subfile had.  This kludgery is
651          necessary because there is no standard way in some object
652          formats to record the source language.  Also, when symtabs
653          are allocated we try to deduce a language then as well, but
654          it is too late for us to use that information while reading
655          symbols, since symtabs aren't allocated until after all the
656          symbols have been processed for a given source file. */
657 
658       subfile->language = deduce_language_from_filename (subfile->name);
659       if (subfile->language == language_unknown &&
660 	  subfile->next != NULL)
661 	{
662 	  subfile->language = subfile->next->language;
663 	}
664     }
665 }
666 
667 /* Handle the N_BINCL and N_EINCL symbol types that act like N_SOL for
668    switching source files (different subfiles, as we call them) within
669    one object file, but using a stack rather than in an arbitrary
670    order.  */
671 
672 void
673 push_subfile (void)
674 {
675   struct subfile_stack *tem
676   = (struct subfile_stack *) xmalloc (sizeof (struct subfile_stack));
677 
678   tem->next = subfile_stack;
679   subfile_stack = tem;
680   if (current_subfile == NULL || current_subfile->name == NULL)
681     {
682       internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
683     }
684   tem->name = current_subfile->name;
685 }
686 
687 char *
688 pop_subfile (void)
689 {
690   char *name;
691   struct subfile_stack *link = subfile_stack;
692 
693   if (link == NULL)
694     {
695       internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
696     }
697   name = link->name;
698   subfile_stack = link->next;
699   xfree ((void *) link);
700   return (name);
701 }
702 
703 /* Add a linetable entry for line number LINE and address PC to the
704    line vector for SUBFILE.  */
705 
706 void
707 record_line (struct subfile *subfile, int line, CORE_ADDR pc)
708 {
709   struct linetable_entry *e;
710   /* Ignore the dummy line number in libg.o */
711 
712   if (line == 0xffff)
713     {
714       return;
715     }
716 
717   /* Make sure line vector exists and is big enough.  */
718   if (!subfile->line_vector)
719     {
720       subfile->line_vector_length = INITIAL_LINE_VECTOR_LENGTH;
721       subfile->line_vector = (struct linetable *)
722 	xmalloc (sizeof (struct linetable)
723 	   + subfile->line_vector_length * sizeof (struct linetable_entry));
724       subfile->line_vector->nitems = 0;
725       have_line_numbers = 1;
726     }
727 
728   if (subfile->line_vector->nitems + 1 >= subfile->line_vector_length)
729     {
730       subfile->line_vector_length *= 2;
731       subfile->line_vector = (struct linetable *)
732 	xrealloc ((char *) subfile->line_vector,
733 		  (sizeof (struct linetable)
734 		   + (subfile->line_vector_length
735 		      * sizeof (struct linetable_entry))));
736     }
737 
738   /* Normally, we treat lines as unsorted.  But the end of sequence
739      marker is special.  We sort line markers at the same PC by line
740      number, so end of sequence markers (which have line == 0) appear
741      first.  This is right if the marker ends the previous function,
742      and there is no padding before the next function.  But it is
743      wrong if the previous line was empty and we are now marking a
744      switch to a different subfile.  We must leave the end of sequence
745      marker at the end of this group of lines, not sort the empty line
746      to after the marker.  The easiest way to accomplish this is to
747      delete any empty lines from our table, if they are followed by
748      end of sequence markers.  All we lose is the ability to set
749      breakpoints at some lines which contain no instructions
750      anyway.  */
751   if (line == 0 && subfile->line_vector->nitems > 0)
752     {
753       e = subfile->line_vector->item + subfile->line_vector->nitems - 1;
754       while (subfile->line_vector->nitems > 0 && e->pc == pc)
755 	{
756 	  e--;
757 	  subfile->line_vector->nitems--;
758 	}
759     }
760 
761   e = subfile->line_vector->item + subfile->line_vector->nitems++;
762   e->line = line;
763   e->pc = pc;
764 }
765 
766 /* Needed in order to sort line tables from IBM xcoff files.  Sigh!  */
767 
768 static int
769 compare_line_numbers (const void *ln1p, const void *ln2p)
770 {
771   struct linetable_entry *ln1 = (struct linetable_entry *) ln1p;
772   struct linetable_entry *ln2 = (struct linetable_entry *) ln2p;
773 
774   /* Note: this code does not assume that CORE_ADDRs can fit in ints.
775      Please keep it that way.  */
776   if (ln1->pc < ln2->pc)
777     return -1;
778 
779   if (ln1->pc > ln2->pc)
780     return 1;
781 
782   /* If pc equal, sort by line.  I'm not sure whether this is optimum
783      behavior (see comment at struct linetable in symtab.h).  */
784   return ln1->line - ln2->line;
785 }
786 
787 /* Start a new symtab for a new source file.  Called, for example,
788    when a stabs symbol of type N_SO is seen, or when a DWARF
789    TAG_compile_unit DIE is seen.  It indicates the start of data for
790    one original source file.
791 
792    NAME is the name of the file (cannot be NULL).  DIRNAME is the directory in
793    which the file was compiled (or NULL if not known).  START_ADDR is the
794    lowest address of objects in the file (or 0 if not known).  */
795 
796 void
797 start_symtab (char *name, char *dirname, CORE_ADDR start_addr)
798 {
799   last_source_file = name;
800   last_source_start_addr = start_addr;
801   file_symbols = NULL;
802   global_symbols = NULL;
803   within_function = 0;
804   have_line_numbers = 0;
805 
806   /* Context stack is initially empty.  Allocate first one with room
807      for 10 levels; reuse it forever afterward.  */
808   if (context_stack == NULL)
809     {
810       context_stack_size = INITIAL_CONTEXT_STACK_SIZE;
811       context_stack = (struct context_stack *)
812 	xmalloc (context_stack_size * sizeof (struct context_stack));
813     }
814   context_stack_depth = 0;
815 
816   /* We shouldn't have any address map at this point.  */
817   gdb_assert (! pending_addrmap);
818 
819   /* Initialize the list of sub source files with one entry for this
820      file (the top-level source file).  */
821 
822   subfiles = NULL;
823   current_subfile = NULL;
824   start_subfile (name, dirname);
825 }
826 
827 /* Subroutine of end_symtab to simplify it.
828    Look for a subfile that matches the main source file's basename.
829    If there is only one, and if the main source file doesn't have any
830    symbol or line number information, then copy this file's symtab and
831    line_vector to the main source file's subfile and discard the other subfile.
832    This can happen because of a compiler bug or from the user playing games
833    with #line or from things like a distributed build system that manipulates
834    the debug info.  */
835 
836 static void
837 watch_main_source_file_lossage (void)
838 {
839   struct subfile *mainsub, *subfile;
840 
841   /* Find the main source file.
842      This loop could be eliminated if start_symtab saved it for us.  */
843   mainsub = NULL;
844   for (subfile = subfiles; subfile; subfile = subfile->next)
845     {
846       /* The main subfile is guaranteed to be the last one.  */
847       if (subfile->next == NULL)
848 	mainsub = subfile;
849     }
850 
851   /* If the main source file doesn't have any line number or symbol info,
852      look for an alias in another subfile.
853      We have to watch for mainsub == NULL here.  It's a quirk of end_symtab,
854      it can return NULL so there may not be a main subfile.  */
855 
856   if (mainsub
857       && mainsub->line_vector == NULL
858       && mainsub->symtab == NULL)
859     {
860       const char *mainbase = lbasename (mainsub->name);
861       int nr_matches = 0;
862       struct subfile *prevsub;
863       struct subfile *mainsub_alias = NULL;
864       struct subfile *prev_mainsub_alias = NULL;
865 
866       prevsub = NULL;
867       for (subfile = subfiles;
868 	   /* Stop before we get to the last one.  */
869 	   subfile->next;
870 	   subfile = subfile->next)
871 	{
872 	  if (strcmp (lbasename (subfile->name), mainbase) == 0)
873 	    {
874 	      ++nr_matches;
875 	      mainsub_alias = subfile;
876 	      prev_mainsub_alias = prevsub;
877 	    }
878 	  prevsub = subfile;
879 	}
880 
881       if (nr_matches == 1)
882 	{
883 	  gdb_assert (mainsub_alias != NULL && mainsub_alias != mainsub);
884 
885 	  /* Found a match for the main source file.
886 	     Copy its line_vector and symtab to the main subfile
887 	     and then discard it.  */
888 
889 	  mainsub->line_vector = mainsub_alias->line_vector;
890 	  mainsub->line_vector_length = mainsub_alias->line_vector_length;
891 	  mainsub->symtab = mainsub_alias->symtab;
892 
893 	  if (prev_mainsub_alias == NULL)
894 	    subfiles = mainsub_alias->next;
895 	  else
896 	    prev_mainsub_alias->next = mainsub_alias->next;
897 	  xfree (mainsub_alias);
898 	}
899     }
900 }
901 
902 /* Helper function for qsort.  Parametes are `struct block *' pointers,
903    function sorts them in descending order by their BLOCK_START.  */
904 
905 static int
906 block_compar (const void *ap, const void *bp)
907 {
908   const struct block *a = *(const struct block **) ap;
909   const struct block *b = *(const struct block **) bp;
910 
911   return ((BLOCK_START (b) > BLOCK_START (a))
912 	  - (BLOCK_START (b) < BLOCK_START (a)));
913 }
914 
915 /* Finish the symbol definitions for one main source file, close off
916    all the lexical contexts for that file (creating struct block's for
917    them), then make the struct symtab for that file and put it in the
918    list of all such.
919 
920    END_ADDR is the address of the end of the file's text.  SECTION is
921    the section number (in objfile->section_offsets) of the blockvector
922    and linetable.
923 
924    Note that it is possible for end_symtab() to return NULL.  In
925    particular, for the DWARF case at least, it will return NULL when
926    it finds a compilation unit that has exactly one DIE, a
927    TAG_compile_unit DIE.  This can happen when we link in an object
928    file that was compiled from an empty source file.  Returning NULL
929    is probably not the correct thing to do, because then gdb will
930    never know about this empty file (FIXME). */
931 
932 struct symtab *
933 end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
934 {
935   struct symtab *symtab = NULL;
936   struct blockvector *blockvector;
937   struct subfile *subfile;
938   struct context_stack *cstk;
939   struct subfile *nextsub;
940 
941   /* Finish the lexical context of the last function in the file; pop
942      the context stack.  */
943 
944   if (context_stack_depth > 0)
945     {
946       cstk = pop_context ();
947       /* Make a block for the local symbols within.  */
948       finish_block (cstk->name, &local_symbols, cstk->old_blocks,
949 		    cstk->start_addr, end_addr, objfile);
950 
951       if (context_stack_depth > 0)
952 	{
953 	  /* This is said to happen with SCO.  The old coffread.c
954 	     code simply emptied the context stack, so we do the
955 	     same.  FIXME: Find out why it is happening.  This is not
956 	     believed to happen in most cases (even for coffread.c);
957 	     it used to be an abort().  */
958 	  complaint (&symfile_complaints,
959 	             _("Context stack not empty in end_symtab"));
960 	  context_stack_depth = 0;
961 	}
962     }
963 
964   /* Reordered executables may have out of order pending blocks; if
965      OBJF_REORDERED is true, then sort the pending blocks.  */
966   if ((objfile->flags & OBJF_REORDERED) && pending_blocks)
967     {
968       unsigned count = 0;
969       struct pending_block *pb;
970       struct block **barray, **bp;
971       struct cleanup *back_to;
972 
973       for (pb = pending_blocks; pb != NULL; pb = pb->next)
974 	count++;
975 
976       barray = xmalloc (sizeof (*barray) * count);
977       back_to = make_cleanup (xfree, barray);
978 
979       bp = barray;
980       for (pb = pending_blocks; pb != NULL; pb = pb->next)
981 	*bp++ = pb->block;
982 
983       qsort (barray, count, sizeof (*barray), block_compar);
984 
985       bp = barray;
986       for (pb = pending_blocks; pb != NULL; pb = pb->next)
987 	pb->block = *bp++;
988 
989       do_cleanups (back_to);
990     }
991 
992   /* Cleanup any undefined types that have been left hanging around
993      (this needs to be done before the finish_blocks so that
994      file_symbols is still good).
995 
996      Both cleanup_undefined_types and finish_global_stabs are stabs
997      specific, but harmless for other symbol readers, since on gdb
998      startup or when finished reading stabs, the state is set so these
999      are no-ops.  FIXME: Is this handled right in case of QUIT?  Can
1000      we make this cleaner?  */
1001 
1002   cleanup_undefined_types (objfile);
1003   finish_global_stabs (objfile);
1004 
1005   if (pending_blocks == NULL
1006       && file_symbols == NULL
1007       && global_symbols == NULL
1008       && have_line_numbers == 0
1009       && pending_macros == NULL)
1010     {
1011       /* Ignore symtabs that have no functions with real debugging
1012          info.  */
1013       blockvector = NULL;
1014     }
1015   else
1016     {
1017       /* Define the STATIC_BLOCK & GLOBAL_BLOCK, and build the
1018          blockvector.  */
1019       finish_block (0, &file_symbols, 0, last_source_start_addr, end_addr,
1020 		    objfile);
1021       finish_block (0, &global_symbols, 0, last_source_start_addr, end_addr,
1022 		    objfile);
1023       blockvector = make_blockvector (objfile);
1024     }
1025 
1026   /* Read the line table if it has to be read separately.  */
1027   if (objfile->sf->sym_read_linetable != NULL)
1028     objfile->sf->sym_read_linetable ();
1029 
1030   /* Handle the case where the debug info specifies a different path
1031      for the main source file.  It can cause us to lose track of its
1032      line number information.  */
1033   watch_main_source_file_lossage ();
1034 
1035   /* Now create the symtab objects proper, one for each subfile.  */
1036   /* (The main file is the last one on the chain.)  */
1037 
1038   for (subfile = subfiles; subfile; subfile = nextsub)
1039     {
1040       int linetablesize = 0;
1041       symtab = NULL;
1042 
1043       /* If we have blocks of symbols, make a symtab. Otherwise, just
1044          ignore this file and any line number info in it.  */
1045       if (blockvector)
1046 	{
1047 	  if (subfile->line_vector)
1048 	    {
1049 	      linetablesize = sizeof (struct linetable) +
1050 	        subfile->line_vector->nitems * sizeof (struct linetable_entry);
1051 
1052 	      /* Like the pending blocks, the line table may be
1053 	         scrambled in reordered executables.  Sort it if
1054 	         OBJF_REORDERED is true.  */
1055 	      if (objfile->flags & OBJF_REORDERED)
1056 		qsort (subfile->line_vector->item,
1057 		       subfile->line_vector->nitems,
1058 		     sizeof (struct linetable_entry), compare_line_numbers);
1059 	    }
1060 
1061 	  /* Now, allocate a symbol table.  */
1062 	  if (subfile->symtab == NULL)
1063 	    symtab = allocate_symtab (subfile->name, objfile);
1064 	  else
1065 	    symtab = subfile->symtab;
1066 
1067 	  /* Fill in its components.  */
1068 	  symtab->blockvector = blockvector;
1069           symtab->macro_table = pending_macros;
1070 	  if (subfile->line_vector)
1071 	    {
1072 	      /* Reallocate the line table on the symbol obstack */
1073 	      symtab->linetable = (struct linetable *)
1074 		obstack_alloc (&objfile->objfile_obstack, linetablesize);
1075 	      memcpy (symtab->linetable, subfile->line_vector, linetablesize);
1076 	    }
1077 	  else
1078 	    {
1079 	      symtab->linetable = NULL;
1080 	    }
1081 	  symtab->block_line_section = section;
1082 	  if (subfile->dirname)
1083 	    {
1084 	      /* Reallocate the dirname on the symbol obstack */
1085 	      symtab->dirname = (char *)
1086 		obstack_alloc (&objfile->objfile_obstack,
1087 			       strlen (subfile->dirname) + 1);
1088 	      strcpy (symtab->dirname, subfile->dirname);
1089 	    }
1090 	  else
1091 	    {
1092 	      symtab->dirname = NULL;
1093 	    }
1094 	  symtab->free_code = free_linetable;
1095 	  symtab->free_func = NULL;
1096 
1097 	  /* Use whatever language we have been using for this
1098 	     subfile, not the one that was deduced in allocate_symtab
1099 	     from the filename.  We already did our own deducing when
1100 	     we created the subfile, and we may have altered our
1101 	     opinion of what language it is from things we found in
1102 	     the symbols. */
1103 	  symtab->language = subfile->language;
1104 
1105 	  /* Save the debug format string (if any) in the symtab */
1106 	  if (subfile->debugformat != NULL)
1107 	    {
1108 	      symtab->debugformat = obsavestring (subfile->debugformat,
1109 					      strlen (subfile->debugformat),
1110 						  &objfile->objfile_obstack);
1111 	    }
1112 
1113 	  /* Similarly for the producer.  */
1114 	  if (subfile->producer != NULL)
1115 	    symtab->producer = obsavestring (subfile->producer,
1116 					     strlen (subfile->producer),
1117 					     &objfile->objfile_obstack);
1118 
1119 	  /* All symtabs for the main file and the subfiles share a
1120 	     blockvector, so we need to clear primary for everything
1121 	     but the main file.  */
1122 
1123 	  symtab->primary = 0;
1124 	}
1125       else
1126         {
1127           if (subfile->symtab)
1128             {
1129               /* Since we are ignoring that subfile, we also need
1130                  to unlink the associated empty symtab that we created.
1131                  Otherwise, we can into trouble because various parts
1132                  such as the block-vector are uninitialized whereas
1133                  the rest of the code assumes that they are.
1134 
1135                  We can only unlink the symtab because it was allocated
1136                  on the objfile obstack.  */
1137               struct symtab *s;
1138 
1139               if (objfile->symtabs == subfile->symtab)
1140                 objfile->symtabs = objfile->symtabs->next;
1141               else
1142                 ALL_OBJFILE_SYMTABS (objfile, s)
1143                   if (s->next == subfile->symtab)
1144                     {
1145                       s->next = s->next->next;
1146                       break;
1147                     }
1148               subfile->symtab = NULL;
1149             }
1150         }
1151       if (subfile->name != NULL)
1152 	{
1153 	  xfree ((void *) subfile->name);
1154 	}
1155       if (subfile->dirname != NULL)
1156 	{
1157 	  xfree ((void *) subfile->dirname);
1158 	}
1159       if (subfile->line_vector != NULL)
1160 	{
1161 	  xfree ((void *) subfile->line_vector);
1162 	}
1163       if (subfile->debugformat != NULL)
1164 	{
1165 	  xfree ((void *) subfile->debugformat);
1166 	}
1167       if (subfile->producer != NULL)
1168 	xfree (subfile->producer);
1169 
1170       nextsub = subfile->next;
1171       xfree ((void *) subfile);
1172     }
1173 
1174   /* Set this for the main source file.  */
1175   if (symtab)
1176     {
1177       symtab->primary = 1;
1178     }
1179 
1180   /* Default any symbols without a specified symtab to the primary
1181      symtab.  */
1182   if (blockvector)
1183     {
1184       int block_i;
1185 
1186       for (block_i = 0; block_i < BLOCKVECTOR_NBLOCKS (blockvector); block_i++)
1187 	{
1188 	  struct block *block = BLOCKVECTOR_BLOCK (blockvector, block_i);
1189 	  struct symbol *sym;
1190 	  struct dict_iterator iter;
1191 
1192 	  /* Inlined functions may have symbols not in the global or static
1193 	     symbol lists.  */
1194 	  if (BLOCK_FUNCTION (block) != NULL)
1195 	    if (SYMBOL_SYMTAB (BLOCK_FUNCTION (block)) == NULL)
1196 	      SYMBOL_SYMTAB (BLOCK_FUNCTION (block)) = symtab;
1197 
1198 	  for (sym = dict_iterator_first (BLOCK_DICT (block), &iter);
1199 	       sym != NULL;
1200 	       sym = dict_iterator_next (&iter))
1201 	    if (SYMBOL_SYMTAB (sym) == NULL)
1202 	      SYMBOL_SYMTAB (sym) = symtab;
1203 	}
1204     }
1205 
1206   last_source_file = NULL;
1207   current_subfile = NULL;
1208   pending_macros = NULL;
1209   if (pending_addrmap)
1210     {
1211       obstack_free (&pending_addrmap_obstack, NULL);
1212       pending_addrmap = NULL;
1213     }
1214 
1215   return symtab;
1216 }
1217 
1218 /* Push a context block.  Args are an identifying nesting level
1219    (checkable when you pop it), and the starting PC address of this
1220    context.  */
1221 
1222 struct context_stack *
1223 push_context (int desc, CORE_ADDR valu)
1224 {
1225   struct context_stack *new;
1226 
1227   if (context_stack_depth == context_stack_size)
1228     {
1229       context_stack_size *= 2;
1230       context_stack = (struct context_stack *)
1231 	xrealloc ((char *) context_stack,
1232 		  (context_stack_size * sizeof (struct context_stack)));
1233     }
1234 
1235   new = &context_stack[context_stack_depth++];
1236   new->depth = desc;
1237   new->locals = local_symbols;
1238   new->params = param_symbols;
1239   new->old_blocks = pending_blocks;
1240   new->start_addr = valu;
1241   new->using_directives = using_directives;
1242   new->name = NULL;
1243 
1244   local_symbols = NULL;
1245   param_symbols = NULL;
1246   using_directives = NULL;
1247 
1248   return new;
1249 }
1250 
1251 /* Pop a context block.  Returns the address of the context block just
1252    popped. */
1253 
1254 struct context_stack *
1255 pop_context (void)
1256 {
1257   gdb_assert (context_stack_depth > 0);
1258   return (&context_stack[--context_stack_depth]);
1259 }
1260 
1261 
1262 
1263 /* Compute a small integer hash code for the given name. */
1264 
1265 int
1266 hashname (char *name)
1267 {
1268     return (hash(name,strlen(name)) % HASHSIZE);
1269 }
1270 
1271 
1272 void
1273 record_debugformat (char *format)
1274 {
1275   current_subfile->debugformat = xstrdup (format);
1276 }
1277 
1278 void
1279 record_producer (const char *producer)
1280 {
1281   /* The producer is not always provided in the debugging info.
1282      Do nothing if PRODUCER is NULL.  */
1283   if (producer == NULL)
1284     return;
1285 
1286   current_subfile->producer = xstrdup (producer);
1287 }
1288 
1289 /* Merge the first symbol list SRCLIST into the second symbol list
1290    TARGETLIST by repeated calls to add_symbol_to_list().  This
1291    procedure "frees" each link of SRCLIST by adding it to the
1292    free_pendings list.  Caller must set SRCLIST to a null list after
1293    calling this function.
1294 
1295    Void return. */
1296 
1297 void
1298 merge_symbol_lists (struct pending **srclist, struct pending **targetlist)
1299 {
1300   int i;
1301 
1302   if (!srclist || !*srclist)
1303     return;
1304 
1305   /* Merge in elements from current link.  */
1306   for (i = 0; i < (*srclist)->nsyms; i++)
1307     add_symbol_to_list ((*srclist)->symbol[i], targetlist);
1308 
1309   /* Recurse on next.  */
1310   merge_symbol_lists (&(*srclist)->next, targetlist);
1311 
1312   /* "Free" the current link.  */
1313   (*srclist)->next = free_pendings;
1314   free_pendings = (*srclist);
1315 }
1316 
1317 /* Initialize anything that needs initializing when starting to read a
1318    fresh piece of a symbol file, e.g. reading in the stuff
1319    corresponding to a psymtab.  */
1320 
1321 void
1322 buildsym_init (void)
1323 {
1324   free_pendings = NULL;
1325   file_symbols = NULL;
1326   global_symbols = NULL;
1327   pending_blocks = NULL;
1328   pending_macros = NULL;
1329 
1330   /* We shouldn't have any address map at this point.  */
1331   gdb_assert (! pending_addrmap);
1332   pending_addrmap_interesting = 0;
1333 }
1334 
1335 /* Initialize anything that needs initializing when a completely new
1336    symbol file is specified (not just adding some symbols from another
1337    file, e.g. a shared library).  */
1338 
1339 void
1340 buildsym_new_init (void)
1341 {
1342   buildsym_init ();
1343 }
1344