1 /* Block-related functions for the GNU debugger, GDB.
3 Copyright (C) 2003-2023 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
24 #include "gdbsupport/gdb_obstack.h"
25 #include "cp-support.h"
30 /* This is used by struct block to store namespace-related info for
31 C++ files, namely using declarations and the current namespace in
34 struct block_namespace_info
: public allocate_on_obstack
36 const char *scope
= nullptr;
37 struct using_direct
*using_decl
= nullptr;
43 block_objfile (const struct block
*block
)
45 const struct global_block
*global_block
;
47 if (block
->function () != nullptr)
48 return block
->function ()->objfile ();
50 global_block
= (struct global_block
*) block_global_block (block
);
51 return global_block
->compunit_symtab
->objfile ();
57 block_gdbarch (const struct block
*block
)
59 if (block
->function () != nullptr)
60 return block
->function ()->arch ();
62 return block_objfile (block
)->arch ();
68 contained_in (const struct block
*a
, const struct block
*b
,
78 /* If A is a function block, then A cannot be contained in B,
79 except if A was inlined. */
80 if (!allow_nested
&& a
->function () != NULL
&& !block_inlined_p (a
))
90 /* Return the symbol for the function which contains a specified
91 lexical block, described by a struct block BL. The return value
92 will not be an inlined function; the containing function will be
96 block_linkage_function (const struct block
*bl
)
98 while ((bl
->function () == NULL
|| block_inlined_p (bl
))
99 && bl
->superblock () != NULL
)
100 bl
= bl
->superblock ();
102 return bl
->function ();
105 /* Return the symbol for the function which contains a specified
106 block, described by a struct block BL. The return value will be
107 the closest enclosing function, which might be an inline
111 block_containing_function (const struct block
*bl
)
113 while (bl
->function () == NULL
&& bl
->superblock () != NULL
)
114 bl
= bl
->superblock ();
116 return bl
->function ();
119 /* Return one if BL represents an inlined function. */
122 block_inlined_p (const struct block
*bl
)
124 return bl
->function () != NULL
&& bl
->function ()->is_inlined ();
127 /* A helper function that checks whether PC is in the blockvector BL.
128 It returns the containing block if there is one, or else NULL. */
130 static const struct block
*
131 find_block_in_blockvector (const struct blockvector
*bl
, CORE_ADDR pc
)
133 const struct block
*b
;
136 /* If we have an addrmap mapping code addresses to blocks, then use
139 return (const struct block
*) bl
->map ()->find (pc
);
141 /* Otherwise, use binary search to find the last block that starts
143 Note: GLOBAL_BLOCK is block 0, STATIC_BLOCK is block 1.
144 They both have the same START,END values.
145 Historically this code would choose STATIC_BLOCK over GLOBAL_BLOCK but the
146 fact that this choice was made was subtle, now we make it explicit. */
147 gdb_assert (bl
->blocks ().size () >= 2);
149 top
= bl
->blocks ().size ();
151 while (top
- bot
> 1)
153 half
= (top
- bot
+ 1) >> 1;
154 b
= bl
->block (bot
+ half
);
155 if (b
->start () <= pc
)
161 /* Now search backward for a block that ends after PC. */
163 while (bot
>= STATIC_BLOCK
)
166 if (!(b
->start () <= pc
))
176 /* Return the blockvector immediately containing the innermost lexical
177 block containing the specified pc value and section, or 0 if there
178 is none. PBLOCK is a pointer to the block. If PBLOCK is NULL, we
179 don't pass this information back to the caller. */
181 const struct blockvector
*
182 blockvector_for_pc_sect (CORE_ADDR pc
, struct obj_section
*section
,
183 const struct block
**pblock
,
184 struct compunit_symtab
*cust
)
186 const struct blockvector
*bl
;
187 const struct block
*b
;
191 /* First search all symtabs for one whose file contains our pc */
192 cust
= find_pc_sect_compunit_symtab (pc
, section
);
197 bl
= cust
->blockvector ();
199 /* Then search that symtab for the smallest block that wins. */
200 b
= find_block_in_blockvector (bl
, pc
);
209 /* Return true if the blockvector BV contains PC, false otherwise. */
212 blockvector_contains_pc (const struct blockvector
*bv
, CORE_ADDR pc
)
214 return find_block_in_blockvector (bv
, pc
) != NULL
;
217 /* Return call_site for specified PC in GDBARCH. PC must match exactly, it
218 must be the next instruction after call (or after tail call jump). Throw
219 NO_ENTRY_VALUE_ERROR otherwise. This function never returns NULL. */
222 call_site_for_pc (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
224 struct compunit_symtab
*cust
;
225 call_site
*cs
= nullptr;
227 /* -1 as tail call PC can be already after the compilation unit range. */
228 cust
= find_pc_compunit_symtab (pc
- 1);
231 cs
= cust
->find_call_site (pc
);
235 struct bound_minimal_symbol msym
= lookup_minimal_symbol_by_pc (pc
);
237 /* DW_TAG_gnu_call_site will be missing just if GCC could not determine
239 throw_error (NO_ENTRY_VALUE_ERROR
,
240 _("DW_OP_entry_value resolving cannot find "
241 "DW_TAG_call_site %s in %s"),
242 paddress (gdbarch
, pc
),
243 (msym
.minsym
== NULL
? "???"
244 : msym
.minsym
->print_name ()));
250 /* Return the blockvector immediately containing the innermost lexical block
251 containing the specified pc value, or 0 if there is none.
252 Backward compatibility, no section. */
254 const struct blockvector
*
255 blockvector_for_pc (CORE_ADDR pc
, const struct block
**pblock
)
257 return blockvector_for_pc_sect (pc
, find_pc_mapped_section (pc
),
261 /* Return the innermost lexical block containing the specified pc value
262 in the specified section, or 0 if there is none. */
265 block_for_pc_sect (CORE_ADDR pc
, struct obj_section
*section
)
267 const struct blockvector
*bl
;
268 const struct block
*b
;
270 bl
= blockvector_for_pc_sect (pc
, section
, &b
, NULL
);
276 /* Return the innermost lexical block containing the specified pc value,
277 or 0 if there is none. Backward compatibility, no section. */
280 block_for_pc (CORE_ADDR pc
)
282 return block_for_pc_sect (pc
, find_pc_mapped_section (pc
));
285 /* Now come some functions designed to deal with C++ namespace issues.
286 The accessors are safe to use even in the non-C++ case. */
288 /* This returns the namespace that BLOCK is enclosed in, or "" if it
289 isn't enclosed in a namespace at all. This travels the chain of
290 superblocks looking for a scope, if necessary. */
293 block_scope (const struct block
*block
)
295 for (; block
!= NULL
; block
= block
->superblock ())
297 if (block
->namespace_info () != NULL
298 && block
->namespace_info ()->scope
!= NULL
)
299 return block
->namespace_info ()->scope
;
305 /* If block->namespace_info () is NULL, allocate it via OBSTACK and
306 initialize its members to zero. */
309 block_initialize_namespace (struct block
*block
, struct obstack
*obstack
)
311 if (block
->namespace_info () == NULL
)
312 block
->set_namespace_info (new (obstack
) struct block_namespace_info ());
315 /* Set BLOCK's scope member to SCOPE; if needed, allocate memory via
316 OBSTACK. (It won't make a copy of SCOPE, however, so that already
317 has to be allocated correctly.) */
320 block_set_scope (struct block
*block
, const char *scope
,
321 struct obstack
*obstack
)
323 block_initialize_namespace (block
, obstack
);
325 block
->namespace_info ()->scope
= scope
;
328 /* This returns the using directives list associated with BLOCK, if
331 struct using_direct
*
332 block_using (const struct block
*block
)
334 if (block
== NULL
|| block
->namespace_info () == NULL
)
337 return block
->namespace_info ()->using_decl
;
340 /* Set BLOCK's using member to USING; if needed, allocate memory via
341 OBSTACK. (It won't make a copy of USING, however, so that already
342 has to be allocated correctly.) */
345 block_set_using (struct block
*block
,
346 struct using_direct
*using_decl
,
347 struct obstack
*obstack
)
349 block_initialize_namespace (block
, obstack
);
351 block
->namespace_info ()->using_decl
= using_decl
;
354 /* Return the static block associated to BLOCK. Return NULL if block
355 is NULL or if block is a global block. */
358 block_static_block (const struct block
*block
)
360 if (block
== NULL
|| block
->superblock () == NULL
)
363 while (block
->superblock ()->superblock () != NULL
)
364 block
= block
->superblock ();
369 /* Return the static block associated to BLOCK. Return NULL if block
373 block_global_block (const struct block
*block
)
378 while (block
->superblock () != NULL
)
379 block
= block
->superblock ();
384 /* Allocate a block on OBSTACK, and initialize its elements to
385 zero/NULL. This is useful for creating "dummy" blocks that don't
386 correspond to actual source files.
388 Warning: it sets the block's BLOCK_MULTIDICT to NULL, which isn't a
389 valid value. If you really don't want the block to have a
390 dictionary, then you should subsequently set its BLOCK_MULTIDICT to
391 dict_create_linear (obstack, NULL). */
394 allocate_block (struct obstack
*obstack
)
396 struct block
*bl
= OBSTACK_ZALLOC (obstack
, struct block
);
401 /* Allocate a global block. */
404 allocate_global_block (struct obstack
*obstack
)
406 struct global_block
*bl
= OBSTACK_ZALLOC (obstack
, struct global_block
);
411 /* Set the compunit of the global block. */
414 set_block_compunit_symtab (struct block
*block
, struct compunit_symtab
*cu
)
416 struct global_block
*gb
;
418 gdb_assert (block
->superblock () == NULL
);
419 gb
= (struct global_block
*) block
;
420 gdb_assert (gb
->compunit_symtab
== NULL
);
421 gb
->compunit_symtab
= cu
;
426 struct dynamic_prop
*
427 block_static_link (const struct block
*block
)
429 struct objfile
*objfile
= block_objfile (block
);
431 /* Only objfile-owned blocks that materialize top function scopes can have
433 if (objfile
== NULL
|| block
->function () == NULL
)
436 return (struct dynamic_prop
*) objfile_lookup_static_link (objfile
, block
);
439 /* Return the compunit of the global block. */
441 static struct compunit_symtab
*
442 get_block_compunit_symtab (const struct block
*block
)
444 struct global_block
*gb
;
446 gdb_assert (block
->superblock () == NULL
);
447 gb
= (struct global_block
*) block
;
448 gdb_assert (gb
->compunit_symtab
!= NULL
);
449 return gb
->compunit_symtab
;
454 /* Initialize a block iterator, either to iterate over a single block,
455 or, for static and global blocks, all the included symtabs as
459 initialize_block_iterator (const struct block
*block
,
460 struct block_iterator
*iter
)
462 enum block_enum which
;
463 struct compunit_symtab
*cu
;
467 if (block
->superblock () == NULL
)
469 which
= GLOBAL_BLOCK
;
470 cu
= get_block_compunit_symtab (block
);
472 else if (block
->superblock ()->superblock () == NULL
)
474 which
= STATIC_BLOCK
;
475 cu
= get_block_compunit_symtab (block
->superblock ());
479 iter
->d
.block
= block
;
480 /* A signal value meaning that we're iterating over a single
482 iter
->which
= FIRST_LOCAL_BLOCK
;
486 /* If this is an included symtab, find the canonical includer and
488 while (cu
->user
!= NULL
)
491 /* Putting this check here simplifies the logic of the iterator
492 functions. If there are no included symtabs, we only need to
493 search a single block, so we might as well just do that
495 if (cu
->includes
== NULL
)
497 iter
->d
.block
= block
;
498 /* A signal value meaning that we're iterating over a single
500 iter
->which
= FIRST_LOCAL_BLOCK
;
504 iter
->d
.compunit_symtab
= cu
;
509 /* A helper function that finds the current compunit over whose static
510 or global block we should iterate. */
512 static struct compunit_symtab
*
513 find_iterator_compunit_symtab (struct block_iterator
*iterator
)
515 if (iterator
->idx
== -1)
516 return iterator
->d
.compunit_symtab
;
517 return iterator
->d
.compunit_symtab
->includes
[iterator
->idx
];
520 /* Perform a single step for a plain block iterator, iterating across
521 symbol tables as needed. Returns the next symbol, or NULL when
522 iteration is complete. */
524 static struct symbol
*
525 block_iterator_step (struct block_iterator
*iterator
, int first
)
529 gdb_assert (iterator
->which
!= FIRST_LOCAL_BLOCK
);
535 struct compunit_symtab
*cust
536 = find_iterator_compunit_symtab (iterator
);
537 const struct block
*block
;
539 /* Iteration is complete. */
543 block
= cust
->blockvector ()->block (iterator
->which
);
544 sym
= mdict_iterator_first (block
->multidict (),
545 &iterator
->mdict_iter
);
548 sym
= mdict_iterator_next (&iterator
->mdict_iter
);
553 /* We have finished iterating the appropriate block of one
554 symtab. Now advance to the next symtab and begin iteration
564 block_iterator_first (const struct block
*block
,
565 struct block_iterator
*iterator
)
567 initialize_block_iterator (block
, iterator
);
569 if (iterator
->which
== FIRST_LOCAL_BLOCK
)
570 return mdict_iterator_first (block
->multidict (), &iterator
->mdict_iter
);
572 return block_iterator_step (iterator
, 1);
578 block_iterator_next (struct block_iterator
*iterator
)
580 if (iterator
->which
== FIRST_LOCAL_BLOCK
)
581 return mdict_iterator_next (&iterator
->mdict_iter
);
583 return block_iterator_step (iterator
, 0);
586 /* Perform a single step for a "match" block iterator, iterating
587 across symbol tables as needed. Returns the next symbol, or NULL
588 when iteration is complete. */
590 static struct symbol
*
591 block_iter_match_step (struct block_iterator
*iterator
,
592 const lookup_name_info
&name
,
597 gdb_assert (iterator
->which
!= FIRST_LOCAL_BLOCK
);
603 struct compunit_symtab
*cust
604 = find_iterator_compunit_symtab (iterator
);
605 const struct block
*block
;
607 /* Iteration is complete. */
611 block
= cust
->blockvector ()->block (iterator
->which
);
612 sym
= mdict_iter_match_first (block
->multidict (), name
,
613 &iterator
->mdict_iter
);
616 sym
= mdict_iter_match_next (name
, &iterator
->mdict_iter
);
621 /* We have finished iterating the appropriate block of one
622 symtab. Now advance to the next symtab and begin iteration
632 block_iter_match_first (const struct block
*block
,
633 const lookup_name_info
&name
,
634 struct block_iterator
*iterator
)
636 initialize_block_iterator (block
, iterator
);
638 if (iterator
->which
== FIRST_LOCAL_BLOCK
)
639 return mdict_iter_match_first (block
->multidict (), name
,
640 &iterator
->mdict_iter
);
642 return block_iter_match_step (iterator
, name
, 1);
648 block_iter_match_next (const lookup_name_info
&name
,
649 struct block_iterator
*iterator
)
651 if (iterator
->which
== FIRST_LOCAL_BLOCK
)
652 return mdict_iter_match_next (name
, &iterator
->mdict_iter
);
654 return block_iter_match_step (iterator
, name
, 0);
660 best_symbol (struct symbol
*a
, const domain_enum domain
)
662 return (a
->domain () == domain
663 && a
->aclass () != LOC_UNRESOLVED
);
669 better_symbol (struct symbol
*a
, struct symbol
*b
, const domain_enum domain
)
676 if (a
->domain () == domain
&& b
->domain () != domain
)
679 if (b
->domain () == domain
&& a
->domain () != domain
)
682 if (a
->aclass () != LOC_UNRESOLVED
&& b
->aclass () == LOC_UNRESOLVED
)
685 if (b
->aclass () != LOC_UNRESOLVED
&& a
->aclass () == LOC_UNRESOLVED
)
693 Note that if NAME is the demangled form of a C++ symbol, we will fail
694 to find a match during the binary search of the non-encoded names, but
695 for now we don't worry about the slight inefficiency of looking for
696 a match we'll never find, since it will go pretty quick. Once the
697 binary search terminates, we drop through and do a straight linear
698 search on the symbols. Each symbol which is marked as being a ObjC/C++
699 symbol (language_cplus or language_objc set) has both the encoded and
700 non-encoded names tested for a match. */
703 block_lookup_symbol (const struct block
*block
, const char *name
,
704 symbol_name_match_type match_type
,
705 const domain_enum domain
)
707 struct block_iterator iter
;
710 lookup_name_info
lookup_name (name
, match_type
);
712 if (!block
->function ())
714 struct symbol
*other
= NULL
;
716 ALL_BLOCK_SYMBOLS_WITH_NAME (block
, lookup_name
, iter
, sym
)
718 /* See comment related to PR gcc/debug/91507 in
719 block_lookup_symbol_primary. */
720 if (best_symbol (sym
, domain
))
722 /* This is a bit of a hack, but symbol_matches_domain might ignore
723 STRUCT vs VAR domain symbols. So if a matching symbol is found,
724 make sure there is no "better" matching symbol, i.e., one with
725 exactly the same domain. PR 16253. */
726 if (symbol_matches_domain (sym
->language (),
727 sym
->domain (), domain
))
728 other
= better_symbol (other
, sym
, domain
);
734 /* Note that parameter symbols do not always show up last in the
735 list; this loop makes sure to take anything else other than
736 parameter symbols first; it only uses parameter symbols as a
737 last resort. Note that this only takes up extra computation
739 It's hard to define types in the parameter list (at least in
740 C/C++) so we don't do the same PR 16253 hack here that is done
741 for the !BLOCK_FUNCTION case. */
743 struct symbol
*sym_found
= NULL
;
745 ALL_BLOCK_SYMBOLS_WITH_NAME (block
, lookup_name
, iter
, sym
)
747 if (symbol_matches_domain (sym
->language (),
748 sym
->domain (), domain
))
751 if (!sym
->is_argument ())
757 return (sym_found
); /* Will be NULL if not found. */
764 block_lookup_symbol_primary (const struct block
*block
, const char *name
,
765 const domain_enum domain
)
767 struct symbol
*sym
, *other
;
768 struct mdict_iterator mdict_iter
;
770 lookup_name_info
lookup_name (name
, symbol_name_match_type::FULL
);
772 /* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK. */
773 gdb_assert (block
->superblock () == NULL
774 || block
->superblock ()->superblock () == NULL
);
777 for (sym
= mdict_iter_match_first (block
->multidict (), lookup_name
,
780 sym
= mdict_iter_match_next (lookup_name
, &mdict_iter
))
782 /* With the fix for PR gcc/debug/91507, we get for:
790 DWARF which will result in two entries in the symbol table, a decl
791 with type char *[] and a def with type char *[2].
793 If we return the decl here, we don't get the value of zzz:
795 $ gdb a.spec.out -batch -ex "p zzz"
798 because we're returning the symbol without location information, and
799 because the fallback that uses the address from the minimal symbols
800 doesn't work either because the type of the decl does not specify a
803 To fix this, we prefer def over decl in best_symbol and
806 In absence of the gcc fix, both def and decl have type char *[], so
807 the only option to make this work is improve the fallback to use the
808 size of the minimal symbol. Filed as PR exp/24989. */
809 if (best_symbol (sym
, domain
))
812 /* This is a bit of a hack, but symbol_matches_domain might ignore
813 STRUCT vs VAR domain symbols. So if a matching symbol is found,
814 make sure there is no "better" matching symbol, i.e., one with
815 exactly the same domain. PR 16253. */
816 if (symbol_matches_domain (sym
->language (), sym
->domain (), domain
))
817 other
= better_symbol (other
, sym
, domain
);
826 block_find_symbol (const struct block
*block
, const char *name
,
827 const domain_enum domain
,
828 block_symbol_matcher_ftype
*matcher
, void *data
)
830 struct block_iterator iter
;
833 lookup_name_info
lookup_name (name
, symbol_name_match_type::FULL
);
835 /* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK. */
836 gdb_assert (block
->superblock () == NULL
837 || block
->superblock ()->superblock () == NULL
);
839 ALL_BLOCK_SYMBOLS_WITH_NAME (block
, lookup_name
, iter
, sym
)
841 /* MATCHER is deliberately called second here so that it never sees
842 a non-domain-matching symbol. */
843 if (symbol_matches_domain (sym
->language (), sym
->domain (), domain
)
844 && matcher (sym
, data
))
853 block_find_non_opaque_type (struct symbol
*sym
, void *data
)
855 return !TYPE_IS_OPAQUE (sym
->type ());
861 block_find_non_opaque_type_preferred (struct symbol
*sym
, void *data
)
863 struct symbol
**best
= (struct symbol
**) data
;
865 if (!TYPE_IS_OPAQUE (sym
->type ()))
874 make_blockranges (struct objfile
*objfile
,
875 const std::vector
<blockrange
> &rangevec
)
877 struct blockranges
*blr
;
878 size_t n
= rangevec
.size();
880 blr
= (struct blockranges
*)
881 obstack_alloc (&objfile
->objfile_obstack
,
882 sizeof (struct blockranges
)
883 + (n
- 1) * sizeof (struct blockrange
));
886 for (int i
= 0; i
< n
; i
++)
887 blr
->range
[i
] = rangevec
[i
];