xref: /openbsd-src/gnu/usr.bin/binutils/gdb/buildsym.c (revision b2ea75c1b17e1a9a339660e7ed45cd24946b230e)
1 /* Support routines for building symbol tables in GDB's internal format.
2    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1995, 1996
3              Free Software Foundation, Inc.
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
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 "obstack.h"
31 #include "symtab.h"
32 #include "symfile.h"		/* Needed for "struct complaint" */
33 #include "objfiles.h"
34 #include "gdbtypes.h"
35 #include "complaints.h"
36 #include "gdb_string.h"
37 
38 /* Ask buildsym.h to define the vars it normally declares `extern'.  */
39 #define	EXTERN	/**/
40 #include "buildsym.h"		/* Our own declarations */
41 #undef	EXTERN
42 
43 /* For cleanup_undefined_types and finish_global_stabs (somewhat
44    questionable--see comment where we call them).  */
45 #include "stabsread.h"
46 
47 /* Pointer to the head of a linked list of symbol blocks which have
48    already been finalized (lexical contexts already closed) and which are
49    just waiting to be built into a blockvector when finalizing the
50    associated symtab. */
51 
52 static struct pending_block *pending_blocks = NULL;
53 
54 /* List of free `struct pending' structures for reuse.  */
55 
56 static struct pending *free_pendings;
57 
58 
59 static int
60 compare_line_numbers PARAMS ((const void *, const void *));
61 
62 
63 /* Initial sizes of data structures.  These are realloc'd larger if needed,
64    and realloc'd down to the size actually used, when completed.  */
65 
66 #define	INITIAL_CONTEXT_STACK_SIZE	10
67 #define	INITIAL_LINE_VECTOR_LENGTH	1000
68 
69 
70 /* Complaints about the symbols we have encountered.  */
71 
72 struct complaint block_end_complaint =
73   {"block end address less than block start address in %s (patched it)", 0, 0};
74 
75 struct complaint anon_block_end_complaint =
76   {"block end address 0x%lx less than block start address 0x%lx (patched it)", 0, 0};
77 
78 struct complaint innerblock_complaint =
79   {"inner block not inside outer block in %s", 0, 0};
80 
81 struct complaint innerblock_anon_complaint =
82   {"inner block (0x%lx-0x%lx) not inside outer block (0x%lx-0x%lx)", 0, 0};
83 
84 struct complaint blockvector_complaint =
85   {"block at 0x%lx out of order", 0, 0};
86 
87 
88 /* maintain the lists of symbols and blocks */
89 
90 /* Add a symbol to one of the lists of symbols.  */
91 
92 void
93 add_symbol_to_list (symbol, listhead)
94      struct symbol *symbol;
95      struct pending **listhead;
96 {
97   register struct pending *link;
98 
99   /* We keep PENDINGSIZE symbols in each link of the list.
100      If we don't have a link with room in it, add a new link.  */
101   if (*listhead == NULL || (*listhead)->nsyms == PENDINGSIZE)
102     {
103       if (free_pendings)
104 	{
105 	  link = free_pendings;
106 	  free_pendings = link->next;
107 	}
108       else
109 	{
110 	  link = (struct pending *) xmalloc (sizeof (struct pending));
111 	}
112 
113       link->next = *listhead;
114       *listhead = link;
115       link->nsyms = 0;
116     }
117 
118   (*listhead)->symbol[(*listhead)->nsyms++] = symbol;
119 }
120 
121 /* Find a symbol named NAME on a LIST.  NAME need not be '\0'-terminated;
122    LENGTH is the length of the name.  */
123 
124 struct symbol *
125 find_symbol_in_list (list, name, length)
126      struct pending *list;
127      char *name;
128      int length;
129 {
130   int j;
131   char *pp;
132 
133   while (list != NULL)
134     {
135       for (j = list->nsyms; --j >= 0; )
136 	{
137 	  pp = SYMBOL_NAME (list->symbol[j]);
138 	  if (*pp == *name && strncmp (pp, name, length) == 0 &&
139 	      pp[length] == '\0')
140 	    {
141 	      return (list->symbol[j]);
142 	    }
143 	}
144       list = list->next;
145     }
146   return (NULL);
147 }
148 
149 /* At end of reading syms, or in case of quit,
150    really free as many `struct pending's as we can easily find. */
151 
152 /* ARGSUSED */
153 void
154 really_free_pendings (foo)
155      int foo;
156 {
157   struct pending *next, *next1;
158 
159   for (next = free_pendings; next; next = next1)
160     {
161       next1 = next->next;
162       free ((PTR)next);
163     }
164   free_pendings = NULL;
165 
166   free_pending_blocks ();
167 
168   for (next = file_symbols; next != NULL; next = next1)
169     {
170       next1 = next->next;
171       free ((PTR)next);
172     }
173   file_symbols = NULL;
174 
175   for (next = global_symbols; next != NULL; next = next1)
176     {
177       next1 = next->next;
178       free ((PTR)next);
179     }
180   global_symbols = NULL;
181 }
182 
183 /* This function is called to discard any pending blocks. */
184 
185 void
186 free_pending_blocks ()
187 {
188 #if 0 /* Now we make the links in the symbol_obstack, so don't free them.  */
189   struct pending_block *bnext, *bnext1;
190 
191   for (bnext = pending_blocks; bnext; bnext = bnext1)
192     {
193       bnext1 = bnext->next;
194       free ((PTR)bnext);
195     }
196 #endif
197   pending_blocks = NULL;
198 }
199 
200 /* Take one of the lists of symbols and make a block from it.
201    Keep the order the symbols have in the list (reversed from the input file).
202    Put the block on the list of pending blocks.  */
203 
204 void
205 finish_block (symbol, listhead, old_blocks, start, end, objfile)
206      struct symbol *symbol;
207      struct pending **listhead;
208      struct pending_block *old_blocks;
209      CORE_ADDR start, end;
210      struct objfile *objfile;
211 {
212   register struct pending *next, *next1;
213   register struct block *block;
214   register struct pending_block *pblock;
215   struct pending_block *opblock;
216   register int i;
217   register int j;
218 
219   /* Count the length of the list of symbols.  */
220 
221   for (next = *listhead, i = 0;
222        next;
223        i += next->nsyms, next = next->next)
224     {
225       /*EMPTY*/;
226     }
227 
228   block = (struct block *) obstack_alloc (&objfile -> symbol_obstack,
229 	  (sizeof (struct block) + ((i - 1) * sizeof (struct symbol *))));
230 
231   /* Copy the symbols into the block.  */
232 
233   BLOCK_NSYMS (block) = i;
234   for (next = *listhead; next; next = next->next)
235     {
236       for (j = next->nsyms - 1; j >= 0; j--)
237 	{
238 	  BLOCK_SYM (block, --i) = next->symbol[j];
239 	}
240     }
241 
242   BLOCK_START (block) = start;
243   BLOCK_END (block) = end;
244  /* Superblock filled in when containing block is made */
245   BLOCK_SUPERBLOCK (block) = NULL;
246   BLOCK_GCC_COMPILED (block) = processing_gcc_compilation;
247 
248   /* Put the block in as the value of the symbol that names it.  */
249 
250   if (symbol)
251     {
252       struct type *ftype = SYMBOL_TYPE (symbol);
253       SYMBOL_BLOCK_VALUE (symbol) = block;
254       BLOCK_FUNCTION (block) = symbol;
255 
256       if (TYPE_NFIELDS (ftype) <= 0)
257 	{
258 	  /* No parameter type information is recorded with the function's
259 	     type.  Set that from the type of the parameter symbols. */
260 	  int nparams = 0, iparams;
261 	  struct symbol *sym;
262 	  for (i = 0; i < BLOCK_NSYMS (block); i++)
263 	    {
264 	      sym = BLOCK_SYM (block, i);
265 	      switch (SYMBOL_CLASS (sym))
266 		{
267 		case LOC_ARG:
268 		case LOC_REF_ARG:
269 		case LOC_REGPARM:
270 		case LOC_REGPARM_ADDR:
271 		case LOC_BASEREG_ARG:
272 		case LOC_LOCAL_ARG:
273 		  nparams++;
274 		  break;
275 		case LOC_UNDEF:
276 		case LOC_CONST:
277 		case LOC_STATIC:
278 		case LOC_REGISTER:
279 		case LOC_LOCAL:
280 		case LOC_TYPEDEF:
281 		case LOC_LABEL:
282 		case LOC_BLOCK:
283 		case LOC_CONST_BYTES:
284 		case LOC_BASEREG:
285 		case LOC_UNRESOLVED:
286 		case LOC_OPTIMIZED_OUT:
287 		default:
288 		  break;
289 		}
290 	    }
291 	  if (nparams > 0)
292 	    {
293 	      TYPE_NFIELDS (ftype) = nparams;
294 	      TYPE_FIELDS (ftype) = (struct field *)
295 		TYPE_ALLOC (ftype, nparams * sizeof (struct field));
296 
297 	      for (i = iparams = 0; iparams < nparams; i++)
298 		{
299 		  sym = BLOCK_SYM (block, i);
300 		  switch (SYMBOL_CLASS (sym))
301 		    {
302 		    case LOC_ARG:
303 		    case LOC_REF_ARG:
304 		    case LOC_REGPARM:
305 		    case LOC_REGPARM_ADDR:
306 		    case LOC_BASEREG_ARG:
307 		    case LOC_LOCAL_ARG:
308 		      TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
309 		      iparams++;
310 		      break;
311 		    case LOC_UNDEF:
312 		    case LOC_CONST:
313 		    case LOC_STATIC:
314 		    case LOC_REGISTER:
315 		    case LOC_LOCAL:
316 		    case LOC_TYPEDEF:
317 		    case LOC_LABEL:
318 		    case LOC_BLOCK:
319 		    case LOC_CONST_BYTES:
320 		    case LOC_BASEREG:
321 		    case LOC_UNRESOLVED:
322 		    case LOC_OPTIMIZED_OUT:
323 		    default:
324 		      break;
325 		    }
326 		}
327 	    }
328 	}
329     }
330   else
331     {
332       BLOCK_FUNCTION (block) = NULL;
333     }
334 
335   /* Now "free" the links of the list, and empty the list.  */
336 
337   for (next = *listhead; next; next = next1)
338     {
339       next1 = next->next;
340       next->next = free_pendings;
341       free_pendings = next;
342     }
343   *listhead = NULL;
344 
345 #if 1
346   /* Check to be sure that the blocks have an end address that is
347      greater than starting address */
348 
349   if (BLOCK_END (block) < BLOCK_START (block))
350     {
351       if (symbol)
352 	{
353 	  complain (&block_end_complaint, SYMBOL_SOURCE_NAME (symbol));
354 	}
355       else
356 	{
357 	  complain (&anon_block_end_complaint, BLOCK_END (block), BLOCK_START (block));
358 	}
359       /* Better than nothing */
360       BLOCK_END (block) = BLOCK_START (block);
361     }
362 #endif
363 
364   /* Install this block as the superblock
365      of all blocks made since the start of this scope
366      that don't have superblocks yet.  */
367 
368   opblock = NULL;
369   for (pblock = pending_blocks; pblock != old_blocks; pblock = pblock->next)
370     {
371       if (BLOCK_SUPERBLOCK (pblock->block) == NULL)
372 	{
373 #if 1
374 	  /* Check to be sure the blocks are nested as we receive them.
375 	     If the compiler/assembler/linker work, this just burns a small
376 	     amount of time.  */
377 	  if (BLOCK_START (pblock->block) < BLOCK_START (block) ||
378 	      BLOCK_END   (pblock->block) > BLOCK_END   (block))
379 	    {
380 	      if (symbol)
381 		{
382 		  complain (&innerblock_complaint,
383 			    SYMBOL_SOURCE_NAME (symbol));
384 		}
385 	      else
386 		{
387 		  complain (&innerblock_anon_complaint, BLOCK_START (pblock->block),
388 			    BLOCK_END (pblock->block), BLOCK_START (block),
389 			    BLOCK_END (block));
390 		}
391 	      BLOCK_START (pblock->block) = BLOCK_START (block);
392 	      BLOCK_END   (pblock->block) = BLOCK_END   (block);
393 	    }
394 #endif
395 	  BLOCK_SUPERBLOCK (pblock->block) = block;
396 	}
397       opblock = pblock;
398     }
399 
400   record_pending_block (objfile, block, opblock);
401 }
402 
403 /* Record BLOCK on the list of all blocks in the file.  Put it after
404    OPBLOCK, or at the beginning if opblock is NULL.  This puts the block
405    in the list after all its subblocks.
406 
407    Allocate the pending block struct in the symbol_obstack to save
408    time.  This wastes a little space.  FIXME: Is it worth it?  */
409 
410 void
411 record_pending_block (objfile, block, opblock)
412      struct objfile* objfile;
413      struct block *block;
414      struct pending_block *opblock;
415 {
416   register struct pending_block *pblock;
417 
418   pblock = (struct pending_block *)
419     obstack_alloc (&objfile -> symbol_obstack, sizeof (struct pending_block));
420   pblock -> block = block;
421   if (opblock)
422     {
423       pblock -> next = opblock -> next;
424       opblock -> next = pblock;
425     }
426   else
427     {
428       pblock -> next = pending_blocks;
429       pending_blocks = pblock;
430     }
431 }
432 
433 /* Note that this is only used in this file and in dstread.c, which should be
434    fixed to not need direct access to this function.  When that is done, it can
435    be made static again. */
436 
437 struct blockvector *
438 make_blockvector (objfile)
439      struct objfile *objfile;
440 {
441   register struct pending_block *next;
442   register struct blockvector *blockvector;
443   register int i;
444 
445   /* Count the length of the list of blocks.  */
446 
447   for (next = pending_blocks, i = 0; next; next = next->next, i++) {;}
448 
449   blockvector = (struct blockvector *)
450     obstack_alloc (&objfile -> symbol_obstack,
451 		   (sizeof (struct blockvector)
452 		    + (i - 1) * sizeof (struct block *)));
453 
454   /* Copy the blocks into the blockvector.
455      This is done in reverse order, which happens to put
456      the blocks into the proper order (ascending starting address).
457      finish_block has hair to insert each block into the list
458      after its subblocks in order to make sure this is true.  */
459 
460   BLOCKVECTOR_NBLOCKS (blockvector) = i;
461   for (next = pending_blocks; next; next = next->next)
462     {
463       BLOCKVECTOR_BLOCK (blockvector, --i) = next->block;
464     }
465 
466 #if 0 /* Now we make the links in the obstack, so don't free them.  */
467   /* Now free the links of the list, and empty the list.  */
468 
469   for (next = pending_blocks; next; next = next1)
470     {
471       next1 = next->next;
472       free (next);
473     }
474 #endif
475   pending_blocks = NULL;
476 
477 #if 1  /* FIXME, shut this off after a while to speed up symbol reading.  */
478   /* Some compilers output blocks in the wrong order, but we depend
479      on their being in the right order so we can binary search.
480      Check the order and moan about it.  FIXME.  */
481   if (BLOCKVECTOR_NBLOCKS (blockvector) > 1)
482     {
483       for (i = 1; i < BLOCKVECTOR_NBLOCKS (blockvector); i++)
484 	{
485 	  if (BLOCK_START(BLOCKVECTOR_BLOCK (blockvector, i-1))
486 	      > BLOCK_START(BLOCKVECTOR_BLOCK (blockvector, i)))
487 	    {
488 
489 	      /* FIXME-32x64: loses if CORE_ADDR doesn't fit in a
490 		 long.  Possible solutions include a version of
491 		 complain which takes a callback, a
492 		 sprintf_address_numeric to match
493 		 print_address_numeric, or a way to set up a GDB_FILE
494 		 * which causes sprintf rather than fprintf to be
495 		 called.  */
496 
497 	      complain (&blockvector_complaint,
498 			(unsigned long) BLOCK_START(BLOCKVECTOR_BLOCK (blockvector, i)));
499 	    }
500 	}
501     }
502 #endif
503 
504   return (blockvector);
505 }
506 
507 
508 /* Start recording information about source code that came from an included
509    (or otherwise merged-in) source file with a different name.  NAME is
510    the name of the file (cannot be NULL), DIRNAME is the directory in which
511    it resides (or NULL if not known).  */
512 
513 void
514 start_subfile (name, dirname)
515      char *name;
516      char *dirname;
517 {
518   register struct subfile *subfile;
519 
520   /* See if this subfile is already known as a subfile of the
521      current main source file.  */
522 
523   for (subfile = subfiles; subfile; subfile = subfile->next)
524     {
525       if (STREQ (subfile->name, name))
526 	{
527 	  current_subfile = subfile;
528 	  return;
529 	}
530     }
531 
532   /* This subfile is not known.  Add an entry for it.
533      Make an entry for this subfile in the list of all subfiles
534      of the current main source file.  */
535 
536   subfile = (struct subfile *) xmalloc (sizeof (struct subfile));
537   subfile->next = subfiles;
538   subfiles = subfile;
539   current_subfile = subfile;
540 
541   /* Save its name and compilation directory name */
542   subfile->name = (name == NULL) ? NULL : savestring (name, strlen (name));
543   subfile->dirname =
544     (dirname == NULL) ? NULL : savestring (dirname, strlen (dirname));
545 
546   /* Initialize line-number recording for this subfile.  */
547   subfile->line_vector = NULL;
548 
549   /* Default the source language to whatever can be deduced from
550      the filename.  If nothing can be deduced (such as for a C/C++
551      include file with a ".h" extension), then inherit whatever
552      language the previous subfile had.  This kludgery is necessary
553      because there is no standard way in some object formats to
554      record the source language.  Also, when symtabs are allocated
555      we try to deduce a language then as well, but it is too late
556      for us to use that information while reading symbols, since
557      symtabs aren't allocated until after all the symbols have
558      been processed for a given source file. */
559 
560   subfile->language = deduce_language_from_filename (subfile->name);
561   if (subfile->language == language_unknown &&
562       subfile->next != NULL)
563     {
564       subfile->language = subfile->next->language;
565     }
566 
567   /* cfront output is a C program, so in most ways it looks like a C
568      program.  But to demangle we need to set the language to C++.  We
569      can distinguish cfront code by the fact that it has #line
570      directives which specify a file name ending in .C.
571 
572      So if the filename of this subfile ends in .C, then change the language
573      of any pending subfiles from C to C++.  We also accept any other C++
574      suffixes accepted by deduce_language_from_filename (in particular,
575      some people use .cxx with cfront).  */
576   /* Likewise for f2c.  */
577 
578   if (subfile->name)
579     {
580       struct subfile *s;
581       enum language sublang = deduce_language_from_filename (subfile->name);
582 
583       if (sublang == language_cplus || sublang == language_fortran)
584 	for (s = subfiles; s != NULL; s = s->next)
585 	  if (s->language == language_c)
586 	    s->language = sublang;
587     }
588 
589   /* And patch up this file if necessary.  */
590   if (subfile->language == language_c
591       && subfile->next != NULL
592       && (subfile->next->language == language_cplus
593 	  || subfile->next->language == language_fortran))
594     {
595       subfile->language = subfile->next->language;
596     }
597 }
598 
599 /* For stabs readers, the first N_SO symbol is assumed to be the source
600    file name, and the subfile struct is initialized using that assumption.
601    If another N_SO symbol is later seen, immediately following the first
602    one, then the first one is assumed to be the directory name and the
603    second one is really the source file name.
604 
605    So we have to patch up the subfile struct by moving the old name value to
606    dirname and remembering the new name.  Some sanity checking is performed
607    to ensure that the state of the subfile struct is reasonable and that the
608    old name we are assuming to be a directory name actually is (by checking
609    for a trailing '/'). */
610 
611 void
612 patch_subfile_names (subfile, name)
613      struct subfile *subfile;
614      char *name;
615 {
616   if (subfile != NULL && subfile->dirname == NULL && subfile->name != NULL
617       && subfile->name[strlen(subfile->name)-1] == '/')
618     {
619       subfile->dirname = subfile->name;
620       subfile->name = savestring (name, strlen (name));
621       last_source_file = name;
622 
623       /* Default the source language to whatever can be deduced from
624 	 the filename.  If nothing can be deduced (such as for a C/C++
625 	 include file with a ".h" extension), then inherit whatever
626 	 language the previous subfile had.  This kludgery is necessary
627 	 because there is no standard way in some object formats to
628 	 record the source language.  Also, when symtabs are allocated
629 	 we try to deduce a language then as well, but it is too late
630 	 for us to use that information while reading symbols, since
631 	 symtabs aren't allocated until after all the symbols have
632 	 been processed for a given source file. */
633 
634       subfile->language = deduce_language_from_filename (subfile->name);
635       if (subfile->language == language_unknown &&
636 	  subfile->next != NULL)
637 	{
638 	  subfile->language = subfile->next->language;
639 	}
640     }
641 }
642 
643 
644 /* Handle the N_BINCL and N_EINCL symbol types
645    that act like N_SOL for switching source files
646    (different subfiles, as we call them) within one object file,
647    but using a stack rather than in an arbitrary order.  */
648 
649 void
650 push_subfile ()
651 {
652   register struct subfile_stack *tem
653     = (struct subfile_stack *) xmalloc (sizeof (struct subfile_stack));
654 
655   tem->next = subfile_stack;
656   subfile_stack = tem;
657   if (current_subfile == NULL || current_subfile->name == NULL)
658     {
659       abort ();
660     }
661   tem->name = current_subfile->name;
662 }
663 
664 char *
665 pop_subfile ()
666 {
667   register char *name;
668   register struct subfile_stack *link = subfile_stack;
669 
670   if (link == NULL)
671     {
672       abort ();
673     }
674   name = link->name;
675   subfile_stack = link->next;
676   free ((PTR)link);
677   return (name);
678 }
679 
680 
681 /* Add a linetable entry for line number LINE and address PC to the line
682    vector for SUBFILE.  */
683 
684 void
685 record_line (subfile, line, pc)
686      register struct subfile *subfile;
687      int line;
688      CORE_ADDR pc;
689 {
690   struct linetable_entry *e;
691   /* Ignore the dummy line number in libg.o */
692 
693   if (line == 0xffff)
694     {
695       return;
696     }
697 
698   /* Make sure line vector exists and is big enough.  */
699   if (!subfile->line_vector)
700     {
701       subfile->line_vector_length = INITIAL_LINE_VECTOR_LENGTH;
702       subfile->line_vector = (struct linetable *)
703 	xmalloc (sizeof (struct linetable)
704 	  + subfile->line_vector_length * sizeof (struct linetable_entry));
705       subfile->line_vector->nitems = 0;
706     }
707 
708   if (subfile->line_vector->nitems + 1 >= subfile->line_vector_length)
709     {
710       subfile->line_vector_length *= 2;
711       subfile->line_vector = (struct linetable *)
712 	xrealloc ((char *) subfile->line_vector, (sizeof (struct linetable)
713 	  + subfile->line_vector_length * sizeof (struct linetable_entry)));
714     }
715 
716   e = subfile->line_vector->item + subfile->line_vector->nitems++;
717   e->line = line; e->pc = pc;
718 }
719 
720 
721 /* Needed in order to sort line tables from IBM xcoff files.  Sigh!  */
722 
723 static int
724 compare_line_numbers (ln1p, ln2p)
725      const void *ln1p;
726      const void *ln2p;
727 {
728   struct linetable_entry *ln1 = (struct linetable_entry *) ln1p;
729   struct linetable_entry *ln2 = (struct linetable_entry *) ln2p;
730 
731   /* Note: this code does not assume that CORE_ADDRs can fit in ints.
732      Please keep it that way.  */
733   if (ln1->pc < ln2->pc)
734     return -1;
735 
736   if (ln1->pc > ln2->pc)
737     return 1;
738 
739   /* If pc equal, sort by line.  I'm not sure whether this is optimum
740      behavior (see comment at struct linetable in symtab.h).  */
741   return ln1->line - ln2->line;
742 }
743 
744 
745 /* Start a new symtab for a new source file.
746    Called, for example, when a stabs symbol of type N_SO is seen, or when
747    a DWARF TAG_compile_unit DIE is seen.
748    It indicates the start of data for one original source file.  */
749 
750 void
751 start_symtab (name, dirname, start_addr)
752      char *name;
753      char *dirname;
754      CORE_ADDR start_addr;
755 {
756 
757   last_source_file = name;
758   last_source_start_addr = start_addr;
759   file_symbols = NULL;
760   global_symbols = NULL;
761   within_function = 0;
762 
763   /* Context stack is initially empty.  Allocate first one with room for
764      10 levels; reuse it forever afterward.  */
765   if (context_stack == NULL)
766     {
767       context_stack_size = INITIAL_CONTEXT_STACK_SIZE;
768       context_stack = (struct context_stack *)
769 	xmalloc (context_stack_size * sizeof (struct context_stack));
770     }
771   context_stack_depth = 0;
772 
773   /* Initialize the list of sub source files with one entry
774      for this file (the top-level source file).  */
775 
776   subfiles = NULL;
777   current_subfile = NULL;
778   start_subfile (name, dirname);
779 }
780 
781 /* Finish the symbol definitions for one main source file,
782    close off all the lexical contexts for that file
783    (creating struct block's for them), then make the struct symtab
784    for that file and put it in the list of all such.
785 
786    END_ADDR is the address of the end of the file's text.
787    SECTION is the section number (in objfile->section_offsets) of
788    the blockvector and linetable.
789 
790    Note that it is possible for end_symtab() to return NULL.  In particular,
791    for the DWARF case at least, it will return NULL when it finds a
792    compilation unit that has exactly one DIE, a TAG_compile_unit DIE.  This
793    can happen when we link in an object file that was compiled from an empty
794    source file.  Returning NULL is probably not the correct thing to do,
795    because then gdb will never know about this empty file (FIXME). */
796 
797 struct symtab *
798 end_symtab (end_addr, objfile, section)
799      CORE_ADDR end_addr;
800      struct objfile *objfile;
801      int section;
802 {
803   register struct symtab *symtab = NULL;
804   register struct blockvector *blockvector;
805   register struct subfile *subfile;
806   register struct context_stack *cstk;
807   struct subfile *nextsub;
808 
809   /* Finish the lexical context of the last function in the file;
810      pop the context stack.  */
811 
812   if (context_stack_depth > 0)
813     {
814       cstk = pop_context();
815       /* Make a block for the local symbols within.  */
816       finish_block (cstk->name, &local_symbols, cstk->old_blocks,
817 		    cstk->start_addr, end_addr, objfile);
818 
819       if (context_stack_depth > 0)
820 	{
821 	  /* This is said to happen with SCO.  The old coffread.c code
822 	     simply emptied the context stack, so we do the same.  FIXME:
823 	     Find out why it is happening.  This is not believed to happen
824 	     in most cases (even for coffread.c); it used to be an abort().  */
825 	  static struct complaint msg =
826 	    {"Context stack not empty in end_symtab", 0, 0};
827 	  complain (&msg);
828 	  context_stack_depth = 0;
829 	}
830     }
831 
832   /* Reordered executables may have out of order pending blocks; if
833      OBJF_REORDERED is true, then sort the pending blocks.  */
834   if ((objfile->flags & OBJF_REORDERED) && pending_blocks)
835     {
836       /* FIXME!  Remove this horrid bubble sort and use qsort!!!
837 	 It'd be a whole lot easier if they weren't in a linked list!!! */
838       int swapped;
839       do
840 	{
841 	  struct pending_block *pb, *pbnext;
842 
843 	  pb = pending_blocks;
844 	  pbnext = pb->next;
845 	  swapped = 0;
846 
847 	  while (pbnext)
848 	    {
849 	      /* swap blocks if unordered! */
850 
851 	      if (BLOCK_START(pb->block) < BLOCK_START(pbnext->block))
852 		{
853 		  struct block *tmp = pb->block;
854 		  pb->block = pbnext->block;
855 		  pbnext->block = tmp;
856 		  swapped = 1;
857 		}
858 	      pb = pbnext;
859 	      pbnext = pbnext->next;
860 	    }
861 	} while (swapped);
862     }
863 
864   /* Cleanup any undefined types that have been left hanging around
865      (this needs to be done before the finish_blocks so that
866      file_symbols is still good).
867 
868      Both cleanup_undefined_types and finish_global_stabs are stabs
869      specific, but harmless for other symbol readers, since on gdb
870      startup or when finished reading stabs, the state is set so these
871      are no-ops.  FIXME: Is this handled right in case of QUIT?  Can
872      we make this cleaner?  */
873 
874   cleanup_undefined_types ();
875   finish_global_stabs (objfile);
876 
877   if (pending_blocks == NULL
878       && file_symbols == NULL
879       && global_symbols == NULL)
880     {
881       /* Ignore symtabs that have no functions with real debugging info */
882       blockvector = NULL;
883     }
884   else
885     {
886       /* Define the STATIC_BLOCK & GLOBAL_BLOCK, and build the blockvector. */
887       finish_block (0, &file_symbols, 0, last_source_start_addr, end_addr,
888 		    objfile);
889       finish_block (0, &global_symbols, 0, last_source_start_addr, end_addr,
890 		    objfile);
891       blockvector = make_blockvector (objfile);
892     }
893 
894 #ifdef PROCESS_LINENUMBER_HOOK
895   PROCESS_LINENUMBER_HOOK ();			/* Needed for xcoff. */
896 #endif
897 
898   /* Now create the symtab objects proper, one for each subfile.  */
899   /* (The main file is the last one on the chain.)  */
900 
901   for (subfile = subfiles; subfile; subfile = nextsub)
902     {
903       int linetablesize = 0;
904       /* If we have blocks of symbols, make a symtab.
905 	 Otherwise, just ignore this file and any line number info in it.  */
906       symtab = NULL;
907       if (blockvector)
908 	{
909 	  if (subfile->line_vector)
910 	    {
911 	      linetablesize = sizeof (struct linetable) +
912 		subfile->line_vector->nitems * sizeof (struct linetable_entry);
913 #if 0
914 	      /* I think this is artifact from before it went on the obstack.
915 		 I doubt we'll need the memory between now and when we
916 		 free it later in this function.  */
917 	      /* First, shrink the linetable to make more memory.  */
918 	      subfile->line_vector = (struct linetable *)
919 		xrealloc ((char *) subfile->line_vector, linetablesize);
920 #endif
921 
922 	      /* Like the pending blocks, the line table may be scrambled
923 		 in reordered executables.  Sort it if OBJF_REORDERED is
924 		 true.  */
925 	      if (objfile->flags & OBJF_REORDERED)
926 		qsort (subfile->line_vector->item,
927 		       subfile->line_vector->nitems,
928 		       sizeof (struct linetable_entry), compare_line_numbers);
929 	    }
930 
931 	  /* Now, allocate a symbol table.  */
932 	  symtab = allocate_symtab (subfile->name, objfile);
933 
934 	  /* Fill in its components.  */
935 	  symtab->blockvector = blockvector;
936 	  if (subfile->line_vector)
937 	    {
938 	      /* Reallocate the line table on the symbol obstack */
939 	      symtab->linetable = (struct linetable *)
940 		obstack_alloc (&objfile -> symbol_obstack, linetablesize);
941 	      memcpy (symtab->linetable, subfile->line_vector, linetablesize);
942 	    }
943 	  else
944 	    {
945 	      symtab->linetable = NULL;
946 	    }
947 	  symtab->block_line_section = section;
948 	  if (subfile->dirname)
949 	    {
950 	      /* Reallocate the dirname on the symbol obstack */
951 	      symtab->dirname = (char *)
952 		obstack_alloc (&objfile -> symbol_obstack,
953 			       strlen (subfile -> dirname) + 1);
954 	      strcpy (symtab->dirname, subfile->dirname);
955 	    }
956 	  else
957 	    {
958 	      symtab->dirname = NULL;
959 	    }
960 	  symtab->free_code = free_linetable;
961 	  symtab->free_ptr = NULL;
962 
963 	  /* Use whatever language we have been using for this subfile,
964 	     not the one that was deduced in allocate_symtab from the
965 	     filename.  We already did our own deducing when we created
966 	     the subfile, and we may have altered our opinion of what
967 	     language it is from things we found in the symbols. */
968 	  symtab->language = subfile->language;
969 
970 	  /* All symtabs for the main file and the subfiles share a
971 	     blockvector, so we need to clear primary for everything but
972 	     the main file.  */
973 
974 	  symtab->primary = 0;
975 	}
976       if (subfile->name != NULL)
977 	{
978 	  free ((PTR) subfile->name);
979 	}
980       if (subfile->dirname != NULL)
981 	{
982 	  free ((PTR) subfile->dirname);
983 	}
984       if (subfile->line_vector != NULL)
985 	{
986 	  free ((PTR) subfile->line_vector);
987 	}
988 
989       nextsub = subfile->next;
990       free ((PTR)subfile);
991     }
992 
993   /* Set this for the main source file.  */
994   if (symtab)
995     {
996       symtab->primary = 1;
997     }
998 
999   last_source_file = NULL;
1000   current_subfile = NULL;
1001 
1002   return (symtab);
1003 }
1004 
1005 
1006 /* Push a context block.  Args are an identifying nesting level (checkable
1007    when you pop it), and the starting PC address of this context.  */
1008 
1009 struct context_stack *
1010 push_context (desc, valu)
1011      int desc;
1012      CORE_ADDR valu;
1013 {
1014   register struct context_stack *new;
1015 
1016   if (context_stack_depth == context_stack_size)
1017     {
1018       context_stack_size *= 2;
1019       context_stack = (struct context_stack *)
1020 	xrealloc ((char *) context_stack,
1021 		  (context_stack_size * sizeof (struct context_stack)));
1022     }
1023 
1024   new = &context_stack[context_stack_depth++];
1025   new->depth = desc;
1026   new->locals = local_symbols;
1027   new->old_blocks = pending_blocks;
1028   new->start_addr = valu;
1029   new->name = NULL;
1030 
1031   local_symbols = NULL;
1032 
1033   return (new);
1034 }
1035 
1036 
1037 /* Compute a small integer hash code for the given name. */
1038 
1039 int
1040 hashname (name)
1041      char *name;
1042 {
1043   register char *p = name;
1044   register int total = p[0];
1045   register int c;
1046 
1047   c = p[1];
1048   total += c << 2;
1049   if (c)
1050     {
1051       c = p[2];
1052       total += c << 4;
1053       if (c)
1054 	{
1055 	  total += p[3] << 6;
1056 	}
1057     }
1058 
1059   /* Ensure result is positive.  */
1060   if (total < 0)
1061     {
1062       total += (1000 << 6);
1063     }
1064   return (total % HASHSIZE);
1065 }
1066 
1067 
1068 /* Initialize anything that needs initializing when starting to read
1069    a fresh piece of a symbol file, e.g. reading in the stuff corresponding
1070    to a psymtab.  */
1071 
1072 void
1073 buildsym_init ()
1074 {
1075   free_pendings = NULL;
1076   file_symbols = NULL;
1077   global_symbols = NULL;
1078   pending_blocks = NULL;
1079 }
1080 
1081 /* Initialize anything that needs initializing when a completely new
1082    symbol file is specified (not just adding some symbols from another
1083    file, e.g. a shared library).  */
1084 
1085 void
1086 buildsym_new_init ()
1087 {
1088   buildsym_init ();
1089 }
1090 
1091 /* Initializer for this module */
1092 
1093 void
1094 _initialize_buildsym ()
1095 {
1096 }
1097