1 /* Support routines for building symbol tables in GDB's internal format.
2 Copyright (C) 1986-2024 Free Software Foundation, Inc.
4 This file is part of GDB.
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.
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.
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/>. */
19 #include "buildsym-legacy.h"
21 #include "gdbsupport/gdb_obstack.h"
22 #include "gdbsupport/pathstuff.h"
27 #include "complaints.h"
28 #include "expression.h"
29 #include "filenames.h"
33 #include "cp-support.h"
34 #include "dictionary.h"
37 /* For cleanup_undefined_stabs_types and finish_global_stabs (somewhat
38 questionable--see comment where we call them). */
40 #include "stabsread.h"
42 /* List of blocks already made (lexical contexts already closed).
43 This is used at the end to make the blockvector. */
47 struct pending_block
*next
;
51 buildsym_compunit::buildsym_compunit (struct objfile
*objfile_
,
53 const char *comp_dir_
,
54 const char *name_for_id
,
55 enum language language_
,
57 : m_objfile (objfile_
),
58 m_last_source_file (name
== nullptr ? nullptr : xstrdup (name
)),
59 m_comp_dir (comp_dir_
== nullptr ? "" : comp_dir_
),
60 m_language (language_
),
61 m_last_source_start_addr (last_addr
)
63 /* Allocate the compunit symtab now. The caller needs it to allocate
64 non-primary symtabs. It is also needed by get_macro_table. */
65 m_compunit_symtab
= allocate_compunit_symtab (m_objfile
, name
);
67 /* Build the subfile for NAME (the main source file) so that we can record
68 a pointer to it for later.
69 IMPORTANT: Do not allocate a struct symtab for NAME here.
70 It can happen that the debug info provides a different path to NAME than
71 DIRNAME,NAME. We cope with this in watch_main_source_file_lossage but
72 that only works if the main_subfile doesn't have a symtab yet. */
73 start_subfile (name
, name_for_id
);
74 /* Save this so that we don't have to go looking for it at the end
75 of the subfiles list. */
76 m_main_subfile
= m_current_subfile
;
79 buildsym_compunit::~buildsym_compunit ()
81 struct subfile
*subfile
, *nextsub
;
83 if (m_pending_macros
!= nullptr)
84 free_macro_table (m_pending_macros
);
86 for (subfile
= m_subfiles
;
90 nextsub
= subfile
->next
;
94 struct pending
*next
, *next1
;
96 for (next
= m_file_symbols
; next
!= NULL
; next
= next1
)
99 xfree ((void *) next
);
102 for (next
= m_global_symbols
; next
!= NULL
; next
= next1
)
105 xfree ((void *) next
);
110 buildsym_compunit::get_macro_table ()
112 if (m_pending_macros
== nullptr)
113 m_pending_macros
= new_macro_table (&m_objfile
->per_bfd
->storage_obstack
,
114 &m_objfile
->per_bfd
->string_cache
,
116 return m_pending_macros
;
119 /* Maintain the lists of symbols and blocks. */
121 /* Add a symbol to one of the lists of symbols. */
124 add_symbol_to_list (struct symbol
*symbol
, struct pending
**listhead
)
126 struct pending
*link
;
128 /* If this is an alias for another symbol, don't add it. */
129 if (symbol
->linkage_name () && symbol
->linkage_name ()[0] == '#')
132 /* We keep PENDINGSIZE symbols in each link of the list. If we
133 don't have a link with room in it, add a new link. */
134 if (*listhead
== NULL
|| (*listhead
)->nsyms
== PENDINGSIZE
)
136 link
= XNEW (struct pending
);
137 link
->next
= *listhead
;
142 (*listhead
)->symbol
[(*listhead
)->nsyms
++] = symbol
;
145 /* Find a symbol named NAME on a LIST. NAME need not be
146 '\0'-terminated; LENGTH is the length of the name. */
149 find_symbol_in_list (struct pending
*list
, char *name
, int length
)
156 for (j
= list
->nsyms
; --j
>= 0;)
158 pp
= list
->symbol
[j
]->linkage_name ();
159 if (*pp
== *name
&& strncmp (pp
, name
, length
) == 0
160 && pp
[length
] == '\0')
162 return (list
->symbol
[j
]);
170 /* Record BLOCK on the list of all blocks in the file. Put it after
171 OPBLOCK, or at the beginning if opblock is NULL. This puts the
172 block in the list after all its subblocks. */
175 buildsym_compunit::record_pending_block (struct block
*block
,
176 struct pending_block
*opblock
)
178 struct pending_block
*pblock
;
180 pblock
= XOBNEW (&m_pending_block_obstack
, struct pending_block
);
181 pblock
->block
= block
;
184 pblock
->next
= opblock
->next
;
185 opblock
->next
= pblock
;
189 pblock
->next
= m_pending_blocks
;
190 m_pending_blocks
= pblock
;
194 /* Take one of the lists of symbols and make a block from it. Keep
195 the order the symbols have in the list (reversed from the input
196 file). Put the block on the list of pending blocks. */
199 buildsym_compunit::finish_block_internal
200 (struct symbol
*symbol
,
201 struct pending
**listhead
,
202 struct pending_block
*old_blocks
,
203 const struct dynamic_prop
*static_link
,
204 CORE_ADDR start
, CORE_ADDR end
,
205 int is_global
, int expandable
)
207 struct gdbarch
*gdbarch
= m_objfile
->arch ();
208 struct pending
*next
, *next1
;
210 struct pending_block
*pblock
;
211 struct pending_block
*opblock
;
214 block
= new (&m_objfile
->objfile_obstack
) global_block
;
216 block
= new (&m_objfile
->objfile_obstack
) struct block
;
221 (mdict_create_linear (&m_objfile
->objfile_obstack
, *listhead
));
228 (mdict_create_hashed_expandable (m_language
));
229 mdict_add_pending (block
->multidict (), *listhead
);
234 (mdict_create_hashed (&m_objfile
->objfile_obstack
, *listhead
));
238 block
->set_start (start
);
239 block
->set_end (end
);
241 /* Put the block in as the value of the symbol that names it. */
245 struct type
*ftype
= symbol
->type ();
246 symbol
->set_value_block (block
);
247 symbol
->set_section_index (SECT_OFF_TEXT (m_objfile
));
248 block
->set_function (symbol
);
250 if (ftype
->num_fields () <= 0)
252 /* No parameter type information is recorded with the
253 function's type. Set that from the type of the
254 parameter symbols. */
255 int nparams
= 0, iparams
;
257 /* Here we want to directly access the dictionary, because
258 we haven't fully initialized the block yet. */
259 for (struct symbol
*sym
: block
->multidict_symbols ())
261 if (sym
->is_argument ())
266 ftype
->alloc_fields (nparams
);
269 /* Here we want to directly access the dictionary, because
270 we haven't fully initialized the block yet. */
271 for (struct symbol
*sym
: block
->multidict_symbols ())
273 if (iparams
== nparams
)
276 if (sym
->is_argument ())
278 ftype
->field (iparams
).set_type (sym
->type ());
279 ftype
->field (iparams
).set_is_artificial (false);
287 block
->set_function (nullptr);
289 if (static_link
!= NULL
)
290 objfile_register_static_link (m_objfile
, block
, static_link
);
292 /* Now free the links of the list, and empty the list. */
294 for (next
= *listhead
; next
; next
= next1
)
301 /* Check to be sure that the blocks have an end address that is
302 greater than starting address. */
304 if (block
->end () < block
->start ())
308 complaint (_("block end address less than block "
309 "start address in %s (patched it)"),
310 symbol
->print_name ());
314 complaint (_("block end address %s less than block "
315 "start address %s (patched it)"),
316 paddress (gdbarch
, block
->end ()),
317 paddress (gdbarch
, block
->start ()));
319 /* Better than nothing. */
320 block
->set_end (block
->start ());
323 /* Install this block as the superblock of all blocks made since the
324 start of this scope that don't have superblocks yet. */
327 for (pblock
= m_pending_blocks
;
328 pblock
&& pblock
!= old_blocks
;
329 pblock
= pblock
->next
)
331 if (pblock
->block
->superblock () == NULL
)
333 /* Check to be sure the blocks are nested as we receive
334 them. If the compiler/assembler/linker work, this just
335 burns a small amount of time.
337 Skip blocks which correspond to a function; they're not
338 physically nested inside this other blocks, only
340 if (pblock
->block
->function () == NULL
341 && (pblock
->block
->start () < block
->start ()
342 || pblock
->block
->end () > block
->end ()))
346 complaint (_("inner block not inside outer block in %s"),
347 symbol
->print_name ());
351 complaint (_("inner block (%s-%s) not "
352 "inside outer block (%s-%s)"),
353 paddress (gdbarch
, pblock
->block
->start ()),
354 paddress (gdbarch
, pblock
->block
->end ()),
355 paddress (gdbarch
, block
->start ()),
356 paddress (gdbarch
, block
->end ()));
359 if (pblock
->block
->start () < block
->start ())
360 pblock
->block
->set_start (block
->start ());
362 if (pblock
->block
->end () > block
->end ())
363 pblock
->block
->set_end (block
->end ());
365 pblock
->block
->set_superblock (block
);
370 block
->set_using ((is_global
371 ? m_global_using_directives
372 : m_local_using_directives
),
373 &m_objfile
->objfile_obstack
);
375 m_global_using_directives
= NULL
;
377 m_local_using_directives
= NULL
;
379 record_pending_block (block
, opblock
);
385 buildsym_compunit::finish_block (struct symbol
*symbol
,
386 struct pending_block
*old_blocks
,
387 const struct dynamic_prop
*static_link
,
388 CORE_ADDR start
, CORE_ADDR end
)
390 return finish_block_internal (symbol
, &m_local_symbols
,
391 old_blocks
, static_link
, start
, end
, 0, 0);
394 /* Record that the range of addresses from START to END_INCLUSIVE
395 (inclusive, like it says) belongs to BLOCK. BLOCK's start and end
396 addresses must be set already. You must apply this function to all
397 BLOCK's children before applying it to BLOCK.
399 If a call to this function complicates the picture beyond that
400 already provided by BLOCK_START and BLOCK_END, then we create an
401 address map for the block. */
403 buildsym_compunit::record_block_range (struct block
*block
,
405 CORE_ADDR end_inclusive
)
407 /* If this is any different from the range recorded in the block's
408 own BLOCK_START and BLOCK_END, then note that the address map has
409 become interesting. Note that even if this block doesn't have
410 any "interesting" ranges, some later block might, so we still
411 need to record this block in the addrmap. */
412 if (start
!= block
->start ()
413 || end_inclusive
+ 1 != block
->end ())
414 m_pending_addrmap_interesting
= true;
416 m_pending_addrmap
.set_empty (start
, end_inclusive
, block
);
420 buildsym_compunit::make_blockvector ()
422 struct pending_block
*next
;
423 struct blockvector
*blockvector
;
426 /* Count the length of the list of blocks. */
428 for (next
= m_pending_blocks
, i
= 0; next
; next
= next
->next
, i
++)
432 blockvector
= (struct blockvector
*)
433 obstack_alloc (&m_objfile
->objfile_obstack
,
434 (sizeof (struct blockvector
)
435 + (i
- 1) * sizeof (struct block
*)));
437 /* Copy the blocks into the blockvector. This is done in reverse
438 order, which happens to put the blocks into the proper order
439 (ascending starting address). finish_block has hair to insert
440 each block into the list after its subblocks in order to make
441 sure this is true. */
443 blockvector
->set_num_blocks (i
);
444 for (next
= m_pending_blocks
; next
; next
= next
->next
)
445 blockvector
->set_block (--i
, next
->block
);
447 free_pending_blocks ();
449 /* If we needed an address map for this symtab, record it in the
451 if (m_pending_addrmap_interesting
)
453 (new (&m_objfile
->objfile_obstack
) addrmap_fixed
454 (&m_objfile
->objfile_obstack
, &m_pending_addrmap
));
456 blockvector
->set_map (nullptr);
458 /* Some compilers output blocks in the wrong order, but we depend on
459 their being in the right order so we can binary search. Check the
460 order and moan about it.
461 Note: Remember that the first two blocks are the global and static
462 blocks. We could special case that fact and begin checking at block 2.
463 To avoid making that assumption we do not. */
464 if (blockvector
->num_blocks () > 1)
466 for (i
= 1; i
< blockvector
->num_blocks (); i
++)
468 if (blockvector
->block (i
- 1)->start ()
469 > blockvector
->block (i
)->start ())
472 = blockvector
->block (i
)->start ();
474 complaint (_("block at %s out of order"),
475 hex_string ((LONGEST
) start
));
480 return (blockvector
);
483 /* See buildsym.h. */
486 buildsym_compunit::start_subfile (const char *name
, const char *name_for_id
)
488 /* See if this subfile is already registered. */
490 symtab_create_debug_printf ("name = %s, name_for_id = %s", name
, name_for_id
);
492 for (subfile
*subfile
= m_subfiles
; subfile
; subfile
= subfile
->next
)
493 if (FILENAME_CMP (subfile
->name_for_id
.c_str (), name_for_id
) == 0)
495 symtab_create_debug_printf ("found existing symtab with name_for_id %s",
496 subfile
->name_for_id
.c_str ());
497 m_current_subfile
= subfile
;
501 /* This subfile is not known. Add an entry for it. */
503 subfile_up
subfile (new struct subfile
);
504 subfile
->name
= name
;
505 subfile
->name_for_id
= name_for_id
;
507 m_current_subfile
= subfile
.get ();
509 /* Default the source language to whatever can be deduced from the
510 filename. If nothing can be deduced (such as for a C/C++ include
511 file with a ".h" extension), then inherit whatever language the
512 previous subfile had. This kludgery is necessary because there
513 is no standard way in some object formats to record the source
514 language. Also, when symtabs are allocated we try to deduce a
515 language then as well, but it is too late for us to use that
516 information while reading symbols, since symtabs aren't allocated
517 until after all the symbols have been processed for a given
520 subfile
->language
= deduce_language_from_filename (subfile
->name
.c_str ());
521 if (subfile
->language
== language_unknown
&& m_subfiles
!= nullptr)
522 subfile
->language
= m_subfiles
->language
;
524 /* If the filename of this subfile ends in .C, then change the
525 language of any pending subfiles from C to C++. We also accept
526 any other C++ suffixes accepted by deduce_language_from_filename. */
527 /* Likewise for f2c. */
529 if (!subfile
->name
.empty ())
532 language sublang
= deduce_language_from_filename (subfile
->name
.c_str ());
534 if (sublang
== language_cplus
|| sublang
== language_fortran
)
535 for (s
= m_subfiles
; s
!= NULL
; s
= s
->next
)
536 if (s
->language
== language_c
)
537 s
->language
= sublang
;
540 /* And patch up this file if necessary. */
541 if (subfile
->language
== language_c
542 && m_subfiles
!= nullptr
543 && (m_subfiles
->language
== language_cplus
544 || m_subfiles
->language
== language_fortran
))
545 subfile
->language
= m_subfiles
->language
;
547 /* Link this subfile at the front of the subfile list. */
548 subfile
->next
= m_subfiles
;
549 m_subfiles
= subfile
.release ();
552 /* For stabs readers, the first N_SO symbol is assumed to be the
553 source file name, and the subfile struct is initialized using that
554 assumption. If another N_SO symbol is later seen, immediately
555 following the first one, then the first one is assumed to be the
556 directory name and the second one is really the source file name.
558 So we have to patch up the subfile struct by moving the old name
559 value to dirname and remembering the new name. Some sanity
560 checking is performed to ensure that the state of the subfile
561 struct is reasonable and that the old name we are assuming to be a
562 directory name actually is (by checking for a trailing '/'). */
565 buildsym_compunit::patch_subfile_names (struct subfile
*subfile
,
569 && m_comp_dir
.empty ()
570 && !subfile
->name
.empty ()
571 && IS_DIR_SEPARATOR (subfile
->name
.back ()))
573 m_comp_dir
= std::move (subfile
->name
);
574 subfile
->name
= name
;
575 subfile
->name_for_id
= name
;
576 set_last_source_file (name
);
578 /* Default the source language to whatever can be deduced from
579 the filename. If nothing can be deduced (such as for a C/C++
580 include file with a ".h" extension), then inherit whatever
581 language the previous subfile had. This kludgery is
582 necessary because there is no standard way in some object
583 formats to record the source language. Also, when symtabs
584 are allocated we try to deduce a language then as well, but
585 it is too late for us to use that information while reading
586 symbols, since symtabs aren't allocated until after all the
587 symbols have been processed for a given source file. */
590 = deduce_language_from_filename (subfile
->name
.c_str ());
591 if (subfile
->language
== language_unknown
592 && subfile
->next
!= NULL
)
594 subfile
->language
= subfile
->next
->language
;
599 /* Handle the N_BINCL and N_EINCL symbol types that act like N_SOL for
600 switching source files (different subfiles, as we call them) within
601 one object file, but using a stack rather than in an arbitrary
605 buildsym_compunit::push_subfile ()
607 gdb_assert (m_current_subfile
!= NULL
);
608 gdb_assert (!m_current_subfile
->name
.empty ());
609 m_subfile_stack
.push_back (m_current_subfile
->name
.c_str ());
613 buildsym_compunit::pop_subfile ()
615 gdb_assert (!m_subfile_stack
.empty ());
616 const char *name
= m_subfile_stack
.back ();
617 m_subfile_stack
.pop_back ();
621 /* Add a linetable entry for line number LINE and address PC to the
622 line vector for SUBFILE. */
625 buildsym_compunit::record_line (struct subfile
*subfile
, int line
,
626 unrelocated_addr pc
, linetable_entry_flags flags
)
628 m_have_line_numbers
= true;
630 /* Normally, we treat lines as unsorted. But the end of sequence
631 marker is special. We sort line markers at the same PC by line
632 number, so end of sequence markers (which have line == 0) appear
633 first. This is right if the marker ends the previous function,
634 and there is no padding before the next function. But it is
635 wrong if the previous line was empty and we are now marking a
636 switch to a different subfile. We must leave the end of sequence
637 marker at the end of this group of lines, not sort the empty line
638 to after the marker. The easiest way to accomplish this is to
639 delete any empty lines from our table, if they are followed by
640 end of sequence markers. All we lose is the ability to set
641 breakpoints at some lines which contain no instructions
645 std::optional
<int> last_line
;
647 while (!subfile
->line_vector_entries
.empty ())
649 linetable_entry
*last
= &subfile
->line_vector_entries
.back ();
650 last_line
= last
->line
;
652 if (last
->unrelocated_pc () != pc
)
655 subfile
->line_vector_entries
.pop_back ();
658 /* Ignore an end-of-sequence marker marking an empty sequence. */
659 if (!last_line
.has_value () || *last_line
== 0)
663 linetable_entry
&e
= subfile
->line_vector_entries
.emplace_back ();
665 e
.is_stmt
= (flags
& LEF_IS_STMT
) != 0;
666 e
.set_unrelocated_pc (pc
);
667 e
.prologue_end
= (flags
& LEF_PROLOGUE_END
) != 0;
668 e
.epilogue_begin
= (flags
& LEF_EPILOGUE_BEGIN
) != 0;
672 /* Subroutine of end_compunit_symtab to simplify it. Look for a subfile that
673 matches the main source file's basename. If there is only one, and
674 if the main source file doesn't have any symbol or line number
675 information, then copy this file's symtab and line_vector to the
676 main source file's subfile and discard the other subfile. This can
677 happen because of a compiler bug or from the user playing games
678 with #line or from things like a distributed build system that
679 manipulates the debug info. This can also happen from an innocent
680 symlink in the paths, we don't canonicalize paths here. */
683 buildsym_compunit::watch_main_source_file_lossage ()
685 struct subfile
*mainsub
, *subfile
;
687 /* Get the main source file. */
688 mainsub
= m_main_subfile
;
690 /* If the main source file doesn't have any line number or symbol
691 info, look for an alias in another subfile. */
693 if (mainsub
->line_vector_entries
.empty ()
694 && mainsub
->symtab
== NULL
)
696 const char *mainbase
= lbasename (mainsub
->name
.c_str ());
698 struct subfile
*prevsub
;
699 struct subfile
*mainsub_alias
= NULL
;
700 struct subfile
*prev_mainsub_alias
= NULL
;
703 for (subfile
= m_subfiles
;
705 subfile
= subfile
->next
)
707 if (subfile
== mainsub
)
709 if (filename_cmp (lbasename (subfile
->name
.c_str ()), mainbase
) == 0)
712 mainsub_alias
= subfile
;
713 prev_mainsub_alias
= prevsub
;
720 gdb_assert (mainsub_alias
!= NULL
&& mainsub_alias
!= mainsub
);
722 /* Found a match for the main source file.
723 Copy its line_vector and symtab to the main subfile
724 and then discard it. */
726 symtab_create_debug_printf ("using subfile %s as the main subfile",
727 mainsub_alias
->name
.c_str ());
729 mainsub
->line_vector_entries
730 = std::move (mainsub_alias
->line_vector_entries
);
731 mainsub
->symtab
= mainsub_alias
->symtab
;
733 if (prev_mainsub_alias
== NULL
)
734 m_subfiles
= mainsub_alias
->next
;
736 prev_mainsub_alias
->next
= mainsub_alias
->next
;
738 delete mainsub_alias
;
743 /* Implementation of the first part of end_compunit_symtab. It allows modifying
744 STATIC_BLOCK before it gets finalized by
745 end_compunit_symtab_from_static_block. If the returned value is NULL there
746 is no blockvector created for this symtab (you still must call
747 end_compunit_symtab_from_static_block).
749 END_ADDR is the same as for end_compunit_symtab: the address of the end of
752 If EXPANDABLE is non-zero the STATIC_BLOCK dictionary is made
755 If REQUIRED is non-zero, then a symtab is created even if it does
756 not contain any symbols. */
759 buildsym_compunit::end_compunit_symtab_get_static_block (CORE_ADDR end_addr
,
763 /* Finish the lexical context of the last function in the file; pop
764 the context stack. */
766 if (!m_context_stack
.empty ())
768 struct context_stack cstk
= pop_context ();
770 /* Make a block for the local symbols within. */
771 finish_block (cstk
.name
, cstk
.old_blocks
, NULL
,
772 cstk
.start_addr
, end_addr
);
774 if (!m_context_stack
.empty ())
776 /* This is said to happen with SCO. The old coffread.c
777 code simply emptied the context stack, so we do the
778 same. FIXME: Find out why it is happening. This is not
779 believed to happen in most cases (even for coffread.c);
780 it used to be an abort(). */
781 complaint (_("Context stack not empty in end_compunit_symtab"));
782 m_context_stack
.clear ();
786 /* Executables may have out of order pending blocks; sort the
788 if (m_pending_blocks
!= nullptr)
790 struct pending_block
*pb
;
792 std::vector
<block
*> barray
;
794 for (pb
= m_pending_blocks
; pb
!= NULL
; pb
= pb
->next
)
795 barray
.push_back (pb
->block
);
797 /* Sort blocks by start address in descending order. Blocks with the
798 same start address must remain in the original order to preserve
799 inline function caller/callee relationships. */
800 std::stable_sort (barray
.begin (), barray
.end (),
801 [] (const block
*a
, const block
*b
)
803 return a
->start () > b
->start ();
807 for (pb
= m_pending_blocks
; pb
!= NULL
; pb
= pb
->next
)
808 pb
->block
= barray
[i
++];
811 /* Cleanup any undefined types that have been left hanging around
812 (this needs to be done before the finish_blocks so that
813 file_symbols is still good).
815 Both cleanup_undefined_stabs_types and finish_global_stabs are stabs
816 specific, but harmless for other symbol readers, since on gdb
817 startup or when finished reading stabs, the state is set so these
818 are no-ops. FIXME: Is this handled right in case of QUIT? Can
819 we make this cleaner? */
821 cleanup_undefined_stabs_types (m_objfile
);
822 finish_global_stabs (m_objfile
);
825 && m_pending_blocks
== NULL
826 && m_file_symbols
== NULL
827 && m_global_symbols
== NULL
828 && !m_have_line_numbers
829 && m_pending_macros
== NULL
830 && m_global_using_directives
== NULL
)
832 /* Ignore symtabs that have no functions with real debugging info. */
837 /* Define the STATIC_BLOCK. */
838 return finish_block_internal (NULL
, get_file_symbols (), NULL
, NULL
,
839 m_last_source_start_addr
,
840 end_addr
, 0, expandable
);
844 /* Subroutine of end_compunit_symtab_from_static_block to simplify it.
845 Handle the "have blockvector" case.
846 See end_compunit_symtab_from_static_block for a description of the
849 struct compunit_symtab
*
850 buildsym_compunit::end_compunit_symtab_with_blockvector
851 (struct block
*static_block
, int expandable
)
853 struct compunit_symtab
*cu
= m_compunit_symtab
;
854 struct blockvector
*blockvector
;
855 struct subfile
*subfile
;
858 gdb_assert (static_block
!= NULL
);
859 gdb_assert (m_subfiles
!= NULL
);
861 end_addr
= static_block
->end ();
863 /* Create the GLOBAL_BLOCK and build the blockvector. */
864 finish_block_internal (NULL
, get_global_symbols (), NULL
, NULL
,
865 m_last_source_start_addr
, end_addr
,
867 blockvector
= make_blockvector ();
869 /* Read the line table if it has to be read separately.
870 This is only used by xcoffread.c. */
871 if (m_objfile
->sf
->sym_read_linetable
!= NULL
)
872 m_objfile
->sf
->sym_read_linetable (m_objfile
);
874 /* Handle the case where the debug info specifies a different path
875 for the main source file. It can cause us to lose track of its
876 line number information. */
877 watch_main_source_file_lossage ();
879 /* Now create the symtab objects proper, if not already done,
880 one for each subfile. */
882 for (subfile
= m_subfiles
;
884 subfile
= subfile
->next
)
886 if (!subfile
->line_vector_entries
.empty ())
888 /* Like the pending blocks, the line table may be scrambled
889 in reordered executables. Sort it. It is important to
890 preserve the order of lines at the same address, as this
891 maintains the inline function caller/callee
892 relationships, this is why std::stable_sort is used. */
893 std::stable_sort (subfile
->line_vector_entries
.begin (),
894 subfile
->line_vector_entries
.end ());
897 /* Allocate a symbol table if necessary. */
898 if (subfile
->symtab
== NULL
)
899 subfile
->symtab
= allocate_symtab (cu
, subfile
->name
.c_str (),
900 subfile
->name_for_id
.c_str ());
902 struct symtab
*symtab
= subfile
->symtab
;
904 /* Fill in its components. */
906 if (!subfile
->line_vector_entries
.empty ())
908 /* Reallocate the line table on the objfile obstack. */
909 size_t n_entries
= subfile
->line_vector_entries
.size ();
910 size_t entry_array_size
= n_entries
* sizeof (struct linetable_entry
);
911 int linetablesize
= sizeof (struct linetable
) + entry_array_size
;
913 struct linetable
*new_table
914 = XOBNEWVAR (&m_objfile
->objfile_obstack
, struct linetable
,
917 new_table
->nitems
= n_entries
;
918 memcpy (new_table
->item
,
919 subfile
->line_vector_entries
.data (), entry_array_size
);
921 symtab
->set_linetable (new_table
);
924 symtab
->set_linetable (nullptr);
926 /* Use whatever language we have been using for this
927 subfile, not the one that was deduced in allocate_symtab
928 from the filename. We already did our own deducing when
929 we created the subfile, and we may have altered our
930 opinion of what language it is from things we found in
932 symtab
->set_language (subfile
->language
);
935 /* Make sure the filetab of main_subfile is the primary filetab of the CU. */
936 cu
->set_primary_filetab (m_main_subfile
->symtab
);
938 /* Fill out the compunit symtab. */
940 if (!m_comp_dir
.empty ())
942 /* Reallocate the dirname on the symbol obstack. */
943 cu
->set_dirname (obstack_strdup (&m_objfile
->objfile_obstack
,
944 m_comp_dir
.c_str ()));
947 /* Save the debug format string (if any) in the symtab. */
948 cu
->set_debugformat (m_debugformat
);
950 /* Similarly for the producer. */
951 cu
->set_producer (m_producer
);
953 cu
->set_blockvector (blockvector
);
955 struct block
*b
= blockvector
->global_block ();
957 b
->set_compunit_symtab (cu
);
960 cu
->set_macro_table (release_macros ());
962 /* Default any symbols without a specified symtab to the primary symtab. */
966 /* The main source file's symtab. */
967 struct symtab
*symtab
= cu
->primary_filetab ();
969 for (block_i
= 0; block_i
< blockvector
->num_blocks (); block_i
++)
971 struct block
*block
= blockvector
->block (block_i
);
973 /* Inlined functions may have symbols not in the global or
974 static symbol lists. */
975 if (block
->function () != nullptr
976 && block
->function ()->symtab () == nullptr)
977 block
->function ()->set_symtab (symtab
);
979 /* Note that we only want to fix up symbols from the local
980 blocks, not blocks coming from included symtabs. That is
981 why we use an mdict iterator here and not a block
983 for (struct symbol
*sym
: block
->multidict_symbols ())
984 if (sym
->symtab () == NULL
)
985 sym
->set_symtab (symtab
);
989 add_compunit_symtab_to_objfile (cu
);
994 /* Implementation of the second part of end_compunit_symtab. Pass STATIC_BLOCK
995 as value returned by end_compunit_symtab_get_static_block.
997 If EXPANDABLE is non-zero the GLOBAL_BLOCK dictionary is made
1000 struct compunit_symtab
*
1001 buildsym_compunit::end_compunit_symtab_from_static_block
1002 (struct block
*static_block
, int expandable
)
1004 struct compunit_symtab
*cu
;
1006 if (static_block
== NULL
)
1008 /* Handle the "no blockvector" case.
1009 When this happens there is nothing to record, so there's nothing
1010 to do: memory will be freed up later.
1012 Note: We won't be adding a compunit to the objfile's list of
1013 compunits, so there's nothing to unchain. However, since each symtab
1014 is added to the objfile's obstack we can't free that space.
1015 We could do better, but this is believed to be a sufficiently rare
1020 cu
= end_compunit_symtab_with_blockvector (static_block
, expandable
);
1025 /* Finish the symbol definitions for one main source file, close off
1026 all the lexical contexts for that file (creating struct block's for
1027 them), then make the struct symtab for that file and put it in the
1030 END_ADDR is the address of the end of the file's text.
1032 Note that it is possible for end_compunit_symtab() to return NULL. In
1033 particular, for the DWARF case at least, it will return NULL when
1034 it finds a compilation unit that has exactly one DIE, a
1035 TAG_compile_unit DIE. This can happen when we link in an object
1036 file that was compiled from an empty source file. Returning NULL
1037 is probably not the correct thing to do, because then gdb will
1038 never know about this empty file (FIXME).
1040 If you need to modify STATIC_BLOCK before it is finalized you should
1041 call end_compunit_symtab_get_static_block and
1042 end_compunit_symtab_from_static_block yourself. */
1044 struct compunit_symtab
*
1045 buildsym_compunit::end_compunit_symtab (CORE_ADDR end_addr
)
1047 struct block
*static_block
;
1049 static_block
= end_compunit_symtab_get_static_block (end_addr
, 0, 0);
1050 return end_compunit_symtab_from_static_block (static_block
, 0);
1053 /* Same as end_compunit_symtab except create a symtab that can be later added
1056 struct compunit_symtab
*
1057 buildsym_compunit::end_expandable_symtab (CORE_ADDR end_addr
)
1059 struct block
*static_block
;
1061 static_block
= end_compunit_symtab_get_static_block (end_addr
, 1, 0);
1062 return end_compunit_symtab_from_static_block (static_block
, 1);
1065 /* Subroutine of augment_type_symtab to simplify it.
1066 Attach the main source file's symtab to all symbols in PENDING_LIST that
1070 set_missing_symtab (struct pending
*pending_list
,
1071 struct compunit_symtab
*cu
)
1073 struct pending
*pending
;
1076 for (pending
= pending_list
; pending
!= NULL
; pending
= pending
->next
)
1078 for (i
= 0; i
< pending
->nsyms
; ++i
)
1080 if (pending
->symbol
[i
]->symtab () == NULL
)
1081 pending
->symbol
[i
]->set_symtab (cu
->primary_filetab ());
1086 /* Same as end_compunit_symtab, but for the case where we're adding more symbols
1087 to an existing symtab that is known to contain only type information.
1088 This is the case for DWARF4 Type Units. */
1091 buildsym_compunit::augment_type_symtab ()
1093 struct compunit_symtab
*cust
= m_compunit_symtab
;
1094 struct blockvector
*blockvector
= cust
->blockvector ();
1096 if (!m_context_stack
.empty ())
1097 complaint (_("Context stack not empty in augment_type_symtab"));
1098 if (m_pending_blocks
!= NULL
)
1099 complaint (_("Blocks in a type symtab"));
1100 if (m_pending_macros
!= NULL
)
1101 complaint (_("Macro in a type symtab"));
1102 if (m_have_line_numbers
)
1103 complaint (_("Line numbers recorded in a type symtab"));
1105 if (m_file_symbols
!= NULL
)
1107 struct block
*block
= blockvector
->static_block ();
1109 /* First mark any symbols without a specified symtab as belonging
1110 to the primary symtab. */
1111 set_missing_symtab (m_file_symbols
, cust
);
1113 mdict_add_pending (block
->multidict (), m_file_symbols
);
1116 if (m_global_symbols
!= NULL
)
1118 struct block
*block
= blockvector
->global_block ();
1120 /* First mark any symbols without a specified symtab as belonging
1121 to the primary symtab. */
1122 set_missing_symtab (m_global_symbols
, cust
);
1124 mdict_add_pending (block
->multidict (), m_global_symbols
);
1128 /* Push a context block. Args are an identifying nesting level
1129 (checkable when you pop it), and the starting PC address of this
1132 struct context_stack
*
1133 buildsym_compunit::push_context (int desc
, CORE_ADDR valu
)
1135 struct context_stack
*newobj
= &m_context_stack
.emplace_back ();
1137 newobj
->depth
= desc
;
1138 newobj
->locals
= m_local_symbols
;
1139 newobj
->old_blocks
= m_pending_blocks
;
1140 newobj
->start_addr
= valu
;
1141 newobj
->local_using_directives
= m_local_using_directives
;
1142 newobj
->name
= NULL
;
1144 m_local_symbols
= NULL
;
1145 m_local_using_directives
= NULL
;
1150 /* Pop a context block. Returns the address of the context block just
1153 struct context_stack
1154 buildsym_compunit::pop_context ()
1156 gdb_assert (!m_context_stack
.empty ());
1157 struct context_stack result
= m_context_stack
.back ();
1158 m_context_stack
.pop_back ();