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