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